{"version":3,"sources":["theme/variables.ts","routes/routes.ts","api/auth/index.ts","api/assessment-logs/index.ts","api/challenges/index.ts","api/files/index.ts","api/companies/index.ts","api/inviters/index.ts","api/labels/index.ts","api/practis-set/index.ts","api/scenarios/index.ts","api/logs/index.ts","api/pacings/index.ts","api/users/index.ts","api/submissions/index.ts","api/teams/index.ts","api/enrollments/index.ts","api/invitations/index.ts","api/alert/index.ts","ui/icons/Check.tsx","ui/icons/Error.tsx","ui/components/InfoSnackbar/InfoSnackbar.tsx","ui/components/ErrorMessages/ErrorMessages.tsx","ui/components/Button/constants.ts","ui/components/Button/style.ts","ui/components/Button/Button.tsx","ui/components/Button/SmallButton.tsx","constants/enums/permissions.ts","tools/http/Http.ts","constants/enums/TrainingMode.ts","constants/enums/index.ts","pages/UserProfile/store/reducers.ts","features/users/store/actions.ts","features/portableLabels/store/hors/withLabels/helpers/useEncapsulatedDispatch.ts","features/portableLabels/store/hors/withLabels/services.ts","features/portableLabels/store/hors/withLabels/api.ts","features/portableLabels/store/hors/withLabels/actions.ts","helpers/functions/search-tree.ts","features/labels/tools.ts","tools/router/index.ts","ui/components/ModalDialogs/store/actions.ts","features/permissions/CheckPermission.tsx","features/library/store/actions.ts","features/users/tools/UserPermissionHelpers.ts","features/users/tools/UserRoleHelpers.ts","features/users/tools/InvitationActionsHelper.ts","helpers/functions/date-convert.ts","ui/components/LoadingCopmonent/LoadingComponent.tsx","features/portableLabels/components/PortableLabelListItem.tsx","features/portableLabels/components/PortableLabelList.tsx","features/portableLabels/components/EmptyLabels.tsx","features/portableLabels/components/NoResultLabels.tsx","features/portableLabels/components/PortableLabels.tsx","features/portableLabels/components/PortableLabelsWithStore.tsx","features/labels/store/services.ts","features/portableLabels/store/states.ts","ui/components/Popup/PopupComponent.tsx","ui/components/Popup/Popup.tsx","helpers/hooks/useDismiss.ts","features/labels/store/states.ts","ui/icons/Checked.tsx","ui/icons/Dash.tsx","ui/components/Checkbox/index.tsx","ui/components/Fieldset/style.ts","ui/components/Fieldset/Fieldset.tsx","features/portableLabels/store/hors/withLabels/states.ts","features/labels/store/actions.ts","constants/interfaces/filters.ts","pages/CompanySettings/store/reducers.ts","services/Storage.ts","ui/components/table-wrapper/table-divider/style.ts","ui/components/table-wrapper/table-divider/view.tsx","features/users/store/services/drafts-services.ts","features/users/store/services/invitations-services.ts","helpers/functions/invitation-templates.ts","features/users/store/services/common-services.ts","features/users/store/services/performance-services.ts","services/Http.ts","features/users/store/services/profile-services.ts","features/users/store/states.ts","features/library/services/LibraryBulkActionsService/constants.ts","constants/interfaces/PractisSets.ts","helpers/functions/Events/types.ts","helpers/hooks/useHtmlPageTitle.ts","ui/components/Tooltip/index.ts","tools/bulkActions/BulkActionAvailability.ts","features/searchState/constants.ts","ui/components/table-wrapper/index.ts","ui/icons/HourGlass.tsx","ui/components/AvatarPlaceholder/styles.ts","ui/components/AvatarPlaceholder/AvatarPlaceholder.tsx","ui/components/DialogWrapper/styles.ts","ui/components/DialogWrapper/DialogWrapper.tsx","features/users/store/costants.ts","features/library/tools/tools.ts","features/library/tools/BulkActionAvailability.ts","features/library/tools/PractisSetActionsHelper.ts","features/library/tools/ScenarioActionsHelper.ts","features/library/tools/ChallengeActionsHelper.ts","features/permissions/store/state.ts","constants/interfaces/Enrollments.ts","pages/ActionPages/NewUser/store/actions.ts","constants/interfaces/Scenario.ts","ui/wrapper/AuthLogo/styles.ts","ui/wrapper/AuthLogo/view.tsx","ui/wrapper/AuthLogo/index.ts","ui/wrapper/LoginAuthWrapper/styles.ts","ui/wrapper/LoginAuthWrapper/view.tsx","ui/wrapper/LoginAuthWrapper/index.ts","helpers/hooks/useSearch.ts","helpers/functions/search-params-helpers.ts","features/library/store/services.ts","ui/icons/NoSearchResult.tsx","features/portablePractisSets/store/hors/withPractisSets/helpers/useEncapsulatedDispatch.ts","features/portablePractisSets/store/hors/withPractisSets/services.ts","features/portablePractisSets/store/hors/withPractisSets/actions.ts","helpers/functions/Events/index.ts","ui/components/input/index.ts","ui/components/OutsideActionBox/OutsideActionBox.tsx","helpers/functions/auth-helpers.ts","helpers/functions/constants.ts","helpers/functions/validation.ts","services/validation/index.ts","helpers/functions/list-to-tree.ts","features/library/store/states.ts","ui/icons/DownArrow.tsx","ui/icons/UpArrow.tsx","pages/ActionPages/NewUser/tools.ts","constants/interfaces/Challenge.ts","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/styles.ts","pages/CompanySettings/store/actions.ts","ui/icons/Pencil.tsx","features/portablePractisSets/components/PortablePractisSetsList.tsx","features/portablePractisSets/components/EmptyPractisSets.tsx","features/portablePractisSets/components/PortablePractisSets.tsx","features/portablePractisSets/components/PortablePractisSetsWithStore.tsx","services/ChunkRequestService/hooks/helpers.ts","services/ChunkRequestService/store/actions.ts","services/ChunkRequestService/hooks/index.tsx","ui/components/table-wrapper/table-tools/table-search-input/style.ts","ui/components/table-wrapper/table-tools/table-search-input/view.tsx","helpers/hooks/useWindowDimensions.ts","ui/components/FormikField/styles.ts","ui/components/FormikField/FormikField.tsx","features/teams/tools/ProgressActionsHelper.ts","features/teams/tools/tools.ts","ui/components/EmptyStates/components/EmptyState.tsx","ui/components/EmptyStates/components/NoSearchResults/view.tsx","ui/components/EmptyStates/components/NoSearchResults/index.ts","ui/icons/NoFiltersIcon.tsx","ui/components/EmptyStates/components/NoFilterResults/view.tsx","ui/components/EmptyStates/components/NoFilterResults/index.ts","ui/icons/EmptyCalendar.tsx","ui/components/EmptyStates/components/NoCalendarResults/view.tsx","ui/components/EmptyStates/components/NoCalendarResults/index.ts","ui/components/table-wrapper/table/table-cell/style.ts","ui/components/table-wrapper/table/table-cell/view.tsx","ui/components/table-wrapper/table/table-header/table-header-cell/style.ts","ui/components/table-wrapper/table/table-header/table-header-cell/multi.view.tsx","ui/components/table-wrapper/table/table-header/table-header-cell/view.tsx","ui/components/table-wrapper/table/table-header/table-header-cell/controller.tsx","ui/components/table-wrapper/table/TableTitleOverflowText/styles.ts","ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText.tsx","helpers/functions/array-helpers.ts","ui/components/table-wrapper/table/EmptyCellDash/styles.ts","ui/components/table-wrapper/table/EmptyCellDash/view.tsx","features/searchState/store/actions.ts","constants/interfaces/DueDates.ts","ui/components/ErrorMessages/constants.ts","ui/icons/ArrowRight.tsx","tools/redux/selectors.ts","tools/redux/index.ts","pages/UserProfile/store/actions.ts","helpers/functions/general.ts","ui/icons/Close.tsx","tools/config/index.ts","features/portableLabels/store/hors/withLabels/scopes.ts","features/portablePractisSets/tools.ts","ui/components/table-wrapper/table/table-row/style.ts","ui/components/table-wrapper/table/table-row/view.tsx","services/ChunkRequestService/hooks/constants.ts","helpers/functions/detect-browsers.ts","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser.tsx","features/portablePractisSets/store/hors/withPractisSets/states.ts","ui/components/ScrollPagination/ScrollPagination.tsx","constants/variables/general.ts","pages/Auth/store/services.ts","ui/icons/QuestionMark.tsx","ui/components/Tooltip/QuestionTooltip.tsx","ui/icons/Tag.tsx","ui/icons/TagDisabled.tsx","ui/components/table-wrapper/table/TableLabelTags/styles.ts","ui/components/table-wrapper/table/TableLabelTags/TableLabelTags.tsx","tools/localStorage/LocalStorage.ts","routes/helpers.ts","helpers/functions/url-helpers.ts","features/portablePractisSets/store/hors/withPractisSets/scopes.ts","helpers/functions/plural.ts","ui/components/table-wrapper/table-tools/table-tool-item/style.ts","ui/components/table-wrapper/table-tools/table-tool-item/view.tsx","ui/components/LoadingCopmonent/Loading.tsx","ui/icons/PractisAdminPlatformLogo.tsx","ui/icons/PractisLogo.tsx","ui/icons/Search.tsx","ui/components/table-wrapper/constants.ts","ui/components/table-wrapper/table/type.ts","ui/icons/EmptyBox.tsx","pages/UserProfile/store/services.tsx","helpers/functions/file-download.ts","ui/components/table-wrapper/styles.ts","ui/components/SelectDropdown/SelectLabel.tsx","ui/components/SelectDropdown/SelectMenuItem.tsx","ui/components/SelectDropdown/SelectMenu.tsx","ui/components/SelectDropdown/SelectInput.tsx","ui/components/SelectDropdown/SelectDropdown.tsx","ui/components/ModalDialogs/store/constants.ts","helpers/functions/tree-helpers.ts","helpers/functions/tree-to-list.ts","ui/components/table-wrapper/table-header-filter/style.ts","ui/components/table-wrapper/table-header-filter/view.tsx","ui/components/table-wrapper/table-header-filter/helper.ts","ui/components/table-wrapper/table-header-filter/controller.tsx","pages/Auth/AddMobileNumber/types.ts","ui/icons/Trash.tsx","assets/images/auth-background.png","assets/images/auth-background2x.png","assets/images/auth-background3x.png","helpers/hooks/useRedirectToPhoneVerification.ts","ui/icons/TriangleDown.tsx","ui/icons/TriangleRight.tsx","ui/icons/NoLabels.tsx","store/helpers/encapsulateAction.ts","ui/components/EmptyStates/components/EmptyStateContainer.tsx","ui/components/TextAreaPlaceholderBox/TextAreaPlaceholderBox.tsx","features/portablePractisSets/store/states.ts","ui/components/table-wrapper/table-refresh/styles.ts","ui/components/table-wrapper/table-refresh/table-refresh-button/view.tsx","ui/icons/TableRefresh.tsx","ui/components/table-wrapper/table-refresh/view.tsx","ui/components/DueDateCalendar/styles.ts","ui/components/DueDateCalendar/view.tsx","ui/components/table-wrapper/SelectAll/styles.ts","ui/components/table-wrapper/SelectAll/SelectAll.tsx","pages/Auth/store/actions.ts","helpers/functions/copy-to-clipboard.ts","features/users/store/helpers.ts","ui/components/table-wrapper/table/table-checkbox/style.ts","ui/components/table-wrapper/table/table-checkbox/view.tsx","ui/components/ErrorMessages/store/actions.ts","constants/interfaces/Company.ts","ui/components/DueDateCalendar/constants.ts","api/alert/constants.ts","ui/icons/TrashBin.tsx","constants/variables/component-settings.ts","helpers/classes/TreeDfsNameMapper.ts","ui/components/table-wrapper/table/TableLabelTags/AssignedLabelList.tsx","features/challenges/constants.ts","ui/components/Textarea/Textarea.tsx","features/assign-practisSets/styles.ts","features/assign-practisSets/single-users.view.tsx","features/assign-practisSets/multiple-users.view.tsx","features/assign-practisSets/services/EnrollmentBulkService/constants.ts","features/assign-practisSets/services/EnrollmentBulkService/helpers.ts","features/assign-practisSets/services/EnrollmentBulkService/index.ts","features/assign-practisSets/controller.tsx","ui/components/input/PhoneInput/locales.ts","ui/components/input/PhoneInput/CountryList.tsx","ui/components/input/PhoneInput/CountrySelector.tsx","ui/components/input/PhoneInput/styles.ts","ui/components/input/PhoneInput/PhoneInput.tsx","ui/components/table-wrapper/table/table-body-wrapper/table-body/style.ts","ui/components/table-wrapper/table/table-body-wrapper/table-body/view.tsx","helpers/functions/escape-reg-exp.ts","features/labels/config.ts","constants/interfaces/User.ts","services/ChunkRequestService/store/constants.ts","ui/components/Calendar/constants.ts","ui/components/Tooltip/Tooltip.tsx","features/portableLabels/store/hors/withLabels/context/context.ts","features/portablePractisSets/store/hors/withPractisSets/context/context.ts","ui/components/input/constants.ts","assets/images/eye.svg","assets/images/eye-open.svg","ui/components/input/style.ts","ui/components/input/view.tsx","ui/components/ErrorMessages/store/reducers.ts","ui/icons/PencilIcon.tsx","ui/components/ImageUploader/index.ts","ui/components/Popup/helpers/getPortalElement.ts","ui/layout/Sidebar/components/ProfileSection/components/MinimizedUserProfileArea.tsx","features/portableLabels/store/hors/withLabels/context/useWithLabelsContext.ts","ui/icons/Star.tsx","features/portablePractisSets/store/hors/withPractisSets/context/useWithPractisSetsContext.ts","features/teams/components/SubHeader/index.ts","ui/components/Calendar/styles.ts","ui/components/Calendar/Calendar.tsx","ui/components/Calendar/CalendarPopup.tsx","services/MediaService/index.ts","services/MediaService/constants.ts","helpers/hooks/usePopup.ts","helpers/hooks/useOutsideClick.ts","ui/components/table-wrapper/table/TableAssignOptionsMenu/enums/TableAssignOptionTypes.ts","ui/components/table-wrapper/table/style.ts","ui/components/table-wrapper/table/table-header/style.ts","ui/components/table-wrapper/table/table-header/view.tsx","ui/components/table-wrapper/table/table-body-wrapper/styles.ts","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/avatar-field/styles.ts","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/avatar-field/avatar-field.view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/avatar-field/minimized-avatar-field.view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/avatar-field/controller.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/badge-field/table-status-cell/styles.ts","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/badge-field/table-status-cell/view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/badge-field/view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/constants.ts","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/label-tags/view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/list-actions-field/view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/text-field/styles.ts","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/text-field/overflow-text-field.view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/text-field/text-field.view.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/text-field/controller.tsx","ui/components/table-wrapper/table/table-body-wrapper/dynamic-field/view.tsx","ui/components/table-wrapper/table/TableLabelTags/TableAssignedLabelTags.tsx","ui/components/table-wrapper/table/table-body-wrapper/view.tsx","ui/components/EmptyStates/components/EmptyStateTableWrapper.tsx","ui/components/table-wrapper/table/empty-state/view.tsx","ui/components/table-wrapper/table/simple.view.tsx","ui/components/table-wrapper/table/infinite-scroll.view.tsx","ui/components/table-wrapper/table/controller.tsx","ui/components/table-wrapper/PagingNavigation/styles.ts","ui/components/table-wrapper/PagingNavigation/Paging.tsx","ui/components/table-wrapper/table-tools/style.ts","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/AssignLabelOptions.tsx","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/TableAssignOptionsSelectDropdown.tsx","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/AssignPractisSetOptions.tsx","ui/components/Select/tools.ts","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeWarning.tsx","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/BulkActionConfirmation.tsx","ui/components/table-wrapper/table/TableAssignOptionsMenu/components/AssignPractisSetsAndDueDateOptions.tsx","ui/components/table-wrapper/table/TableAssignOptionsMenu/TableAssignOptionsMenu.tsx","ui/components/table-wrapper/table-tools/view.tsx","ui/components/table-wrapper/view.tsx","pages/Auth/tools.ts","pages/Auth/Registration/styles.ts","pages/Auth/Registration/constants.ts","pages/Auth/Registration/helper.ts","pages/Auth/Registration/view.tsx","pages/Auth/Registration/controller.tsx","ui/icons/Camera.tsx","ui/components/ImageUploader/styles.ts","ui/components/ImageUploader/view.tsx","ui/components/ImageUploader/helper.ts","ui/components/ImageUploader/controller.tsx","ui/components/ImageUploader/ImageEditor/constants.ts","pages/Auth/Register/styles.ts","pages/Auth/Register/helper.ts","pages/Auth/Register/constants.ts","pages/Auth/Register/view.tsx","pages/Auth/Register/controller.tsx","ui/icons/Person.tsx","ui/icons/PractisSet.tsx","ui/icons/TeamLeader.tsx","features/teams/components/SubHeader/styles.ts","features/teams/components/SubHeader/view.tsx","ui/components/ImageUploader/ImageEditor/styles.ts","ui/components/ImageUploader/ImageEditor/view.tsx","ui/components/ImageUploader/ImageEditor/controller.tsx","pages/Auth/Register/index.ts","pages/Auth/Registration/index.ts","ui/components/ImageUploader/ImageEditor/index.ts","assets/images/icons/back-arrow.svg","pages/Auth/ForgotPassword/components/EnterEmailAddress/styles.ts","pages/Auth/ForgotPassword/components/EnterEmailAddress/view.tsx","pages/Auth/ForgotPassword/components/EnterEmailAddress/controller.tsx","pages/Auth/ForgotPassword/components/EnterEmailAddress/index.ts","assets/images/check-email.svg","pages/Auth/ForgotPassword/components/FurtherInstructions/styles.ts","pages/Auth/ForgotPassword/components/FurtherInstructions/view.tsx","pages/Auth/ForgotPassword/components/FurtherInstructions/controller.tsx","pages/Auth/ForgotPassword/components/FurtherInstructions/index.ts","pages/Auth/ForgotPassword/controller.tsx","pages/Auth/ForgotPassword/index.ts","tools/url/UrlBuilder.ts","pages/Auth/styles/index.ts","ui/components/LinkText/link-text.tsx","pages/Auth/Login/styles.ts","pages/Auth/Login/Login.tsx","pages/Auth/LogOut/LogOut.tsx","pages/Auth/ApiPlatformDropdown/styles.ts","pages/Auth/ApiPlatformDropdown/view.tsx","pages/Auth/ApiPlatformDropdown/controller.tsx","pages/Auth/ApiPlatformDropdown/index.ts","pages/Auth/InternalLogin/styles.ts","pages/Auth/InternalLogin/InternalLogin.tsx","pages/Auth/ResetPassword/constants.ts","pages/Auth/ResetPassword/styles.ts","pages/Auth/ResetPassword/view.tsx","pages/Auth/ResetPassword/controller.tsx","pages/Auth/ResetPassword/index.ts","pages/Health/styles.ts","pages/Health/Health.tsx","routes/PrivateRouter.tsx","pages/UserProfile/components/styles.ts","ui/icons/AddUser.tsx","ui/components/UploadPhoto/UploadPhoto.tsx","pages/UserProfile/components/ProfileInfo.tsx","pages/UserProfile/components/Security.tsx","store/helpers/decapsulateAction.ts","features/portableLabels/store/hors/withLabels/reducer.ts","features/portableTeams/store/hors/withTeams/scopes.ts","features/portableTeams/store/hors/withTeams/reducer.ts","features/portablePractisSets/store/hors/withPractisSets/reducer.ts","features/users/store/reducers.ts","pages/UserProfile/components/Notifications/constants.ts","pages/UserProfile/components/NotificationWithToggle/styles.ts","ui/components/SwitchToggle/SwitchToggle.tsx","pages/UserProfile/components/NotificationWithToggle/view.tsx","pages/UserProfile/components/NotificationWithToggle/index.ts","pages/UserProfile/components/Notifications/styles.ts","pages/UserProfile/components/Notifications/view.tsx","pages/UserProfile/components/Notifications/controller.tsx","tools/constants/WebSiteId.ts","pages/UserProfile/components/Notifications/index.ts","ui/components/Logo/Logo.tsx","ui/icons/RightArrow.tsx","ui/icons/Label.tsx","ui/layout/Sidebar/styles.ts","ui/layout/Sidebar/SideBarItem.tsx","ui/icons/Dots.tsx","ui/components/ActionButton/styles.ts","ui/components/ActionButton/ActionButton.tsx","ui/components/ActionButton/ActionContext.ts","ui/components/ActionButton/ActionItem.tsx","ui/components/ActionButton/constants.ts","ui/components/ActionButton/ActionMenu.tsx","features/labels/components/EditLabelActions.tsx","helpers/hooks/useFocus.ts","features/labels/components/AddNewLabelInput.tsx","features/labels/components/LabelInputWarning.tsx","helpers/functions/key-down-helpers.ts","features/labels/components/styles.ts","features/labels/components/LabelListActions.tsx","features/labels/components/LabelListtem.tsx","features/labels/components/LabelsList.tsx","features/labels/components/AddLabels.tsx","features/labels/components/EmptyLabels.tsx","helpers/hooks/usePreviousData.ts","features/teams/store/states.ts","features/roles/store/actions.ts","features/labels/pages/CreateLabels.tsx","pages/CompanySettings/store/services.ts","ui/components/DropdownList/DropdownList.tsx","ui/components/DropdownList/DropdownListItem.tsx","ui/layout/Sidebar/components/ProfileSection/components/styles.ts","ui/layout/Sidebar/components/ProfileSection/components/UserProfileArea.tsx","features/roles/store/states.ts","features/roles/store/services.ts","ui/layout/Sidebar/components/ProfileSection/ProfileSection.tsx","helpers/functions/email-helpers.ts","ui/layout/Sidebar/constants.ts","ui/icons/Support.tsx","ui/layout/Sidebar/PractisSupport.tsx","features/companies/store/actions.ts","ui/layout/Sidebar/helpers.ts","ui/icons/SidebarScrimmageAI.tsx","ui/layout/Sidebar/SideBarExternalLinkItem.tsx","ui/layout/Sidebar/Sidebar.tsx","ui/wrapper/configs.ts","ui/icons/Plus.tsx","ui/icons/Folder.tsx","ui/icons/NewUser.tsx","ui/icons/Document.tsx","ui/icons/Mountains.tsx","ui/icons/Team.tsx","ui/layout/Header/components/ActionsDropdown/ActionsDropdown.tsx","ui/icons/BackArrow.tsx","ui/layout/Header/styles.ts","features/companies/store/services.ts","ui/icons/BoldDownArrow.tsx","ui/icons/BoldUpArrow.tsx","features/companies/components/CompaniesDropdownButton/styles.ts","features/companies/components/CompaniesDropdownButton/CompaniesDropdownItem.tsx","features/companies/components/CompaniesDropdownButton/types.ts","assets/images/practis-icon.svg","ui/icons/PractisIcon.tsx","features/companies/components/CompaniesDropdownButton/PractisDropdownItem.tsx","features/companies/components/CompaniesDropdownButton/CompaniesDropdown.tsx","features/companies/store/states.ts","ui/components/AvatarPlaceholder/index.tsx","features/companies/components/CompaniesDropdownButton/CompaniesDropdownButton.tsx","features/companies/components/CompanySection/CompanySection.tsx","pages/LandingPage/configs.ts","helpers/functions/broadcast-channel.ts","ui/layout/Header/types.ts","ui/layout/Header/Header.tsx","ui/wrapper/MainWrapper/styles.ts","ui/icons/SidebarLibrary.tsx","ui/icons/SidebarLibraryActive.tsx","ui/icons/SidebarTeams.tsx","ui/icons/SidebarTeamsActive.tsx","ui/icons/SidebarFeed.tsx","ui/icons/SidebarFeedActive.tsx","ui/icons/SidebarUsers.tsx","ui/icons/SidebarUsersActive.tsx","ui/icons/SidebarAssessment.tsx","ui/icons/SidebarAssessmentActive.tsx","ui/icons/SidebarReports.tsx","ui/icons/SidebarReportsActive.tsx","ui/icons/SidebarRoleplays.tsx","ui/icons/SidebarRoleplaysActive.tsx","ui/wrapper/MainWrapper/constants.ts","ui/wrapper/MainWrapper/MainWrapper.tsx","helpers/functions/object-helpers.ts","pages/UserProfile/UserProfile.tsx","assets/images/404.svg","ui/layout/Footer/Footer.tsx","ui/wrapper/LandingWrapper/LandingHeader/LandingHeader.tsx","ui/wrapper/LandingWrapper/LandingWrapper.tsx","pages/NotFoud/NotFound.tsx","assets/images/LandingCard1.png","assets/images/LandingCard2.png","assets/images/LandingCard3.png","helpers/hooks/usePageVisibility.tsx","features/teams/store/actions.ts","pages/LandingPage/Component/CardContent.tsx","pages/LandingPage/platforms/web/LandingCard.tsx","pages/LandingPage/platforms/web/LeftPanel.tsx","ui/components/Copyright/Copyright.tsx","pages/LandingPage/platforms/web/RightPanel.tsx","pages/LandingPage/platforms/web/index.tsx","pages/LandingPage/platforms/mobile/LandingCard.tsx","pages/LandingPage/platforms/mobile/LeftPanel.tsx","pages/LandingPage/platforms/mobile/RightPanel.tsx","pages/LandingPage/platforms/mobile/index.tsx","pages/LandingPage/platforms/tablet/LandingCard.tsx","pages/LandingPage/platforms/tablet/LeftPanel.tsx","pages/LandingPage/platforms/tablet/RightPanel.tsx","pages/LandingPage/platforms/tablet/index.tsx","pages/LandingPage/LandingPage.tsx","features/teams/store/services.ts","helpers/hooks/usePagePermissions.ts","constants/interfaces/TeamMember.ts","ui/components/Navigation/NavigationItem.tsx","ui/components/Navigation/Navigation.tsx","features/teams/pages/Training/components/TrainingTutorial.tsx","features/teams/components/TeamsPageNavigation/styles.ts","features/teams/components/TeamsPageNavigation/TeamsPageNavigation.tsx","features/teams/components/TeamsPageNavigation/TeamLearnersNavigation.tsx","ui/icons/NoTrainings.tsx","ui/icons/NoTrainingsFiltering.tsx","ui/icons/FiltersIcon.tsx","ui/components/Filters/styles.tsx","ui/components/Filters/FilterByHandler.tsx","features/teams/pages/TeamMembers/tools.ts","ui/icons/OverdueFlag.tsx","features/teams/pages/Training/components/Filters/TrainingFilters.tsx","features/teams/pages/Training/components/ListActions/ListActions.tsx","features/searchState/store/reducer.ts","features/teams/pages/Training/styles.ts","ui/components/table-wrapper/table/table-header/table-header-cell/hook.ts","ui/components/table-wrapper/helper.ts","helpers/functions/searchparams-normalize.ts","features/teams/pages/Training/PractisSetProgress.tsx","ui/icons/User.tsx","helpers/functions/convert-time.ts","features/teams/pages/Training/tools.ts","features/teams/pages/Training/components/Filters/TrainingDetailsFilters.tsx","ui/components/ProgressBar/ProgressBar/ProgressBar.tsx","ui/components/ProgressBar/StripedProgressBar/view.tsx","features/teams/pages/Training/components/ProgressDetails/GeneralProgressCol.tsx","ui/icons/PlusInCircleIcon.tsx","ui/icons/ViewPractisSetIcon.tsx","ui/icons/ExportReportIcon.tsx","services/GeneralBulkActionServices/constants.ts","services/GeneralBulkActionServices/helpers.ts","services/GeneralBulkActionServices/index.ts","features/teams/services/TeamBulkActionsService/constants.ts","features/teams/services/TeamBulkActionsService/index.ts","features/teams/services/TeamBulkActionsService/helpers.ts","features/teams/pages/Training/services/EnrollmentBulkActionsService/constants.ts","features/teams/pages/Training/services/EnrollmentBulkActionsService/index.ts","features/teams/pages/Training/services/EnrollmentBulkActionsService/helpers.ts","features/socketProgress(api1)/store/actions.ts","features/teams/pages/Training/ProgressDetails.tsx","features/teams/pages/Training/Progress.tsx","pages/ActionPages/NewUser/store/services.ts","ui/components/RadioButton/index.tsx","pages/ActionPages/NewUser/components/AssignRoles.tsx","features/portableLabels/templates/AssignLabels.tsx","pages/ActionPages/NewUser/components/SelectedUserLabels.tsx","features/portablePractisSets/templates/AssignPractisSets.tsx","pages/ActionPages/NewUser/components/SelectedUserPractisSets.tsx","features/portableTeams/store/hors/withTeams/context/context.ts","features/portableTeams/store/hors/withTeams/context/useWithTeamsContext.ts","features/portableTeams/store/hors/withTeams/helpers/useEncapsulatedDispatch.ts","features/portableTeams/store/hors/withTeams/services.ts","features/portableTeams/store/hors/withTeams/api.ts","features/portableTeams/store/hors/withTeams/actions.ts","features/portableTeams/store/hors/withTeams/states.ts","features/portableTeams/components/PortableTeamsList.tsx","features/portableTeams/components/EmptyTeams.tsx","features/portableTeams/components/PortableTeams.tsx","features/portableTeams/store/states.ts","features/portableTeams/components/PortableTeamsWithStore.tsx","features/portableTeams/components/PortableTeamsWithStore2.tsx","features/portableTeams/templates/AssignTeams.tsx","pages/ActionPages/NewUser/components/SelectedUserTeams.tsx","pages/ActionPages/NewUser/components/AddNewUser.tsx","features/portableRoles/tools.ts","features/portableRoles/portableRoles.tsx","pages/ActionPages/NewUser/components/Filters/components/FilterLabels/FilterLabels.tsx","pages/ActionPages/NewUser/components/Filters/components/FilterPractisSets/FilterPractisSets.tsx","features/portableTeams/tools.ts","pages/ActionPages/NewUser/components/Filters/components/FilterTeams/FilterTeams.tsx","pages/ActionPages/NewUser/components/Filters/AssignFilters.tsx","ui/icons/RemoveUser.tsx","features/portableRoles/portableRolesWithMultiSelect.tsx","pages/ActionPages/NewUser/components/Filters/ApplyFilters.tsx","ui/icons/FileDownload.tsx","ui/icons/Upload.tsx","helpers/functions/file-helpers.ts","helpers/functions/strings.ts","pages/ActionPages/NewUser/components/Header/NewUserHeader.tsx","tools/parseXlsx/index.tsx","pages/ActionPages/NewUser/components/UsersList/EditAssignRoles.tsx","pages/ActionPages/NewUser/components/UsersList/EditAssignPractisSets.tsx","pages/ActionPages/NewUser/components/UsersList/EditAssignTeams.tsx","pages/ActionPages/NewUser/components/UsersList/EditAssignLabels.tsx","ui/icons/ThinClose.tsx","ui/icons/ThinCheck.tsx","pages/ActionPages/NewUser/components/UsersList/EditUserItem.tsx","ui/components/table-wrapper/table/TableCheckbox/TableCheckboxHeaderCell.tsx","ui/components/table-wrapper/table/TableCheckbox/TableCheckbox.tsx","ui/components/table-wrapper/table/TableCheckbox/TableCheckboxCell.tsx","ui/icons/NewUserExclamation.tsx","ui/components/Table/Table.tsx","ui/components/Table/TableHead.tsx","ui/components/Table/TableToolsRight.tsx","ui/components/Table/TableTools.tsx","ui/components/Table/TableToolsWrapper.tsx","ui/components/Table/TableToolsLeft.tsx","ui/icons/EditPencil.tsx","ui/components/table-wrapper/table/TableNoResultBody/TableNoResultBody.tsx","ui/components/table-wrapper/table/TableNoResult/styles.ts","ui/components/table-wrapper/table/TableNoResult/TableNoResult.tsx","pages/ActionPages/NewUser/components/UsersList/UsersList.tsx","pages/ActionPages/NewUser/components/SaveAsDraftModal.tsx","pages/ActionPages/NewUser/store/states.ts","ui/icons/AddNewUser.tsx","ui/icons/NewUserPath.tsx","pages/ActionPages/NewUser/components/AddNewUserTip.tsx","helpers/hooks/useKeyPress.ts","ui/components/ModalPage/ModalPage.tsx","pages/ActionPages/NewUser/pages/NewUser/styles.ts","pages/CompanySettings/store/states.ts","ui/icons/Cross.tsx","ui/components/ModalWithCross/styles.ts","ui/components/ModalWithCross/view.tsx","pages/ActionPages/NewUser/pages/NewUser/components/UserLimitWarningModal/styles.ts","pages/ActionPages/NewUser/pages/NewUser/components/UserLimitWarningModal/view.tsx","pages/ActionPages/NewUser/pages/NewUser/components/UserLimitWarningModal/controller.tsx","pages/ActionPages/NewUser/pages/NewUser/components/NoFreeUsersModal/view.tsx","pages/ActionPages/NewUser/pages/NewUser/components/ExceededFreeUsersModal/view.tsx","ui/icons/Gear.tsx","ui/components/CompanyUserStatsText/styles.ts","ui/components/CompanyUserStatsText/view.tsx","ui/components/CompanyUserStatsText/controller.tsx","pages/ActionPages/NewScenario/store/actions.ts","pages/ActionPages/NewUser/pages/NewUser/NewUser.tsx","pages/ActionPages/NewUser/services/InviteUsersBulkActionService/index.ts","pages/ActionPages/NewUser/services/InviteUsersBulkActionService/constants.ts","pages/ActionPages/NewUser/pages/NewUser/index.ts","constants/interfaces/ScriptLine.ts","pages/ActionPages/NewScenario/store/reducers.ts","constants/enums/scenarios.ts","api/roleplay/index.ts","pages/ActionPages/NewScenario/store/services.ts","constants/enums/EditModeValues.ts","features/textToSpeech/store/actions.ts","ui/components/TextAreaBox/TextAreaBox.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioInfo/ScenarioInfo.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/components/ScriptAction/ScriptAction.tsx","services/ElevenLabs/constants.ts","services/ElevenLabs/index.ts","features/textToSpeech/store/services.ts","features/textToSpeech/store/states.ts","tools/ramda/index.ts","features/player/store/actions.ts","features/player/store/reducers.ts","features/player/store/services.ts","features/keywords/hooks/index.ts","ui/icons/Keyword.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/components/ScriptItemTextArea/Tooltip.tsx","ui/components/ContentEditableDiv/ContentEditable.tsx","ui/components/ContentEditableDiv/ContentEditableDiv.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/components/ScriptItemTextArea/ScriptItemTextArea.tsx","ui/components/Comment/Comment/Comment.tsx","ui/components/Comment/Comment/CommentBody.tsx","ui/components/Comment/Comment/CommentTools.tsx","ui/components/Comment/Comment/CommentTitle.tsx","ui/components/Comment/Comment/CommentDescription.tsx","ui/components/Comment/Comment/CommentAvatar.tsx","ui/icons/Save.tsx","ui/components/AudioRecorder/style.ts","ui/components/AudioRecorder/AudioRecorder.tsx","ui/icons/PlayCircle.tsx","ui/icons/PauseCircle.tsx","ui/icons/StopCircle.tsx","ui/components/AudioPlayer/style.ts","ui/components/AudioPlayer/AudioPlayer.tsx","ui/icons/Generate.tsx","ui/icons/Record.tsx","ui/icons/Play.tsx","features/textToSpeech/constants.ts","features/textToSpeech/helpers.ts","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/components/ScriptItem/ScriptItem.tsx","ui/icons/Drag.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/components/ScriptLineContent/ScriptLineContent.tsx","ui/icons/Stop.tsx","ui/icons/Phone.tsx","features/textToSpeech/BulkActionService/index.ts","features/textToSpeech/BulkActionService/helpers.ts","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/ScenarioScriptHeader/ScriptHeaderActions.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/ScenarioScriptHeader/ScenarioScriptHeader.tsx","ui/icons/Customer.tsx","pages/ActionPages/NewScenario/components/CustomBody/ScenarioScript/ScenarioScripts.tsx","pages/ActionPages/NewScenario/components/CustomBody/index.tsx","pages/ActionPages/StatusModalConfirmation/StatusModalConfirmation.tsx","helpers/functions/page-title-helpers.ts","pages/ActionPages/NewScenario/components/CustomHeader/CustomHeader.tsx","pages/ActionPages/NewScenario/services.tsx","ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction/styles.ts","ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction/LabelsActionItem.tsx","ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction/NoLabels.tsx","ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction/LabelsAction.tsx","ui/icons/DownloadPDF.tsx","pages/ActionPages/NewScenario/components/ActionPanel/ActionPanel.tsx","features/library/services/LibraryBulkActionsService/helpers.tsx","features/library/services/LibraryBulkActionsService/index.ts","pages/ActionPages/NewScenario/NewScenario.tsx","pages/ActionPages/PractisSets/store/actions.ts","pages/ActionPages/PractisSets/tools.ts","pages/ActionPages/NewScenario/tools.ts","pages/ActionPages/PractisSets/store/reducers.ts","features/pacings/tools.ts","pages/ActionPages/PractisSets/store/services.ts","ui/icons/ArchiveIcon.tsx","pages/ActionPages/PractisSets/components/CustomHeader/CustomHeader.tsx","pages/ActionPages/PractisSets/services.ts","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/pages/helpers.ts","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/pages/GenerateTableCells.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/components/Navigation/NavigationItem.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/components/Navigation/Navigation.tsx","pages/ActionPages/PractisSets/components/PractisContentNavigation/PractisContentNavigation.tsx","ui/icons/Stack.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/components/Filters/LabelFilters.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/components/Filters/TableFilters.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/pages/Scenarios.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/pages/Challenges.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/ListContent/index.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/PractisSetBuilder/components/MinimumAccuracy.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/PractisSetBuilder/components/BuilderDuration.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/PractisSetBuilder/components/PreviewItem/PreviewItem.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/PractisSetBuilder/components/BuilderListItem.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/PractisSetBuilder/components/RepsRequired.tsx","ui/icons/Documents.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/PractisSetBuilder/index.tsx","pages/ActionPages/PractisSets/components/CustomBody/Content/Content.tsx","pages/ActionPages/PractisSets/components/CustomBody/index.tsx","ui/components/Select/SelectLabel.tsx","ui/components/Select/SelectMenu.tsx","ui/components/Select/SelectMenuItem.tsx","ui/components/Select/SelectInput.tsx","ui/components/Select/Select.tsx","features/pacings/store/actions.ts","features/pacings/store/reducers.ts","features/pacings/store/services.ts","pages/ActionPages/PractisSets/components/ActionPanel/ActionPanel.tsx","pages/ActionPages/PractisSets/styles.ts","pages/ActionPages/PractisSets/PractisSets.tsx","features/library/components/LibraryNavigation.tsx","features/library/components/Filters/LibraryFilters.tsx","features/library/components/ListActions/ScenariosListActions.tsx","features/common/Session.ts","features/teams/pages/ListOfTeams/tools.ts","features/library/pages/Scenarios/styles.ts","ui/components/table-wrapper/table/TableDropdown/TableDropdown.tsx","features/library/pages/Scenarios/Scenarios.tsx","ui/icons/Box.tsx","features/library/components/ListActions/PractisSetsListActions.tsx","features/library/pages/PractisSets/styles.ts","features/library/pages/PractisSets/PractisSets.tsx","features/library/components/ListActions/ChallengesListActions.tsx","features/library/pages/Challenges/styles.ts","features/library/pages/Challenges/Challenges.tsx","features/library/pages/Library.tsx","pages/Terms/Terms.tsx","pages/Privacy/Privacy.tsx","pages/Support/Support.tsx","features/users/components/UsersPageNavigation.tsx","features/portableInviters/components/EmptyInviters.tsx","features/portableInviters/components/PortableInvitersList.tsx","features/portableInviters/components/PortableInviters.tsx","features/portableInviters/tools.ts","features/inviters/store/actions.ts","features/inviters/store/services.ts","features/inviters/tools.ts","features/inviters/store/reducers.ts","features/portableInviters/components/PortableInvitersWithStore.tsx","features/users/components/Filters/InvitationsFilter.tsx","features/inviters/store/states.ts","features/users/components/ListActions/InvitationsListActions.tsx","ui/icons/Pending.tsx","features/users/pages/Invitations/styles.ts","features/users/services/UserBulkActionsService/index.ts","features/users/services/UserBulkActionsService/helpers.tsx","features/users/services/UserBulkActionsService/constants.ts","features/users/pages/Invitations/Invitations.tsx","features/challenges/store/actions.ts","features/users/components/Filters/UsersFilter.tsx","features/users/components/ListActions/UsersListActions.tsx","features/users/components/SelectedUserTeams.tsx","features/users/pages/Users/styles.ts","features/users/tools/hooks.ts","features/users/pages/Users/Users.tsx","helpers/functions/array-diff.ts","features/challenges/store/services.ts","features/challenges/components/Header/index.tsx","features/challenges/services.ts","features/challenges/store/states.ts","features/challenges/tools.ts","features/challenges/components/ChallengeBody/ChallengeInfo.tsx","features/challenges/components/ScriptLineContent/RepScriptLine/RepScriptLine.tsx","features/challenges/components/ScriptLineContent/RepScriptLine/index.tsx","features/challenges/components/ScriptLineContent/CustomerScriptLine/CustomerScriptLine.tsx","features/challenges/components/ScriptLineContent/TraineeRespondLine/TraineeRespondLine.tsx","features/challenges/components/ScriptLineContent/CustomerScriptLine/index.tsx","features/challenges/components/ScriptLineContent/index.tsx","features/challenges/components/ScriptAction/ScriptAction.tsx","features/challenges/components/ChallengeScriptHeader/styles.ts","ui/icons/Attempts.tsx","features/challenges/components/ChallengeSettings/components/ChallengeAttemptsLimit/styles.ts","features/challenges/components/ChallengeSettings/components/ChallengeAttemptsLimit/view.tsx","features/challenges/components/ChallengeSettings/components/ChallengeAttemptsLimit/controller.tsx","features/challenges/components/ChallengeSettings/styles.ts","features/challenges/components/ChallengeSettings/view.tsx","ui/icons/SmartGear.tsx","features/challenges/components/ChallengeScriptHeader/view.tsx","features/challenges/components/ChallengeScriptHeader/controller.tsx","features/challenges/components/ChallengeBody/ChallengeScripts.tsx","features/challenges/components/ChallengeBody/index.tsx","features/challenges/components/ActionPanel/ActionPanel.tsx","features/challenges/pages/EditChallenge.tsx","features/newRelic/generate.tsx","tools/newRelic/NewRelic.ts","features/newRelic/index.tsx","features/submissions/store/states.ts","features/submissions/store/actions.ts","constants/interfaces/Reviews.ts","features/submissions/tools/SubmissionActionsHelper.ts","features/submissions/tools/AccuracyScoreActionsHelper.tsx","features/submissions/tools/tools.ts","features/submissions/store/constants.ts","features/submissions/services/SubmissionsBulkActionsService/types.ts","helpers/functions/pluralize.ts","features/submissions/store/services.ts","features/submissions/components/SubmissionFilters/styles.ts","features/submissions/components/SubmissionFilters/SubmissionFilters.tsx","ui/icons/Files.tsx","features/submissions/components/SubmissionsNavigation.tsx","ui/icons/CheckMark.tsx","features/submissions/pages/styles.ts","features/submissions/services/SubmissionsBulkActionsService/index.ts","features/submissions/services/SubmissionsBulkActionsService/helpers.ts","features/submissions/services/SubmissionsBulkActionsService/constants.ts","features/submissions/pages/ChallengeSubmissions.tsx","features/portableScenarios/store/hors/withTeams/scopes.ts","features/portableScenarios/store/hors/withTeams/context/context.ts","features/portableScenarios/store/hors/withTeams/context/useWithTeamsContext.ts","features/portableScenarios/store/hors/withTeams/helpers/useEncapsulatedDispatch.ts","features/portableScenarios/store/hors/withTeams/services.ts","features/portableScenarios/store/hors/withTeams/actions.ts","features/portableScenarios/store/hors/withTeams/states.ts","features/portableScenarios/components/PortableScenariosList.tsx","features/portableScenarios/components/EmptyScenarios.tsx","features/portableScenarios/components/PortableScenarios.tsx","features/portableScenarios/store/states.ts","features/portableScenarios/components/PortableScenariosWithStore.tsx","features/submissions/components/Filters/AccuracyTestFilters.tsx","ui/icons/Accuracy.tsx","features/submissions/pages/AccuracyTests.tsx","features/submissions/pages/Submissions.tsx","ui/icons/PlayIcon.tsx","ui/icons/PauseIcon.tsx","ui/components/VideoPlayer/components/VideoRangeSlider.tsx","ui/icons/DownloadIcon.tsx","ui/icons/FullScreenIcon.tsx","ui/components/VideoPlayer/components/VolumeRangeSlider.tsx","ui/icons/CopyLink.tsx","ui/components/VideoPlayer/VideoPlayer/VideoPlayerControls.tsx","assets/images/no-video.svg","ui/components/VideoPlayer/VideoPlayer/VideoPlayer.tsx","features/submissions/components/DetailsHeader.tsx","features/submissions/components/DetailsSubmissionInfo.tsx","ui/components/SelectBox/SelectBox/SelectBoxItem.tsx","ui/components/SelectBox/SelectBox/SelectBoxLabel.tsx","ui/components/SelectBox/SelectBox/SelectBox.tsx","ui/components/ButtonArrow/style.ts","ui/components/ButtonArrow/ButtonArrow.tsx","features/submissions/components/DetailsSubmissionReview.tsx","features/submissions/components/RequestRedo.tsx","features/submissions/components/RequestReminder.tsx","ui/components/CopyLinkNotification/styles.ts","ui/components/CopyLinkNotification/view.tsx","ui/components/CopyLinkNotification/index.ts","ui/icons/BrokenVideo.tsx","ui/components/UnavailableContent/styles.ts","ui/components/UnavailableContent/view.tsx","ui/components/UnavailableContent/index.ts","features/submissions/components/UnavailableChallenge/view.tsx","features/submissions/components/UnavailableChallenge/index.ts","features/submissions/components/ScreenLoading/styles.ts","features/submissions/components/ScreenLoading/view.tsx","features/submissions/components/ScreenLoading/constants.ts","features/logs/models/LogEvent.ts","features/submissions/components/ScreenLoading/index.ts","features/submissions/pages/SubmissionDetails.tsx","pages/Auth/TraineeLogin/styles.ts","pages/Auth/TraineeLogin/TraineeLogin.tsx","features/users/components/Filters/UserProfileFilters/UserProfileFilters.tsx","features/users/pages/Performance/styles.ts","features/users/components/PerformanceSection.tsx","features/users/components/Filters/UserProfileFilters/components/FilterLabels/FilterLabels.tsx","features/users/components/Filters/UserProfileFilters/components/FilterPractisSets/FilterPractisSets.tsx","features/users/components/Filters/UserProfileFilters/components/FilterTeams/FilterTeams.tsx","features/users/components/Filters/UserProfileFilters/styles.ts","features/users/components/Filters/UserProfileFilters/AssignFilters.tsx","features/users/pages/Performance/Performance.tsx","routes/PublicRouter.tsx","features/logs/tools.ts","features/logs/components/Details.tsx","features/logs/store/actions.ts","features/logs/store/services.ts","features/logs/store/states.ts","ui/components/Filters/FiltersApplyButton.tsx","ui/components/Filters/FiltersButton.tsx","ui/components/Filters/FiltersCheckbox.tsx","ui/components/Filters/FiltersDivider.tsx","ui/components/Filters/FiltersCheckboxList.tsx","ui/components/Filters/FiltersClearButton.tsx","ui/components/Filters/FiltersFieldSet.tsx","ui/components/Filters/FiltersNoItems.tsx","ui/components/Filters/FiltersPopupActions.tsx","ui/components/Filters/FiltersPopupBody.tsx","ui/components/Filters/FiltersPopupButton.tsx","ui/components/Filters/FiltersPopupFieldSets.tsx","ui/components/Filters/FiltersSearchInput.tsx","ui/components/Filters/FiltersSelectedItems.tsx","ui/components/Filters/FiltersSelectedItemsText.tsx","ui/components/Filters/FiltersSelectedText.tsx","ui/components/Filters/FiltersToggleAllButton.tsx","features/logs/components/LogFiltersEvents.tsx","features/users/components/Filters/UserRoleFilters.tsx","features/logs/components/LogFilters.tsx","ui/icons/NoLogs.tsx","features/logs/pages/styles.ts","features/logs/pages/Logs.tsx","pages/Auth/MobileNumberLogin/styles.ts","pages/Auth/MobileNumberLogin/MobileNumberLogin.tsx","pages/Auth/MobileNumberLogin/constants.ts","ui/components/VerificationCodeInput/VerificationCodeInput.tsx","pages/Auth/AddMobileNumber/components/CheckVerificationCode/styles.ts","pages/Auth/AddMobileNumber/components/CheckVerificationCode/view.tsx","pages/Auth/AddMobileNumber/components/CheckVerificationCode/controller.tsx","pages/Auth/AddMobileNumber/components/CheckVerificationCode/index.ts","pages/Auth/AddMobileNumber/components/CheckVerificationCode/constants.ts","pages/Auth/VerifyMobileNumber/controller.tsx","pages/Auth/VerifyMobileNumber/index.ts","features/telepromter/store/state.ts","ui/icons/Completed.tsx","features/telepromter/store/actions.ts","features/telepromter/pages/Completed/Completed.tsx","features/telepromter/pages/Playback/RepLine.tsx","features/telepromter/pages/Playback/CustomerLine.tsx","features/telepromter/pages/Playback/Playback.tsx","features/telepromter/pages/Training/RepLine.tsx","features/telepromter/pages/Training/CustomerLine.tsx","features/telepromter/pages/Training/ScriptLineDuration.tsx","ui/icons/Next.tsx","features/telepromter/Components/Button.tsx","features/telepromter/Components/Countdown.tsx","features/telepromter/store/services.ts","features/assessment-logs/store/actions.ts","features/telepromter/pages/Training/Training.tsx","features/telepromter/pages/Exit/Exit.tsx","features/telepromter/pages/index.tsx","features/users/components/Filters/DraftsFilter/CreatedByFilters/CreatedByFiltersList.tsx","features/users/components/Filters/DraftsFilter/tools.ts","features/users/components/Filters/DraftsFilter/CreatedByFilters/CreatedByFilters.tsx","features/users/components/Filters/DraftsFilter/EditedByFilters/EditedByFiltersList.tsx","features/users/components/Filters/DraftsFilter/EditedByFilters/EditedByFilters.tsx","features/users/components/Filters/DraftsFilter/DraftsFilter.tsx","ui/icons/NoDrafts.tsx","features/socketProgress(api1)/store/reducer.ts","features/users/pages/Drafts/styles.ts","features/users/pages/Drafts/Drafts.tsx","features/assessment-logs/store/states.ts","constants/interfaces/AiItem.ts","features/assessment-logs/store/services.ts","features/assessment-logs/components/AiAssessmentFilters.tsx","ui/icons/ExclamationCircle.tsx","features/assessment-logs/pages/styles.ts","ui/icons/AssessmentLogsBig.tsx","ui/icons/Flag.tsx","ui/icons/FlagActive.tsx","ui/icons/FlagInactive.tsx","features/assessment-logs/components/FlagToggle/styles.ts","features/assessment-logs/components/FlagToggle/view.tsx","features/assessment-logs/components/FlagToggle/index.ts","features/assessment-logs/pages/AiAssessment.tsx","features/assessment-logs/pages/hooks.ts","features/portableTeamLeaders/components/PortableTeamLeadersList.tsx","ui/icons/LeaderCrown.tsx","features/portableTeamLeaders/components/EmptyTeamLeaders.tsx","features/portableTeamLeaders/components/PortableTeamLeaders.tsx","features/portableTeamLeaders/tools.ts","features/teams/pages/ListOfTeams/components/Filters/MyTeamsFilters.tsx","ui/icons/NoTeams.tsx","features/teams/pages/ListOfTeams/components/ListActions/ListActions.tsx","features/teams/pages/ListOfTeams/styles.ts","features/teams/pages/ListOfTeams/ListOfTeams.tsx","ui/icons/OverdueLearnersNoResult.tsx","features/teams/pages/OverdueLearners/components/filters/styles.ts","features/teams/pages/OverdueLearners/components/filters/OverdueLearnersFilter.tsx","features/teams/pages/OverdueLearners/constants.ts","features/teams/pages/OverdueLearners/tools.ts","features/teams/pages/OverdueLearners/components/listActions/OverdueListActions.tsx","features/teams/pages/OverdueLearners/view.tsx","features/teams/pages/OverdueLearners/store/actions.ts","features/teams/pages/OverdueLearners/store/states.ts","features/teams/pages/OverdueLearners/store/services.ts","features/teams/pages/OverdueLearners/controller.tsx","ui/icons/CheckCircle.tsx","ui/icons/Warning.tsx","ui/icons/Saving.tsx","features/teams/pages/ManageTeam/components/UpdateStatus/styles.ts","features/teams/pages/ManageTeam/components/UpdateStatus/view.tsx","features/teams/pages/ManageTeam/components/UpdateStatus/index.ts","features/teams/pages/ManageTeam/components/Header/Header.tsx","ui/icons/ConfirmCheckMark.tsx","ui/icons/CancelCross.tsx","features/teams/pages/ManageTeam/components/InputWithButtons/styles.ts","features/teams/pages/ManageTeam/components/InputWithButtons/view.tsx","features/teams/pages/ManageTeam/components/InputWithButtons/controller.tsx","features/teams/pages/ManageTeam/components/InputWithButtons/index.ts","features/teams/pages/ManageTeam/components/Actions/Actions.tsx","ui/icons/AddArrow.tsx","features/teams/pages/ManageTeam/components/Filters/AllUsersFilters.tsx","features/teams/pages/ManageTeam/tabs/AllUsers/AllUsers.tsx","ui/icons/Crown.tsx","features/teams/pages/ManageTeam/tools.ts","features/teams/pages/ManageTeam/tabs/TeamMembers/TeamMembers.tsx","features/teams/pages/ManageTeam/tabs/DefaultTeamMembers/styles.ts","features/teams/pages/ManageTeam/tabs/DefaultTeamMembers/DefaultTeamMembers.tsx","features/teams/pages/ManageTeam/ManageTeam.tsx","features/teams/pages/CreateTeam/styles.ts","features/teams/pages/CreateTeam/view.tsx","features/teams/pages/CreateTeam/controller.tsx","features/teams/pages/Training/PractisSetReport.tsx","features/teams/pages/CreateTeam/index.ts","features/teams/pages/Training/components/ChartBox/ChartBox.tsx","features/teams/pages/Training/components/ChartBox/ChartBoxTitle.tsx","features/teams/pages/Training/components/ChartBox/ChartBoxBody.tsx","features/teams/pages/Training/components/Sections/Completion.tsx","ui/icons/NoChartData.tsx","features/teams/pages/Training/components/Sections/EmptySection.tsx","ui/components/Charts/ToolTip.tsx","ui/components/Charts/LineChart.tsx","features/teams/pages/Training/components/ChartBox/ChartBoxHeader.tsx","features/teams/pages/Training/components/ChartBox/ChartBoxDescription.tsx","ui/icons/DailyTimeSpentIcon.tsx","features/teams/pages/Training/components/Sections/DailyTimeSpent.tsx","ui/icons/Scenarios.tsx","ui/icons/ChallengeIcon.tsx","ui/icons/TickIcon.tsx","features/teams/pages/Training/components/Sections/ReportItems/styles.ts","ui/icons/PlayTriangle.tsx","ui/icons/NoPlay.tsx","features/teams/pages/Training/components/Sections/ReportItems/ReportsItems.tsx","features/teams/pages/Training/ScenarioReps/store/actions.ts","helpers/functions/math.ts","features/teams/pages/Training/ScenarioReps/constants.ts","features/teams/pages/Training/ScenarioReps/store/services.ts","features/teams/pages/Training/ScenarioReps/store/states.ts","features/teams/pages/Training/ScenarioReps/styles.ts","features/teams/pages/Training/ScenarioReps/view.tsx","features/teams/pages/Training/ScenarioReps/controller.tsx","store/selectors.ts","ui/icons/Published.tsx","features/teams/tools/TraineeInvitationActionHelpers.ts","features/teams/pages/Training/helper.ts","features/teams/pages/Training/components/ListActions/DueDateListAction/styles.ts","features/teams/pages/Training/components/ListActions/DueDateListAction/index.tsx","features/teams/pages/Training/TraineeQuickAssignment.tsx","features/teams/pages/Training/TraineeInvitation.tsx","ui/components/PlaybackVideo/components/BlankVideo/styles.ts","ui/components/PlaybackVideo/components/BlankVideo/view.tsx","ui/components/PlaybackVideo/components/BlankVideo/index.ts","ui/components/PlaybackVideo/components/ScreenLoading/styles.ts","ui/components/PlaybackVideo/components/ScreenLoading/view.tsx","ui/components/PlaybackVideo/components/ScreenLoading/index.ts","ui/components/BrokenSharedLink/view.tsx","features/socketProgress(api1)/progresspage.tsx","ui/components/BrokenSharedLink/index.ts","ui/generalStyles/TextStyles.tsx","ui/components/PlaybackVideo/PlaybackScreen.tsx","ui/components/ProgressModal/index.tsx","pages/Auth/Onboarding/types.ts","ui/variables/constants.ts","assets/images/Learner-Desktop_img.png","assets/images/Learner-Desktop_img@2x.png","assets/images/Learner-Desktop_img@3x.png","assets/images/Learner-Tablet_img.png","assets/images/Learner-Tablet_img@2x.png","assets/images/Learner-Tablet_img@3x.png","assets/images/Learner-Phone_img.png","assets/images/Learner-Phone_img@2x.png","assets/images/Learner-Phone_img@3x.png","assets/images/button-app-store.png","assets/images/button-google-play.png","pages/Auth/Onboarding/components/UserOnboarding/styles.ts","pages/Auth/Onboarding/components/UserOnboarding/view.tsx","pages/Auth/Onboarding/components/UserOnboarding/index.ts","assets/images/Admin-Desktop_img.png","assets/images/Admin-Desktop_img@2x.png","assets/images/Admin-Desktop_img@3x.png","assets/images/Admin-Tablet_img.png","assets/images/Admin-Tablet_img@2x.png","assets/images/Admin-Tablet_img@3x.png","assets/images/Admin-Phone_img.png","assets/images/Admin-Phone_img@2x.png","assets/images/Admin-Phone_img@3x.png","pages/Auth/Onboarding/components/AdminOnboarding/styles.ts","pages/Auth/Onboarding/components/AdminOnboarding/view.tsx","pages/Auth/Onboarding/components/AdminOnboarding/index.ts","assets/images/TeamLeader-Desktop_img.png","assets/images/TeamLeader-Desktop_img@2x.png","assets/images/TeamLeader-Desktop_img@3x.png","assets/images/TeamLeader-Tablet_img.png","assets/images/TeamLeader-Tablet_img@2x.png","assets/images/TeamLeader-Tablet_img@3x.png","assets/images/TeamLeader-Phone_img.png","assets/images/TeamLeader-Phone_img@2x.png","assets/images/TeamLeader-Phone_img@3x.png","pages/Auth/Onboarding/components/TeamLeaderOnboarding/styles.ts","pages/Auth/Onboarding/components/TeamLeaderOnboarding/view.tsx","pages/Auth/Onboarding/components/TeamLeaderOnboarding/index.ts","pages/Auth/Onboarding/controller.tsx","pages/Auth/Onboarding/index.ts","assets/images/broken-link.svg","pages/Auth/InvalidInvite/styles.ts","pages/Auth/InvalidInvite/view.tsx","pages/Auth/InvalidInvite/index.ts","pages/Auth/AddMobileNumber/components/EnterMobileNumber/styles.ts","pages/Auth/AddMobileNumber/components/EnterMobileNumber/view.tsx","pages/Auth/AddMobileNumber/components/EnterMobileNumber/controller.tsx","pages/Auth/AddMobileNumber/components/EnterMobileNumber/index.ts","pages/Auth/AddMobileNumber/components/VerifyMobileNumber/controller.tsx","pages/Auth/AddMobileNumber/components/VerifyMobileNumber/index.ts","pages/Auth/AddMobileNumber/view.tsx","pages/Auth/AddMobileNumber/controller.tsx","pages/Auth/AddMobileNumber/index.ts","pages/Auth/TraineeSplash/styles.ts","pages/Auth/TraineeSplash/view.tsx","pages/Auth/TraineeSplash/index.ts","features/teams/pages/TeamMembers/components/Filters/TeamMembersFilter.tsx","ui/icons/NoMembers.tsx","ui/icons/TeamMembersIcon.tsx","features/teams/pages/TeamMembers/components/ListActions/ListActions.tsx","ui/icons/Corona.tsx","features/teams/pages/TeamMembers/styles.ts","features/teams/pages/TeamMembers/TeamMembers.tsx","features/teams/pages/TeamMembers/index.ts","features/teams/pages/controller.tsx","ui/components/ModalDialogs/styles.ts","ui/components/ModalDialogs/StopBulkActionModal.view.tsx","ui/components/ModalDialogs/FailedModal.view.tsx","services/ChunkRequestService/store/reducers.ts","ui/icons/StopWarning.tsx","ui/components/ModalDialogs/ProgressModal.view.tsx","ui/components/ModalDialogs/store/reducers.ts","ui/components/ModalDialogs/ConfirmationModal.view.tsx","ui/components/ModalDialogs/controller.tsx","pages/OldSubmission/components/OldSubmissionRouter/controller.tsx","pages/OldSubmission/components/OldSubmissionRouter/index.ts","pages/OldSubmission/OldAccuracyTest/controller.tsx","pages/OldSubmission/OldAccuracyTest/index.ts","pages/OldSubmission/OldChallenge/controller.tsx","pages/Reports/store/actions.ts","pages/OldSubmission/OldChallenge/index.ts","pages/Reports/store/services.ts","constants/interfaces/ReportItem.ts","api/reports/index.ts","pages/Reports/store/states.ts","ui/icons/PractisSetSummary.tsx","ui/icons/TeamLeaderSummary.tsx","ui/icons/UserActivity.tsx","ui/icons/BillingReport.tsx","features/filters/dynamic-filter/date-filter/constants.ts","pages/Reports/helpers.ts","ui/icons/TrainingTime.tsx","pages/Reports/constants.ts","pages/Reports/styles.ts","ui/components/ReportingCard/styles.ts","ui/components/ReportingCard/view.tsx","ui/components/ReportingCard/index.ts","ui/components/Skeleton/styles.ts","ui/components/Skeleton/reporting-card-skeleton.view.tsx","ui/components/Skeleton/filter-skeleton.view.tsx","pages/Reports/view.tsx","pages/Reports/controller.tsx","pages/Roleplays/RoleplaysList/store/actions.ts","pages/Reports/index.ts","pages/CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/styles.ts","pages/Roleplays/RoleplaysList/constants.ts","pages/Roleplays/RoleplaysList/styles.ts","ui/icons/SidebarRoleplaysLarge.tsx","pages/Roleplays/RoleplaysList/store/services.ts","pages/Roleplays/RoleplaysList/store/states.ts","pages/Roleplays/components/Skeletons/styles.ts","pages/Roleplays/components/Skeletons/RoleplaySkeleton.tsx","services/GoogleAnalytics/index.tsx","pages/Roleplays/GoogleAnalytics/index.tsx","pages/Roleplays/RoleplaysList/controller.tsx","features/filters/searchable-filter-header/store/actions.ts","pages/Roleplays/RoleplaysList/index.ts","features/filters/searchable-filter-header/store/types.ts","features/filters/dynamic-filter/practis-set-filter/store/actions.ts","features/filters/searchable-filter-header/store/services.ts","features/filters/dynamic-filter/single-team-filter/store/actions.ts","features/filters/dynamic-filter/practis-set-filter/store/services.ts","features/filters/dynamic-filter/single-team-filter/store/constants.ts","features/filters/dynamic-filter/single-team-filter/store/reducers.ts","features/filters/dynamic-filter/single-team-filter/store/services.ts","helpers/hooks/useCountdown.ts","features/filters/filters-sidebar/services.ts","ui/components/ReportingControlPanel/styles.ts","ui/components/ReportingControlPanel/view.tsx","ui/components/ReportingControlPanel/controller.tsx","ui/components/ReportingControlPanel/index.ts","helpers/hooks/useQueryParamListener.ts","helpers/hooks/useSetQueryParam.ts","features/filters/dynamic-filter/practis-set-filter/constants.ts","ui/icons/NoReportingPractisSets.tsx","features/filters/filter-header/styles.tsx","features/filters/filter-header/view.tsx","features/filters/searchable-filter-header/store/constants.ts","features/filters/searchable-filter-header/store/reducers.ts","features/filters/searchable-filter-header/components/SearchInput/styles.ts","features/filters/searchable-filter-header/components/SearchInput/view.tsx","features/filters/searchable-filter-header/components/SearchInput/controller.tsx","features/filters/searchable-filter-header/components/SearchInput/index.ts","features/filters/searchable-filter-header/styles.ts","features/filters/searchable-filter-header/view.tsx","features/filters/searchable-filter-header/controller.tsx","features/filters/searchable-filter-header/index.ts","features/filters/filter-container/styles.ts","features/filters/filter-container/view.tsx","features/filters/dynamic-filter/practis-set-filter/styles.ts","features/filters/dynamic-filter/practis-set-filter/view.tsx","features/filters/dynamic-filter/practis-set-filter/store/constants.ts","features/filters/dynamic-filter/practis-set-filter/store/reducers.ts","features/filters/dynamic-filter/practis-set-filter/controller.tsx","features/filters/dynamic-filter/single-team-filter/constants.ts","features/filters/dynamic-filter/single-team-filter/styles.ts","features/filters/dynamic-filter/single-team-filter/view.tsx","features/filters/dynamic-filter/single-team-filter/controller.tsx","features/filters/dynamic-filter/multiple-teams-filter/store/actions.ts","features/filters/dynamic-filter/multiple-teams-filter/constants.ts","features/filters/dynamic-filter/multiple-teams-filter/store/constants.ts","features/filters/dynamic-filter/multiple-teams-filter/store/reducers.ts","features/filters/dynamic-filter/multiple-teams-filter/store/services.ts","features/filters/dynamic-filter/multiple-teams-filter/styles.ts","features/filters/dynamic-filter/multiple-teams-filter/view.tsx","features/filters/dynamic-filter/multiple-teams-filter/controller.tsx","features/filters/dynamic-filter/labels-filter/store/actions.ts","features/filters/dynamic-filter/labels-filter/constants.ts","features/filters/dynamic-filter/labels-filter/store/reducers.ts","features/filters/dynamic-filter/labels-filter/styles.ts","features/filters/dynamic-filter/labels-filter/components/labels-filter-item/styles.tsx","features/filters/dynamic-filter/labels-filter/components/labels-filter-item/view.tsx","features/filters/dynamic-filter/labels-filter/components/labels-filter-item/controller.tsx","features/filters/dynamic-filter/labels-filter/view.tsx","features/filters/dynamic-filter/labels-filter/controller.tsx","features/filters/dynamic-filter/month-filter/store/actions.ts","features/filters/dynamic-filter/month-filter/store/reducers.ts","features/filters/dynamic-filter/month-filter/store/services.ts","features/filters/dynamic-filter/month-filter/components/month-item/styles.ts","features/filters/dynamic-filter/month-filter/components/month-item/view.tsx","features/filters/dynamic-filter/month-filter/components/month-selector/constants.ts","features/filters/dynamic-filter/month-filter/components/month-selector/styles.ts","features/filters/dynamic-filter/month-filter/components/month-selector/view.tsx","features/filters/dynamic-filter/month-filter/components/month-selector/controller.tsx","ui/icons/YearLeftArrow.tsx","ui/icons/YearRightArrow.tsx","features/filters/dynamic-filter/month-filter/components/year-selector/styles.ts","features/filters/dynamic-filter/month-filter/components/year-selector/view.tsx","features/filters/dynamic-filter/month-filter/components/year-selector/controller.tsx","features/filters/dynamic-filter/month-filter/constants.ts","features/filters/dynamic-filter/month-filter/styles.ts","features/filters/dynamic-filter/month-filter/view.tsx","features/filters/dynamic-filter/month-filter/controller.tsx","features/filters/dynamic-filter/date-filter/store/actions.ts","features/filters/dynamic-filter/date-filter/store/reducers.ts","features/filters/dynamic-filter/date-filter/store/services.ts","features/filters/dynamic-filter/date-filter/styles.ts","features/filters/dynamic-filter/date-filter/view.tsx","features/filters/dynamic-filter/date-filter/controller.tsx","features/filters/dynamic-filter/controller.tsx","features/filters/filters-sidebar/styles.ts","features/filters/filters-sidebar/view.tsx","features/filters/filters-sidebar/controller.tsx","pages/Reports/PractisSetSummaryReport/constants.ts","pages/Reports/PractisSetSummaryReport/styles.ts","pages/Reports/PractisSetSummaryReport/view.tsx","pages/Reports/PractisSetSummaryReport/controller.tsx","pages/Reports/UserActivityReport/constants.ts","pages/Reports/UserActivityReport/styles.ts","pages/Reports/UserActivityReport/view.tsx","features/filters/dynamic-filter/labels-filter/store/services.ts","pages/Reports/UserActivityReport/controller.tsx","pages/Reports/TeamLeaderActivityReport/constants.ts","pages/Reports/TeamLeaderActivityReport/styles.ts","pages/Reports/TeamLeaderActivityReport/view.tsx","pages/Reports/BillingReport/constants.ts","pages/Reports/TeamLeaderActivityReport/controller.tsx","pages/Reports/BillingReport/styles.ts","pages/Reports/BillingReport/view.tsx","pages/Reports/BillingReport/controller.tsx","ui/icons/DetailsNav.tsx","ui/icons/Seats.tsx","ui/icons/LogoNav.tsx","ui/icons/Voice.tsx","pages/CompanySettings/styles.ts","pages/CompanySettings/components/CompanyDetails/styles.ts","pages/CompanySettings/components/CompanyDetails/constants.ts","ui/components/FormikSelect/style.ts","ui/components/FormikSelect/FormikSelect.tsx","ui/components/CustomizedInput/styles.ts","ui/components/CustomizedInput/tools.ts","ui/components/CustomizedInput/view.tsx","ui/components/CustomizedInput/controller.tsx","pages/CompanySettings/components/CompanyDetails/view.tsx","pages/CompanySettings/components/CompanyDetails/controller.tsx","pages/CompanySettings/components/CompanyUserLimit/styles.ts","ui/components/CompanyUserStatsInfo/styles.ts","ui/components/CompanyUserStatsInfo/view.tsx","ui/components/CompanyUserStatsInfo/controller.tsx","pages/CompanySettings/components/CompanyUserLimit/view.tsx","pages/CompanySettings/components/CompanyUserLimit/controller.tsx","pages/CompanySettings/components/CompanyUpdateLogo/styles.ts","pages/CompanySettings/components/CompanyUpdateLogo/view.tsx","pages/CompanySettings/components/CompanyUpdateLogo/constants.ts","pages/CompanySettings/components/CompanyUpdateLogo/controller.tsx","pages/CompanySettings/components/CompanyVoice/constants.ts","pages/CompanySettings/components/CompanyVoice/styles.ts","ui/components/RangeInput/RangeInput/RangeInput.tsx","helpers/functions/count-decimals.ts","pages/CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/helpers.ts","ui/icons/Sound.tsx","pages/CompanySettings/components/CompanyVoice/components/VoiceSampleText/styles.ts","pages/CompanySettings/components/CompanyVoice/components/VoiceSampleText/view.tsx","pages/CompanySettings/components/CompanyVoice/components/VoiceSampleText/controller.tsx","pages/CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/view.tsx","pages/CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/controller.tsx","pages/CompanySettings/components/CompanyVoice/components/VoiceSettingsSkeleton/styles.ts","pages/CompanySettings/components/CompanyVoice/components/VoiceSettingsSkeleton/view.tsx","pages/CompanySettings/components/CompanyVoice/view.tsx","pages/CompanySettings/components/CompanyVoice/controller.tsx","pages/CompanySettings/view.tsx","pages/CompanySettings/controller.tsx","pages/Reports/TrainingTimeReport/constants.ts","pages/Reports/TrainingTimeReport/styles.ts","pages/Reports/TrainingTimeReport/view.tsx","pages/Reports/TrainingTimeReport/controller.tsx","ui/icons/ObjectiveIcon.tsx","ui/icons/ObjectiveIconActive.tsx","ui/icons/ProductIcon.tsx","ui/icons/ProductIconActive.tsx","ui/icons/ProspectIcon.tsx","ui/icons/ProspectIconActive.tsx","ui/icons/SitationIcon.tsx","ui/icons/SitationIconActive.tsx","pages/Roleplays/components/AIParamSelect/constants.ts","pages/Roleplays/components/AIParamSelect/styles.ts","pages/Roleplays/components/AIParamSelect/controller.tsx","pages/Roleplays/components/AIParamSelect/index.ts","pages/Roleplays/components/AIParamTextbox/styles.ts","pages/Roleplays/components/AIParamTextbox/controller.tsx","pages/Roleplays/components/AiParamsComponents/Objective.tsx","pages/Roleplays/components/AiParamsComponents/ProductService.tsx","pages/Roleplays/components/AiParamsComponents/Prospect.tsx","pages/Roleplays/components/AiParamsComponents/Situation.tsx","pages/Roleplays/CreateRoleplay/constants.ts","pages/Roleplays/CreateRoleplay/styles.ts","pages/Roleplays/CreateRoleplay/controller.tsx","pages/Roleplays/CreateRoleplay/index.ts","ui/icons/InfoIcon.tsx","pages/Roleplays/websocketV2/service.ts","pages/Roleplays/RoleplayPage/styles.ts","ui/icons/SendActive.tsx","ui/icons/SendIcon.tsx","pages/Roleplays/components/TextInputWithButtons/TextInputWithButtons.tsx","ui/icons/RefreshCircle.tsx","ui/icons/WarningIcon.tsx","pages/Roleplays/RoleplayPage/store/states.ts","pages/Roleplays/RoleplayPage/constants.ts","ui/icons/CustomerAvatar.tsx","pages/Roleplays/components/Skeletons/ContentLoading.tsx","pages/Roleplays/RoleplayPage/store/actions.ts","ui/icons/RefreshCircleDisables.tsx","pages/Roleplays/RoleplayPage/store/services.ts","ui/icons/LoadingAudio.tsx","pages/Roleplays/RoleplayPage/components/ContentPanel.tsx","pages/Roleplays/components/Skeletons/BodySkeleton.tsx","pages/Roleplays/RoleplayPage/components/ContextPanel.tsx","ui/icons/PencilIconActive.tsx","pages/Roleplays/components/Skeletons/HeaderSkeleton.tsx","pages/Roleplays/RoleplayPage/components/RoleplayHeader.tsx","pages/Roleplays/RoleplayPage/components/RoleplayInfoModal.tsx","pages/Roleplays/RoleplayPage/controller.tsx","pages/Roleplays/RoleplayPage/index.ts","pages/Auth/Auth0Callback/Auth0Callback.tsx","App.tsx","features/searchState/helpers/index.ts","ui/variables/generate-variables.ts","app.config.ts","ui/components/MultiContextProvider/MultiContextProvider.tsx","constants/interfaces/ErrorResult.ts","tools/http/DefaultHttp.ts","tools/url/UrlUtils.ts","tools/url/DefaultUrlBuilder.ts","tools/newRelic/DefaultNewRelic.tsx","tools/localStorage/DefaultLocalStorage.ts","config/index.ts","pages/Auth/store/states.ts","features/socketProgress(api1)/store/states.ts","features/searchState/store/states.ts","config/context.ts","serviceWorker.ts","store/actions/index.ts","store/reducers/globals.ts","features/portableScenarios/store/hors/withTeams/reducer.ts","features/teams/store/reducers.ts","features/textToSpeech/store/reducers.ts","features/challenges/store/reducers.ts","features/submissions/store/reducers.ts","features/labels/store/reducers.ts","pages/Auth/store/reducers.ts","features/telepromter/store/reducers.ts","features/assessment-logs/store/reducers.ts","pages/ActionPages/NewUser/store/reducers.ts","features/portableLabels/store/reducer.ts","features/roles/store/reducer.ts","features/library/store/reducers.ts","store/reducers/index.ts","features/companies/store/reducers.ts","features/portableTeams/store/reducer.ts","features/portablePractisSets/store/reducer.ts","features/logs/store/reducers.ts","features/portableScenarios/store/reducer.ts","pages/Reports/store/reducers.ts","pages/Roleplays/RoleplaysList/store/reducers.ts","pages/Roleplays/RoleplayPage/store/reducers.ts","features/teams/pages/OverdueLearners/store/reducers.ts","features/teams/pages/Training/ScenarioReps/store/reducers.ts","theme/GlobalStyle.ts","ui/wrapper/PortableLoaderWrapper/PortableLoaderWrapper.tsx","config/storage.ts","index.tsx","config/store.ts"],"names":["Variables","Colors","white","softBlue","skyBlueTwo","darkSkyBlue","mainBlue","darkSkyBlueTwo15Full","steelGrey","cloudyBlue","whiteFive","paleGrey","tomato","brown","topaz","greenTwo","darkGreen","dark","darkTwo","black","transparent","backgroundGray","backgroundDark","lightGray","lighterGray","iconGray","iconGrayBg","coolGray","labelGray","hoverGray","primaryBlue","dodgerBlue","primaryRed","validGreen","softerBlue","cornflowerBlue","skyBlue","coolBlue","whiteTwo","whiteThree","whiteSix","paleGreyTwo","blackTwo","blackThree","darkThree","coral","salmon","paleRed","fadedRed","fadedRedMobile","fadedRedTwoMobile","lightMint","green","lightBlueGray","windowsBlue","lightBlue","blueyGray","steelGrey40","blueyGreyTwo","battleshipGrey","darkerGray","transparentSoftBlueTwo","darkSkyBlueTwo","darkSkyBlueThree","darkSkyBlue15","darkSkyBlue50","cloudyBlue15","blackTwo5","macaroniAndCheese","macaroniAndCheeseOpaque","Breaks","sm","md","ld","xl","BreakPoints","mid","small","smaller","responsiveLg","responsiveMd","responsiveSm","responsiveSmPlus","Spacing","Fonts","manrope","ROUTES","LANDING","AUTH_PAGES","LOGIN","INTERNAL_LOGIN","AUTH0_CALLBACK","MOBILE_NUMBER_LOGIN","MOBILE_NUMBER_VERIFY","VERIFY_MOBILE_NUMBER_PRIVATE","ADD_MOBILE_NUMBER","TRAINEE_LOGIN","LOGOUT","REGISTER","REGISTRATION","RESET_PASSWORD","FORGOT_PASSWORD","ONBOARDING","INVALID_INVITE","TRAINEE_SPLASH","PROFILE","PROFILE_SETTINGS","SECURITY","NOTIFICATIONS","ORGANIZATION_LOGS","ORGANIZATION_ASSESSMENT_LOGS","COMPANY_SETTINGS","ROOT","LOGO","USER_LIMIT","VOICE","ACTION_ITEMS","NEW_USER","PROGRESS","PROGRESS_PAGES","PRACTIS_SETS","PRACTIS_SETS_DETAILS","TRAINEE_INVITATION","SUBMISSIONS","SUBMISSION_SETTINGS","ACCURACY_TESTS","ALL","SINGLE","OLD_SINGLE","CHALLENGES","LIBRARY","LIBRARY_SETTINGS","SCENARIOS","PRACTISSETS","QUICK_ASSIGNMENT","ASSIGN_USERS","TELEPROMTER","TELEPROMTER_PAGES","PLAYBACK","COMPLETED","TRAINING","EXIT","TEAMS","TEAMS_PAGES","LIST_OF_TEAMS","MEMBERS","NEW_TEAM","MANAGE_TEAM","TRAINING_PAGES","OVERDUE_LEARNERS","TRAINEE_DETAILS_REPS","TRAINEE_DETAILS","USERS","USER_INVITATIONS","USER_PERFORMANCE","INVITATION_PERFORMANCE","INVITATIONS","DRAFTS","PRIVACY","TERMS","SUPPORT","Health","BROKEN_SHARED_LINK","MOBILE_DEEP_LINKS","PRACTIS_SET_INVITATION","V2_SUBMISSIONS","CHALLENGE_FEEDBACK","V2_CHALLENGE_FEEDBACK","PRACTIS_SET_DETAILS","REPORTS","LIST_OF_REPORTS","PRACTIS_SET_SUMMARY_REPORT","USER_ACTIVITY_REPORT","TEAM_LEADER_ACTIVITY_REPORT","BILLING_REPORT","TRAINING_TIME_REPORT","ROLEPLAYS","LIST_OF_ROLEPLAYS","NEW_ROLEPLAY","useUserIdMatch","userId","useRouteMatch","params","parseInt","replaceUserId","path","replace","toString","useAuthTypeApi","http","useHttp","useCallback","post","useAuthZeroTokenTypeApi","useLoginApi","useRegistrationApi","useLoginByPhoneCodeApi","useForgotPasswordApi","email","useResetPasswordApi","password","token","useGetPhoneCodeApi","phone","useSearchAiLogsApi","get","undefined","useGetChallengeApi","challengeId","useSearchChallengesApi","searchParams","useDeleteChallengesApi","challengeIds","delete","useAssignChallengeLabelsApi","labels","useDeleteChallengeLabelsApi","useCreateChallengeApi","challengeInfo","useUpdateChallengeInfoApi","put","useUpdateChallengeStatusApi","status","useAssignLinesToChallengeApi","lines","useFileUploadApi","data","useCreateMediaApi","mimeType","useVerifyMediaApi","mediaId","useSearchCompaniesApi","statuses","limit","offset","query","searchTerm","sort","orderBy","field","asc","join","CompanyStatus","ACTIVE","DELETED","useGetCompanyApi","companyId","useUpdateCompanyNameApi","name","useGetCompanyUserStatsApi","useSetCompanyOwnerApi","ownerId","useSetCompanyLogoApi","useDeleteCompanyLogoApi","useGetCompanyVoiceSettingsApi","role","useSetCompanyVoiceSettingsApi","settings","useSearchInvitersApi","useCreateLabelApi","useSearchLabelsApi","useDeleteLabelApi","labelId","useUpdateLabelApi","useAssignLabelsApi","entities","deleted","entityType","selectAll","search","assignedArea","useAssignedLabelsIdsApi","entityIds","useSearchPractisSetsApi","useDeletePractisSetsApi","practisSetIds","useGetPractisSetApi","practisSetId","useGetPractisSetContentApi","useAssignPractisSetContentApi","practisSetContentData","useUpdatePractisSetApi","useAssignPractisSetLabelsApi","practisSetLabels","useDeletePractisSetLabelsApi","useCreateNewPractisSetApi","practisSet","useUpdatePractisSetStatusApi","useSearchScenariosApi","useDeleteScenariosApi","scenarioIds","useDownloadScenarioReportApi","scenarioId","useGetScenarioApi","useUpdateScenarioApi","useAssignScenarioLabelApi","useDeleteScenarioLabelApi","useCreateScenarioApi","scenarioInfo","useAssignLinesToScenarioApi","useUpdateScenarioStatusApi","ScenarioIds","useSearchLogsApi","useSearchPacingsApi","useGetUserApi","useLoadUserRolesApi","useSearchUserEnrollmentsApi","getSearchSortingValue","useSearchUsersApi","useDeleteUserApi","userIds","useGetUserReportApi","useSearchStagingDraftsApi","useDeleteStagingApi","stagingIds","useSearchCreatedByUsersListApi","useSearchEditedByUsersListApi","useAssignTeamsToUserApi","addedTeamIds","deletedTeamIds","useCreateUserStagingApi","users","useSearchStagingUsersApi","draftId","useAddStagingUsersApi","stagingId","useUpdateStagingUsersApi","stagingUserId","user","useDeleteStagingUsersApi","stagingUserIds","useInviteStagingUsersApi","useAssignFiltersToStagingUsersApi","assignFilters","useGetUserFeaturesApi","useAssignUserLabelsApi","useDeleteUserLabelsApi","useUpdateUserInfo","newUserInfo","useUpdateUserPhoneNumber","phoneNumber","useConfirmUserPhoneNumber","code","useUpdateUserPassword","useRevokePendingUsers","useGetUserPermissionsApi","useGetUserSettingsApi","useSaveUserSettingsApi","useSetUserPhotoApi","useGetUserPreferencesApi","useUpdateUserPreferencesApi","preferences","patch","useSearchSubmissionsApi","useGetSubmissionDetailsApi","submissionId","useRequestSubmissionRedoApi","senderName","text","usePerformSubmissionActionApi","action","useArchiveSubmissionsApi","submissionsIds","useRestoreSubmissionsApi","useGetSubmissionReviewApi","usePerformSubmissionReviewApi","useAddSubmissionFlag","type","useDeleteSubmissionFlag","flagId","useGetSubmissionIdByOldId","oldSubmissionId","useGetSubmissionRepLines","useSearchTeamsApi","useSearchTeamLeadersApi","useGetSingleTeamApi","teamId","useSearchTrainingPractisSetsApi","useSearchPractisSetDetailsUsersApi","useDeleteTeamsApi","teamIds","useGetMembersReportApi","useGetPractisSetsReportApi","useGetEnrollmentsReportApi","psetId","useSearchTeamMembersApi","useMarkTeamAsViewedApi","useCreateNewTeamApi","useAssignMembersToTeamsApi","members","useDeleteMembersFromTeamsApi","useAssignLabelsToTeamsApi","useDeleteLabelsFromTeamsApi","useUpdateTeamNameApi","useUpdateTeamLeaderApi","teamUserId","isTeamLead","useEnrollPractisSetsToUserApi","enrollments","useDeleteEnrollmentsApi","enrollmentIds","useCreateUpdateEnrollmentDueDate","enrollmentDueDates","useGetEnrollments","useGetEnrollmentApi","enrollmentId","useGetEnrollmentProgressApi","useGetEnrollmentDailyTrainingApi","useGetOverdueLearners","useUserPerformanceApi","isInvitation","useTestInvitationApi","useInviteUsers","useResendInvitationApi","invitationIds","useNudgeUsersApi","nudgeDateList","useRemindToStartApi","Check","forwardRef","ref","className","shadow","viewBox","width","height","xmlns","xmlnsXlink","x","y","filterUnits","dx","in","result","stdDeviation","values","fill","fillRule","d","Error","id","variantIcon","success","error","styleProperties","backgroundColor","SnackbarContainer","styled","div","props","open","IconWrapper","StyledIcon","theme","StyledText","StyledMessageContainer","InfoSnackbar","memo","content","message","variant","Icon","Array","isArray","map","index","data-test","handleMessage","dispatch","clientSideErrorMessage","CLIENT_SIDE_ERROR_MESSAGE","displayMessage","setTimeout","hideMessage","useShowMessage","useDispatch","connect","state","messages","getErrorMessages","bindActionCreators","handleClose","COLORS","default","light","normal","warning","gray","grayLight","StyledButtonContent","fontSize","hasIcon","borderRadius","StyledButtonIconContainer","onlyIcon","color","StyledButtonIcon","buttonSize","StyledButton","button","buttonWidth","customColor","customDisabledColor","Button","label","children","style","disabled","icon","iconRender","loading","loadingSize","loadingColor","dataTest","title","onClick","size","src","alt","SmallButton","NEW_PERMISSIONS","HttpContext","createContext","useContext","TrainingMode","trainingModeNames","SCRIPT","NO_SCRIPT","KEYWORDS","TEST_YOURSELF","trainingModeName","mode","ROLE_NAMES","COMPANY_ADMIN","USER","PRACTIS_ADMIN","TEAM_LEADER","PRACTIS_SET_STATUS_ITEMS","INVITE_TRAINEE","INVITE_COMPANY_ADMIN","value","ALL_FILTER_VALUE","isUserRole","isCompanyAdminRole","isPractisAdminRole","isAdminRole","isTeamLeader","userRoleTitle","pendingUserRoleTitle","toLowerCase","PractisWebMode","ASSIGN_LABEL_OPTIONS","SCENARIO","CHALLENGE","PRACTISSET","INVITATION","PRACTIS_SET","TEAM","LOAD_ASSIGNED_LABELS","PRACTIS_SETS_SCREEN_LIBRARY","SCENARIOS_SCREEN_LIBRARY","CHALLENGES_SCREEN_LIBRARY","USERS_ACTIVE","USERS_PENDING","TEAMS_SCREEN","MEMBERS_SCREEN","TRAINING_SCREEN","initialState","info","isLoading","getProfileState","profile","getProfileLoading","getProfileError","userProfileReducer","USER_PROFILE","USER_PROFILE_SUCCESS","USER_PROFILE_FAILURE","UPDATE_USER_PROFILE","UPDATE_USER_PROFILE_SUCCESS","UPDATE_USER_PROFILE_FAILURE","RESET_PROFILE_INFORMATION","ACTIONS","SAVE_LABEL_FILTERS_SUCCESS","labelFilters","filters","SELECT_LABEL_FILTER","selectedLabels","toggleItemInArray","searchFilter","CLEAR_LABEL_FILTERS","FETCH_ALL_USERS","FETCH_ALL_USERS_SUCCESS","FETCH_ALL_USERS_FAILURE","CLEAR_ALL_USERS","FETCH_USER","FETCH_USER_SUCCESS","FETCH_USER_FAILURE","UPDATE_USER","UPDATE_USER_SUCCESS","UPDATE_USER_FAILURE","searchUserPractisSetsStart","SEARCH_USER_PRACTIS_SETS_START","searchUserPractisSetsSuccess","practisSets","SEARCH_USER_PRACTIS_SETS_SUCCESS","searchUserPractisSetsFailure","SEARCH_USER_PRACTIS_SETS_FAILURE","fetchPortablePractisSetsStart","FETCH_PORTABLE_PRACTIS_SETS_START","fetchPortablePractisSetsSuccess","FETCH_PORTABLE_PRACTIS_SETS_SUCCESS","fetchPortablePractisSetsFailure","FETCH_PORTABLE_PRACTIS_SETS_FAILURE","updateTraineeProfilePractisSetCheckedState","UPDATE_SELECTED_TRAINEE_PROFILE_PRACTIS_SET_STATE","updateAllPractisSetsCheckedState","selectedPractisSetIds","checked","partial","UPDATE_ALL_SELECTED_TRAINEE_PROFILE_PRACTIS_SETS_STATE","fetchAllUsers","fetchAllUsersSuccess","fetchAllUsersFailure","clearAllUsers","updateUserActionStart","UPDATE_USER_START","updateUserActionSuccess","updateType","updateUserActionFailure","fetchUserAction","fetchUserSuccess","fetchUserFailure","updateUserAction","updateUserSuccess","updateUserFailure","searchInvitationsStart","SEARCH_USER_INVITATIONS_START","searchInvitationsSuccess","SEARCH_USER_INVITATIONS_SUCCESS","searchInvitationsFailure","SEARCH_USER_INVITATIONS_FAILURE","updateInvitationStart","UPDATE_USER_INVITATION_START","updateInvitationSuccess","invitation","UPDATE_USER_INVITATION_SUCCESS","updateInvitationFailure","UPDATE_USER_INVITATION_FAILURE","getUserPerformanceStart","GET_USER_PERFORMANCE_START","getUserPerformanceSuccess","trainee","GET_USER_PERFORMANCE_SUCCESS","getUserPerformanceFailure","GET_USER_PERFORMANCE_FAILURE","resetUserPerformanceAction","RESET_USER_PERFORMANCE","fetchUserAllPractisSetsSuccess","FETCH_USER_ALL_PRACTIS_SETS","updateSelectedUserState","UPDATE_SELECTED_USER_STATE","updateAllSelectedUsersState","UPDATE_ALL_SELECTED_USERS_STATE","updateSelectedInvitationState","invitationId","UPDATE_SELECTED_INVITATION_STATE","updateAllSelectedInvitationsState","UPDATE_ALL_SELECTED_INVITATIONS_STATE","fetchAllDrafts","SEARCH_STAGING_DRAFTS","fetchAllDraftsSuccess","SEARCH_STAGING_DRAFTS_SUCCESS","fetchAllDraftsFailure","SEARCH_STAGING_DRAFTS_FAILURE","updateDraftsStart","UPDATE_STAGING_DRAFTS_START","updateDraftsSuccess","draft","UPDATE_STAGING_DRAFTS_SUCCESS","updateDraftsFailure","UPDATE_STAGING_DRAFTS_FAILURE","updateSelectedDraftState","UPDATE_SELECTED_DRAFT_STATE","updateAllSelectedDraftState","draftIds","UPDATE_ALL_SELECTED_DRAFT_STATE","fetchCreatedByUsersStart","FETCH_CREATED_BY_USERS_START","fetchCreatedByUsersSuccess","FETCH_CREATED_BY_USERS_SUCCESS","fetchCreatedByUsersFailure","FETCH_CREATED_BY_USERS_FAILURE","fetchEditedByUsersStart","FETCH_EDITED_BY_USERS_START","fetchEditedByUsersSuccess","FETCH_EDITED_BY_USERS_SUCCESS","fetchEditedByUsersFailure","FETCH_EDITED_BY_USERS_FAILURE","fetchUserFeaturesStart","FETCH_USER_FEATURES_START","fetchUserFeaturesSuccess","FETCH_USER_FEATURES_SUCCESS","fetchUserFeaturesFailure","FETCH_USER_FEATURES_FAILURE","removeUserLabel","REMOVE_USER_LABEL","removePendingUserLabel","REMOVE_PENDING_USER_LABEL","fetchUserPreferencesStart","FETCH_USER_PREFERENCES_START","fetchUserPreferencesSuccess","FETCH_USER_PREFERENCES_SUCCESS","fetchUserPreferencesFailure","FETCH_USER_PREFERENCES_FAILURE","updateUserPreferencesStart","UPDATE_USER_PREFERENCES_START","updateUserPreferencesSuccess","keys","UPDATE_USER_PREFERENCES_SUCCESS","updateUserPreferencesFailure","UPDATE_USER_PREFERENCES_FAILURE","useEncapsulatedDispatch","useWithLabelsContext","reducerName","scope","targetScope","DEFAULT_LABELS_SCOPE","WithLabelsScopes","includes","_scope","encapsulateAction","useFetchAllLabelsService","showMessage","searchLabels","sp","a","items","totalCount","pageNum","prevItems","unionWith","i1","i2","Math","min","length","numberOfPages","NOT_AUTHORIZED_ERROR_MESSAGE","useToggleCollapseLabel","toggleCollapseLabelAction","useToggleCollapseAllLabels","collapsedLabelsList","usePortableLabelsState","filter","item","ids","useResetCollapseAllLabels","useSaveLabels","useSelectLabels","selectLabelsAction","useSelectAllLabels","labelsList","selectedList","allLabels","useDeselectAllLabels","useResetSelectedLabels","useResetLabels","searchTree","leaf","i","recursiveParent","selected","labelsTree","parentId","parentLabel","siblingIds","every","has","add","some","recursiveMarkChildren","child","recursiveUnmarkChildren","useCalculatePreSelectedLabels","selectedItems","entity","assignedLabels","preAssignedLabelsSet","Set","preAssignedLabels","from","countLabels","selectedItemEntities","selectedEntity","forEach","labelIDs","hasOwnProperty","Number","listToTree","matchedLabel","useCalculatePreSelectedLabelsForSingleItem","useHandleSelectLabels","newSelectedLabels","selectedLabel","useCalculateDeletedLabels","calculateRemovedLabels","selectedLabelIds","initialSelectedIds","calculateAssignedLabels","clearSelectedItemIfNotLoaded","loadedList","useRenewLabelsStateOnUpdate","compare","b","sortLabels","nodes","node","filterLabels","term","reduce","getNodes","object","indexOf","push","LocationStateType","useLocations","history","useBaseHistory","location","useLocation","rootLocation","modalLocation","EXTERNAL_URL","MODAL","background","prevLocation","findRootLocation","useHistory","pushModal","replaceModal","showModalDialog","modalOptions","SHOW_MODAL","useHideModalDialog","HIDE_MODAL","useShowConfirmModalDialog","modalProps","modalType","CheckPermission","permissions","alternateContent","matchAll","useSelector","permissionList","r","searchLibraryPractisSetsStart","SEARCH_LIBRARY_PRACTIS_SETS_START","searchLibraryPractisSetsSuccess","SEARCH_LIBRARY_PRACTIS_SETS_SUCCESS","searchLibraryPractisSetsFailure","SEARCH_LIBRARY_PRACTIS_SETS_FAILURE","getFullLibraryPractisSetsStart","GET_FULL_LIBRARY_PRACTIS_SETS_START","getFullLibraryPractisSetsSuccess","GET_FULL_LIBRARY_PRACTIS_SETS_SUCCESS","getFullLibraryPractisSetsFailure","GET_FULL_LIBRARY_PRACTIS_SETS_FAILURE","updateLibraryPractisSetStart","UPDATE_LIBRARY_PRACTIS_SET_START","updateLibraryPractisSetSuccess","updatedPractisSet","UPDATE_LIBRARY_PRACTIS_SET_SUCCESS","updateLibraryPractisSetFailure","UPDATE_LIBRARY_PRACTIS_SET_FAILURE","updateAssignedLibraryPractisSet","assignedPractisSets","UPDATE_ASSIGNED_LIBRARY_PRACTIS_SET","updateSeparateAssignedLibraryPractisSet","UPDATE_SEPARATE_ASSIGNED_LIBRARY_PRACTIS_SET","setSearchTermForLibraryPractisSet","SET_SEARCH_TERM_FOR_LIBRARY_PRACTIS_SET","updateLibraryPractisSetCheckedState","UPDATE_SELECTED_PRACTIS_SET_STATE","UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE","searchLibraryScenariosStart","SEARCH_LIBRARY_SCENARIOS_START","searchLibraryScenariosSuccess","scenarios","SEARCH_LIBRARY_SCENARIOS_SUCCESS","searchLibraryScenariosFailure","SEARCH_LIBRARY_SCENARIOS_FAILURE","updateLibraryScenarioStart","UPDATE_LIBRARY_SCENARIO_START","updateLibraryScenarioSuccess","updatedScenario","UPDATE_LIBRARY_SCENARIO_SUCCESS","updateLibraryScenarioFailure","UPDATE_LIBRARY_SCENARIO_FAILURE","updateLibraryScenarioCheckedState","UPDATE_SELECTED_SCENARIO_STATE","updateAllScenarioCheckedState","selectedScenarioIds","UPDATE_ALL_SELECTED_SCENARIOS_STATE","searchLibraryChallengesStart","SEARCH_LIBRARY_CHALLENGES_START","searchLibraryChallengesSuccess","challenges","SEARCH_LIBRARY_CHALLENGES_SUCCESS","searchLibraryChallengesFailure","SEARCH_LIBRARY_CHALLENGES_FAILURE","updateLibraryChallengeStart","UPDATE_LIBRARY_CHALLENGES_START","updateLibraryChallengeSuccess","updatedChallenge","UPDATE_LIBRARY_CHALLENGES_SUCCESS","updateLibraryChallengeFailure","UPDATE_LIBRARY_CHALLENGES_FAILURE","updateLibraryChallengeCheckedState","UPDATE_SELECTED_CHALLENGE_STATE","updateAllChallengesCheckedState","selectedChallengeIds","UPDATE_ALL_SELECTED_CHALLENGES_STATE","hasPermission","permission","useLoggedInUserPermissionsHelper","loggedInUser","useLoggedInUserProfileState","useMemo","hasActionPermission","createLoggedInUserPermissionsHelper","UserRoleLevel","userRoleLevelMap","getRoleLevel","roleName","NONE","getUserRoleLevel","useLoggedInUserRolesHelper","loggedInUserRoleLevel","canViewRole","createUserRolesHelper","InvitationActions","useInvitationActionsHelper","canAssignInvitationLabel","ASSIGN_INVITATION_LABEL","canResendInvitation","RESEND_INVITATION","canRevokeInvitation","hasRevokeInvitationPermission","REVOKE_INVITATION","getBulkActions","invitations","base","getBulkActionsAvailability","getBulkActionAvailabilityItem","isBulkActionVisible","createInvitationActionsHelper","momentTZ","require","formatTime","date","withSeconds","Date","hours","getHours","minutes","getMinutes","seconds","getSeconds","ampm","secondsStr","leadZero","formatAMPM","formatMMDDYY","dayjs","toDate","day","getDate","month","getMonth","year","getFullYear","slice","substring","formatHour","intDate","formatDate","showToday","shouldShowTime","isToday","formatDateWithTimeZone","stringifiedDate","splittedDate","toDateString","format","getDateWithTZOffset","timezone","tz","guess","startOf","formatDateChart","today","getCopyrightYear","StyledLoadingComponent","LoadingIcon","LoadingText","StyledCircularProgress","CircularProgress","LoadingComponent","shouldDelay","useState","show","setShow","useEffect","timeoutId","clearTimeout","StyledLabelListItemContainer","ChildLabelsContainer","expanded","LabelItemActions","StyledCheckbox","Checkbox","LabelNameContainer","ArrowContainer","CollapseArrow","LabelListItemInputContainer","LabelListItemInput","Input","hasChildren","StyledLabelListItem","modified","searched","PortableLabelListItem","openActions","toggleCollapse","labelsCollapseState","setLabelFilters","disableLabels","isLabelSelected","isLabelPartiallySelected","isExpanded","inputRef","useRef","handleSelectLabels","e","stopPropagation","TriangleDown","TriangleRight","colorTheme","maxLength","readOnly","hint","menuOpen","handleChange","border","childLabel","PortableLabelListItemContainer","setOpen","toggleOpenActions","StyledLabelsList","ScrollableLabelContainer","PortableLabelsList","Container","StyledEmptyContent","NoTeamsTitle","EmptyLabels","NoLabels","SmallContainer","StyledEmptyContentSmall","NoLabelsTitle","StyledEmptyLabelsContent","NoResults","version","NoSearchResult","StyledCreateLabels","CreateLabelsBody","FiltersHeader","FiltersSavePanel","SelectActions","StyledPlainActionsWrapper","PlainAction","span","css","colorHover","colorActive","SelectedCaption","FilterTitle","p","SearchWrapper","PortableLabels","collapsedList","onSave","onClearSelected","onDeselectAll","onSelectAll","onToggleCollapse","onToggleCollapseAll","onSetSelected","filtersTitle","showSelectActions","showSearch","showSave","noResultType","actionConfig","clear","select","setSearchTerm","transformedLabels","setTransformedLabels","processedSelectedList","setProcessedSelectedList","processedIds","setProcessedIds","getPrecessedLabels","compose","processedDataIds","treeToArray","abs","isAllSelected","clearHandler","deSelectAllHandler","treeToList","showNoItems","showNoResultsState","showEmptyState","selectedLabelsLength","onChange","PortableLabelsWithStore","resetSelectedOnUnmount","rest","useLabelsState","collapsed","collapseLabelHandler","collapseAllLabels","resetCollapsedLAbels","saveHandler","deselectAll","resetSelected","useCreateLabelService","createLabelApi","updateLabelStart","then","updateLabelSuccess","catch","updateLabelFailure","useSearchLabelsService","searchLabelsApi","searchLabelsStart","searchLabelsSuccess","searchLabelsFailure","useUpdateLabelService","updateLabelApi","useDeleteLabelService","deleteLabelApi","useSaveUserFiltersService","saveUserSettingsApi","isAuthorized","saveLabelFiltersStart","getCurrentUserId","saveLabelFiltersSuccess","setLabelFilterAction","saveLabelFiltersFailure","Promise","reject","useSelectLabelFilterActionService","selectLabelFilterAction","useSetPreviouslyAssignedLabelsAction","setPreviouslyAssignedLabels","useToggleCollapseLabelFieldService","toggleCollapseLabelFieldAction","useToggleCollapseAssignLabelFieldService","toggleCollapseAssignLabelFieldAction","useExpandLabelFieldByIdService","expandLabelFieldByIdAction","useSetLabelFilterActionService","useClearLabelFilterActionService","clearLabelFilterAction","useSetAssignLabelsActionService","setAssignLabelsAction","useCollapseAllLabelsService","collapseAllLabelsAction","useExpandAllLabelsService","expandAllLabelsAction","useExpandMultipleLabelsService","labelIds","expandMultipleLabelsAction","useOpenLabelCreationPanelService","openLabelCreationPanelAction","useCloseLabelCreationPanelService","closeLabelCreationPanelAction","useSetLabelsSearchTermService","setLabelsSearchTerm","useSetEditingLabelActionService","configs","setEditingLabelAction","lastUpdated","portableLabels","Arrow","StyledPopover","Popover","verticaloffset","horizontaloffset","Wrapper","padding","PopupComponent","triggerRef","onDismiss","arrow","hideOnOutsideClick","anchorOrigin","transformOrigin","verticalOffset","horizontalOffset","anchorEl","current","onClose","vertical","horizontal","clientWidth","clientHeight","Popup","dismissKey","singleton","shown","_setShown","shownRef","setShown","hide","toggleShown","enabled","setEnabled","enable","disable","key","forCurrentUser","itemKey","console","warn","getValue","dismissedHashString","localStorage","getItem","JSON","parse","setItem","stringify","isDismissed","setDismiss","onDismissHandler","dismissedItemsHash","useDismiss","dismissed","setDismissed","dismissProps","dismiss","innerTriggerRef","LabelsStateSelectorContext","React","isEqual","LabelsConfigStateSelectorContext","useLabelsConfigState","UpdatedLabelsStateSelectorContext","useUpdatedLabelsState","Checked","stroke","strokeLinecap","transform","Dash","checkedBackground","checkedColor","borderColor","StyledWrapper","StyledLabel","weight","SelectedIconContainer","marginLeft","PartialIconContainer","HiddenCheckbox","input","fontColor","fontWeight","labelStyles","disabledCheckedBackground","checkboxMarginLeft","withoutBorder","Title","Fieldset","appState","labelsState","_labels","SET_PREVIOUSLY_ASSIGNED_LABELS","SET_LABEL_FILTERS","SET_ASSIGN_LABELS","clearAssignLabelsAction","CLEAR_ASSIGN_LABELS","SAVE_LABEL_FILTERS_START","SAVE_LABEL_FILTERS_FAILURE","TOGGLE_COLLAPSE_LABEL_FIELD","TOGGLE_COLLAPSE_ASSIGN_LABEL_FIELD","EXPAND_LABEL_FIELD_BY_ID","COLLAPSE_ALL_LABELS","collapseAllTableLabelsAction","COLLAPSE_ALL_TABLE_LABELS","EXPAND_ALL_LABELS","EXPAND_MULTIPLE_LABELS","modifyLabelNameAction","MODIFY_LABEL_NAME","SET_EDITING_LABEL","SET_LABELS_SEARCH_TERM","OPEN_LABEL_CREATION_PANEL","CLOSE_LABEL_CREATION_PANEL","SEARCH_LABELS_START","SEARCH_LABELS_SUCCESS","SEARCH_LABELS_FAILURE","UPDATE_LABEL_START","updatedLabel","UPDATE_LABEL_SUCCESS","UPDATE_LABEL_FAILURE","ifChanged","prevSearchParams","newSearchParams","equal","ALL_FILTER_NAME","ENROLLMENT_OPTIONS","COMPLETION_OPTIONS","useSearchParamsState","initialSearchParams","setSearchParams","setInitial","setFilter","f","setOverrideFilter","setMultipleFilter","prevMatchedFieldFilters","newMatchedFieldValues","newFilters","setFilterByStatus","filterByStatus","filterByStatusValue","setCompletion","completionStatus","completion","setOrderBy","prevOrderBy","setLabelIDs","setPractisSetIDs","practisSetIDs","setRoleIDs","roles","roleIDs","setTeamIDs","teams","setLimit","setOffset","setCustom","getFilterByValue","filterValue","getCompletionValue","refreshSearchParams","refreshRate","random","applyLocalSearch","fields","RegExp","escapeRegExp","trim","test","applyLocalFiltering","statusFilter","filterLength","labelFilterLength","filteredData","filterParam","roleId","applyLocalSorting","mapItems","sortableItems","sortKey","sortDirection","first","second","Boolean","useSearchParams","getCompanyState","company","getCompanyLoading","companyProfileReducer","COMPANY_INFO","COMPANY_INFO_SUCCESS","COMPANY_INFO_FAILURE","RESET_COMPANY_INFORMATION","initialCompanyVoiceSettingsState","companyVoiceSettingsReducer","LOAD_VOICE_SETTINGS_START","LOAD_VOICE_SETTINGS_SUCCESS","voiceSettings","LOAD_VOICE_SETTINGS_FAILURE","initialCompanyAdminsState","companyAdminsReducer","FETCH_COMPANY_ADMINS_START","FETCH_COMPANY_ADMINS_SUCCESS","FETCH_COMPANY_ADMINS_FAILURE","CLEAR_COMPANY_ADMINS","initialCompanyUserStatsState","companyUserStatsReducer","FETCH_COMPANY_USER_STATS_START","FETCH_COMPANY_USER_STATS_SUCCESS","FETCH_COMPANY_USER_STATS_FAILURE","Storage","storage","this","removeItem","Object","freeze","Divider","hr","TableDivider","useSearchDraftsService","searchStagingApi","useDeleteStagingService","deleteStagingApi","successCallback","useUpdateAllSelectedDraftStateService","useUpdateSelectedDraftStateService","useSearchCreatedByUsersService","searchCreatedByUsersListApi","createdByUsers","useSearchEditedByUsersService","searchEditedByUsersListApi","lastEditedBy","useSearchInvitationsService","searchUsersApi","shouldSetStore","UserStatus","PENDING","invitedBy","invitersIDs","companies","setSearchState","SEARCH_STATE","PENDING_USERS","childrenKeys","useResendInvitationService","resendInvitationApi","isRowResend","response","find","useCopyInviteTextService","invitationCode","inviteTextParams","firstName","inviter","lastName","companyName","registrationUrl","buildRegistrationUrl","inviteText","UserRoles","buildAdminInviteText","copy","copyTextToClipboard","useRevokeInvitationService","revokeInvitationApi","useUpdateAllSelectedInvitationsStateService","useUpdateSelectedInvitationStateService","useSearchUsersService","userStatuses","ACTIVE_USERS","useDeleteUserService","deleteUserApi","usePractisSetsEnrollmentsService","searchUserPractisSetsApi","transformEnrollmentsToPractisSets","useAssignTeamsToUsersService","assignTeamsApi","useNudgeTraineesService","nudgeTraineesApi","nudgeUserData","numberOfUsers","useGetUsersReportService","getUserReportApi","url","window","URL","createObjectURL","Blob","link","document","createElement","href","setAttribute","body","appendChild","click","useDeleteUserLabelService","isPending","deleteUserLabelsApi","payload","findAllChildIds","useUpdateAllSelectedUsersStateService","useUpdateSelectedUserStateService","useSearchUserPractisSetsService","getSearchUserPractisSetsParams","useFetchUserAllPractisSets","fetchUserPractisSets","useUnEnrollPractisSetService","unenrollEnrollmentApi","unEnrolledPractisSetIds","useUserPerformanceService","userPerformanceApi","useResetUserPerformanceService","useUpdateAllPractisSetsCheckedStateService","useUpdateTraineeProfilePractisSetsCheckedStateService","useAssignFiltersToUserService","assignTeamsToUserApi","enrollPractisSets","unEnrollPractisSets","assignLabelsApi","updateEnrollmentsDueDate","shouldAssignTeams","all","assignedTeamIDs","deletedTeamIDs","isEmpty","assignedPractisSetIDs","dueDate","DATE_FORMAT","deletedEnrollmentIds","assignedLabelsIDs","deletedLabelIDs","updatedEnrollments","datas","updateDraftUsersFailure","useRemindUsersService","remindUsersApi","ENROLLMENT_REMIND_TO_START","axios","Http","request","useTempToken","method","getConfig","API_BASE_URL","headers","generateHeaders","clearAuthData","errorCode","details","customHeaders","authorization","Authorization","additionalHeaders","Client","useFetchUser","getUser","USER_NOT_FOUND_ERROR_MESSAGE","updateUser","self","successMessage","putProtected","res","updateUserProfileSuccess","useGetUserFeaturesService","getUserFeaturesApi","useGetUserPreferencesService","getUserPreferencesApi","useUpdateUserPreferenceService","updateUserPreferencesApi","onSuccess","UsersStateSelectorContext","useUsersState","UpdateUsersStateStateSelectorContext","useUpdateUsersState","InvitationsStateSelectorContext","selectSelectedInvitations","selectItemsByIds","selectedInvitations","useInvitationsState","UpdateInvitationStateStateSelectorContext","useUpdateInvitationsState","DraftsStateSelectorContext","useDraftsState","UpdateDraftsStateStateSelectorContext","useUpdatedDraftsState","UserPerformanceStateSelectorContext","useUserPerformanceState","UpdatedUserPractisSetsStateSelectorContext","useUpdatedUserPractisSetsState","ASSIGN_LABELS_TO_PRACTIS_SET_ACTION","DELETE_LABELS_FROM_PRACTIS_SET_ACTION","GET_PRACTIS_SET_CONTENT_ACTION","ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION","UPDATE_PRACTIS_SET_STATUS_ACTION","CREATE_PRACTIS_SET_ACTION","UPDATE_PRACTIS_SET_ACTION","CREATE_SCENARIO_ACTION","UPDATE_SCENARIO_ACTION","ASSIGN_LABELS_TO_SCENARIO_ACTION","DELETE_LABELS_FROM_SCENARIO_ACTION","ASSIGN_LINES_TO_SCENARIO_ACTION","UPDATE_SCENARIO_STATUS_ACTION","DELETE_LINES_FROM_SCENARIO_ACTION","CREATE_CHALLENGE_ACTION","UPDATE_CHALLENGE_ACTION","ASSIGN_LABELS_TO_CHALLENGE_ACTION","DELETE_LABELS_FROM_CHALLENGE_ACTION","ASSIGN_LINES_TO_CHALLENGE_ACTION","UPDATE_CHALLENGE_STATUS_ACTION","initialGenerateChallengeData","description","sourceScenarioId","tryLimit","DEFAULT_CHALLENGE_TRY_LIMIT","PractisSetStatuses","EventNameList","REFRESH_TEAMS_LIST","REFRESH_TEAM_MEMBERS","REFRESH_TEAM_CONTROLLER","REFRESH_TRAINING_PAGE","REFRESH_PENDING_USERS_PAGE","CLEAR_PAGING","useHtmlPageTitle","dependencies","suffix","isAdminPortal","generateHtmlTitle","htmlTitle","reverse","dependency","BulkActionAvailability","getBulkActionAvailability","canPerformAction","availableFor","AVAILABLE_FOR_ALL","AVAILABLE_FOR_SOME","UNAVAILABLE_FOR_ALL","availability","actions","actionsMap","getBulkActionsMap","areItemsEmpty","areBulkActionsDisabled","isBulkActionDisabled","ACCURACY","parentKey","HourGlass","StyledAvatarContainer","imgBorderRadius","StyledNavLink","NavLink","CustomPlaceholderContainer","CustomNamePlaceholder","PendingWrapper","bottomPosition","AvatarPlaceholder","customProfile","CustomPlaceholder","customPlaceholder","CustomWrapper","customWrapper","iconWidth","iconHeight","hidePending","noHint","Loading","picture","charAt","toUpperCase","mediaUrl","logoUrl","logo","imageUrl","to","Tooltip","trigger","preset","StyledConfirmDialogBlacker","motion","rgba","StyledConfirmDialog","minHeight","StyledTitle","marginBottom","StyledDescription","StyledActions","center","ButtonWrapper","DialogWrapper","modalTitle","dialogType","confirmButtonText","cancelButtonText","onConfirm","onCancel","customization","onClickAway","isConfirmDisabled","container","querySelector","titleMarginBottom","descriptionMarginBottom","shouldCenterButton","createPortal","initial","scale","animate","LibraryItemsStatus","libraryItemsStatusNames","DRAFT","ARCHIVED","IN_PROGRESS","libraryItemsStatusName","LIBRARY_STATUS","LIBRARY_STATUS_NAMES","LIBRARY_STATUS_ITEMS","createSearchLibraryParams","PractisSetActions","usePractisSetActionsHelper","canAssignLabels","ASSIGN_PRACTIS_SET_LABEL","canDuplicate","COPY_PRACTIS_SET","canArchive","ARCHIVE_PRACTIS_SET","canRestore","RESTORE_PRACTIS_SET","canDelete","DELETE_PRACTIS_SET","canEdit","UPDATE_PRACTIS_SET","canAssignUsers","ASSIGN_ENROLLMENT","ASSIGN_LABELS","DUPLICATE","ARCHIVE","RESTORE","DELETE","createPractisSetActionsHelper","ScenarioActions","useScenarioActionsHelper","scenario","ScenarioStatuses","ASSIGN_SCENARIO_LABEL","COPY_SCENARIO","ARCHIVE_SCENARIO","RESTORE_SCENARIO","DELETE_SCENARIO","UPDATE_SCENARIO","canGenerateChallenge","GENERATE_CHALLENGE","canDownloadPdf","createScenarioActionsHelper","ChallengeActions","useChallengeActionsHelper","challenge","ChallengeStatuses","ASSIGN_CHALLENGE_LABEL","COPY_CHALLENGE","ARCHIVE_CHALLENGE","RESTORE_CHALLENGE","DELETE_CHALLENGE","UPDATE_CHALLENGE","createChallengeActionsHelper","PermissionsStateSelectorContext","usePermissionsState","EnrollmentStatus","EnrollmentStatusEnum","TrainingContentType","searchDraftUsersStart","SEARCH_DRAFT_USERS_START","searchDraftUsersSuccess","SEARCH_DRAFT_USERS_SUCCESS","searchDraftUsersFailure","SEARCH_DRAFT_USERS_FAILURE","modifyDraftUsersAction","MODIFY_DRAFT_USERS","modifyDraftUsersWithoutValidationAction","MODIFY_DRAFT_USERS_WITHOUT_VALIDATION","resetDraftsPageAction","RESET_DRAFTS_PAGE","updateDraftUsersStart","UPDATE_DRAFT_USERS_START","updateDraftUsersSuccess","UPDATE_DRAFT_USERS_SUCCESS","UPDATE_DRAFT_USERS_FAILURE","StyledLogoContainer","StyledLogo","PractisAdminPlatformLogo","PractisLogo","AuthLogoView","BackgroundWrapper","BackgroundImage","img","PageContainer","LogoContainer","desktopMinWidth","heightToShowScroll","PageContent","contentWidth","Footer","FooterLink","FooterLinkSeparator","LoginAuthWrapperView","hideLogo","hideFooter","isMobile","useWindowDimensions","authBackground","srcSet","authBackground2x","authBackground3x","AuthLogo","target","useSearchDebounced","searchEntity","minChars","isRefreshed","searchTermLength","defaultField","isAscByDefault","useSearchPractisSetsService","searchPractisSetsApi","searchPractisSetsParams","useGetFullPractisSetsService","useUpdateAssignedLibraryPractisSetService","useSetSearchTermForLibraryPractisSetService","useDeletePractisSetsService","deletePractisSetsApi","plural","useArchivePractisSetService","updatePractisSetStatusApi","useRestorePractisSetService","useSearchScenariosService","searchScenariosApi","searchScenariosParams","useDeleteScenariosService","deleteScenariosApi","useArchiveScenarioService","updateScenarioStatusApi","useRestoreScenarioService","useSearchChallengesService","searchChallengesApi","searchChallengesParams","useDeleteChallengesService","deleteChallengesApi","useArchiveChallengeService","updateChallengeStatusApi","useRestoreChallengeService","useGenerateChallengeSuccessCallback","responses","createChallengeResponse","useUpdateAllScenarioCheckedStateService","useUpdateLibraryScenarioCheckedStateService","useUpdateAllChallengeCheckedStateService","useUpdateLibraryChallengeCheckedStateService","useUpdateLibraryPractisSetsCheckedStateService","useDownloadScenarioReportService","downloadScenarioReportApi","fileDownload","useDeleteLibraryLabelTag","deleteLabelsFromPractisSet","deleteLabelsFromScenario","deleteLabelsFromChallenge","getEntityItemLabels","entityData","deleteLabelFromLibraryActionList","entityName","entityItem","entityRemovedLabels","currentLabel","deleteLabelFromLibraryAction","useWithPractisSetsContext","DEFAULT_PRACTIS_SETS_SCOPE","WithPractisSetsScopes","useFetchAllPractisSetsService","searchPractisSets","count","useClearPractisSets","useSavePractisSets","useSelectMultiplePractisSets","selectMultiplePractisSetsAction","useSelectAllPractisSets","allPractisSets","useDeselectAllPractisSets","useResetSelectedPractisSets","useResetPractisSets","onTriggerEvent","eventName","event","CustomEvent","createEvent","initCustomEvent","dispatchEvent","onListenEvent","handler","addEventListener","attachEvent","onRemoveEvent","removeEventListener","detachEvent","StyledActionBox","OutsideActionBox","toggleOpen","styles","handleClickOutside","contains","element","offsetTop","scrollY","innerHeight","checkIfInView","scrollIntoView","setAuthToken","userInfo","isPractisAdmin","isUser","set","redirectAfterLogin","urlBuilder","redirectTo","buildAdminUrl","absolute","t","isSharedLink","pathname","remove","validEmailTLDs","validEmailRegex","validateEmail","domain","endsWith","isValidDomain","split","INVALID_EMAIL_ERROR","RULES","fullName","Yup","max","companyNameRequired","required","accountOwnerName","username","loginPassword","confirmPassword","oneOf","currentPassword","authEmail","timezoneId","organization","iconFile","instructions","list","localList","roots","parentsCount","countParents","LibraryPractisSetsStateSelectorContext","useLibraryPractisSetState","selectSelectedPractisSets","selectedPractisSets","UpdatedLibraryPractisSetsSelectorContext","createSelectorContext","useUpdatedLibraryPractisSetsState","LibraryScenariosStateSelectorContext","useLibraryScenariosState","selectSelectedScenarios","selectedScenarios","UpdatedLibraryScenariosSelectorContext","useUpdatedLibraryScenariosState","LibraryChallengesStateSelectorContext","useLibraryChallengesState","selectSelectedChallenges","selectedChallenges","UpdatedLibraryChallengesStateSelectorContext","useUpdatedLibraryChallengesState","DownArrow","UpArrow","UserFields","InviteRoleItems","INVITE_USER","filterInvitationRolesByPermissions","rolesList","invitationRoles","getUserRoleNameById","getUserRoleIdByName","InvitationEmailErrors","UserFieldNames","handleToggleSelectedItems","array","arrayItems","handleToggleSelectedItemsForPractisSets","currentSelectedPractisSets","practisSetIdToToggle","filteredPractisSetsToReturn","StyledSelectForm","LabelsContainer","displayOver","left","topMargin","Actions","CancelButtonWrapper","StyledContent","marginTop","StyledButtonContainer","Bold","NudgeUserStyledDescription","NudgeWarningStyledDescription","StyledFormArea","StyledInput","StyledInputContainer","TableAssignOptionsStyledSelectForm","IconHolder","fetchCompanyInfo","fetchCompanyInfoSuccess","fetchCompanyInfoFailure","loadVoiceSettingsStart","loadVoiceSettingsSuccess","loadVoiceSettingsFailure","fetchCompanyAdminsStart","fetchCompanyAdminsSuccess","fetchCompanyAdminsFailure","clearCompanyAdmins","fetchCompanyUserStatsStart","fetchCompanyUserStatsSuccess","fetchCompanyUserStatsFailure","Pencil","clipRule","StyledPractisSetsList","TopSideList","GeneralList","PractisSetsItemWrapper","PractisSetsItem","PencilWrapper","DueDateContainer","StyledEmpty","PortablePractisSetsList","setPractisSetFilters","hideDueDates","isDueDateCalendarVisible","setIsDueDateCalendarVisible","dueDateData","setDueDateData","dueDates","setDueDates","practisSetWithDueDatesArrayToDueDatesKeyValues","getUserDueDate","openDueDatePopup","updateDueDate","changedDueDates","prevState","isChecked","selectedPractisSet","setId","isPartiallyChecked","changeHandler","topListPractisSets","ps","bottomListPractisSets","EmptyCellDash","DueDateCalendar","isSubTitleVisible","onApply","StyledEmptyLabels","NoLabelsIcon","NoPractisSetsTitle","EmptyPractisSets","EmptyBox","StyledCreatePractisSets","CreatePractisSetsBody","DueDatesSelectedCaption","PortablePractisSets","selectAllWrapperClassName","processedPractisSets","filterPractisSets","toggleAllHandler","selectedPractisSetsLength","PortablePractisSetsWithStore","usePractisSetsState","usePortablePractisSetsState","team","convertObjectToArrayOfValues","entries","calculatePercentage","totalItems","currentIndex","toFixed","handleCreateChunks","options","fieldName","itemPerChunk","totalSelectedItems","lodashGet","chunk","offsetListArray","setPercentage","percentage","SET_PERCENTAGE","useChunkRequestsService","actionList","onError","shouldStopOnError","isStopped","setIsStopped","isStoppedRef","hasErrorRef","responsesRef","isIterationFinished","handleStartAction","handleExecuteActions","handleStopAction","resolve","handleCallAsyncChunks","chunkedActionList","isFromChildAction","chunkedActionListLength","actionName","actionFunction","actionFunctionOptions","childActionList","actionFunctionParameters","apply","childChunkedActionList","handleCreateChunkedActionList","childActionFunctionOptions","childActionParameters","parameters","childActionFieldName","childActionSecondaryFieldName","secondaryFieldName","childActionFieldNameValue","currentAction","ITEM_PER_CHUNK_SIZE","clonedActionFunctionOptions","cloneDeep","chunkedArrayOfSelectedItems","newChunkedAction","chunkedItem","lodashUpdate","flatten","Root","InputWrapper","SearchIcon","Search","TableSearchInput","placeholder","initialValue","debounceDelay","dataTestOrDefault","setValue","onChangeDebounced","debounce","SEARCH_INPUT_DEBOUNCE_DELAY","persist","clearInput","getWindowDimensions","innerWidth","windowDimensions","setWindowDimensions","handleResize","StyledFormikField","StyledErrorContainer","HintContainer","FormikField","errorContent","form","labelProps","autoComplete","labelLeftPosition","inputPadding","fontFamily","errorPadding","errorColor","hasManualError","hideError","autoFocus","customError","getIn","errors","touch","touched","focus","ProgressActions","useProgressActionsHelper","canNudgeUser","SEND_NUDGE","canChangeDueDate","SET_DUE_DATE","canRemindToStart","canExportReport","EXPORT_LIST_PRACTIS_SET_USER","canUnassignUser","UNASSIGN_ENROLLMENT","canViewPractisSetReport","VIEW_ENROLLMENT","canViewProfile","VIEW_PROFILE","trainees","NUDGE_USER","REMIND_TO_START","EXPORT_REPORT","UNASSIGN_USER","SET_DUEDATE","createProgressActionsHelper","ENROLLED","createSearchTeamMembersParams","overdueFilter","userStatus","filterByRegistrationStatus","enrollmentStatus","isOverdue","createSearchPractisSetDetailsParams","statusValues","userStatusFilters","filterByDueDate","dueDateFiltersValues","createSearchTeamsParams","leaders","teamLeadIds","StyledNoResults","StyledNoResultsContent","NoResultsTitle","NoResultsIcon","EmptyState","iconStyle","NoSearchResults","NoFiltersIcon","NoFilterResultsView","NoFilterResults","noFilterText","EmptyCalendar","clip-path","fill-rule","clip-rule","NoCalendarResultsView","NoCalendarResults","noResultsText","Td","td","clickable","TableCell","colSpan","shouldShowEmptyCell","data-test-custom-name","Th","th","isMultiple","Content","Text","MultiViewText","EmptyIcon","KeyboardArrowUp","IconContainer","QuestionIconWrapper","TitleContainer","titleWidth","TableHeaderCellMultiView","withTooltip","tooltipText","isHtmlTooltip","cursor","QuestionTooltip","isHtmlContent","TableHeaderCellSingleView","renderArrow","TableHeaderCellController","ListNameWrapper","minWidth","ListItemName","StyledAdditionalInfo","StyledIsNew","TableTitleOverflowText","isCurrent","isNew","renderIcon","appendIfEmpty","EmptyCellSpan","EMPTY_CELL","SET_SEARCH_STATE","deleteSearchState","DELETE_SEARCH_STATE","setSecondarySearchState","SET_SECONDARY_SEARCH_STATE","deleteSecondarySearchState","DELETE_SECONDARY_SEARCH_STATE","DueDateFilters","PHONE_ALREADY_EXISTS","PRACTIS_SET_ALREADY_EXISTED_ERROR_MESSAGE","ArrowRight","strokeLinejoin","itemIds","fetchUserProfile","fetchUserProfileSuccess","fetchUserProfileFailure","updateUserProfile","updateUserProfileFailure","resetProfileInfo","practisWebMode","storageKeys","PRACTIS_WEB","String","getOS","platform","navigator","Mac","Win","Linux","isProductionEnvironment","process","Close","solid","thin","buildConfig","assign","COMMIT_ID","BUILD_ID","_config","registerConfig","config","draftEdit","performance","teamEdit","teamMembers","practisSetsTraining","filteredItems","useCalculatePreSelectedPractisSets","countSelectedItems","outputArray","filteredEntities","useFindPractisSetDueDate","selectedItemsPractisSets","selectedItemsArray","lodash","filteredSelectedItemsArray","firstPractisSet","isAllPractisSetHaveEqualDueDates","useCalculateDeletedPractisSets","initialPractisSets","deletedPractisSets","useCalculateDeletedEnrollments","enrollmentsData","xor","pset","calculateCreatedUpdatedEnrollmentIds","addedPractisSets","existingItem","practisSetsWithDueDates","Tr","tr","TableRow","innerRef","getBrowserName","agent","userAgent","opr","chrome","isFirefox","isChrome","isOpera","isEdge","isSafari","getDeviceInfo","browserInfo","Firefox","Opera","IE","Edge","Chrome","Safari","browserName","regex","browserVersion","match","getBrowserInfo","phoneModel","phoneModelNumber","getNetworkConnectionType","connection","mozConnection","webkitConnection","effectiveType","NudgeUser","onSend","fromUser","practisSetName","mobile","messageData","setMessageData","handleMessageDataChange","labelFontWeight","minRows","placeholderFontWeight","textAreaMinHeight","counterColor","_practisSets","isObject","scrollable","ScrollPagination","itemsPerPage","itemCount","scrollableRef","scrollableWindow","onLimitChange","onOffsetChange","onLocalLimitChange","hideLoading","context","ScrollPaginationContext","rootRef","parentRef","getScrollParent","handleLoadMore","pageStart","loadMore","hasMore","loader","useWindow","threshold","DEV_ENV_URLS","babylon","rome","develop","statusesMap","useTestInvitationService","testInvitationApi","failureCallback","updateValues","useUserLogout","userLogoutAction","useAuthType","authTypeApi","useLogin","loginApi","useLoginByPhoneCode","loginByPhoneCodeApi","useResetProfileService","QuestionMark","cx","cy","fillOpacity","TooltipHeaderWrapper","FlexWrapper","position","Tag","TagDisabled","LabelTagsContainer","StyledLabelTag","isLabelLess","LabelIconWrapper","LabelText","TableLabelTags","assignedLabelNames","setAssignedLabelNames","names","TreeDfsNameMapper","getNames","LocalStorageContext","useLocalStorage","getPageUrl","route","acc","param","replaceUrlQueryParam","paramName","paramValue","nUrl","origin","getDevApiUrl","apiPlatform","accuracyTestRegex","challengeRegex","pluralText","withZero","marginRight","TableToolItem","SIZES","MIN_WIDTH","TableViewMode","useGetProfileService","getUserApi","getUserPermissionsApi","getUserSettingsApi","requests","userProfile","useUpdateProfileService","updateUserInfo","updateUserPhoneNumber","redirectToPhoneVerification","useRedirectToPhoneVerification","shouldShowMessage","updateUserInfoActionList","verificationStep","MobileNumberVerificationStep","VERIFY","useUploadPhotoService","uploadMedia","useUploadMediaService","setUserPhotoApi","file","defaultFileName","fileName","contentType","cd","exec","blob","msSaveOrOpenBlob","elem","download","removeChild","exc","handleDownloadVideoFile","responseType","revokeObjectURL","TableContainer","TableExtendContainer","Label","SelectLabel","MenuItem","destructive","SelectMenuItem","hideAction","forwardedRef","multiSelect","menuPosition","ContentArea","SelectMenu","exit","StyledSelect","StyledSelectValue","SelectInput","toggleSelect","SelectDropdown","labelColor","restrictShowAllName","openMenuWidth","selectedRef","selectedName","findNameByValue","UPDATE_LOADING_STATUS","tree","rootId","answer","existsInArray","existing","buildFlatArrayParents","combined","wholeArray","parent","flatArray","FilteredByWrapper","ScrollIconContainer","ArrowLeft","ScrollWrapper","StyledFilteredByContainer","StyledFilteredByItem","IconHolderForClose","TableHeaderFilterView","onLabelRemove","showLeftArrow","showRightArrow","wrapperRef","handleScroll","filteredByNames","scrollLeft","onScroll","TableHeaderFilterController","onRemoveLabel","saveUserFilters","savingLabels","setSavingLabels","setFilteredByNames","setShowLeftArrow","setShowRightArrow","setShowNavArrows","isLeftArrowVisible","isRightArrowVisible","scrollWidth","SAVE_SEARCH_FILTER","Trash","strokeWidth","getUserFeatures","cancelIfCanSkip","phoneSkip","allow","encapsulateTerm","EmptyStateContainer","StledTextareaContainer","StyledTextarea","Textarea","StyledCounter","counterPosition","TextAreaPlaceholderBox","onFocus","onBlur","maxRows","counterWarningText","flex","lineHeight","letterSpacing","portablePractisSets","top","ButtonIcon","LabelButton","windowBlue","ButtonText","StyledSpan","TableRefreshButton","onPress","TableRefreshIcon","TableRefresh","lastRefreshed","refreshData","buttons","scaleX","Header","Subtitle","RemoveDateTitle","StyledCalendar","Calendar","StyledDialogBlacker","StyledDialog","CancelButton","actionsDisabled","setActionsDisabled","currentDueDate","setCurrentDueDate","currentType","setCurrentType","activeStartDate","setActiveStartDate","isRemoveDateTitleDisabled","isPrevArrowDisabled","currentTarget","dueDateTitleTypes","userTimezoneOffset","getTimezoneOffset","getTime","getExactDate","calendarType","locale","formatShortWeekday","_","getDay","prev2Label","next2Label","nextLabel","prevLabel","showNeighboringMonth","onActiveStartDateChange","minDate","TrashBin","SelectedWrapper","SelectAllWrapper","ClearWrapper","SelectAll","selectedLength","onClearSelecion","isSelectAll","hasAllMembers","USER_LOGOUT","SET_TOKEN","setTokenAction","textArea","successful","outline","boxShadow","execCommand","err","isMac","prompt","CheckboxContainer","TableCheckbox","handleCheck","ADD_MESSAGE","REMOVE_MESSAGE","MULTIPLE","NO_DUEDATE","treeData","visited","visitedSubTreeVertexes","mp","currentAnswer","subTreeChecker","itemId","findIndex","childId","checkSubTreeSelection","treeChildren","pathId","toReverseAnswer","el","localAnswer","j","dfs","curObj","curObjParId","ans","AssignedLabelList","onDeleteLabel","hideDeleteButton","deletePermissions","kebabCase","TextareaAutosize","defaultValue","onMouseUp","onKeyDown","margin","useStyles","makeStyles","portablePractisSetContainer","selectAllWrapper","paddingRight","HeaderTitle","ButtonContainer","PractisSetsContainer","AssignPractisSetsView","isOpen","isSaving","isApplyButtonDisabled","handleApplyPractisSets","classes","Provider","AssignPractisSetsMultipleUsersView","ClickAwayListener","ENROLL_UNENROLL_ACTION","UPDATE_ENROLLMENT_ACTION","useFetchUserEnrollmentsService","getEnrollments","getEnrollmentSearchParams","usersEnrollmentsData","userEnrollmentResult","isAlreadyExist","isDueDateUpdated","useHandleEnrollmentService","userEnrollments","useHandleUpdateEnrollmentService","useEnrollUnenrollAllUsersBulkActionService","enrollUnenrollParams","totalUsersCount","onSuccessCallback","onErrorCallback","hideModalDialog","totalCompletedEnrollments","isRunning","setIsRunning","searchUsersWithTeamApi","handleFetchUserEnrollmentsService","handleEnrollmentService","handleUpdateEnrollmentService","handleSearchUserWithTeamService","handleSearchRegisteredUsersService","registeredUsers","totalUsers","searchUsersActionFunction","searchUsersActionParameters","searchRegisteredUsersParams","useGenerateAllUsersEnrollmentActionList","generateEnrollmentActionList","clearTotalCompletedEnrollments","handleSuccessServiceCallback","handleFailedBulkActionServiceCallback","handleStopEnrollUnenrollsBulkActionService","handleStartEnrollUnenrollBulkActionService","onStopBulkActionService","useEnrollUnrollMultipleUsersBulkActionService","selectedUserIds","useGenerateMultipleUsersEnrollmentActionList","generateMultipleUsersActionList","AssignPractisSetsController","isFromBulkAction","searchQuery","successApplyPractisSetsCallback","performanceState","selectedPractisSetsState","setPractisSets","getDeletedEnrollmentIds","setInitialPractisSets","setIsSaving","setIsApplyButtonDisabled","isMultipleUsersSelected","handleEnrollUnenrollAllUsersBulkActionService","handleEnrollUnenrollMultipleUsersBulkActionService","enrollUnEnrollPromiseChainArray","practisSetWithDueDate","practisSetsToSet","en","ext","country","AC","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TA","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","ZZ","DropDownComponent","ScrollableArea","StyledDropDownList","ListItem","ListCountryFlag","Flag","ListCountryNameContainer","ListCountryName","ListCountryCode","CountrySelectorWrapper","FlagContainer","CountryCode","ArrowsContainer","ArrowIcon","StyledDownArrow","StyledUpArrow","countries","getCountries","unshift","CountrySelector","selectedCountry","setSelectedCountry","getCountryCallingCode","useTopPadding","TrashIconContainer","InputPhone","disabledLabelColor","onDeleteNumber","showDeleteNumberBtn","handleCountryChange","countryCallingCodeEditable","defaultCountry","initialValueFormat","countrySelectComponent","TBody","tbody","TableBody","LABELS_CONFIGS","useGenerateLabelsConfiguration","sidePanel","savedLabelsState","LABELS_STATE","SIDE_PANEL","EXPANDED_LABELS","useGetSavedLabelPanelState","useGetSavedLabelExpandedState","DATE_TIME_FORMAT","TooltipLabel","TooltipContent","portalElement","propStyle","presetsConfig","dropdown","contentRef","getPortalElement","usePopup","cloneElement","WithLabelsContext","WithPractisSetsContext","Themes","lightTwo","filled","decreaseLabelFontSize","ShowPassword","ClearInput","PasswordEye","shouldShowPassword","HideIcon","ShowIcon","EmailPencilWrapper","onKeyPress","labelTopPosition","containerWidth","clearTopPosition","labelFontSize","containerStyle","showPassword","setShowPassword","clearShown","selectedColorTheme","inputType","htmlFor","PencilIcon","messageReducer","ContentContainerId","triggerElement","portal","contentContainer","getElementById","closest","StyledUserArea","UserProfilePictureSection","MinimizedUserProfileArea","Star","CustomCalendar","selectRange","restrictPast","restrictFuture","_value","outArray","start","end","getLibraryValue","transformLibraryToComponentValue","maxDate","allowPartialRange","StyledCalendarContainer","StyledCalendarSection","StyledActionsSection","Control","hasValue","DashSeparator","StyledValue","CalendarPopup","renderActions","beforeApply","bodyDOM","clearOnApply","setClearOnApply","tempValue","setTempValue","interactive","skipRestriction","getApiProps","applyContent","clearContent","resetComponentValue","clearState","defaultApplyContent","defaultClearContent","hasNoValue","startCaption","endCaption","renderControl","createMediaApi","verifyMediaApi","media","Axios","verificationResult","positionsConfig","overflowVertical","overflowHorizontal","defaultOffset","containerElement","targetConfig","autoBind","containerElementPositionChange","getBoundingClientRect","bounds","containerRects","triggerRects","right","bottom","currentTriggerRef","setPosition","savedHandler","clickHandler","useOutsideClick","useLayoutEffect","contentRects","getPositionStyles","zIndex","pointerEvents","getAdditionalStyles","TableAssignOptionTypes","ScrollContainer","addOverflow","TableInner","table","TableCont","InfiniteTableBodyContainer","StyledTable","TableCheckboxHeaderCell","StyledCellWrapper","TableHeader","headerConfiguration","masterCheckBoxConfig","columns","column","subColumns","multiHeaderContainerClassName","subColumn","TableCheckboxCell","DefaultTeamIconHolderWrapper","DefaultTeamIconHolder","StyledFirstTableContent","Avatar","AvatarTile","hasMargin","AvatarField","row","renderTitle","getAvatarProps","MinimizedAvatarField","AvatarFieldController","isMinimized","STATUS_COLORS","TableStatusCell","BadgeField","getBadgeFieldProps","fieldTypes","LabelTags","getLabelTagsProps","ListActionsField","getListActionsComponent","OverFlowTextField","getTextFieldProps","TextField","TextFieldController","isOverFlowText","DynamicTableField","fieldType","fieldProps","currentRowData","getCustomFieldComponent","component","TableAssignedLabelTags","TableBodyWrapper","rowConfig","cells","onRowClick","isRowChecked","onRowCheckHandler","isLabelTagsOpen","getClassName","getDataTest","shouldShowAllMembers","dataTestValue","cell","cellClassName","TableEmptyTd","EmptyStateTableWrapper","EmptyStateWrapper","tableStates","noEntriesOptions","noSearchResultsOptions","noFilterResultsOptions","noCalendarResultsOptions","showNoEntriesState","showNoSearchResultsState","showNoFilterResultsState","showNoCalendarResultsState","TableSimpleView","tableContainerClassName","tableInnerClassName","tableEmptyStateConfigurations","configuration","shouldShowEmptyState","TableInfiniteScrollView","scrollPaginationProps","scrollRef","TableController","viewMode","SIMPLE","PagerCount","qs","Paging","onPageChange","searchOrFiltersApplied","noUrlChange","pageFromUrl","page","pageNumber","setPageNumber","initialized","setInitialized","maxValue","ceil","pathString","handlePageChange","direction","TableToolsLeft","TableToolsRight","ItemCount","AssignLabelOptions","onAssignLabelsSubmit","containerLeftPosition","setShowOptions","applyDisabled","setApplyDisabled","onCloseHandler","onApplyHandler","collapseAssignLabels","TableAssignOptionsSelectDropdown","showUpArrow","disabledLabel","hideHint","render","SelectContainer","ScrollablePractisSetsContainer","PractisSetItemWrapper","PractisSetItem","SearchInputContainer","SearchInput","ScrollBar","ScrollBarTop","ScrollBarBottom","ScrollBarIcon","AssignPractisSetOptions","setAssignPractisSetsAction","setSearchTermForLibraryPractisSetService","onAssignPractisSetsSubmit","previouslyCheckedPractisSets","allowWithoutPreviousData","showScrollUp","setShowScrollUp","showScrollDown","setShowScrollDown","handleScrollUp","handleScrollDown","condition","scrollTop","scrollHeight","offsetHeight","onAssignPractisSets","updatedAssignedPractisSets","handleAssignPractisSets","isPreviouslyChecked","AssignPractisSetOptionsContainer","titlePadding","iconRightPosition","textAlignedLeft","searchPractisSetsDebounced","fullList","NudgeWarning","onProceed","BulkActionConfirmation","itemsCount","AssignPractisSetsAndDueDateOptions","isAssignPractisSetPopupOpen","setIsAssignPractisSetPopupOpen","getUserPractisSets","getUserPractisSetsSuccessCallback","OptionContainer","TableAssignOptionsMenu","updatedLabels","onNudgeSendButtonClicked","assignLabelsTitle","nudgeFromUser","onOpenAssignLabelAction","disabledPractisSets","onExportClicked","exportButtonDisabled","showNudgeWarning","nudgeButtonDisabled","onArchiveSubmissionsSubmit","onResendInvitesSubmit","onRevokeSubmit","onRestoreSubmissionsSubmit","onDuplicateSubmit","assignLabelsPermissions","sendNudgePermissions","showExportPermissions","assignPractisSetsAndDueDatePermissions","assignPractisSetPermissions","archivePermissions","onUpdateDueDatesSubmit","isDueDatesDisabled","dueDatesPermissions","resendInvitesPermissions","revokePermissions","removePractisSetPermission","onRemovePractisSetSubmit","onRemindSubmit","showRemindPermission","nudgeTitle","remindDisabled","removeItemsDisabled","restorePermissions","removeItemTitle","duplicateItemTitle","duplicateItemPermissions","removeItemPermissions","onRemoveItemsSubmit","removeItemTooltip","isAssignLabelsDisabled","isArchiveDisabled","isRestoreDisabled","isRevokeDisabled","isResendDisabled","isDuplicateDisabled","showNudgeDialog","setShowNudgeDialog","showNudgeWarningDialog","setShowNudgeWarningDialog","showOptions","showOptionType","setShowOptionType","nudgeCloseButtonClicked","onNudgeSendClicked","TableAssignOptionMenu","DUE_DATES","ASSIGN_PRACTIS_SETS_AND_DUE_DATE","ASSIGN_PRACTIS_SETS","NUDGE","REMIND","EXPORT","RESEND_INVITES","REVOKE","REMOVE_PRACTIS_SET","REMOVE_ITEMS","performSwitch","setPayload","setAction","TableAssignOptionsMenuContainer","renderAdditionalAction","assignLabelsMinWidth","hideSelectAll","assignedLabelsCount","assignLabelButtonTitle","practisState","labelsConfigState","TableTools","isSelectedItemOptionsVisible","selectedItemOptions","searchInputOptions","filterOptions","calendarFilterOptions","pagingOptions","itemCountDataTest","rootClassName","wrapperClassName","tableToolsLeftClassName","tableToolsRightClassName","onSearchChange","isSearchInputDisabled","filterComponent","calendarPopUpProps","onClearSelection","bulkActionsConfig","TableWrapperView","tableWrapperClassName","tableToolsOptions","cornered","shouldHideTableDivider","tableRefreshConfigurations","headerFilterPosition","configurations","ErrorMessages","imageUploaderStyles","checkboxContainer","alignItems","gap","userSelect","checkBoxAnchorTag","textDecoration","UserInfoContainer","UserTitle","UserEmail","FormContainer","FieldsContainer","StyledField","Field","RegisterSchema","shape","Validation","isSubmitButtonDisabled","formValues","RegistrationView","formRef","setProfileImage","handleSubmit","isTermsAccepted","handleToggleTerms","LoginAuthWrapper","ImageUploader","placeHolder","initialValues","enableReinitialize","onSubmit","validationSchema","isSubmitting","rel","RegistrationController","setUserInfo","profileImage","setIsTermsAccepted","handleTestInvitation","handleResetProfile","handleFileUpload","register","authType","handleSubmitError","NO_REGISTER_PERMISSION","INVITATION_NOT_FOUND","WRONG_EMAIL_FORMAT","handleUploadProfilePicture","formikActions","setSubmitting","registerValues","isNewUser","prev","handleRedirectToInvalidInvitationPage","invitationToken","Camera","StyledImageContainer","encodeURI","rectStyled","BadgeContainer","TrashContainer","LoadingContainer","ImageUploaderView","initialImage","fileInputRef","editedImage","handleImageChange","handleInputClick","isInProgress","onFileDelete","imageSrc","display","accept","uuid","getEditedImageFileInfo","imageEditorRef","dataUrl","getImage","toDataURL","fetch","File","ImageUploaderController","maxImageSize","checkImage","files","useCheckImage","isImageEditorVisible","setIsImageEditorVisible","selectedImage","setSelectedImage","setEditedImage","handleApplyImage","editedImageFileInfo","handleCloseImageEditor","ImageEditor","editorRef","handleApplyEditedImage","RegisterView","RegisterController","setFieldError","errorMessage","failureTestInvitationCallback","Person","PractisSet","TeamLeaders","stroke-width","stroke-miterlimit","SubheaderView","practisSetsCount","usersCount","teamLeadersCount","Skeleton","TeamLeader","CustomSlider","withStyles","root","rail","track","thumb","Slider","SliderContainer","SliderLabelContainer","ImageEditorView","onScaleChange","image","aria-label","step","marks","ImageEditorController","setScale","BackArrow","Description","FieldContainer","ForgotPasswordSchema","EnterEmailAddressView","isSending","onClearError","onBack","BackArrowImage","setFieldValue","EnterEmailAddressController","forgotPassword","setIsSending","setErrorMessage","handleSend","getErrorByCode","handleBack","FurtherInstructionsView","CheckEmailImage","FurtherInstructionsController","ForgotPasswordController","URLSearchParams","FurtherInstructions","EnterEmailAddress","UrlBuilderContext","useUrlBuilder","StyledActionsDivs","flexDirection","justifyContent","StyledActionsLinks","StyledLinkText","LinkText","StyledInputDivs","StyledLoginContent","LoginSchema","Login","setDisabled","Consumer","performLogin","LogoutPage","loginUrl","onUserLogout","LogoutPageContainer","userLogout","StyledForm","FormControl","ApiPlatformDropdownView","onPlatformChange","ApiPlatformDropdownController","ApiPlatformDropdown","reload","ForgotPasswordLink","StyledSeparatorWrapper","StyledSeparator","StyledSeparatorText","InternalLoginSchema","InternalLogin","login","forgotPasswordAction","mobileNumberLoginAction","phoneNumberVerified","ResetPasswordSchema","GeneralError","FooterText","ResetPasswordView","ResetPasswordController","queryParams","resetPasswordApi","setIsSubmitting","StyledCard","Item","strong","Value","tryParseBuildId","buildId","APP_VERSION","RedirectToUrl","PrivateRoute","Component","customPath","propsData","PhotoLoadingContainer","AddUser","StyledUploadContainer","StyledUploadImage","StyledImage","UploadPhoto","upload","currentImage","PlaceholderIcon","showCustomDescription","ProfilePageContainer","StyledContentHeader","UserInfoForm","StyledUploadPhoto","StyledDeleteButton","UploadPictureLink","StyledUploadLink","NoticeWrapper","Notice","Separator","ProfileInfo","editable","uploadUserPicture","deleteUser","isPhotoUploading","isSSOAuth","isSSOEnabled","handleUpload","showConfirmationModalDialog","handelDelete","sendValues","profilePhoneNumber","valuesUpdated","valuesMissing","ProfileInfoContainer","InputItem","validationSchemaDefault","validationSchemaWithCurrentPassword","Security","updateUserPassword","selfProfile","isSelf","showCurrentPasswordError","setShowCurrentPasswordError","currentPasswordError","validate","decapsulateAction","saved","withLabelsInitialState","baseInitialState","scopes","withLabelsReducer","baseReducer","nativeAction","newState","newCollapseLabels","collapsedLabelIDs","newSelectedList","DEFAULT_TEAMS_SCOPE","WithTeamsScopes","withTeamsInitialState","_teams","withTeamsReducer","updatedSelectedState","allTeams","withPractisSetsInitialState","withPractisSetsReducer","selectedUsers","loadingCreatedBy","loadingEditedBy","allUsersReducer","selectedUserIndex","splice","getAllUsersLoading","initialUpdateUserState","userInitialState","getUserState","getUserLoading","initialInvitationsState","invitationsReducer","selectedInvitationIds","selectedInvitationIndex","initialUpdateInvitationState","initialUserPerformanceState","userPerformanceReducer","practisSetsLoading","portablePractisSetsLoading","selectedIds","selectedIdIndex","initialUpdatedUserPractisiSetsState","initialDraftsState","draftedUsers","selectedDrafts","initialUpdatedDraftsState","initialUserFeaturesState","getUserFeaturesState","userFeatures","initialUserPreferencesState","pendingValues","getUserPreferencesState","userPreferences","getUserPreferencesPendingValues","getUserPreferencesLoading","NOTIFICATION_SETTING_TITLE","Info","ToggleContainer","StyledSwitchContainer","StyledSwitchCheckboxContainer","bulletRadius","StyledLabelText","SwitchToggle","NotificationWithToggleView","NotificationWithToggle","notificationKey","LoadingContent","NotificationsView","onToggle","NotificationsController","WEB_SITE_ID","Notifications","getPreferences","updatePreference","preference","pendingValue","handleToggle","newValue","WebSiteIdContext","StyledPractisIcon","Logo","RightArrow","PractisSupportWrapper","shrink","StyledSidebar","SidebarBody","SidebarLabels","ClosedLabels","OpenLabels","OpenLabelsContent","OpenLabelsFooter","StyledLabelsIcon","LabelIcon","StyledRightArrow","OpenLabelsButton","SidebarContent","SidebarMenu","SidebarProfile","ItemLoading","ItemLoadingIcon","ItemLoadingText","Link","StyledDot","isShrink","SideBarItem","ActiveIcon","activeIcon","alternateUrl","defaultItem","hasNewItems","isActive","isMatch","handleIsActive","activeClassName","Dots","menuListClassName","customWidth","customLeft","popper","borderWidth","borderStyle","ActionMenuHandler","hasCustomComponent","ActionButton","active","hideArrow","isHidden","menuItemsClassName","placement","isDisabled","menuListAnchorRef","customRandomId","isMenuListOpen","setIsMenuListOpen","arrowRef","setArrowRef","scrollableContainer","aria-controls","aria-expanded","aria-haspopup","prevOpen","Popper","modifiers","TransitionProps","Grow","MenuList","autoFocusItem","aria-labelledby","classNames","ActionContext","ActionItem","AddLabelActions","CancelLabelButton","SaveLabelButton","EditLabelActions","confirmDisabled","useFocus","htmlElRef","currentEl","LabelInput","AddNewLabelInput","setName","StyledWarning","StyledWarningLine","StyledWarningText","LabelInputWarning","keyPressed","ev","enterPressed","escPressed","DotsIconContainer","EditLabelActionsContainer","NoPermissionPlaceHolder","AddLabelSection","LabelListActions","handleOpen","labelsScrollableContainer","LabelListItem","searchResults","deleteLabel","editingLabels","setEditingLabel","createLabel","updateLabel","expandLabelById","labelName","setLabelName","newLabelName","setNewLabelName","editMode","isLabelListActionDisabled","setFocus","checkForNotUniqueLabelName","childLabelNotUnique","addNewLabelDisabled","editLabelNotUnique","editLabelDisabled","updateLabelName","createSubLabel","handleDeleteLabel","UPDATE_LABEL","CREATE_LABEL","DELETE_LABEL","LabelListItemContainer","selectLabelFilter","LabelsList","LabelsListContainer","AddLabels","saveLabel","setEditing","labelUnique","setLabelUnique","addLabelDisabled","filteredLabels","handleCreateLabel","NoLabelsDescription","usePreviousData","useIfChanged","dontCheckEmpty","previousValue","TeamsStateSelectorContext","useTeamsState","TeamUpdateStatus","UpdateTeamsStateStateSelectorContext","useUpdateTeamsState","TeamEditSelectorContext","useTeamEditState","UpdateMembersStateStateSelectorContext","TeamMembersStateSelectorContext","useTeamMembersState","TrainerStateSelectorContext","useTrainerPractisSetState","UpdatedProgressStateSelectorContext","EnrollmentStateSelectorContext","TrainerInvitationStateSelectorContext","useTrainerInvitationState","selector","PractisSetReportStateSelectorContext","usePractisSetReportState","CreateLabelsHeader","placeholderColor","FiltersSelectedPanel","SelectedLabelsStyle","ClearSelectedLabels","FilterActionsMenu","StyledAddLabels","LabelsActionMenu","LabelsScrollableContainer","CreateLabels","clearLabels","setAssignedLabels","expandAll","collapseAll","expandLabel","localSearchTerm","setLocalSearchTerm","setLabelsSearchTermDebounced","handleSearchTermChange","useDebounce","ifSearchParamsChanged","parentLabelPaths","flattened","concat","uniqueIds","ifAllLabelsChanged","isSearchDisabled","CreateLabelsContainer","searchLabelsDebounced","setLabels","loadingUsers","loadingInvitations","loadingScenarios","loadingChallenges","loadingPractisSets","loadingMyTeams","loadingTeamMembers","loadingPractisSetTraining","labelsShouldBeDisabledOnLoading","collapseLabels","labelsModified","selectedModified","useGetCompanyService","getCompanyApi","useLoadVoiceSettingsService","getCompanyVoiceSettingsApi","useGetCompanyUserStatsService","getCompanyUserStatsApi","callback","DropDownList","renderItem","StyledDropDownItem","StyledA","withComponent","iconSize","DropDownListItem","custom","externalUrl","replaceUrl","modalUrl","IconComponent","UserInfo","UserRole","UserName","UserRoleLoading","UserNameLoading","UserProfileArea","UserRolesStateSelectorContext","useUserRolesState","useLoadUserRolesService","loadUserRolesApi","LOAD_USER_ROLES_START","LOAD_USER_ROLES_SUCCESS","loadUserRolesSuccess","LOAD_USER_ROLES_FAILURE","loadUserRolesFailure","StyledProfileContainer","StyledMenu","ProfileSection","getProfile","getCompany","sideBarOpen","isItAdminPortal","defaultProfileItems","UPDATE_COMPANY_INFO","ProfileSectionContext","ProfileSectionContainer","profileLoading","userRoles","loadUserRoles","sendEmail","subject","isItSafari","userOS","emailLink","Support","ADMIN_ACTIONS","PractisSetSupport","handleSendEmail","deviceInfo","networkConnectionType","generateEmailBody","SidebarScrimmageAI","stroke-linecap","stroke-linejoin","SideBarExternalLinkItem","drawerPaper","overflowX","overflowY","whiteSpace","transition","transitions","create","easing","sharp","duration","enteringScreen","drawerPaperClose","leavingScreen","spacing","breakpoints","up","logoContainer","Sidebar","menuItems","openLabelsPanel","closeLabelsPanel","expandMultipleLabels","generateLabelsConfiguration","getLabelsPanelState","getLabelsExpandedState","expandedLabels","Drawer","paper","isScrimmageEnabled","prevProps","nextProps","Plus","Folder","NewUser","Document","Mountains","Team","StyledActionsContainer","StyledActionsButton","StyledPlus","defaultItems","FolderIcon","CREATE_PRACTIS_SET","DocumentIcon","CREATE_SCENARIO","MountainsIcon","CREATE_CHALLENGE","NewUserIcon","CREATE_STAGING","TeamIcon","CREATE_TEAM","ActionsDropdown","ActionsDropdownContext","HeaderContainer","hasBorder","headerPadding","SubHeaderContainer","hasBackButton","NavigationPanel","useReducedHeight","Toolbar","SecondaryNavigation","LeftPanel","TitleSection","MainTitle","SubTitle","RightPanel","CompanySectionWrapper","TitleIcon","SEARCH_ALL_COMPANIES_START","SEARCH_ALL_COMPANIES_SUCCESS","SEARCH_ALL_COMPANIES_FAILURE","FETCH_ACTIVE_COMPANIES_START","FETCH_ACTIVE_COMPANIES_SUCCESS","FETCH_ACTIVE_COMPANIES_FAILURE","adminChangeCompanyAction","CHANGE_COMPANY","changeCompanyOfPractisAdmin","openInNewTab","getState","tc","webSiteId","isCompanyPortal","COMPANY_PORTAL","buildCompanyUrl","ADMIN_PORTAL","useFetchActiveCompaniesService","searchCompaniesApi","fetchActiveCompaniesSuccess","fetchActiveCompaniesFailure","BoldDownArrow","BoldUpArrow","DownIcon","UpIcon","DropdownButton","DropdownButtonLabel","practis","CompaniesDropdownItem","handleClick","subTitle","practisCompanyItem","PractisIcon","PractisDropdownItem","StyledListCard","CompaniesDropdown","onChangeCompany","CompaniesDropdownContainer","updatedCompany","fetchActiveCompanies","activeCompanies","isActiveCompaniesLoading","prevUpdatedCompany","NamePlaceholder","CompaniesDropdownButton","newOpen","handleChangeCompany","StyledCompanySection","StyledCompanyLogo","LogoButton","NoLogoButton","Platform","changeCompany","clearUserFilters","successChangeCompanyCallback","BroadcastChannel","postMessage","log","postBroadCastChannelMessage","listenBroadCastChannelCallback","openCompanySettings","onmessage","listenBroadCastChannelMessage","ACCESS_ANY_COMPANY","VIEW_COMPANY","HeaderContext","companySectionComponent","CompanySection","tabs","subHeader","goBackUrl","useGoBack","hasTabs","goBack","WrapperContainer","main","contentPadding","StyledTest","isScrollable","StyledContainer","SidebarLibrary","SidebarLibraryActive","SidebarTeams","SidebarTeamsActive","SidebarFeed","SidebarFeedActive","SidebarUsers","SidebarUsersActive","SidebarAssessment","SidebarAssessmentActive","SidebarReports","SidebarRoleplays","SidebarRoleplaysActive","initialDefaultSideBarMenuItems","LIST_SUBMISSION","LIST_PRACTIS_SET","MANAGE_RECORDINGS","SidebarReportsActive","VIEW_USER_PRACTIS_SET_REPORT","LIST_SCENARIO","LIST_CHALLENGE","LIST_USER","LIST_INVITATION","MainWrapper","contentSize","headerMinHeight","hideHeader","sideBarMenuItems","headerHasBorder","refreshComponent","htmlPageTitle","mainRef","spContext","CssBaseline","MainWrapperContainer","maxWidth","obj","constructor","StyledUserProfile","StyledProfileDescription","ViewProfile","StyledAvatar","StyledProfileInfoWrapper","StyledProfileInfo","StyledProfileNavigation","NavigationItem","NavLinkText","NavLinkIcon","StyledProfileContent","StyledLoadingContent","Address","UserProfile","profileRoute","securityRoute","notificationsRoute","canUpdatePassword","SET_USER_PASSWORD","notificationsAllowed","prevCompanyRef","prevCompany","handleViewProfile","VIEW_USER_PERFORMANCE","handleUpdateUserPassword","pickBy","exact","UserProfileContainer","meProfile","userLoading","updateProfileService","fetchUser","uploadPhoto","setIsPhotoUploading","targetUser","fetchUserSettingData","handleUpdateUserSuccess","handleUpdateUserProfileInfo","handleUpdateUserProfilePicture","StyledFooterContainer","StyledTermsRow","StyledTermsItems","StyledLandingHeader","StyledActionPanel","LandingHeader","withAction","StyledLandingContainer","StyledLandingContent","withRouter","scrollTo","NotFoundContainer","StyledNotFoundImageContainer","StyledNotFoundImage","StyledNotFoundHeader","h1","StyledActionContainer","NotFoundPage","NotFoundImage","CardWidth","DESKTOP","LAPTOP","TABLET","MOBILE","CardHeight","CARDS","LandingCard1","LandingCard2","LandingCard3","getIsDocumentHidden","browserHidden","hidden","msHidden","webkitHidden","INVITATION_LABEL_ACTIONS","usePageVisibility","isVisible","setIsVisible","onVisibilityChange","visibilityChange","StyledCardContent","StyledNextCard","currentCardAnimation","opacity","nextCardAnimations","enter","CardContent","LandingCard","card","counterHeight","counterWidth","counterMargin","next","setCard","counter","setCounter","intervalId","browserTabVisible","goNext","clearInterval","cardWidth","windowWidth","useDynamicCardWidth","cardHeight","useDynamicCardHeight","exitBeforeEnter","variants","stiffness","damping","NextButton","StyledArrowIcon","LeftContentContainer","AuthBackground","Copyright","RightContentContainer","Body","WebLandingPage","StyledHeader","StyledHeaderContent","MobileLandingPage","TabletLandingPage","LandingPageContainer","LandingPage","useGetPlatform","updateSingleTeamStart","UPDATE_SINGLE_TEAM_START","updateSingleTeamSuccess","UPDATE_SINGLE_TEAM_SUCCESS","updateSingleTeamFailure","UPDATE_SINGLE_TEAM_FAILURE","fetchAllTeamsStart","FETCH_ALL_TEAMS","fetchAllTeamsSuccess","FETCH_ALL_TEAMS_SUCCESS","fetchAllTeamsFailure","FETCH_ALL_TEAMS_FAILURE","updateTeamActionSuccess","UPDATE_TEAM_SUCCESS","useGetTeamInfoService","getSingleTeam","GET_TEAM_INFO_START","GET_TEAM_INFO_SUCCESS","getTeamInfoSuccess","GET_TEAM_INFO_FAILURE","getTeamInfoFailure","useResetTeamInfoService","RESET_TEAM_INFO","useGetTeamInfoTrainingService","GET_TEAM_INFO_TRAINING_START","GET_TEAM_INFO_TRAINING_SUCCESS","getTeamInfoTrainingSuccess","GET_TEAM_INFO_TRAINING_FAILURE","getTeamInfoTrainingFailure","useGetSingleTeamService","SEARCH_SINGLE_TEAM_START","SEARCH_SINGLE_TEAM_SUCCESS","searchSingleTeamSuccess","SEARCH_SINGLE_TEAM_FAILURE","searchSingleTeamFailure","useSearchTeamsAllUsersService","searchTeamsAllUsers","searchAllUsersParams","excludeTeamId","SEARCH_SINGLE_TEAM_ALL_USERS_START","SEARCH_SINGLE_TEAM_ALL_USERS_SUCCESS","searchSingleTeamAllUsersSuccess","SEARCH_SINGLE_TEAM_ALL_USERS_FAILURE","searchSingleTeamAllUsersFailure","useSearchSingleTeamMembersService","searchTeamMembersApi","SEARCH_SINGLE_TEAM_MEMBERS_START","SEARCH_SINGLE_TEAM_MEMBERS_SUCCESS","searchSingleTeamMembersSuccess","SEARCH_SINGLE_TEAM_MEMBERS_FAILURE","searchSingleTeamMembersFailure","useTogglePromoteTeamLeader","updateTeamLeaderApi","UPDATE_TEAM_LEAD","updateTeamLead","useResetSingleTeamPageService","RESET_SINGLE_TEAM_PAGE","useCreateNewTeamService","createNewTeamApi","CREATE_SINGLE_TEAM_SUCCESS","useUpdateTeamNameService","updateTeamNameApi","MODIFY_TEAM_NAME","useSearchTeamsService","storeSearchParams","searchTeamsApi","useDeleteMemberLabelService","UPDATE_MEMBER_SUCCESS","useDeleteSingleTeamAllUsersLabelService","deleteMemberLabelService","REMOVE_SINGLE_TEAM_ALL_USERS_LABEL","removeSingleTeamAllUsersLabel","useDeleteSingleTeamMemberLabelService","REMOVE_SINGLE_TEAM_MEMBER_LABEL","removeSingleTeamMemberLabel","useUpdateAllSelectedTeamsStateService","UPDATE_ALL_SELECTED_TEAMS_STATE","updateAllSelectedTeamsState","useUpdateSelectedTeamStateService","UPDATE_SELECTED_TEAM_STATE","updateSelectedTeamState","useDeleteTeamsService","deleteTeamsApi","UPDATE_TEAM_START","UPDATE_TEAM_FAILURE","updateTeamActionFailure","useSearchTrainingPractisSets","searchTrainingPractisSets","SEARCH_TRAINER_PRACTIS_SETS_START","SEARCH_TRAINER_PRACTIS_SETS_SUCCESS","SEARCH_TRAINER_PRACTIS_SETS_FAILURE","searchTrainerFailure","useClearTrainerPractisSet","CLEAR_TRAINER_PRACTIS_SETS_SUCCESS","useSearchPractisSetDetailsUsersService","searchPractisSetDetailsUsers","SEARCH_TRAINER_PRACTIS_USERS_START","SEARCH_TRAINER_PRACTIS_USERS_SUCCESS","SEARCH_TRAINER_PRACTIS_USERS_FAILURE","searchPractisUsersFailure","getAssignUsersSearchParams","excludePSets","useSearchAssignUsersService","searchAssignUsers","SEARCH_TRAINER_INVITATION_USERS_START","SEARCH_TRAINER_INVITATION_USERS_SUCCESS","searchInvitationUsersSuccess","SEARCH_TRAINER_INVITATION_USERS_FAILURE","searchInvitationUsersFailure","useGetPractisSetService","getPractisSet","GET_PRACTIS_SET_START","GET_PRACTIS_SET_SUCCESS","GET_PRACTIS_SET_FAILURE","getPractisSetFailure","useResetPractisSetDetailsService","RESET_PRACTIS_SET_DETAILS","useEnrollPractisSetsToUsersService","createInvitationApi","useRemindToStartService","remindToStart","SEND_TRAINEE_INVITATION_START","inviteType","SEND_TRAINEE_INVITATION_SUCCESS","sendTraineeInvitationSuccess","SEND_TRAINEE_INVITATION_FAILURE","sendTraineeInvitationFailure","usePractisSetReportService","getEnrollmentApi","getEnrollmentProgressApi","getEnrollmentDailyTrainingApi","GET_PRACTIS_SET_REPORT_START","enrollment","progress","dailyTraining","GET_PRACTIS_SET_REPORT_SUCCESS","getPractisSetReportSuccess","GET_PRACTIS_SET_REPORT_FAILURE","getPractisSetReportFailure","useResetPractisSetReportService","RESET_PRACTIS_SET_REPORT","useCheckAllProgressService","progressIds","progressId","CHECK_ALL_PROGRESS","checkAllProgress","useCheckSingleProgressService","CHECK_SINGLE_PROGRESS","useDeleteTeamPractisSetLabelService","deletePractisSetLabelsApi","UPDATE_PROGRESS_SUCCESS","useUpdateAllSelectedInvitationTraineesStateService","UPDATE_ALL_SELECTED_INVITATION_TRAINEES_STATE","updateAllSelectedInvitationTraineesState","useUpdateSelectedInvitationTraineesStateService","UPDATE_SELECTED_INVITATION_TRAINEES_STATE","updateSelectedInvitationTraineesState","useNudgeUsersService","nudgeUsersApi","useSaveSelectedInvitationLabelsService","SAVE_SELECTED_INVITATION_LABELS","useUpdateAllSelectedPractisSetsStateService","setIds","updateAllSelectedPractisSetsState","useUpdateSelectedPractisSetStateService","updateSelectedPractisSetState","useSearchTeamMembersService","teamMembersApi","SEARCH_TEAM_MEMBERS_START","SEARCH_TEAM_MEMBERS_SUCCESS","searchTeamMembersSuccessAction","SEARCH_TEAM_MEMBERS_FAILURE","searchTeamMembersFailureAction","useSearchTeamsLeadersService","searchTeamLeadersApi","SEARCH_TEAM_LEADERS_START","SEARCH_TEAM_LEADERS_SUCCESS","searchTeamLeadersSuccessAction","SEARCH_TEAM_LEADERS_FAILURE","searchTeamLeadersFailureAction","useSelectTeamLeaderService","leaderId","SELECT_TEAM_LEADER","selectTeamLeaderAction","useSelectMultipleTeamLeadersService","leaderIds","SELECT_MULTIPLE_TEAM_LEADERS","useResetTeamLeadersSelection","RESET_TEAM_LEADERS_SELECTION","useDeselectAllTeamLeadersSelection","DESELECT_ALL_TEAM_LEADERS_SELECTION","useSaveTeamLeaderSelection","SAVE_TEAM_LEADERS_SELECTION","useHandleAccessPage","TeamMemberStatusEnum","StyledNavigationItemContainer","disablehovereffect","widthPercent","StyledNavigationItemRouteContainer","HintWrapper","storageKey","firstTime","createRef","navigationItemStyles","activeNavigationItemStyles","disableHoverEffect","hintFirstTime","notReviewedCount","StyledNavigationContainer","Navigation","menu","setActive","StyledTutorialContent","TrainingTutorial","teamName","TeamsPageNavigation","useParams","TeamsLearnersNavigation","NoTrainings","NoTrainingsFiltering","FiltersIcon","StyledAssignAction","FiltersDotContainer","FiltersDot","TeamMembersFilterHandler","filtersCount","hasFilters","countAppliedFiltersCount","total","OverdueFlag","StatusContainer","StatusItem","SummaryCaption","OverdueFlagWrapped","TrainingFilters","preSelectedLabels","onLabelsChange","onStatusChange","onSuccessApply","onOverdueChange","overdue","setStatuses","saveLabels","selectLabels","hasOverdue","setHasOverdue","ifPreselectedLabelsChanged","onStatusChangeHandler","statusIn","totalFiltersSelected","deselectLabels","ListActions","handleRedirection","onExportSinglePractisClicked","handleViewAssignUsers","VIEW_PRACTIS_SET_PROGRESS","EXPORT_LIST_PRACTIS_SET","getSearchState","searchState","getSecondarySearchState","secondarySearchState","InvitationHeader","QuickAssignmentInvitationFooter","InvitationHeaderWrapper","QuickAssignmentInvitationHeaderText","InvitationHeaderSubText","CancelWrapper","StyledProgressContainer","ProgressBarContainer","DueDateWrapper","DueDateIcon","WrapperTableCell","StyledTraineeInvitationContainer","InvitationFooter","InvitationHeaderText","StyledInvitationTitle","StyledTableCell","StyledFirstTableItemContent","customTableCellStyle","multiHeaderContainer","teamMemberHeaderContainer","scrollWrapperStyle","tableWrapperStyle","tableBodyContainerStyleForInvitation","maxHeight","tableBodyContainerStyleForAssignment","customCellStyle","labelsCellStyle","TeamMemberStatusCell","StyledTraineeDetailsContainer","StyledLoading","StyledDetailsHeader","DetailsStatus","DetailsStatusPending","DetailsStatusInProgress","DetailsStatusCompleted","StyledDetailsAvatar","StyledUserInfo","StyledName","isFlex","StyledEmail","GraphSection","GraphRow","StyledPendingTitle","StyledPendingInvitationLabel","WarningTitle","DueDateSubTitle","StyledOverdueFlag","DueDateSkeletonContainer","useOrderBy","useTableStateHelper","appliedFilters","startDate","endDate","filtersAreAlwaysEnabled","tableState","disableFilters","disableSearch","disableSorting","noItems","noSearchTerm","noFilters","noCalendarFilters","normalizeSP","newParams","ITEMS_PER_PAGE","PractisSetProgress","updatedProgress","deleteTeamPractisSetLabel","updateSelectedPractisSet","updateAllSelectedPractisSets","getPractisSetReports","saveGlobalLabelFilters","canAccessPage","setLastRefreshed","setIsSelectAll","labelsOpen","setLabelsOpen","usableParams","ifCompanyChanged","pageIndex","initialOffset","isCheckboxPartiallySelected","hcName","hcOverdue","hcPending","hcInProgress","hcCompleted","hcLastTrainingAt","handleTableStates","updateAllPractisSetsCheck","filteredPractisSets","practisSetsToClear","labelChangeHandler","filterStatusHandler","filterOverdueHandler","isListEmpty","isFilteredByOverdue","isMasterCheckBoxChecked","isMasterCheckBoxDisabled","onDeleteLabelHandler","handleAssignedLabelDelete","countPractisSets","countMembers","lodashIsEmpty","FilterByHandler","handlePractisSetCheck","REMOVE_PRACTIS_SET_LABEL","isTeamMembers","pendingEnrollmentCount","inProgressEnrollmentCount","completedEnrollmentCount","lastTraining","PractisSetProgressContainer","teamData","getPractisSetsReportApi","psets","useGetPractisSetsReportService","getTeamInfo","User","secondsToMinSimple","tt","round","secondsToMinFormatted","time","sec","sec_min","secondsToMin","countPractisSetDetailsAppliedFiltersCount","overduesMap","ASSIGNED","OVERDUE","regStatusesMap","TrainingDetailsFilters","registrationStatus","onRegistrationStatusChange","overdues","setOverdues","registrationStatuses","setRegistrationStatuses","onOverdueChangeHandler","dueDateIn","onRegistrationStatusChangeHandler","Tray","newProgressBar","completed","completedColor","full","ValueLabel","isSmallerScreen","ProgressBar","isCompleted","isFull","StripedProgressBarView","InfoWrapper","calculatePercent","CompletedAtWrapper","GreenDot","GeneralProgressCol","completedAt","PlusInCircleIcon","ViewPractisSetIcon","ExportReportIcon","UPDATE_LABEL_ACTION","UPDATE_MULTIPLE_LABEL_ACTION","generateCopyOfEntityName","newDataTimeFormatPrefix","splittedTeamName","newTeamName","pop","useHandleSearchUsersAndNudge","searchCommonUsersAndNudge","nudgeUsers","senderData","nudgeUsersData","receiverId","useSearchCommonUsersAndNudge","searchUsersWithEnrollmentAndNudge","searchPractisSetDetailsParams","useSearchUsersWithEnrollmentAndNudge","searchOverdueLearnersAndNudge","searchOverdueLearnersApi","useSearchOverdueLearnersAndNudge","searchUsersFunctionParams","useUpdateLabelsBulkActionService","addLabelActionFunction","deleteLabelActionFunction","onStartCallback","entityRef","entityId","assignedLabelIdsRef","deletedLabelIdsRef","assignedLabelIds","deletedLabelIds","shouldShowModals","assignLabelsToEntityOptions","deleteLabelsFromEntityOptions","handleStopBulkActionService","handleStartBulkActionService","useUpdateMultipleEntityLabelsBulkActionService","fetchEntityAction","totalCompletedItems","deletedLabels","assignLabelsToEntityService","entityLabelIds","filteredAssignedLabelIds","processedAssignedLabelIds","deleteLabelsFromEntityService","filteredDeletedLabelIds","processedDeletedLabelIds","handleShowCompletedItemsMessage","numberOfCompletedItems","isSingleItem","assignLabelsToEntityServiceOptions","deleteLabelsFromEntityServiceOptions","useNudgeUsersBulkActionService","handleSearchUsersAndNudge","senderDataRef","totalCompletedNudgedUsers","clearTotalCompletedNudgedUsers","handleStopNudgeUsersBulkActionService","handleStartNudgeUsersBulkActionService","UPDATE_TEAM_ACTION","useUpdateTeamMembersBulkActionService","selectedItemIds","handleSuccessBulkActionServiceCallback","UPDATE_SINGLE_TEAM_STOP","useAssignMembersToTeamService","assignMembersToTeam","assignMembersToTeams","useAssignMembersToTeam","searchAndAssignMembersToTeam","searchAllUsers","useSearchAndAssignMembersToTeam","useDeleteMembersFromTeamService","searchAndDeleteMembersFromTeam","searchTeamsMembersApi","deleteMembersFromTeams","useSearchAndDeleteMembersFromTeam","deleteMembersFromTeam","useDeleteMembersFromTeam","useDeleteSelectedTeams","deleteTeams","useSearchAndDeleteTeams","deleteSelectedTeams","isDefault","useRemindToStartBulkActionService","handleSearchEnrollmentsAndRemind","useHandleSearchEnrollmentsAndRemind","totalCompletedRemindToStartItems","numberOfDoneItems","clearTotalCompletedRemindedUsers","handleStopRemindUsersBulkActionService","handleStartRemindUsersBulkActionService","useCreateEnrollmentBulkActionService","createEnrollmentsParams","searchUsersAndCreateEnrollment","enrollPractisSetsToUser","selectedEnrollments","useSearchUsersAndCreateEnrollment","handleStopCreateEnrollmentsBulkActionService","handleStartCreateEnrollmentBulkActionService","useDeleteEnrollmentBulkActionService","deleteEnrollmentsParams","totalEnrollmentsCount","searchEnrollmentsAndDelete","searchUserEnrollmentsApi","deleteEnrollments","useSearchEnrollmentsAndDelete","searchPsetEnrollmentsAndDelete","useSearchPsetEnrollmentsAndDelete","entityExpression","handleStopDeleteEnrollmentsBulkActionService","handleStartDeleteEnrollmentBulkActionService","useUpdateEnrollmentBulkActionService","updateEnrollmentsParams","searchEnrollmentsAndUpdate","useSearchEnrollmentsAndUpdate","dueDateRef","handleStopUpdateEnrollmentsBulkActionService","handleStartUpdateEnrollmentBulkActionService","RenderStarted","onResendInvitation","startedAt","ProgressDetails","practisSetsEnrollments","updateTrainees","onGetPractisSet","checkSingleProgress","selectedProgressIds","selectedProgresses","actionsHelper","onNudgeUsers","onUnenrollEnrollment","getTraineesReportService","locationState","dueDateCalendarParams","setDueDateCalendarParams","showNudgeDialogProgressId","setShowNudgeDialogProgressId","handleViewPractisSetReport","updateAllProgressCheck","practisSetsEnrollment","onNudgeSingleUserSuccessCallback","handleNudgeSingleUser","onNudgeMultipleUserSuccessCallback","nudgeUsersBulkActionService","handleNudgeMultipleUser","nudgeUsersDate","handleSingleRemind","remindToStartBulkActionService","handleBulkRemind","enFirstName","enAssigned","enStarted","enDueDate","enTime","enLastTrainingAt","enProgressValue","enAccuracyAvg","onExportReportButtonClick","registrationStatusHandler","headersDisabled","bulkActions","isExportButtonDisabled","dueDateDataManual","updateSuccessCallback","handleUpdateEnrollmentsBulkActionService","updateDueDateSuccessMessage","filteredPractisSetsEnrollments","enrollmentsToClear","handleDeleteEnrollmentsBulkActionService","handleUnassign","unAssignedPractisSetIds","selectedEntityIds","handleProgressCheck","averageAccuracy","floor","trainingTime","createdAt","lastTrainingAt","ProgressDetailsContainer","practisSetsState","searchPractisSetDetailsUsersDebounced","resendInvitation","resetPractisSetDetails","unenrollEnrollment","useUnenrollEnrollmentService","getEnrollmentsReportApi","useGetTraineesReportService","selectSelectedProgresses","update","Progress","Fragment","useAssignFiltersToStagingUsersService","assignFiltersToStagingUsersApi","SOCKET_PROGRESS_SHOW","HiddenRadioButton","StyledRadioButton","RadioButton","StyledLabelWrapper","SelectTitle","SelectLabelWrapper","RolesContainer","StyledRolesList","ScrollableRoleContainer","RoleItemWrapper","ROLE_PLACEHOLDER","AssignRoles","assignedRole","handleRoleCheck","assignedRoleName","updateCheckedRole","withBorder","AssignLabels","setLabelIds","onLabelChangeHandler","SelectHead","SelectedUserLabels","onSelectLabels","resetLabels","labelsDisabled","selectedUserLabelsCount","AssignPractisSets","savePractisSets","setPractisSetIds","onPractissetHandler","SelectButtonWrapper","SelectedUserPractisSetsComponent","onSelectPractisSets","selectMultiplePractisSets","resetPractisSets","practisSetsDisabled","WithTeamsContext","useWithTeamsContext","searchTeams","useSaveTeams","useSelectMultipleTeams","selectMultipleTeamsAction","useDeselectAllTeams","useResetTeams","StyledTeamsList","TeamsItemWrapper","TeamsItem","PortableTeamsList","selectedTeams","showDefaultMembers","setTeamFilters","topListTeams","bottomListTeams","processedTopListTeams","EmptyTeams","StyledCreateTeams","CreateTeamsBody","PortableTeams","setAllSelected","defaultTeam","processedTeams","sortBy","selectedTeamsLength","usePortableTeamsState","portableTeams","PortableTeamsWithStore","fetchOnMount","useClearTeams","useSelectAllTeams","useResetSelectedTeams","PortableTeamsWithStore2","onChangeSelectedTeams","handleSelectAll","handleDeselectAll","TeamsContainer","AssignTeams","saveTeams","selectMultipleTeams","initialTeams","setTeamIds","onTeamChangeHandler","SelectedUserTeamsComponent","onSelectTeams","resetTeams","teamsDisabled","StyledUserListItem","StyledRow","hasBlueBorder","hasNormalBorder","hasGreyBorder","hasError","AddIconArea","StyledAddUserIconContainer","StyledAddUserIconHolder","BorderSeparator","StyledPlusIconContainer","PlusIconHolder","ErrorLabel","AddNewUser","handleInputChange","onAssignRoleCheck","setSelectedUserLabels","selectedUserLabels","setSelectedUserPractisSets","selectedUserPractisSets","selectedUserTeams","setSelectedUserTeams","isSubmitDisabled","errorMessages","startedToFillInitialUser","hideNewUserTipDisplayed","creatingUser","isRoleDisabled","clearPractisSets","clearTeams","ASSIGN_INVITATION_ROLE","ASSIGN_INVITATION_PRACTIS_SET","SelectedUserTeams","SelectedUserPractisSets","AddNewUserContainer","useCalculatePreSelectedUserRoles","PortableRoles","selectedRoles","setSelectedRoles","calculatePreSelectedUserRoles","preSelectedUserRoles","FilterLabels","calculatePreSelectedLabels","getPreselectedLabels","setDefaultState","preselectedLabels","FilterPractisSets","calculatePreSelectedPractisSets","findPractisSetDueDate","preSelectedPractisSets","useCalculateDeletedTeams","assignedTeams","deletedTeams","FilterTeams","setInitialTeams","setTeams","calculatePreSelectedTeams","teamIDs","preSelectedTeams","AssignFilters","saving","setSaving","getDeletedLabels","getDeletedPractisSets","getDeletedTeams","updated","RemoveUser","CheckBoxWrapper","PortableRolesMultiselect","updatedRoles","handleSelectItem","ApplyFilters","applyFilters","selectedFiltersCount","FileDownload","Upload","excelExtensions","convertPresentVerbToPastVerb","string","isEmptyOrWhiteSpace","StyledLabelActionPanel","isActionPanelOpen","StyledLabelActionButtons","StyledIconWrapper","ActionDropdownsWrapper","StyledHeaderActionItems","StyledIconContainer","HeaderToolsItem","DeleteUsersIcon","UploadTemplateIcon","DownloadTemplateIcon","RemoveUsersIcon","SearchPanel","StyledUserCounterContainer","NewUserHeader","localUsers","existingUserIds","onUsersImported","onRemoveUsers","onRemoveExistingUsers","filterRoles","setFilterRoles","updateAllUsersCheck","userItemsList","updateSelectAll","handleDownloadTemplate","isUserTeamLeader","getRoleId","showFileFormatErrorMessage","handleParsedUsersData","parsedResults","isEntryInvalid","handleImportUsers","filename","fileExtension","parts","getFileExtension","isExcelFile","reader","FileReader","generatedResults","onload","bstr","wb","XLSX","read","bookVBA","SheetNames","sheetName","XL_row_object","utils","sheet_to_json","Sheets","json_object","sheetResults","readAsBinaryString","parseXlsFile","userItemsText","REMOVE_USER_FROM_STAGING","tooltipRef","EditAssignRoles","setModified","EditAssignPractisSets","EditAssignTeams","TeamsDisabled","EditAssignLabels","ThinClose","ThinCheck","ActionIcon","SectionItem","SectionError","EditUserItem","setUser","handleUpdateSelectedUser","resetSelectedLabels","hideActions","setHideActions","resetSelectedUser","isFirstNameInvalid","isLastNameInvalid","isEmailInvalid","EmailValidator","isEditFormInvalid","NewUserExclamation","Table","containerStyles","THead","thead","TableHead","EditPencil","StyledTableBody","TableNoResultBody","TableNoResult","TableHeaderFirstCell","TableHeaderCell","StyledTablePagination","TableBodyScrollContainer","FormatTableCellText","IconsContainer","StyledTableRow","hovered","IconsPlaceholder","StyledIconHint","ErrorStateCheckbox","ExclamationIconContainer","ExclamationIconHolder","StyledTableContainer","RenderTableCheckboxCell","handleUserCheck","emailExistsInSystem","UsersList","userList","onEditUser","onRemoveUser","isDraftSaved","selectedUser","setSelectedUser","usersToDisplay","setUsersToDisplay","updateDisplayUsers","displayUsers","firstEntry","secondEntry","getRoleName","hcUserFirstName","hcUserLastName","hcUserEmail","hcUserRole","hcPractisSets","hcTeams","hcLabels","hideSpacer","subTitleWidth","StyledErrorMessage","SaveAsDraftModal","newUsers","setTitle","setError","submitClicked","setSubmitClicked","createUserStagingService","createStagingApi","useCreateUserStagingService","DraftEditStateSelectorContext","useDraftEditState","NewUserPath","PathIconHolder","UserIconContainer","UserIconHolder","AddNewUserLabel","AddNewUserTip","useKeypress","onKeyup","Background","Modal","ModalPage","preventClick","closeModalPage","ModalPageContext","ModalPageContainer","closePath","closeGoingBack","restrictClosing","restrictClosingAction","handleManualClose","UserStatsContainer","StyledFooter","StyledFooterActions","StyledHeaderInput","AddNewUserWrapper","StyledSavedStatusContainer","CompanyVoiceSettingsStateSelectorContext","useCompanyVoiceSettingsState","CompanyAdminsStateSelectorContext","CompanyUserStatsStateSelectorContext","useCompanyUserStatsState","Cross","ModalBackground","ModalContainer","ModalHeader","ModalTitle","CrossContainer","ModalWithCrossView","titleStyle","titleContent","hideCross","QuickTip","UserLimitWarningModalView","quickTip","onManageInvitations","onRequestLimitChange","UserLimitWarningModal","handleManageInvitations","handleRequestLimitChange","NoFreeUsersModalView","userStats","ExceededFreeUsersModalView","Gear","GearButton","CompanyUserStatsTextView","showUnlimited","showSettingsButton","onSettingsClick","CompanyUserStatsText","userStatsState","getCompanyUserStats","handleSettingClick","navigateToInvitations","searchDraftUsers","modifyDraftUsers","modifyDraftUsersWithoutValidation","resetDraftsPage","addStagingUser","addMultipleStagingUsers","updateStagingUser","deleteStagingUser","inviteStagingUser","assignFiltersToStagingUsers","setGoBackTwice","existedEmailList","defaultTeamId","noFreeUsersModalOpen","setNoFreeUsersModalOpen","exceededFreeUsersModalOpen","setExceededFreeUsersModalOpen","loadingInvitation","setLoadingInvitation","saveDraftModalOpen","setSaveDraftModalOpen","setCreatingUser","usersSavedAt","setUsersSavedAt","draftSavedFirstTimeAt","setDraftSavedFirstTimeAt","userEmptyState","userRoleId","newUser","setNewUser","newUserRole","setNewUserRole","newUserPractisSets","setNewUserPractisSets","newUserTeams","setNewUserTeams","newUserLabels","setNewUserLabels","handleSetNewUserLabels","handleChangeNewUserRole","handleSetNewUserPractisSets","handleSetNewUserTeams","selectedUserRole","setSelectedUserRole","handleChangeSelectedUserRole","checkedUserIds","setCheckedUserIds","checkedUserRoles","setCheckedUserRoles","handleAssignFiltersToCheckedUsers","userIDs","deletedPractisSetIDs","manualRefreshSearchParams","filteredUsers","updatedUserLabels","updatedUserPractisSets","uniqBy","updatedUserTeams","localFilterParams","setLocalFilterParams","setFiltersCount","ifLocalFilterParamsChanged","ifUsersChanged","setLocalUsers","filteredUser","escapedSearchTerm","regSearchTerm","trimmedRegSearchTerm","handleApplyFiltersToCheckedUsers","ifDraftIdChanged","updatedUsers","userItemListIds","updatedCheckedUserIds","resetNewUserFields","resetEditingUserFields","useKeyPress","userItems","setExistingUserIds","existingUsers","handleSuccessAllUsersInvited","handleErrorUsersInvited","invitedUsers","alreadyInvitedUserItems","remainingUserItems","checkIfInviteUsersHaveErrors","inviteUsersBulkActionService","usersDataRef","inviteUsers","assignLabelsToUsers","assignPractisSetsToUsers","handleStopInviteUsersBulkActionService","handleStartActionModal","assignLabelsToUsersService","usersLabelIds","processedUsersLabels","assignPractisSetsToUsersService","usersPractisSets","processedUsersPractisSet","assignTeamsToUsersService","usersTeamIds","processedUsersTeams","inviteUsersService","handleStartInviteUsersBulkActionService","inviteUsersOptions","InviteUsersAction","teamsIds","usersData","useInviteUsersBulActionService","invitedUser","existedEmail","saveAsDraftConfirmed","saveAsDraftFailed","userSavedAtText","importedUsers","sendImportedUsers","currentUsers","trimmedFinalResults","deletedUsersLength","updatedList","roleIds","checkUser","finalResult","modifiedUser","updatedUserItems","userExists","modifySelectedUser","now","teamsCount","handleCreateNewUser","submitCount","modifyNewUser","isAllItemsSelected","checkedUsersIds","invitationResults","updatedErroredUsers","updatedFilteredUsers","duplicatedUsersCount","usersInvitedCount","invitingUsers","NewUserContainer","searchStagingUsersApi","useSearchStagingUsersService","useModifyDraftUsersService","useModifyDraftUsersWithoutValidationService","useResetDraftsPageService","addStagingUsersApi","useAddStagingUserService","useAddMultipleStagingUsersService","updateStagingUsersApi","useUpdateStagingUserService","deleteStagingUsersApi","useDeleteStagingUserService","inviteStagingUsersApi","useInviteStagingUserService","goBackTwice","go","updateScriptLineAction","UPDATE_SCRIPT_LINE","ScriptLineSpeaker","initialScenarioState","script","totalDuration","case","getScenarioState","imageColors","range","imageCount","n","c","useDuplicateRoleplayApi","roleplayId","useGetRoleplayApi","useGetRoleplayContentApi","useCreateCommandRoleplayApi","EditModeValues","useCreateScriptLineService","CREATE_SCRIPT_LINE","createScriptLineAction","useDeleteScriptLineService","lineId","DELETE_SCRIPT_LINE","useModifyScriptTextService","MODIFY_SCRIPT_TEXT","modifyScriptTextAction","useClearScriptLinesService","CLEAR_SCRIPT_LINES","useGetScenarioService","getScenarioApi","FETCH_SCENARIO_START","FETCH_SCENARIO_SUCCESS","fetchScenarioSuccess","FETCH_SCENARIO_FAILURE","fetchScenarioFailure","useUploadScenarioAudioService","fileUploadApi","associatedEntityId","UPLOAD_SCENARIO_AUDIO_START","formData","FormData","scriptLineId","UPLOAD_SCENARIO_AUDIO_SUCCESS","UPLOAD_SCENARIO_AUDIO_FAILURE","uploadScenarioAudioFailure","useModifyScenarioService","silent","MODIFY_SCENARIO","modifyScenarioAction","useResetScenarioService","RESET_SCENARIO","useStoreScenarioTempCopyService","STORE_SCENARIO_TEMP_COPY","useRestoreScenarioFromTempActionService","RESTORE_SCENARIO_FROM_TEMP","useSaveScenarioKeywordsService","keywords","UPDATE_SCRIPT_LINE_KEYWORDS","updateScriptLineKeywords","useGetRoleplayForScenario","getRoleplayContentByIdApi","contentId","useGetRoleplayContentByIdApi","getRoleplayApi","conversation","summary","aiLines","speaker","CUSTOMER","REP","StyledTextareaContainer","titleFontColor","titleFontWeight","ErrorContainer","TextAreaBox","focused","setFocused","TextAreaStyles","hideCounter","counterFontSize","StyledScenarioInfo","StyledScenarioInfoContent","ScenarioInfo","modifyScenario","edit","EditModeContext","VIEW","ScenarioInfoContainer","StyledEmptyScriptContainer","ScriptAction","handleAdd","ElevenLabsUrl","generateAudioWithElevenLabs","stability","voiceId","similarityBoost","ELEVEN_LABS_KEY","ok","statusText","getElevenLabsVoices","json","useTextToSpeechService","feature","VOICE_GENERATION_START","voice","VOICE_GENERATION_SUCCESS","voiceGenerationSuccess","VOICE_GENERATION_FAILURE","voiceGenerationFailure","useClearVoiceService","s","VOICE_GENERATION_CLEAR","VoiceGenerationSelectorContext","useVoiceGenerationState","R","appendItem","append","findItem","propEq","modifyArrayItem","idx","wField","lensPath","over","initialAudioState","playlist","recording","getAudioState","player","useCreatePlaylistService","CREATE_AUDIO_PLAYLIST","createPlaylistAction","usePlayAudioService","PLAY_AUDIO","playAudioAction","useStopAudioService","STOP_AUDIO","stopAudioAction","useResetAudioService","RESET_PLAYLIST","useStartAudioRecordingService","START_AUDIO_RECORDING","startAudioRecordingAction","useStopAudioRecordingService","STOP_AUDIO_RECORDING","useGoNextService","GO_NEXT","useGetSelectionCharacterOffsetWithin","sel","selectionRect","doc","ownerDocument","win","defaultView","parentWindow","getSelection","rangeCount","getRangeAt","preCaretRange","cloneRange","selectNodeContents","setEnd","startContainer","startOffset","endContainer","endOffset","selection","textRange","createRange","preCaretTextRange","createTextRange","moveToElementText","setEndPoint","KeywordIcon","StyledTooltip","textColor","Keyword","StyledContentEditable","ContentEditable","contentEditable","onInput","innerText","dangerouslySetInnerHTML","__html","KEYWORDS_CLASS","ContentEditableInput","selections","setCreateTooltip","setRemoveTooltip","setKeywordIdToRemove","textareaRef","localValue","setLocalValue","caretPosition","saveCaretPosition","setCaretPosition","currentNode","currentNodeLength","previousNodeLength","childNodes","textContent","setStart","collapse","removeAllRanges","addRange","getSelectionCharacterOffsetWithin","timeoutRef","selectionRef","selectedValues","handleKeywordClick","preventDefault","visible","dataset","getElementsByClassName","keyCode","str","StyledScriptItemTextarea","ScriptItemTextarea","handleValueChange","scriptLineKeywords","createToolTip","removeToolTip","setKeywords","saveKeyword","setSaveKeyword","removeKeyword","setRemoveKeyword","keywordIdToRemove","setSelections","clearSelection","empty","handleRemoveKeyword","handleToggleKeyword","newSelections","startIndex","endIndex","selectionConflict","conflict","setSaveToScenario","handleAddKeyword","saveScenarioKeyword","saveToScenario","valueLength","valueDiff","updatedSelections","handleModifyText","deleteKeyword","refs","CommentInner","CommentContext","CommentProvider","Comment","Blacker","CommentBody","CommentTools","CommentTitle","StyledRemoveIcon","CommentDescription","onDelete","hideRemoveIcon","Save","StyledScriptPlayingAudioAction","StyledPlayingAudioButton","StyledReactMicContainer","StyledReactMic","ReactMic","AudioRecorder","record","onStop","onData","strokeColor","mediaDevices","getUserMedia","audio","video","stream","getTracks","stop","PauseCircle","StopCircle","rx","StyledAudioPlayer","StyledActionButtons","AudioDuration","StyledAudioWrapper","StyledAudioLine","StyledLine","AudioPlayer","isPaused","_isMounted","customAudioUiPlayer","slider","currentTimeInterval","handlePlay","play","handlePause","pause","handleStop","currentTime","setState","handleRewind","getCurrentAudioClickDuration","clickFraction","clientX","getSliderLeftPosition","getSliderTotalWidth","componentDidMount","autoPlay","onplay","setInterval","onpause","onended","onchange","customAudioPlayer","PlayCircle","Generate","Record","Play","DEFAULT_CUSTOMER_VOICE_ID","DEFAULT_REP_VOICE_ID","getTextToSpeechSettingsOrDefault","customer","representative","StyledScriptItem","StyledScriptAction","StyledAudioSection","DisabledArea","ScriptItem","handleScriptLineDelete","handleScriptTextModify","handleUploadAudio","handlePlayAudio","handleStopAudio","handleGoNext","handleResetPlaylist","handleStartRecording","handleStopRecording","textToSpeech","clearAudio","generatingAudio","generating","loadingAudio","voiceData","setRecord","save","setSave","setAudio","isRepSpeaker","handleClickAway","myRef","handleRemoveItem","settingsOrDefault","audioUrl","behavior","block","ScriptItemContainer","resetPlaylist","playAudio","stopAudio","startRecording","stopRecording","deleteScriptLine","modifyScriptText","uploadScenarioAudio","Drag","StyledScriptLineContent","StyledDroppableContainer","StyledScriptHandle","StyledDraggableItem","ScriptLineContent","handleScriptLineUpdate","scriptLines","setScriptLines","ScenarioContainerContext","onDragEnd","destination","removed","Reorder","source","droppableId","provided","snapshot","isDraggingOver","draggableId","draggableProps","dragHandleProps","EDIT","ScriptLineContentContainer","updateScriptLine","useUpdateScriptLineService","Stop","Phone","useTextToSpeechBulkActionService","featureName","textToSpeechForScriptLine","line","lineSettings","useTextToSpeechForScriptLine","handleSuccess","handleFailed","handleStart","StyledScriptHeaderActions","ScriptHeaderActions","stopPlaylist","ScriptHeaderActionsContainer","PlayAudioContext","textToSpeechBulkAction","StyledScenarioScriptHeader","BuilderActions","BuilderConfigs","ConfigItem","BuilderDuration","ScenarioScriptHeader","customerLineCount","repLineCount","ScenarioScriptHeaderContainer","Customer","StyledScenarioScript","UserAvatarPanel","StyledCustomer","ImageContainer","StyledCustomerImage","ScriptsBody","PlaceholderWrapper","ScenarioScripts","createScriptLine","ScenarioScriptsContainer","CustomBodyContainerWrapper","CustomBodyContainer","CustomBody","StyledCheckboxContainer","StyledReminderTitle","StatusModalConfirmation","displayDontShow","dontShowHandle","danger","notShow","setNotShow","handleConfirm","buildPageTitle","StyledCustomWrapper","StyledCustomHeader","StyledHeaderActions","StyledHeaderActionItemsWrapper","PublishedDate","EDIT_MODAL_INFO","CANCEL_EDIT_MODAL_INFO","MODAL_INFO","buttonText","EDIT_VIEW_STATUS","CustomHeader","handleUpdateScenario","storeScenarioTemp","restoreScenarioFromTemp","isViewMode","handleRestoreArchivedScenario","updateScenarioStatus","useHandleRestoreArchivedScenario","publishModal","setPublishModal","editModal","setEditModal","cancelEditModal","setCancelEditModal","saveState","setSaveState","loadingSave","LoadingSaveContext","updatedAt","CustomHeaderContainer","isInput","SelectedPanel","LabelListItemNameContainer","LabelListItemLabel","StyledTitleContainer","LabelsActionItem","onToggleLabelsCollapse","LabelsActionItemContainer","NoAddedLabels","LabelsAction","showSelectedPanel","buttonTitle","isDropdownDisabled","DownloadPDF","TextInputContainer","DownloadContainer","DownloadIcon","TitleTextInput","ActionPanel","titleError","downloadScenario","disableDownload","useAssignLibraryEntityLabelsService","assignPractisSetLabels","assignScenarioLabels","assignChallengeLabels","assignLabelToLibraryActionList","assignLabelFromLibraryAction","useUpdateLibraryStatusService","updatePractisSetStatus","updateChallengeStatus","currentStatus","updateLibraryStatusActionList","createdPractisSetId","updateLibraryStatusAction","useGenerateCreateDuplicateScenarioActionList","createNewScenario","assignLibraryLabels","assignLinesToScenario","updateScenarioStatusService","handleUpdateScenarioStatus","updateScenarioStatusServiceOptions","handleAssignLabelsToScenario","handleAssignLinesToScenarioService","currentLines","createdScenarioId","createdScenarioLines","audioId","handleAssignLinesToScenario","assignLinesToScenarioOptions","newScenarioInfo","useGenerateCreateDuplicateChallengeActionList","createNewChallenge","assignLinesToChallenge","updateChallengeStatusService","handleUpdateChallengeStatus","updateChallengeStatusServiceOptions","handleAssignLabelsToChallenge","handleAssignLinesToChallengeService","createdChallengeId","createdChallengeLines","handleAssignLinesToChallenge","assignLinesToChallengeOptions","newChallengeInfo","useCreateEditDuplicateLibraryBulActionService","entityTitle","completedResponses","isAlreadyExistedErrorMessage","capitalize","handleStopDuplicateLibraryBulkActionService","duplicateLibraryActionList","PractisSetEntityTypes","StyledLoadingContainer","CreatedByWrapper","StatusItems","confirm","NewScenario","scenarioCase","handleCreateScriptLine","handleResetScenario","handleFetchScenario","handleCreatePlaylist","handleLoadVoiceSettings","createEditScenarioSuccessCallback","clearScriptLines","setLoadingSave","createScenarioResponse","editScenarioResponse","updateScenarioResponse","actionMessage","useCreateEditScenarioSuccessCallback","createEditScenarioFailedCallback","useCreateEditScenarioFailedCallback","handleArchiveScenario","useHandleArchiveScenario","getRoleplayForScenario","setEditMode","setTitleError","isLoaded","onUnload","returnValue","scriptId","setPreviouslyAssignedLabelsAction","generateCreateScenarioActionList","generateEditScenarioActionList","updateScenarioInfo","assignLabelsToScenario","addedLabelIds","assignLabelsToScenarioServiceOptions","deleteLabelsFromScenarioServiceOptions","handleDeleteScenarioLines","useGenerateEditScenarioActionList","createLibraryBulkActionService","callbacks","output","valid","validationService","previouslyAssignedLabels","editScenarioInfo","createScenarioActionList","editScenarioActionList","willBeLoaded","creator","playlistItems","when","getScenario","resetScenario","createScriptPlaylist","loadVoiceSettings","getSinglePractisSetSuccess","GET_SINGLE_PRACTIS_SET_SUCCESS","PractisSetEntityTypeNames","practisSetEntityTypeName","practisSetEntityTypeColors","PractisSetStatusNames","PractisSetStatusName","calculatePractisSetTotalDuration","newDurations","minRepsCount","PacingType","initialPractisSetsState","scenarioCount","challengeCount","pacingId","totalScenarios","totalChallenges","isScenariosLoading","isChallengesLoading","practisSetReducer","GET_SINGLE_PRACTIS_SET_START","GET_SINGLE_PRACTIS_SET_FAILURE","MODIFY_PRACTIS_SET","newPractisSetsInfo","SEARCH_PRACTIS_SCENARIOS_START","SEARCH_PRACTIS_SCENARIOS_SUCCESS","SEARCH_PRACTIS_SCENARIOS_FAILURE","SEARCH_PRACTIS_CHALLENGES_START","SEARCH_PRACTIS_CHALLENGES_SUCCESS","SEARCH_PRACTIS_CHALLENGES_FAILURE","GET_PRACTIS_SCENARIOS_COUNT_SUCCESS","GET_PRACTIS_CHALLENGES_COUNT_SUCCESS","UPDATE_PRACTIS_CONTENT","PRACTIS_CONTENT_REP_COUNT_INCREASE","newContent","isScenario","PRACTIS_CONTENT_REP_COUNT_DECREASE","LIBRARY_ACTIONS","STORE_PRACTIS_SET_TEMP_COPY","temp_info","RESTORE_PRACTIS_SET_FROM_TEMP","RESET_PRACTIS_SETS","getPractisSetState","useSearchPractisScenarios","searchPractisScenariosSuccess","searchPractisScenariosFailure","useSearchPractisChallenges","searchPractisChallengesSuccess","searchPractisChallengesFailure","useGetSinglePractisSetService","getPractisSetApi","getPractisSetContent","practisSetid","practisSetData","getSinglePractisSetFailure","useUpdatePractisContentService","updatePractisContentAction","usePractisContentRepCountIncrease","practisContentRepCountIncrease","usePractisContentRepCountDecrease","practisContentRepCountDecrease","useResetPractisSetService","useStorePractisSetTempCopyService","useRestorePractisSetFromTempActionService","useModifyPractisSetService","modifyPractisSetAction","ArchiveIcon","StyledHeaderBottomActionItemsWrapper","VerticalDivider","ArchiveButtonContainer","pacing","handleUpdatePractisSet","modifyPractisSet","storePractisSetTemp","restorePractisSetFromTemp","handleRestoreArchivedPractisSet","useHandleRestoreArchivedPractisSet","handleSaveWithModalAction","checkIsPractisContentDisabled","practisSetsContent","currentContent","isInViewMode","StyledListItemRow","isDragging","StyledListTitleItemCell","StyledListItemCell","GenerateTableCells","practisSetContent","addToBuilder","PRACTIS_SET_DRAGGABLE_ID","isDragDisabled","onDoubleClick","NavigationCover","Spacer","space","StyledLibraryNavigationContainer","PractisContentNavigation","scenariosCount","scenarioCountFiltered","challengeCountFiltered","challengesCount","setPage","PractisContentNavigationContainer","Stack","LabelFilters","onClearHandler","SearchContainer","TableFilters","setSelectLabels","StyledScenarioList","StyledTableHeaderRow","StyledBodyWrapper","StyledBody","StyledBodyContainer","StyledTableHeaderCell","ScenarioList","onChangeSearchParams","sortName","sortDuration","StackIcon","PRACTIS_SET_SCENARIO_LIST_DROP_ID","droppableProps","StyledChallengeList","ChallengeList","PRACTIS_SET_CHALLENGER_LIST_DROP_ID","StyledListContent","StyledDescriptionInfoContent","ListContent","getScenarios","getChallenges","addScenarioToBuilder","addChallengeToBuilder","ListContentContainer","searchPractisScenarios","searchPractisScenariosDebounced","searchPractisChallenges","searchPractisChallengesDebounced","StyledBuilderConfigs","MinimumAccuracy","minimumAccuracy","minTrainingScore","StyledBuilderDuration","PreviewItemContainer","PreviewHeader","Type","ChallengeType","ScenarioType","ScriptLineCard","LineTitle","LineDescription","LineCustomerTitle","LineRepTitle","PreviewItem","cardRef","cardPositions","setCardPositions","buildText","keyword","cardPosition","StyledBuilderListItem","StyledRemoveSection","InfoSection","EntityName","EntityItemTitle","EntityItemActions","EntityItemDuration","PreviewButton","SectionDivider","RepsSection","RepsTitle","RepsCounter","RepsCount","SetCountContainer","BuilderListItem","onRemove","showPreview","setShowPreview","increaseContentMinRepCount","decreaseContentMinRepCount","itemRef","itemPositions","decreaseContentDisabled","dataTestPrefix","onMouseDown","uniqueId","RepsRequired","reps","Documents","StyledBuilderContent","BuilderContent","BuilderBody","StyledBuilderBodyArea","NoResultContainer","NoResultLogo","NoResultHeader","NoResultText","StyledEmptyDroppableArea","handleRemoveContent","PRACTIS_SET_BUILDER_DROP_ID","PractisSetBuilder","totalRepsReqD","cur","PractisSetBuilderContainer","allScenarios","allChallenges","handleUpdatePractisContent","setContent","positionRef","reorderAndUpdate","reOrderedResult","changePosition","addScenarioToPractisSet","addedScenario","addedContent","addScenarioAsLastToPractisSet","addChallengeAsLastToPractisSet","addedChallenge","addChallengeToPractisSet","removeFromPractisSet","removePractisSetWithId","ContentContainer","updatePractisContent","ContainerBody","Select","valueColor","customMenuItem","pacingTypeNames","SEQUENTIAL","FREE","pacingTypeName","initialPacingsState","getPacingsState","pacings","useSearchPacingsService","searchPacingsApi","SEARCH_PACINGS_START","SEARCH_PACINGS_SUCCESS","SEARCH_PACINGS_FAILURE","searchPacingsFailure","searchPacings","handleSearchPacings","pacingItems","newPacing","PractisSetsComponent","handleFetchPractisSet","handleResetPractisSet","createEditPractisSetSuccessCallback","existedPractisSetId","newPractisSetId","createPractisSetResponse","editPractisSetResponse","updatePractisSetStatusResponse","isEditMode","useCreateEditPractisSetSuccessCallback","createEditPractisSetFailedCallback","useCreateEditPractisSetFailedCallback","handleArchivePractisSet","useHandleArchivePractisSet","setPreviousAssignedLabelsAction","practisSetLabelIds","generateCreatePractisSetActionList","createNewPractisSet","assignPractisSetContent","updatePractisSetStatusService","handleAssignPractisSetContent","practisSetContents","handleAssignLabelsToPractisSet","handleAssignContentToPractisSet","assignPractisSetContentOptions","handleUpdatePractisSetStatus","updatePractisSetStatusServiceOptions","newPractisSetInfo","useGenerateCreatePractisSetActionList","generateEditPractisSetActionList","updatePractisSetInfo","assignLabelsToPractisSet","handleUpdatePractisSetInfo","practisSetInfo","updatePractisSetInfoActionOptions","handleUpdatePractisSetLabels","assignLabelsToPractisSetServiceOptions","addedPractisSetLabels","deleteLabelsFromPractisSetServiceOptions","deletedPractisSetLabels","useGenerateEditPractisSetActionList","createEditPractisSetService","validateUpdate","editedPractisSetInfo","createPractisSetListAction","editPractisSetListAction","resetPractisSet","LibraryNavigation","LibraryNavigationContainer","LibraryFilters","selectedStatuses","savedStatuses","handleSelectStatus","handleSaveStatus","handleStatusSelection","ScenariosListActions","restoreScenario","handleItemEdit","handleViewScenario","handleGenerateChallenge","handleDeleteScenario","onDuplicateScenario","handleDownloadAsPDF","archiveScenario","assignLabelsToLibrary","assignSingleLabelOpen","setAssignSingleLabelOpen","handleSetPreselectedLabels","useSession","useSessionEffect","effect","deps","session","useFilter","onFilterChange","DEFAULT_FILTER_VALUE","Scenarios","updatedScenarios","onDeleteScenarios","onArchiveScenario","onRestoreScenario","searchScenarios","updateAllScenariosCheckedState","updateSelectedScenarioCheckedState","fetchAllPractisSets","deleteLibraryLabelTag","assignLabelsToScenarios","deleteLabelsFromScenarios","setSelectedStatuses","setSavedStatuses","generateChallengeService","generateChallengeData","useGenerateChallengeBulActionService","updateAllScenariosCheck","updateMultipleScenariosLabels","assignLabels","getAssignedLabelsIds","deletedLabelsFiltered","selectedLabelsFiltered","hcStatus","hcDuration","hcUpdatedAt","handleChangeEvent","onSelectStatus","onSaveStatus","successDeleteScenarioCallback","onConfirmDeleteScenario","scenarioIdToDelete","usersToClear","scnerioItem","updateLabelsBulkActionService","generateDuplicateScenarioActionList","duplicateLibraryBulkActionService","handleDuplicateScenario","newScenario","duplicateScenarioActionList","hideDivider","sc","REMOVE_CHALLENGE_LABEL","handleUpdateScenariosLabels","ScenariosContainer","deleteScenarios","searchScenariosDebounced","Box","PractisSetsListActions","onRestorePractisSet","handleViewPractisSet","handleDeletePractisSet","handleViewPractisSetProgress","onDuplicatePractisSet","onArchivePractisSet","SeparatingDot","PractisSets","onDeletePractisSets","updatedPractisSets","updateSelectedPractisSetCheckedState","onConfirmDeletePractisSet","practisSetIdToDelete","updateMultiplePractisSetLabels","hcTotalCount","hcLastUpdated","practisSetItem","generateDuplicatePractisSetActionList","handleGetPractisSetContent","currentPractisSetId","newPractisSetContentData","getPractisSetContentOptions","useGenerateDuplicatePractisSetActionList","handleDuplicatePractisSet","newPractisSet","duplicatePractisSetActionList","deletePractisSets","archivePractisSet","restorePractisSet","ChallengesListActions","restoreChallenge","handleViewChallenge","handleDeleteChallenge","onDuplicateChallenge","archiveChallenge","Challenges","updatedChallenges","onDeleteChallenges","onArchiveChallenge","onRestoreChallenge","searchChallenges","updateSelectedChallengeCheckedState","assignLabelsToChallenges","deleteLabelsFromChallenges","updateAllChallengesCheck","updateMultipleChallengesLabels","chName","chStatus","chUpdatedAt","successDeleteChallengeCallback","onConfirmDeleteChallenge","challengeIdToDelete","generateDuplicateChallengeActionList","handleDuplicateChallenge","newChallenge","duplicateChallengeActionList","handleChallengeCheck","challengeItem","handleUpdateChallengesLabels","ChallengesContainer","deleteChallenges","searchChallengesDebounced","Library","TermsContainer","TermsPage","PrivacyContainer","PrivacyPage","SupportContainer","SupportMail","SupportPage","StyledUsersPageNavigationContainer","UsersPageNavigation","LIST_STAGING","UsersPageNavigationContainer","StyledEmptyInviters","StyledEmptyInvitersContent","NoInvitersTitle","EmptyInviters","StyledInvitersList","InviterItemWrapper","YouWrapper","InviterItem","PortableInvitersList","inviters","selectedInviters","setInvitersFilters","invitersId","inviterId","topListInviters","bottomListInviters","StyledCreateInviters","CreateInvitersBody","PortableInviters","onSelectMultiply","getPrecessedInviters","selectedInvitersLength","selectMultipleInvitersAction","useDeSelectAllInvitersAction","filterUnique","initialInvitersState","ready","getInvitersState","PortableInvitersWithStore","invitersState","searchInviters","searchInvitersApi","responseData","useSearchInvitersService","selectMultiply","useSelectMultipleInvitersAction","useSelectAllInvitersAction","CustomFieldContainer","RoleContainer","InvitationsFilter","onRoleChange","onInvitersChange","preSelectedRoles","saveInviters","useSaveInvitersAction","selectMultipleInviters","deselectAllInviters","InvitationsListActions","onViewProfile","onCopyInviteText","handleRevokeInvitation","assignLabelsToUser","handleResendInvitation","Pending","customTableColumnStyle","avatarTableCellCustomStyle","useRevokeInvitationBulkActionService","searchUsersAndRevokeInvitation","revokeInvitations","searchPendingUsersParams","useSearchUsersAndRevokeInvitation","totalCompletedRevokeInvitations","clearTotalCompletedRevokeInvitations","handleStopRevokeInvitationsBulkActionService","handleStartRevokeInvitationBulkActionService","useResendInvitationBulkActionService","searchUsersAndResendInvitation","useSearchUsersAndResendInvitation","totalCompletedResendInvitations","clearTotalCompletedResendInvitations","handleStopDuplicateTeamBulkActionService","handleStartResendInvitationBulkActionService","useDeleteUserBulkActionService","searchUsersAndDeleteUser","useSearchUsersAndDeleteUser","deletedUsersTotalCount","ResetDeletedUsersTotalCount","handleStartDeleteUserBulkActionService","Invitations","searchInvitations","onRevokeInvitation","updatedInvitations","updateAllSelectedInvitations","updateSelectedInvitation","deleteUserLabel","refreshInvitersList","useRefreshInviters","prevCompanyId","onConfirmRevokeInvitations","revokeInvitationIds","onConfirmRevokeInvitationsSuccessCallback","onSuccessRevokeInvitationBulkActionService","revokeInvitationBulkActionService","handleResendInvitationBulkActionService","deleteLabelsFromUser","updateMultipleUsersLabels","hcFirstName","hcEmail","hcRole","hcInvitedOn","hcInvitedby","filterRoleHandler","filterInvitersHandler","assignedFiltersCount","deselectTeams","updateData","REMOVE_INVITATION_LABEL","handleUpdateUserLabels","InvitationsContainer","updatedInvitationsState","searchInvitationUsers","copyInviteText","revokeInvitation","handleCopyInviteText","UsersFilter","onTeamsChange","UsersListActions","handleUserSettings","setShowNudgeDialogMemberId","setUserIdsToDelete","ASSIGN_USER_LABEL","EXPORT_LIST_USER","DELETE_USER","SelectInputContainer","noText","teamsTableCellStyle","useBuildUserName","Users","searchUsers","assignTeamsToUsers","onDeleteUser","updateAllSelectedUsers","updateSelectedUser","getUsersReportService","onNudgeTrainees","buildUserName","showNudgeDialogMemberId","loggedInUserPermissions","handleDeleteUserBulkActionService","handleManageTeams","currentState","diff","onNudgeMultipleUsersSuccessCallback","handleNudgeMultipleUsers","nudgeUserDate","onExportClickedSingle","isOptionsDisabled","hcUserName","hcTeam","hcAssigned","hcLastActivity","hcRegisteredAt","teamsChangeHandler","onDeleteUsersSuccessCallback","onConfirmDeleteUser","selectAllState","handleOpenDeleteUsersConfirmDialog","userText","handleDeleteUsers","isLodashEmpty","countTeams","countEnrollments","registeredAt","lastActivity","UsersContainer","nudgeTrainees","useGetChallengeService","getChallengeApi","FETCH_CHALLENGE_START","FETCH_CHALLENGE_SUCCESS","fetchChallengeSuccess","FETCH_CHALLENGE_FAILURE","fetchChallengeFailure","useUploadChallengeAudioService","UPLOAD_CHALLENGE_AUDIO_START","UPLOAD_CHALLENGE_AUDIO_SUCCESS","UPLOAD_CHALLENGE_AUDIO_FAILURE","uploadChallengeAudioFailure","useCreateChallengeScriptLineService","CREATE_CHALLENGES_SCRIPT_LINE","createChallengeScriptLineAction","useDeleteChallengeScriptLineService","DELETE_CHALLENGES_SCRIPT_LINE","useModifyChallengeScriptLineService","MODIFY_CHALLENGES_SCRIPT_LINE","modifyChallengeScriptLineAction","useUpdateChallengeScriptLineService","UPDATE_CHALLENGES_SCRIPT_LINE","useModifyChallengeService","MODIFY_CHALLENGE","modifyChallengeAction","useResetChallengeService","RESET_CHALLENGE","useResetChallengeLogoService","RESET_CHALLENGE_LOGO","useStoreChallengeTempCopyService","STORE_CHALLENGE_TEMP_COPY","useRestoreChallengeFromTempActionService","RESTORE_CHALLENGE_FROM_TEMP","handleUpdateChallenge","storeChallengeTemp","restoreChallengeFromTemp","handleRestoreArchivedChallenge","modifyChallenge","useHandleRestoreArchivedChallenge","disableRestore","ChallengeStateSelectorContext","useChallengeState","ScriptLineSpeakers","ChallengeInfo","ChallengeInfoContainer","resetChallengeLogo","onRefreshLogo","StyledCommentTitle","StyledContentEditableInput","RepScriptItem","RepScriptItemContainer","StyledScriptLineWrapper","RepLine","CustomerScriptItem","handleScriptLineModify","generateAudio","CustomerScriptItemContainer","modifyScriptLine","uploadChallengeAudio","StyledCommentBody","TraineeRespondLine","CustomerLine","hideRepPlaceholder","ChallengeContainerContext","StyledChallengeScriptHeader","AttemptsCountContainer","AttemptsCountText","AttemptsCountValue","LeftButtons","Attempts","Form","UnlimitedSetting","SettingDescription","UnlimitedSettingDescription","LimitedSetting","LimitedSettingValue","LimitNumberContainer","LimitInput","LimitedSettingDescription","LimitWarning","customRadioButton","ChallengeAttemptsLimitView","initialSettings","isValidLimitValue","validateSettings","dirty","isValid","isLimited","limitValue","ChallengeAttemptsLimit","ModalContent","ModalSidebar","NavigationIcon","TabContent","ChallengeSettingsView","SmartGear","maskType","maskUnits","mask","ChallengeScriptHeaderView","showChallengeSettings","setShowChallengeSettings","isAudioProcessing","isGenerateForAllDisabled","isPlayDisabled","ChallengeScriptHeader","ChallengeScripts","ChallengeScriptsContainer","ChallengeBody","EditChallenge","getChallenge","handleResetChallenge","createEditChallengeSuccessCallback","editChallengeResponse","updateChallengeResponse","useCreateEditChallengeSuccessCallback","createEditChallengeFailedCallback","useCreateEditChallengeFailedCallback","handleArchiveChallenge","useHandleArchiveChallenge","allowedResponseTime","loggedInActionsHelper","generateCreateChallengeActionList","generateEditChallengeActionList","updateChallengeInfo","assignLabelsToChallenge","assignLabelsToChallengeServiceOptions","deleteLabelsFromChallengeServiceOptions","useGenerateEditChallengeActionList","editChallengeInfo","createChallengeActionList","editChallengeActionList","VIEW_TTS_SETTINGS","EditChallengeContainer","resetChallenge","createPlaylist","enableNewRelic","licenseKey","applicationID","beacon","errorBeacon","NewRelicApiContext","InjectNewRelic","async","innerHTML","NewRelic","getAppId","getLicenseKey","head","SubmissionsStateSelectorContext","SubmissionPaginationStateSelectorContext","AccuracyScoreStateSelectorContext","useSubmissionsState","useSubmissionPaginationState","useAccuracyScoreState","UpdatedSubmissionsStateSelectorContext","useUpdatedSubmissionsState","SubmissionDetailsStateSelectorContext","useSubmissionDetailsState","SUBMISSION_TYPE","SUBMISSION_VISIBILITY","SUBMISSION_FLAG_TYPE","searchSubmissionPaginationSuccess","submissionIds","SEARCH_SUBMISSION_PAGINATION_SUCCESS","updateChallengeSubmissionStart","UPDATE_CHALLENGE_SUBMISSION_START","updateChallengeSubmissionSuccess","UPDATE_CHALLENGE_SUBMISSION_SUCCESS","updateChallengeSubmissionFailure","UPDATE_CHALLENGE_SUBMISSION_FAILURE","getSubmissionDetailsStart","GET_SUBMISSION_DETAILS_START","getSubmissionDetailsFailure","GET_SUBMISSION_DETAILS_FAILURE","getSubmissionDetailsSuccess","submission","review","GET_SUBMISSION_DETAILS_SUCCESS","SubmissionActions","AccuracyScoreActions","SUBMISSION_STATUS","CHALLENGE_SUBMISSION_REVIEW_STATUS","CHALLENGE_SUBMISSION_REVIEW_STATUS_ITEMS","createSearchSubmissionsParams","order","visibility","showArchived","VISIBLE","useSubmissionActionsHelper","ARCHIVE_SUBMISSION","RESTORE_SUBMISSION","submissions","createSubmissionActionsHelper","useAccuracyScoreActionsHelper","createAccuracyScoreActionsHelper","SubmissionUpdateActions","UNAVAILABLE_SUBMISSION_ERROR","pluralize","noun","useSearchChallengeSubmissionsService","searchSubmissionsApi","shouldRemainFilterState","SEARCH_CHALLENGE_SUBMISSIONS_START","searchSubmissionsParams","reviewStatuses","filterChallenge","combinedParams","customFilters","SEARCH_CHALLENGE_SUBMISSIONS_SUCCESS","SEARCH_CHALLENGE_SUBMISSIONS_FAILURE","searchChallengeSubmissionsFailure","useSearchChallengeSubmissionPaginationService","SEARCH_SUBMISSION_PAGINATION_START","SEARCH_SUBMISSION_PAGINATION_FAILURE","searchSubmissionPaginationFailure","useGetSubmissionDetailsService","getSubmissionDetailsApi","getSubmissionReviewApi","reviewedAt","useGetSubmissionReviewService","GET_SUBMISSION_REVIEW_SUCCESS","getSubmissionReviewSuccess","useModifyScoreService","MODIFY_SCORE","modifyScore","useCheckAllSubmissionsService","CHECK_ALL_SUBMISSIONS","checkAllSubmissions","useCheckSingleSubmissionService","CHECK_SINGLE_SUBMISSION","useCheckSingleAccuracyScoreService","CHECK_SINGLE_ACCURACY_SCORE","useCheckAllAccuracyScoresService","CHECK_ALL_ACCURACY_SCORES","checkAllAccuracyScores","useSearchAccuracyScoreService","SEARCH_ACCURACY_SCORE_START","accuracyScores","SEARCH_ACCURACY_SCORE_SUCCESS","SEARCH_ACCURACY_SCORE_FAILURE","searchAccuracyScoreFailure","useGetSubmissionFromFeedService","useArchiveSubmissionsService","isAccuracyTest","archiveSubmissionsApi","countText","useRestoreSubmissionsService","restoreSubmissionsApi","StatusSection","SubmissionFilters","setReviewStatuses","setShowArchived","handleReviewStatusSelection","reviewStatus","Files","StyledSubmissionsNavigationContainer","SubmissionsNavigation","SubmissionsNavigationContainer","CheckMark","minWidthTableCell","useUpdateSubmissionStatusBulkActionService","updateActionRef","searchSubmissionsAndUpdateStatus","archiveSubmissionApi","restoreSubmissionApi","UpdateSubmissionActionList","updateSubmissionAction","useHandleSearchSubmissionsAndUpdateStatus","clearTotalCompletedItems","DEFAULT_REVIEW_STATUSES","ChallengeSubmissions","searchSubmissions","updatedSubmissions","onArchiveSubmission","selectedSubmissionIds","selectedSubmissions","updateAllSelectedSubmissions","updateSelectedSubmission","onRestoreSubmission","initialFilters","setFilters","handleViewSubmissionDetails","relation","isViewed","updateAllSubmissionsCheck","updateSubmissionStatusBulkActionService","archiveSubmissions","restoreSubmissions","handleApplyFilters","sbFirstName","sbPractisSetName","sbChallengeTitle","sbReviewedAt","sbScore","sbSubmittedAt","appliedFiltersCount","difference","handleSubmissionCheck","userLabels","score","VIEW_SUBMISSION","ChallengeSubmissionsContainer","updatedTeamsState","selectSelectedSubmissions","submissionChallenges","submissionPractisSets","saveLoading","updatedTeams","DEFAULT_SCENARIOS_SCOPE","WithScenarioScopes","accuracyscore","WithScenariosContext","useWithScenariosContext","useSaveScenarios","useDeselectAllScenarios","useScenariosState","_scenarios","PortableScenariosList","topListScenarios","bottomListScenarios","StyledEmptyScenarios","StyledEmptyScenariosContent","EmptyScenarios","PortableScenarios","PortableScenariosWithStore","portableScenarios","selectMultipleScenariosAction","AccuracyTestsFilters","saveScenarios","deselectScenarios","Accuracy","AccuracyScores","selectedAccuracyScores","useableParams","clearPortableScenarios","useClearPortableScenarios","accuracyScore","sbScenarioTitle","accuracy","AccuracyScoreContainer","searchAccuracyScores","selectSelectedAccuracyScores","Submissions","AccuracyTests","PlayIcon","PauseIcon","VideoRangeSlider","played","onChangeCommitted","FullScreenIcon","VolumeRangeSlider","volume","CopyLink","StyledVideoPlayerControls","ControlsWrapper","Controls","IconContainerSpacer","VolumeRangeContainer","LeftControls","RangeControls","InfoControls","StyledTimer","StyledVolume","StyledInfoTools","VideoPlayerControls","playing","muted","setPlaying","setMuted","onVolumeChange","onVolumeSeekDown","onToggleFullScreen","onSeek","onSeekMouseDown","onSeekMouseUp","onDownloadVideo","onCopyLink","videoLoading","elapsedTime","VolumeOff","VolumeUp","ReactPlayerContainer","NoVideoContainer","VideoPlayer","getDuration","getPlaying","muteVideo","showControls","setShowControls","playedSeconds","seeking","setSeeking","showLoading","setShowLoading","playerRef","playerContainerRef","handlePlayPause","handleToggleFullScreen","screenfull","isEnabled","toggle","isNaN","hh","getUTCHours","mm","getUTCMinutes","ss","getUTCSeconds","padStart","formatDisplayDate","getCurrentTime","attributes","preload","onReady","onProgress","changeState","novideo","mt","onRewind","seekTo","parseFloat","Infinity","DetailsHeader","StyledDetailsSubmissionInfo","StyledInfoSection","Row","DetailsSubmissionInfo","redirectToChallenge","handleDownloadVideo","handleCopyLink","StyledSelectBoxItemContainer","StyledSelectBoxItemWrapper","StyledBulletBackground","StyledSelectBoxItem","StyledBullet","alignRight","SelectBoxItem","finalSpot","finalItem","firstItem","handleSelect","isRound","SelectBoxLabel","StyledSelectBoxContainer","BoxArea","ButtonArrow","StyledDetailsSubmissionReview","StyledDetailsBody","ScoreRow","ActionRow","ExampleContent","Example","StyledSelectBox","formatValueLabel","StyledSelectBoxHeader","StyledSelectBoxHeaderItem","StyledDetailsArrowsContainer","StyledLeftArrowContainer","StyledRightArrowContainer","SCORE_ITEMS","DetailsSubmissionReview","submitted","canRedo","onCompleteReviewClicked","changeSubmission","itemsTotalCount","currentItemPosition","requestRedoClicked","reviewPermissionDenied","reviewValue","arr","generateScoreItemArray","amount","paddingTop","paddingLeft","clarity","knowledge","confidence","enthusiasm","goalAchieved","note","REVIEW_SUBMISSION","REQUEST_SUBMISSION_REDO","RequestRedo","RequestReminder","doNotShowWarning","onShowWarningClicked","CopyLinkNotificationView","CopyLinkNotification","BrokenVideo","ErrorTitle","ErrorDescription","UnavailableContentView","UnavailableContent","UnavailableChallengeView","UnavailableChallenge","UserImage","UserText","MainContent","ThumbnailContainer","Thumbnail","ThumbnailTitle","ThumbnailDescription","StatsContainer","Stats","StatsTitle","StatsScore","StatsDelimiter","StatsItem","StatsItemTitle","StatsItemPoints","StatsItemLine","StatsItemPoint","Buttons","WhiteButton","WhiteButtonTitle","GreyButton","GreyButtonTitle","StatsItemsList","StatsItemPointList","ScreenLoadingView","LogEvent","ScreenLoading","StyledDetailsContainer","StyledDetailsContainerInner","ChallengeCopiedKeyName","SubmissionDetails","handleSaveSubmissionReview","requestSubmissionRedo","markSubmissionAsViewedService","handleCopyChallengeLink","showCopyLinkNotification","handleHideCopyLinkNotification","getSubmissionReview","DO_NOT_SHOW_WARNINGS","requestRedoOpened","setRequestRedoOpened","requestRedoReminderOpened","setRequestRedoReminderOpened","setDoNotShowWarning","setReviewPermissionDenied","saveReview","newReview","restrictedUsersList","finalUsersList","doNotShowRequestRedoWarning","requestRedoSubmitted","redo","setVideoLoading","traineeId","SubmissionDetailsContainer","localOffset","setLocalOffset","submissionPagination","submissionPaginationLoading","submissionTotalCount","saveSubmissionReview","performSubmissionReviewApi","usePerformSubmissionReviewService","requestSubmissionRedoApi","useRequestSubmissionRedoService","performSubmissionActionApi","useMarkSubmissionAsViewedService","getSubmissionDetails","getSubmissionFromFeed","challengeLoading","setShowCopyLinkNotification","copyChallengeLink","useCopyChallengeLink","searchChallengeSubmissionPaginationService","successGetSubmissionDetailCallback","isDirectLink","locationSearchParams","locationFilters","submissionIndex","changeSubmissionHandler","nextSubmissionId","StyledResetContent","TraineeLogin","SelectedSubtitle","UserProfileFilters","totalFiltersSelectedCount","PerformanceSectionRef","reff","PerformanceSection","onPractisSetsUpdate","searchUserPractisSets","unEnrollPractisSetService","onGetTrainee","remindUsers","updateAllPractisSetCheck","handleDeleteEnrollmentsSuccess","handleUnEnrollPractisSet","hcStarted","hcAccuracyAvg","hcTrainingTime","hcProgressValue","useImperativeHandle","filterIconCount","handleDeletePractisSets","showDueDateData","PerformanceSectionContainerRef","PerformanceSectionContainer","getUserPerformance","fetchPortablePractis","updatedUserPractisSetsState","searchUserPractisSetsDebounced","resetUserPerformance","perfSecConRef","refreshPractisSetsSearch","fetchPortablePractisSets","processedUser","practisSetDueDates","initialTeamIds","StyledUserDetailsInfo","ReportGeneralInfoWrapper","StyledUserInfoWrapper","StyledUserInfoContainer","StyledUserOptions","Performance","setPractisSetsCount","setUseGoBack","fetchUserAllPractisSets","handleSettingsClick","onNudgeUserSuccessCallback","assignFiltersToUserService","practisSetsWithEnrollmentIds","assignedPractisSet","handleOpenAssignFilter","perfRef","refreshPractisSets","flatListIds","updatedFlatListIds","isCancel","PerformanceContainer","libraryState","PublicRoute","eventInfo","isAdminOnly","PlatformVersions","eventInfos","CREATE_COMPANY","UPDATE_COMPANY","DELETE_COMPANY","CREATE_PRACTIS_ADMIN","UPDATE_PRACTIS_ADMIN","DELETE_PRACTIS_ADMIN","GENERATE_CHALLENGE_FROM_SCENARIO","UPDATE_STAGING","DELETE_STAGING","CREATE_SUBMISSION","UPDATE_SUBMISSION","DELETE_SUBMISSION","CREATE_SCORE","UPDATE_SCORE","DELETE_SCORE","UPDATE_SETTING","UPDATE_TEAM","DELETE_TEAM","DUPLICATE_TEAM","USER_ADDED_INTO_TEAM","USER_TEAM_LEAD_PROMOTION","USER_TEAM_LEAD_REVOKE","CREATE_THEME","UPDATE_THEME","DELETE_THEME","ASSIGN_THEME_TO_PRACTISE_SET","ADD_COVER_INTO_THEME","REMOVE_COVER","ASSIGN_COVER_TO_PRACTISE_SET","ASSIGN_COVER_TO_SCENARIO","eventInfosMap","userName","withEmail","userEmail","companyAndUserNames","atTime","platformVersionNames","IOS_VERSION","ANDROID_VERSION","Details","staging","tm","assignment","themeId","searchLogsDispose","SEARCH_LOGS_DISPOSE","useSearchLogsService","searchLogsApi","SEARCH_LOGS_START","logs","SEARCH_LOGS_SUCCESS","SEARCH_LOGS_FAILURE","searchLogsFailure","LogsStateSelectorContext","includeAdminOnly","FiltersApplyButton","FiltersButton","FiltersCheckbox","FiltersDivider","FiltersCheckboxList","divisible","topItems","bottomItems","renderCheckbox","List","FiltersClearButton","FiltersFieldSet","FiltersNoItems","itemsName","Column","NoItemsTitle","FiltersPopupActions","FiltersPopupBody","FiltersPopupButton","FiltersPopupFieldSets","FiltersSearchInput","FiltersSelectedItems","FiltersSelectedItemsText","selectedItemsCount","itemName","FiltersSelectedText","FiltersToggleAllButton","allItemsSelected","onToggleAllItems","colorsId","colorsInfos","unselect","LogFiltersEvents","selectedEvents","onChangeSelectedEvents","eventSearchPattern","setEventSearchPattern","checkboxListItems","pattern","allEvents","filteredEvents","setSelectedEvents","events","handleChangeSearchEventsPattern","searchPattern","handleChangeSelectedEvent","handleClickToggleAllEvents","UserRoleFilters","onChangeSelectedRoles","rolesHelper","rolesByName","getRoleByName","useUserRolesService","allRoles","Roles","roleCheckboxItems","handleSelectedRoleChange","LogFilters","onApplyFilter","handleClickClear","handleClickApplyFilter","NoLogs","Payload","StyledDetailsWrapper","StyledDetails","tableToolsRootStyle","CompanyLogs","searchLogs","onUnmount","hcEvent","hcCreatedAt","hcCreator","handleChangeRole","handleChangeStartDate","handleChangeEndDate","handleChangeDate","handleShowDetails","handleCloseDetails","onMouseEnter","onMouseLeave","VIEW_LOG_DETAILS","onShowDetails","CompanyLogsContainer","logsState","searchCompanyLogs","addCompanyFilter","searchCompanyLogsDebounced","handleUnmount","LogActionButton","MobileNumberContainer","SecondaryText","ErrorText","MobileNumberLogin","getPhoneCode","showLoginWithEmail","setShowLoginWithEmail","mobileNumber","setMobileNumber","getErrorMessage","handleSendCode","redirectToLogin","activeIndex","StyledCursorText","keyframes","KEY_CODE","VerificationCodeInput","pValue","emptyValue","setActiveIndex","codeInputRef","itemsRef","isCodeRegex","focusOrBlurItem","currentItem","focusItem","blurItem","onItemFocus","codeInput","onPaste","pastedString","clipboardData","getData","inputMode","changeValue","onKeyUp","nextIndex","prevIndex","isLast","isDeleting","tabIndex","MobileNumber","VerificationCodeContainer","VerificationError","SentLabel","CountdownTimer","CheckVerificationCodeView","isVerifying","verificationError","resendStatus","remainingTime","isCodeValid","showSent","showCountDown","onCodeChange","onVerify","onResend","CheckVerificationCodeController","CheckVerificationCode","onVerifySuccess","setCode","setRemainingTime","remainingTimeInterval","setIsVerifying","setVerificationError","setResendStatus","handleVerify","handleResend","CODE_TIMEOUT","newCode","VerifyMobileNumberController","VerifyMobileNumber","loginByPhoneCode","handleVerifySuccess","redirectToMobileNumberLogin","TelepromterStateSelectorContext","useTelepromterState","CompletedIcon","clipPath","ExitIcon","Completed","redirectToScenario","redirectToPlayback","redirectToTraining","PreviewContainer","VideoContainer","StyledVideoPlayer","LineContainer","Playback","telepromterState","generatedLines","playbackVideo","videoBlob","setDuration","redirectToCompleted","mapScriptLines","prevLineDuration","minDurationValue","maxDurationValue","localScriptLines","setLocalScriptLines","currentScriptLine","scriptLine","EmptyContainer","ScriptLineDuration","started","Next","enableBackground","IconSection","Circle","Hold","Fill","Left","Right","InnerCircle","Countdown","countdown","setCountdown","timer","prevCountdown","useGetTelepromterScenarioService","FETCH_TELEPROMTER_SCENARIO_START","FETCH_TELEPROMTER_SCENARIO_SUCCESS","fetchTelepromterScenarioSuccess","FETCH_TELEPROMTER_SCENARIO_FAILURE","fetchTelepromterScenarioFailure","useAddGeneratedScriptLineService","ADD_GENERATED_SCRIPT_LINE","addGeneratedScriptLineAction","useSetRecordedVideoService","SET_RECORDED_VIDEO","setRecordedVideoAction","useResetTelepromterService","RESET_TELEPROMTER","Hidden","ScriptLineContainer","GoNextButton","StyledVideo","Training","recorder","resetTelepromter","captureCamera","camera","addGeneratedScriptLine","setRecordedVideo","initializeCamera","srcObject","RecordRTC","startRecord","stopRecordingCallback","getBlob","destroy","stopRecord","renderVideo","playsInline","startTraining","setStartTraining","tempScriptLines","setTempScriptLines","repLineDuration","setRepLineDuration","redirectToExit","timeout","prevLines","prevScriptLines","shift","lineTimer","lineDurationTimer","Exit","PhoneEmulator","Telepromter","StyledCreatedByList","CreatedByItemWrapper","CreatedByItem","CreatedByFiltersList","setUserFilters","topListCreatedBy","bottomListCreatedBy","filterUsers","EmptyTextWrapper","CreatedByFilters","selectCreatedByUsers","fetchUsers","draftsState","getProcessedUsers","selectedUsersCount","EditedByFiltersList","EditedByFilters","selectEditedByUsers","editedByUsers","SectionContainer","DraftsFilter","createdBySelectedUsers","createdBySavedUsers","saveCreatedByUsers","editedBySavedUsers","editedBySelectedUsers","saveEditedByUsers","NoDrafts","getSocketState","socketProgress","Drafts","drafts","draftEditUpdated","searchDrafts","onDeleteDraft","updatedDrafts","updateAllSelectedDrafts","updateSelectedDraft","setCreatedBySelectedUsers","setCreatedBySavedUsers","setEditedBySelectedUsers","setEditedBySavedUsers","socketLoaderState","srtName","srtUsersCount","srtCreatedBy","srtCreatedAt","srtLastEditedBy","srtUpdatedAt","handleCreatorIdChangeEvent","handleEditorIdChangeEvent","handleDeleteDrafts","onConfirmDeleteDrafts","handleDraftCheck","DraftsContainer","updatedDraftsState","searchDraftsDebounced","deleteDraft","AiLogsStateSelectorContext","AiLogItemStatus","updateAiLogsFlagFailure","UPDATE_AI_LOGS_FLAG_FAILURE","useSearchAiLogsService","searchAiLogsApi","userTeamIds","SEARCH_AI_LOGS_START","requestParams","queryUser","dateStart","toISOString","dateEnd","aiLogs","SEARCH_AI_LOGS_SUCCESS","SEARCH_AI_LOGS_FAILURE","searchAiLogsFailure","useToggleAiLogsFlagService","addSubmissionFlag","deleteSubmissionFlag","UPDATE_AI_LOGS_FLAG_START","flagCompanyId","DELETE_AI_LOGS_FLAG_SUCCESS","deleteAiLogsFlagSuccess","COMPANY","ADD_AI_LOGS_FLAG_SUCCESS","addAiLogsFlagSuccess","AiAssessmentFilters","setSelectedTeams","ExclamationCircle","points","ScenarioWrapper","StyledExclamationCircleIcon","ExclamationCircleIcon","AssessmentLogsBig","FlagActive","FlagInactive","FlagHandle","FlagActiveIcon","FlagInactiveIcon","FlagToggleView","CompanyAiAssessment","searchHandler","unMount","toggleFlag","isFirstLoad","setIsFirstLoad","doSearch","isEmptyState","handleRefresh","headerOptions","useHeaderOptions","flag","useCalendarFilterOptions","emptyStateOptions","scenarioName","scenarioStatus","repNumber","submissionAccuracyMode","dateCreated","FlagToggle","CompanyAiAssessmentContainer","searchAiLogs","useAiLogsUnmountService","toggleAiLogsFlag","aiLogsState","loadingFlag","PortableTeamLeadersList","teamLeaders","topListTeamLeaders","bottomListTeamLeaders","leader","LeaderCrown","EmptyTeamLeaders","PortableTeamLeaders","processedTeamLeaders","filterTeamLeaders","selectedTeamLeadersLength","TeamLeadersContainer","MyTeamsFilters","onTeamLeadersChange","useMyTeamsState","onSelectTeamLeader","onSelectAllTeamLeaders","saveTeamLeaders","resetTeamLeaders","deselectTeamLeaders","NoTeams","handleViewTeam","handleManageTeam","handleDeleteTeam","onDuplicateTeam","assignLabelsToTeams","VIEW_TEAM","ASSIGN_TEAM_LABEL","multiTableCellStyle","ListOfTeams","updatedState","updatedTeam","deleteLabelFromTeam","updateAllSelectedTeams","updateSelectedTeam","fetchTeamLeaders","searchTeamsForFilters","useSearchTeamsPortableService","singleTeamDelete","useSingleDeleteTeamService","ifTeamsUpdateChanged","teamsWithoutDefault","hcMembers","clearAllTeamsCheck","updateAllTeamsCheck","isDefaultTeam","getTeamLeaderPicture","pictureCount","isNewlyAssigned","teamsLeadersChangeHandler","filteredTeams","teamsToClear","deleteTeamsServiceOptions","searchAndDeleteTeams","onDeleteTeamsSuccessCallback","handleStartDeleteMembersFromTeamBulkAction","useUpdateTeamsBulkActionService","handleRemoveSingleTeam","singleTeamId","deletedTeamId","handleConfirmDeleteDialog","handleOpenDeleteTeamConfirmDialog","handleRemoveSelectedTeams","LIST_TEAM","getTeamLabels","teamRemovedLabels","duplicateTeamBulkActionService","newTeamDataRef","createNewTeam","assignLabelsToTeam","getCurrentTeamMembers","getCurrentTeamMembersAndAssignToNewTeam","currentTeamId","newTeamId","handleAddAssignMembersActionToActionList","AssignMembersToTeamAction","handleAddAssignLabelsActionToActionList","currentTeamLabelIds","assignedLabelList","AssignLabelsToTeamAction","handleAssignRelationsToNewTeam","handleStartDuplicateTeamBulkActionService","generatedCopyOfTeamName","useDuplicateTeamBulActionService","handleDuplicateTeam","TotalCountForChecking","handleTeamCheck","deletedlabelIds","handleUpdateTeamLabels","ListOfTeamsContainer","searchTeamsDebounced","deleteLabelFromTeamApi","useDeleteLabelFromTeamService","teamSearchState","myTeams","selectedMyTeamsItems","OverdueLearnersNoResult","OverdueLearnersFilter","OverdueNudgeMessagePrefix","OverdueLearnersListActions","OverdueLearnersView","sorting","teamsData","handleToggleLabels","checkIsLabelTagsOpen","handleSearchChange","onLabelsFilterChange","onTeamsFilterChange","onNudgeSingleUser","updateIsSelectAll","updateSelectedUsers","selectAllHandler","onSelectUser","isTableHeadersDisabled","hcTeamName","existingTeams","OverdueLearnersStateSelectorContext","useGetOverdueLearnersService","getOverdueLearnersApi","GET_OVERDUE_LEARNERS_START","GET_OVERDUE_LEARNERS_SUCCESS","getOverdueLearnersSuccess","GET_OVERDUE_LEARNERS_FAILURE","getOverdueLearnersFailure","OverdueLearnersController","setSelectedUsers","searchOverdueLearners","selectUserHandler","CheckCircle","Warning","Saving","StatusText","LastUpdatedText","StatusIcon","UpdateStatusView","updateStatus","ERROR","StyledHeaderTitle","HeaderActions","handleCancel","UpdateStatus","ConfirmCheckMark","CancelCross","disabledButton","SaveButton","InputWithButtonsView","showButtons","isSaveDisabled","InputWithButtonsController","setShowButtons","setIsDisabled","setHasError","handleSave","blur","Tools","AssignLabelsButton","StyledActionsTitle","handleUpdateTeamName","getPreSelectedLabels","assignLabelsLocal","handleApplyLabels","InputWithButtons","ActionsContainer","AddArrow","AllUsersFilter","currentLabelIds","clearDisabled","Counter","showHeight","ListCell","ListRow","ListCheckboxCell","ManageUsersSection","ManageUsersButton","AddArrowIcon","StyledAssignedLabelList","LastTrainingAtCell","FilteredByLabelsContainer","AllUsers","orderByUserName","orderByLastTrainingAt","onSelectAllLoadedUsers","checkboxDisabled","onSuccessAddUsersBulkActionCallback","ifLabelsChanged","registrationFilters","setRegistrationFilters","assignMembersToTeamService","assignMembersToTeamServiceOptions","addMembersToTeamSuccessCallback","handleStartAddMembersToTeamBulkAction","handleAddMembersToTeam","isUserSelected","AllUsersContainer","teamEditState","searchTeamAllUsers","searchTeamAllUsersDebounced","updatedUsersState","allUsers","isPartiallySelected","registrationsStatusLength","newSelectedUsers","Crown","handleGenerateTeamLeadersCountText","leadersCount","TeamLeaderCell","TeamLeaderIcon","ToggleWrapper","TeamMembers","orderByTeamLeader","handleTeamLeaderChange","deleteMemberLabel","onSuccessRemoveUsersBulkActionCallback","filterByRegistrationLength","deleteMembersFromTeamServiceOptions","deleteMembersFromTeamSuccessCallback","handleRemoveSelectedUsers","member","TeamMembersContainer","searchTeamMembers","searchTeamMembersDebounced","tableBodyContainerStyle","tableToolsWrapperStyle","searchInputStyle","DefaultTeamMembers","revokeLeaderDisabled","INFINITE_SCROLL","DefaultTeamMembersContainer","deleteLabelFromUser","StyledModalPage","DefaultBody","ManageTeam","teamMembersRef","allUsersRef","ManageTeamContainer","teamState","teamStateData","resetPage","updateTeamName","handleGoBack","NameContainer","NameInput","ActionContainer","ButtonDelimiter","CreateTeamView","onChangeName","CreateTeamController","SubmissionsStatus","ChartBox","ChartBoxTitle","ChartBoxBody","StyledChartBox","Statistics","BigText","SmallText","AccuracyTestsContainer","ProgressContainer","NumbersChartsBodies","VerticalBorder","Completion","passedScenarioCount","passedChallengeCount","NoChartData","customIcon","EmptySection","emptyText","ToolTip","positions","singleTitle","LineChart","singleLabel","containerRef","dimensions","setDimensions","setSelection","showToolTip","setShowToolTip","toolTipPositions","setToolTipPositions","header","toolTipContent","setToolTipContent","offsetWidth","scaleBand","calculateMaxYValue","maxYValue","scaleLinear","xAxis","axisBottom","tickValues","tickFormat","tickSizeOuter","yAxis","axisLeft","svg","attr","rect","bandwidth","BAR_WIDTH","on","clientY","call","ChartBoxHeader","ChartBoxDescriptionValue","ChartBoxDescription","DailyTimeSpentIcon","ChartBoxDescriptionValueStyled","ChartBoxDescriptionValueNormal","DailyTimeSpent","totalTime","ScenariosIcon","ChallengeIcon","TickIcon","StyledListBox","StyledScenarioItem","ItemType","ItemWithIconContainer","ItemContainer","ItemTitle","ItemStatus","ItemStatusGreen","ItemStatusBlue","ItemStatusGrey","RepsContainer","StatisticsValue","StatisticsIndicator","RepsDescription","AttemptText","ReviewButton","PlayScreenContainer","PlayScreen","PlayButton","StyledTickIcon","PlayTriangle","NoPlay","ScenarioListItem","enrollmentProgress","redirect","handleReviewReps","modeScenario","passed","inProgress","countReps","notStarted","countTries","ChallengeListItem","isSubmitted","ReportsItems","redirectScenario","redirectChallenge","REVIEWED","UPLOADING","PractisSetReport","onGetPractisSetReport","onResetPractisSetReport","closeNudgeDialog","handleNudge","getDueDateTitle","rep","num","timeSpent","PractisSetReportContainer","resetPractisSetReport","useGetScenarioRepsService","getScenarioRepsApi","GET_SCENARIO_REPS_START","GET_SCENARIO_REPS_SUCCESS","getScenarioRepsSuccess","GET_SCENARIO_REPS_FAILURE","getScenarioRepsFailure","useClearScenarionRepsService","CLEAR_SCENARIO_REPS","ScenarioRepsStateSelectorContext","borderTop","ScenarioRepsView","repGeneralNumber","setProgress","searchScenarioReps","clearScenarioReps","selectTrainerState","selectTainerPractisSetState","selectUpdatedProgressState","PractisSetsEnrollmentState","TrainerInvitationState","assignUsers","PractisSetReportsState","report","UsersState","AuthState","auth","InvitationsState","UserPerformanceState","UpdatedUsersState","UpdatedInvitationsState","UpdatedUserPractisSetsState","VoiceGenerationState","voiceGeneration","LibraryPractisSetsState","libraryPractisSets","UpdatedLibraryPractisSetsState","libraryUpdatedPractisSets","LibraryScenariosState","libraryScenarios","UpdatedLibraryScenariosState","libraryUpdatedScenarios","LibraryChallengesState","libraryChallenges","UpdatedLibraryChallengesState","libraryUpdatedChallenges","ChallengeState","SubmissionsState","SubmissionPaginationState","SubmissionDetailsState","submissionDetails","AccuracyScoreState","UpdatedSubmissionsState","CompanyVoiceSettingsState","companyVoiceSettings","LabelsState","LabelsConfigState","labelsConfig","UpdatedLabelsState","SelectPermissionsState","SelectLogsState","SelectTelepromterState","telepromter","DraftsState","DraftEditState","UpdatedDraftsState","SelectAiLogsState","TeamsState","UpdatedMembersState","updatedMembers","UpdatedTeamsState","TeamMembersState","TeamsEditState","RolesState","CompanyAdminsState","companyAdmins","CompanyUserStatsState","companyUserStats","ReportsState","reports","OverdueLearnersState","overdueLearners","ScenarioRepsState","scenarioReps","RoleplaysState","roleplays","RoleplayState","roleplay","TraineeInvitationActions","Published","useTraineeInvitationActionHelpers","canUpdateDueDate","createTraineeInvitationActionHelper","findSelectedTraineeDueDate","selectedTraineeId","menuPaperStyle","DueDateListAction","setAnchorEl","MenuListProps","PaperProps","TraineeQuickAssignment","selectedTrainees","updateSelectedTrainees","updateAllSelectedTrainees","searchTrainees","onEnrollPractisSetsToUsers","localLabels","useLocalLabelsState","setLabelSelect","localSelectedLabels","onChangeOrderBy","atFirstName","atRegisteredOn","disabledAssign","setDisabledAssign","loadingAssign","setLoadingAssign","updateAllTraineesCheck","enrollmentParams","selectedTrainee","selectAllDueDate","handleCreateEnrollmentsBulkActionSuccess","handleCreateEnrollmentsBulkActionService","traineesToClear","clearLabelFilters","saveLabelFilters","dueDateSet","onLocalRemoveLabels","handleTraineeCheck","TraineeQuickAssignmentContainer","searchAssignUsersDebounced","enrollPractisSetsToUsers","updateAllSelectedInvitationTrainees","TraineeInvitation","initialTeamMembersSearchParams","TraineeInvitationContainer","MainImage","ErrorMessage","NoPlayIcon","BlankVideoView","BlankVideo","BlockSection","TopContainer","TopInfo","TopTitle","TopDescription","BottomTitle","BottomDescription","isError","BrokenSharedLinkView","wssurl","BrokenSharedLink","TextEllipsis","CloseWrapper","TopWrapper","ScoreWrapper","UserWrapper","PractisSetTitle","UserTextWrapper","DateWrapper","PlaybackVideo","videoDownloading","isLoadingError","userFullName","PlaybackScreen","setVideoDownloading","copyAccuracyLink","useCopyAccuracyLink","FilledCircle","ProgressModal","progressValue","thickness","OnboardingRole","socket","WebSocket","PAGE_KEYS","ProgressPage","setIsOpen","socketConnetion","setSocketConnection","close","keyArray","perc","onerror","readyState","SOCKET_PROGRESS_HIDE","OnboardingContent","OnboardingText","OnboardingGreeting","OnboardingTitle","OnboardingDescription","DownloadButtons","UserOnboardingView","isTablet","isDesktop","appStoreImage","googlePlayImage","mainImagePhone","mainImagePhone2x","mainImagePhone3x","mainImageTablet","mainImageTablet2x","mainImageTablet3x","mainImageDesktop","mainImageDesktop2x","mainImageDesktop3x","OnboardingButton","AdminOnboardingView","onRedirect","DownloadTitle","TeamLeaderOnboardingView","Onboarding","handleRedirect","ADMIN","AdminOnboarding","TEAM_LEAD","TeamLeaderOnboarding","UserOnboarding","InvalidInvite","brokenLink","EnterMobileNumberView","canSkip","onSendCode","onSkip","onMobileNumberChange","EnterMobileNumberController","confirmUserPhoneNumber","AddMobileNumberView","currentStep","onBackFromVerify","ENTER","EnterMobileNumber","AddMobileNumberController","AddMobileNumber","initialVerificationStep","setCurrentStep","setCanSkip","finalizeVerification","tempToken","handleBackFromVerify","pushState","TextSection","TraineeSplashView","TeamMembersFilter","NoMembers","TeamMembersIcon","viewProfileHandler","onSendNudge","getMembersReportService","onDeleteMember","canRemoveTeamLeader","Corona","StyledAvatarPlaceholder","StyledCoronaIcon","NameAdditionalInfo","itemsOnPage","teamUpdateState","onNudgeMembers","markTeamAsViewed","deleteMembersFromTeamService","lastRefreshedDate","setLastRefreshedDate","bulkRemoveDisabled","hcTeamMembers","hcTraining","hcCompletedEnrollmentCount","hcProgressEnrollmentCount","hcPendingEnrollmentCount","refreshHandler","onSinglePractisExportClicked","memberId","onDeleteTeamMembersSuccessCallback","CLEAR_TEAM_UPDATE_STATUS","handleDeleteTeamMembers","handleDeleteTeamMembersSingleAction","getAdditionalMemberInfo","REMOVE_TEAM_MEMBER","trainingStatus","enrollmentNotStarted","enrollmentEnrolled","enrollmentCompleted","isBefore","getFormattedLastTrainingAt","updatedMembersState","getMembersReportApi","useGetMembersReportService","markTeamAsViewedService","markTeamAsViewedApi","useMarkTeamAsViewedService","TeamsPageController","prevTeamId","searchTeam","resetTeamInfo","fetchTeamData","justify","ActionWarningContainer","WarningText","StopBulkActionModalView","FailedModalView","getChunkServiceState","chunkService","chunkServiceReducer","StopWarning","ProgressModalView","onStopProgressModal","handleClickAwayProgressModal","getModalDialogsState","modalDialogs","modalDialogsReducer","ConfirmationModalView","ModalDialogsController","isStopBulkActionModalOpen","setIsStopBulkActionModalOpen","handleStopBulkActionServiceModal","handleCancelClick","modalComponent","OldSubmissionRouterController","singleRoute","allRoute","getSubmissionIdByOldId","OldSubmissionRouter","OldAccuracyTestController","OldAccuracyTest","OldChallengeController","OldChallenge","ReportType","useGetReportsService","getReportsApi","useGetReportsApi","GET_REPORTS_START","GET_REPORTS_SUCCESS","getReportsSuccess","GET_REPORTS_FAILURE","getReportsFailure","ReportsStateSelectorContext","PractisSetSummary","TeamLeaderSummary","mask-type","UserActivity","BillingReport","DATE_RANGE_PARAM_NAME","getLastWeekDateRangeParam","TrainingTime","LOADING_ITEMS","ReportInfoMap","PRACTIS_SET_SUMMARY","resultFormat","USERS_ACTIVITY","TEAM_LEADER_ACTIVITY","BILLING","TRAINING_TIME","ResultFormat","ReportingCardView","ReportingCard","CardContainer","CardIcon","SingleTextLine","RoundSkeleton","TextLine","ReportingCardSkeletonView","FilterSkeletonView","ReportsView","ReportsController","Reports","getReports","reportsState","FieldName","AdvancedSettingsHeader","AdvancedSettingsTitle","ResetButton","AdvancedFieldContainer","QuestionContainer","TooltipContainer","TootlipTitle","TootlipContent","SampleTextContainer","Subheader","RoleplayCard","isDotMenuVisible","SkeletonContainer","NoRoleplayLink","OwnerName","SidebarRoleplaysLarge","useGetRoleplaysService","getRoleplaysApi","useGetRoleplaysApi","GET_ROLEPLAYS_START","GET_ROLEPLAYS_SUCCESS","getRoleplaysSuccess","GET_ROLEPLAYS_FAILURE","getRoleplaysFailure","RoleplaysStateSelectorContext","BodySkeletonContainer","RoleplayContainer","RoleplaySkeletonContainer","LineSkeleton","HeaderSkeletonContainer","bodyLineWidths","lineWidths","RoleplaySceleton","useGoogleAnalyticsEvents","gtag","category","userInformation","eventPayload","event_category","useGoogleAnalyticsWithRoleplay","sendEvent","additionalData","UserID","Email","CompanyID","CompanyName","Environment","RoleplaysController","Roleplays","getRoleplays","duplicateRoleplay","deleteRoleplay","rolepayIds","useDeleteRoleplayApi","trackEventWithRoleplay","infoPanel","roleplaySeachTrackEvent","handleCreateRoleplay","handleDeleteRoleplay","canCreateRoleplay","NoEntryText","owner","SearchableFilterHeaderKey","setFilterHeaderSearchTerm","SET_FILTER_HEADER_SEARCH_TERM","useSetFilterHeaderSearchActive","isSearchActive","SET_FILTER_HEADER_SEARCH_ACTIVE","setFilterHeaderSearchActive","selectPractisSet","selectedPractisSetId","SELECT_PRACTIS_SET","useClearSelectedPractisSet","useDisablePractisSetFilter","DISABLE_PRACTIS_SET_FILTER","disablePractisSetFilter","selectSingleTeam","selectedTeamId","SELECT_SINGLE_TEAM","initialSingleTeamFilterState","useSingleTeamFilterState","singleTeamFilterReducer","useClearSelectedTeam","useDisableSingleTeamFilter","DISABLE_SINGLE_TEAM_FILTER","disableSingleTeamFilter","COUNTDOWN_DATE_KEY","useGenerateReportService","interval","valueInterval","unmount","sessionStorage","startDateFromStorage","diffInMiliseconds","diffInSeconds","useCountdown","remainingTimeout","startCountDown","isGenerating","setIsGenerating","generateReportApi","reportType","reportData","useGenerateReportApi","generateReport","useGetReportAvailabilityService","isAvailable","setIsAvailable","getReportAvailabilityApi","useGetReportAvailabilityApi","getReportAvailability","available","InfoText","EmailText","ReportingControlPanelView","isSubmitLoading","submitText","isClearDisabled","clearText","onClear","ReportingControlPanelController","ReportingControlPanel","useQueryParamListener","paramValueRef","useSetQueryParam","PRACTIS_SET_QUERY_PARAM_NAME","NoReportingPractisSets","TitleSkeleton","SubHeader","FilterHeaderView","initialFilterHeaderState","SINGLE_TEAM","MULTIPLE_TEAMS","LABELS","useFilterHeaderState","filterHeader","SearchInputView","SearchInputController","onExit","handleKeyDown","handleBlur","ShowSearch","IconSkeleton","InputContainer","SearchButtons","ClearButton","ClearSeparator","SearchClose","SearchableFilterHeaderView","hasSearch","showSearchInput","onShowSearch","onHideSearch","onSearch","SearchableFilterHeader","storeKey","setSearchActive","useSetFilterHeaderSearchTerm","prevSearchTerm","handleShowSearch","handleHideSearch","handleClear","onSearchDebounced","FilterContainerView","headerProps","searchableHeaderProps","PractisSetFilterView","isNoSearchResultState","onPractisSetSearch","handleSelectPractisSet","initialPractisSetFilterState","usePractisSetFilterState","practisSetFilterReducer","PractisSetFilterController","prevSelectedTeamId","clearSelectedPractisSet","onSelectPractisSet","useSelectPractisSet","setQueryParam","setSelectedPractisSetInStore","setSelectedPractisSet","searchByTeamId","handleSearch","SINGLE_TEAM_QUERY_PARAM_NAME","SingleSelectTeamFilterView","onTeamSearch","onTeamSelect","SingleSelectTeamFilterController","selectSingeTeam","useSelectSingleTeam","clearSelectedTeam","setSelectedTeamInStore","setSelectedTeam","handleTeamSearch","TEAMS_QUERY_PARAM_NAME","SELECT_MULTIPLE_TEAMS","initialMultipleTeamsFilterState","selectedTeamIds","useMultipleTeamsFilterState","multipleTeamsFilter","useClearMultipleTeams","useDisableMultipleTeamsFilter","DISABLE_MULTIPLE_TEAMS_FILTER","disableMultipleTeamsFilter","useClearMultipleTeamsFilter","clearMultipleTeams","setMultipleTeamsSearchActive","CounterContainer","SelectionCounter","ToggleAllSelection","ListContainer","MultipleSelectTeamsFilterView","onTeamToggle","onAllToggle","isSelected","MultipleSelectTeamsFilterController","setSelectedTeamsInStore","handleTeamToggle","newTeamIds","handleAllToggle","LABELS_QUERY_PARAM_NAME","labelsFilterReducer","DISABLE_LABELS_FILTER","ChildContainer","LabelsFilterItemView","LabelsFilterItemController","openLabels","onSelect","LabelsFilterView","isInSearch","onToggleAll","LabelsFilterController","labelsFilter","toggleCollapseAll","resetCollapsed","processedLabels","setSelectedLabels","handleToggleAll","useMonthFilterState","monthFilter","useSelectYear","SELECT_YEAR","selectYear","useSelectMonth","SELECT_MONTH","selectMonth","useClearYearAndMonth","CLEAR_YEAR_AND_MONTH","useDisableMonthFilter","DISABLE_MONTH_FILTER","disableMonthFilter","Underline","MonthItemView","data-text","MONTHS","MonthSelectorView","isDisabledMonth","isSelectedMonth","isCurrentMonth","onSelectMonth","MonthSelector","selectedYear","selectedMonth","currentYear","presentYear","presentMonth","handleSelectMonth","YearLeftArrow","YearRightArrow","Year","YearSelectorView","isNextAvailable","isPrevAvailable","onNext","onPrev","YearSelector","minYear","handlePrev","handleNext","MONTH_DATE_QUERY_PARAM_NAME","MonthSelectorContainer","MonthFilterView","onSelectYear","MonthFilter","currentOrPresentYear","useDateRangeState","dateRange","useSelectDateRange","SELECT_DATE_RANGE","selectDateRange","useResetDateRange","CLEAR_DATE_RANGE","ClearText","DateFilterView","handleSelectDate","resetDate","DateRangeFilter","resetReduxDateRange","resetDateRange","useRemoveQueryParam","endOf","DynamicFilterComponentList","SINGLE_SELECT_TEAM","MULTIPLE_SELECT_TEAMS","MONTH","DATE","DynamicFilterController","filterType","headerHeight","DynamicFiltersContainer","DynamicFilterWrapper","StyledDivider","ControlPanelContainer","FiltersSidebarView","filtersConfig","onGenerateReport","onClearFilters","controlPanelMode","FiltersSidebarController","PractisSetSummaryReportFiltersConfig","PractisSetSummaryReportSubHeader","PractisSetSummaryReportView","PractisSetSummaryReportController","clearTrainerPractisSetData","clearSingleTeamFilter","clearSelectedSingleTeam","setSingleTeamSearchActive","useClearSingleTeamFilter","clearPractisSetFilter","setPractisSetSearchActive","useClearPractisSetFilter","isCalledFromUnmount","statusMap","noData","handleGeneratePractisSetSummaryReport","UserActivityReportFiltersConfig","UserActivityReportView","useClearLabelsFilter","setLabelsSearchActive","useDisableLabelsFilter","disableLabelsFilter","UserActivityReportController","isTeamsLoading","isLabelsLoading","clearMultipleTeamsFilter","clearLabelsFilter","handleClearFilters","getReportParams","handleGenerateReport","UserActivityReportWithLabelsContext","TeamLeaderActivityReportFiltersConfig","TeamLeaderActivityReportView","BillingReportFiltersConfig","TeamLeaderActivityReportController","clearDateRangeFilter","BillingReportView","BillingReportController","clearYearAndMonth","DetailsNav","Seats","LogoNav","Voice","ValidationSchema","NAME_ALREADY_EXISTS_ERROR","API_ERROR_MESSAGE","FormikSelect","showError","SuffixContainer","hasSuffix","isMaxLengthExceeded","Suffix","encodeStringForAttribute","maxLenght","maxWords","encodedValue","words","CustomizedInputView","remainingLength","hasCounter","CustomizedInput","transformValue","isTouched","targetValue","CompanyDetailsView","companyAdminItems","onApiResultValidation","CompanyDetails","onCompanyUpdate","nameApiError","setNameApiError","getCompanyAdmins","useGetCompanyAdmins","updateCompanyNameApi","setCompanyOwnerApi","useClearCompanyAdmins","emptyItem","mainItems","admin","workspaceUrl","subdomain","handleApiResultValidation","handleError","validateForm","resetForm","TipText","Counts","CompanyUserStatsInfoView","registered","pending","deactivated","CompanyUserStatsInfo","CompanyUserLimitView","CompanyUserLimit","hasFooter","LinkInfo","companyLogoUploader","NextButtonIcon","CompanyUpdateLogoView","showGuidelines","deleteLogo","CompanyUpdateLogo","setIsInProgress","uploadCompanyLogo","setCompanyLogoApi","useUploadLogoService","deleteCompanyLogo","RoleItems","RangeSliderContainer","RangeInput","formatLabel","decimals","countDecimals","minValue","draggableTrack","formatStabilityLabel","formatSimilarityLabel","Sound","isFocused","VoiceSampleTextView","canPlay","blobUrl","audioRef","setIsFocused","onAudioLoaded","onPlay","onLoadedData","onEnded","VoiceSampleText","onAction","setStatus","setBlobUrl","resultValue","val","handleAudioLoaded","similarity","PartialVoiceSettingsView","voiceItems","initialSampleText","canReset","getFieldName","onReset","onSampleAction","upperFirst","PartialVoiceSettings","voices","defaultSimilarity","defaultStability","defaultVoiceId","voice_id","item1","item2","handleReset","StyledSkeleton","InputSkeleton","TwoElementsContainer","VoiceSettingsSkeleton","CompanyVoiceView","initialFormValues","canChange","onChangeRole","CompanyVoice","setRole","setVoices","isSampleInProgress","setIsSampleInProgress","setCompanyVoiceSettingsApi","CompanySettingsView","createNavigationDescriptor","isCompanyLoaded","CompanySettings","loadCompany","TrainingTimeReportFiltersConfig","TrainingTimeReportView","TrainingTimeReportController","TrainingTimeReportWithLabelsContext","ObjectiveIcon","ObjectiveIconActive","ProductIcon","ProductIconActive","ProspectIcon","ProspectIconActive","SituationIcon","SituationIconActive","SalesMethologies","AIParamSelect","tooltip","analyticsKey","RequiredText","TextAreaContainer","ParamsContainer","TextContainer","AIParamTextbox","isRequired","isInvalid","warningText","setWarningText","ObjectiveAiParam","roleplayData","objectiveRep","objectiveNuances","salesMethod","ProductAiParam","emptyRequiredProps","product","ProspectAiParam","prospect","SituationAiParam","situation","RouteSettings","iconActive","routeComponents","initialRolePlayData","keysForGA","requiredContextParams","RoleplayCreate","activePage","setActivePage","setRoleplayData","setEmptyRequiredProps","createRoleplay","useCreateRoleplayApi","routes","isValidForm","handlePrevNext","keyGA","InfoIcon","useWebSocket","setResponse","socketRef","currentConnection","API_SOCKET_ENDPOINT","createWebSocket","newSocket","closeConnection","sendMessage","OPEN","send","BodyContainer","ContextContainer","fullHeight","NoEntryContainer","IconCountainer","ModalBody","ModalText","ContentPanelContainer","BtnCont","Contentbox","ContentBoxContainer","ContentItem","Img","TextBox","Author","Message","Sendbox","SendBoxContainer","DateText","BtnContainer","SpinnerContainer","StopIcon","MenuButton","RoleplayMenuDots","RegenerateBtn","CommandContainer","CommandBox","ErrorBox","WarningBtnContainer","BlueDot","StopGenIcon","SendActive","SendIcon","isWarning","CheckContainer","SendContainer","TextInputWithButtons","isLimitReached","RefreshCircle","WarningIcon","RoleplayStateSelectorContext","useRoleplayState","commandTexts","commandPattern","formatConversationToClipboard","formattedConversation","CustomerAvatar","ContentLoading","RefreshCircleDisabled","useGetRoleplayService","getRoleplayContent","GET_ROLEPLAY_START","rp","GET_ROLEPLAY_SUCCESS","getRoleplaySuccess","GET_ROLEPLAY_FAILURE","getRoleplayFailure","useUpdateRoleplayService","updateRoleplayApi","useUpdateRoleplayApi","createCommand","UPDATE_ROLEPLAY_START","UPDATE_ROLEPLAY_SUCCESS","updateRoleplaySuccess","UPDATE_ROLEPLAY_FAILURE","updateRoleplayFailure","useClearRoleplayService","CLEAR_ROLEPLAY","LoadingAudio","ContentPanel","contentData","revertCommand","stopIsDisabled","sendCommand","regenerateRoleplayApi","useRegenerateRoleplayApi","reportedLines","useGenerateAudioForRoleplay","setMessage","messagesContainerRef","lastItemRef","observedDivRef","observedHeight","setObservedHeight","userScrolled","setUserScrolled","handleUserScroll","lastItem","containerBottom","lastItemBottom","audioFiles","setAudioFiles","audioStatus","setAudioStatus","sendCustomCommand","CharacterLimit","isOwner","regenerateRoleplay","isRetry","downloadFile","roleplayConversation","downloadTxtFile","conversationId","stopAudioPlaying","playAudioBlobs","oldState","blobs","currentAudioIndex","audioBlob","Audio","currentAudio","getHighlightedText","splitText","matches","elements","part","topPosition","observedDiv","resizeObserver","ResizeObserver","entry","contentRect","observe","unobserve","contentItem","isFinished","roleplayText","copyClipboard","shiftKey","headerWidth","subHeaderWidth","BodySkeleton","ContextPanel","rpdata","Situation","Prospect","Objective","PencilIconActive","HeaderSkeleton","RoleplayHeader","updateRoleplay","editmode","closeEditMode","isRequiredTitle","RoleplayInfoModal","RoleplayPage","getRoleplay","clearRoleplay","generateRoleplay","useGenerateRoleplayApi","resetRoleplayApi","useResetRoleplayApi","setIsEditMode","isLastError","setLastError","setStopIsDisabled","actionSent","setActionSent","setContentData","showInfoPanel","setShowInfoPanel","revertRoleplayApi","useRevertRoleplayApi","edittedRoleplay","setEdittedRoleplay","hasContent","getContent","isAdmin","generateFirstRoleplay","isStop","showDiscardModal","socketResponse","dataItem","updatedConversation","existingItemIndex","cancelChanges","Auth0Callback","authZeroTokenTypeApi","handleRedirectToLoginPage","hash","accessToken","access_token","handleAccessToken","App","mobileDeepLinkRoutes","keyName","tagId","colorStyles","sheet","prepend","generateColorVariables","LogOut","Register","Registration","ForgotPassword","ResetPassword","TraineeSplash","HealthPage","TeamsPage","PractisSetSummaryReport","UserActivityReport","TeamLeaderActivityReport","TrainingTimeReport","CreateTeam","APP_CONFIG","API_CLIENT","API_V2_BASE_URL","CHATGPT_API_KEY","ADMIN_PORTAL_BASE_URL","COMPANY_PORTAL_BASE_URL","S3_FILES_BASE_URL","NEW_RELIC_LICENSE_KEY","NEW_RELIC_APP_ID","googleClientId","local","dev","beta","prod","MultiContextProvider","parseValidation","detail","DefaultHttp","isV2","dataInQuery","buildApiUrl","errorResult","validation","client","clientHeader","getToken","parseRawQueryString","parseQueryString","rawQuery","v","flatQueryValue","getQueryStringFromUrl","setQueryParameterToUrl","parsedUrl","resultQuery","setQueryObjectToUrl","getCurrentUrl","DefaultUrlBuilder","o","buildUrl","companyBaseUrl","adminBaseUrl","apiV2BaseUrl","apiBaseUrl","baseUrl","replaceParam","joinSegments","segments","DefaultNewRelic","newRelicLicenceKey","newRelicAppId","DefaultLocalStorage","loggedOutRoutes","logOut","AuthStateSelectorContext","SocketProgressSelectorContext","SocketProgressState","searchStateSelectorContext","SearchState","contextItem","hostname","FETCH_TIMEZONES","FETCH_TIMEZONES_SUCCESS","FETCH_TIMEZONES_FAILURE","timeZones","globalReducers","newTimeZoneList","timeZone","initialTeamsState","allTeamsReducer","selectedTeamIndex","initialTeamEditState","teamEditReducer","toUTCString","currentTeamMembers","updatedTeamMembers","currentTeam","teamLeader","SET_ASSIGNED_LABELS_TO_SINGLE_TEAM","SET_DELETED_LABELS_TO_SINGLE_TEAM","initialUpdateTeamState","initialUpdateMemberState","teamMembersInitialState","teamMembersReducer","trainerPractisSetsReducer","selectedPractisSetIndex","initialEnrollmentsState","initialPractisSetReportState","initialUpdatedProgressState","initialInvitationState","assignUsersReducer","updatedArray","UPDATE_TRAINEE_DUE_DATE","traineeItems","progressReducer","combineReducers","UPDATE_PROGRESS_START","UPDATE_PROGRESS_FAILURE","initialChallengeState","initialSubmissionsState","initialAccuracyScoreState","withScenariosInitialState","submissionsReducer","UPDATE_SUBMISSION_DELETE_LABEL_SUCCESS","accuracyScoreReducer","initialLabelsState","initialLabelsConfigState","initialUpdatedLabelsState","initialTelepromterState","initialAiLogsState","initialDraftEditState","draftEditReducer","updatedDataItems","isEmailDuplicated","isRoleInvalid","drafted","loadingUpdate","portableLabelsReducer","initialLibraryPractisSetsState","libraryPractisSetsReducer","separateAssignedPractisSets","UPDATE_PRACTIS_SET_DELETE_LABEL_SUCCESS","initialLibraryScenariosState","libraryScenariosReducer","UPDATE_SCENARIOS_DELETE_LABEL_SUCCESS","initialLibraryChallengesState","libraryChallengesReducer","GET_TOTAL_LIBRARY_CHALLENGES_COUNT_START","GET_TOTAL_LIBRARY_CHALLENGES_COUNT_SUCCESS","GET_TOTAL_LIBRARY_CHALLENGES_COUNT_FAILURE","UPDATE_CHALLENGES_DELETE_LABEL_SUCCESS","appReducer","errorAllCompanies","loadingAllCompanies","allCompanies","activeCompaniesError","UPDATE_MEMBER_START","UPDATE_MEMBER_FAILURE","UPDATE_USER_PRACTIS_SETS_START","UPDATE_USER_PRACTIS_SETS_SUCCESS","UPDATE_USER_PRACTIS_SETS_FAILURE","updatedLines","newLine","metadata","createdScriptLine","newScriptLines","newScriptLinesArr","newLines","UPDATE_SCENARIO_CASE","temp_data","newPlaylist","global","foundIdx","newData","labelsData","FETCH_FULL_LABELS_LIST_START","FETCH_FULL_LABELS_LIST_SUCCESS","FETCH_FULL_LABELS_LIST_FAILURE","newLabels","selectedDraftIds","selectedDraftIndex","SEARCH_AI_LOGS_DISPOSE","updatedItem","stateByKey","rootReducer","GlobalStyle","createGlobalStyle","PortableLoaderWrapper","fetchLabels","fetchTeams","prevAppVersion","newAppVersion","currentUrl","replaceState","configStorage","appConfig","newRelicApi","store","thunkContext","middlewareEnhancer","applyMiddleware","thunk","withExtraArgument","composedEnhancer","composeSource","reduxCreateStore","createStore","configServices","rootElement","contextItems","createContexts","ReactDOM","DateFnsUtils","serviceWorker","registration","unregister"],"mappings":"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,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGSC,EACT,0JCxNG,SAASC,EAAclsD,GAC1B,GAAI6yC,kBAAQ7yC,GACR,OAAO,EAGX,GAAIisD,EAAgBjjB,KAAKhpC,IAetB,SAAuBmsD,GAC1B,IAAK,IAAIvoC,EAAI,EAAGA,EAAIooC,EAAe5pC,OAAQwB,IACvC,GAAIuoC,EAAOC,SAASJ,EAAepoC,IAC/B,OAAO,EAGf,O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","file":"static/js/main.a8b66cdd.chunk.js","sourcesContent":["export const Variables = {\n    Colors: {\n        white: '#ffffff',\n        softBlue: '#4aa9e2',\n        skyBlueTwo: '#4aa9e2',\n        darkSkyBlue: '#4aa9e2',\n        mainBlue: '#4aa9e2',\n        darkSkyBlueTwo15Full: '#e4f2fb',\n        steelGrey: '#6d7f8c',\n        cloudyBlue: '#b1c0cb',\n        whiteFive: '#f8f8f8',\n        paleGrey: '#e1e8ee',\n        tomato: '#ec513d',\n        brown: '#a47200',\n        topaz: '#15cba9',\n        greenTwo: '#15cba9',\n        darkGreen: '#066150',\n        dark: '#222431',\n        darkTwo: '#171923',\n        black: '#212121',\n        transparent: 'transparent',\n        // give list below\n        backgroundGray: '#f4f6f7',\n        backgroundDark: '#181923',\n        lightGray: '#ebf1f3',\n        lighterGray: '#f6f6f6',\n        iconGray: '#9aa6b6',\n        iconGrayBg: '#f2f2f2',\n        coolGray: '#9da2a8',\n        labelGray: '#0000008a',\n        hoverGray: '#77777740',\n        primaryBlue: '#1eb0ff',\n        dodgerBlue: '#3fbcff',\n        primaryRed: '#fe5c6c',\n        validGreen: '#51d76a',\n        softerBlue: '#73bbe5',\n        cornflowerBlue: '#5faad6',\n        skyBlue: '#5cc7ff',\n        coolBlue: '#4893bf',\n        whiteTwo: '#f4f4f4',\n        whiteThree: '#e2e2e2',\n        whiteSix: '#f7f8f9',\n        paleGreyTwo: '#f7f8f9',\n        blackTwo: '#000000',\n        blackThree: '#323232',\n        darkThree: 'rgb(34 36 49)',\n        coral: '#fa6653',\n        salmon: '#ff7a69',\n        paleRed: '#e55340',\n        fadedRed: '#e14a59',\n        fadedRedMobile: '#cb3a48',\n        fadedRedTwoMobile: '#e14a59',\n        lightMint: '#72dbc8',\n        green: '#72dbc8',\n        lightBlueGray: '#d2dfe6',\n        windowsBlue: '#3d93c7',\n        lightBlue: '#5eb7ed',\n        blueyGray: '#99a9b4',\n        steelGrey40: 'rgba(109, 127, 140, 0.4)',\n        blueyGreyTwo: '#a5b5c0',\n        battleshipGrey: '#64717b',\n        darkerGray: '#626365',\n        transparentSoftBlueTwo: 'rgba(74,169,226,0.5)',\n        darkSkyBlueTwo: '#409ed6',\n        darkSkyBlueThree: '#31a4e9',\n        darkSkyBlue15: 'rgba(74, 169, 226, 0.15)',\n        darkSkyBlue50: 'rgba(74, 169, 226, 0.5)',\n        cloudyBlue15: 'rgba(177, 192, 203, 0.15)',\n        blackTwo5: 'rgba(0, 0, 0, 0.05)',\n        macaroniAndCheese: '#f5ba33',\n        macaroniAndCheeseOpaque: 'rgba(245, 186, 51, 0.24)',\n    },\n    Breaks: {\n        sm: '576px',\n        md: '768px',\n        ld: '992px',\n        xl: '1200px',\n    },\n    BreakPoints: {\n        mid: 1368,\n        small: 768,\n        smaller: 640,\n        responsiveLg: 1920,\n        responsiveMd: 1440,\n        responsiveSm: 1024,\n        responsiveSmPlus: 1245,\n    },\n    Spacing: 8,\n    Fonts: {\n        manrope: 'Manrope',\n    },\n} as const;\n","import { useRouteMatch } from 'react-router-dom';\r\n\r\nconst ROUTES = {\r\n    LANDING: '/',\r\n    AUTH_PAGES: {\r\n        LOGIN: '/login',\r\n        INTERNAL_LOGIN: '/internal/login',\r\n        AUTH0_CALLBACK: '/auth0-callback',\r\n        MOBILE_NUMBER_LOGIN: '/mobile-number/login',\r\n        MOBILE_NUMBER_VERIFY: '/mobile-number/verify/:phoneNumber',\r\n        VERIFY_MOBILE_NUMBER_PRIVATE: '/number/:actionType/:phoneNumber',\r\n        ADD_MOBILE_NUMBER: '/add-mobile-number',\r\n        TRAINEE_LOGIN: '/trainee-login',\r\n        LOGOUT: '/logout',\r\n        REGISTER: '/register',\r\n        REGISTRATION: '/registration',\r\n        RESET_PASSWORD: '/reset',\r\n        FORGOT_PASSWORD: '/forgot',\r\n        ONBOARDING: '/onboarding/:role',\r\n        INVALID_INVITE: '/invalid-invite',\r\n        TRAINEE_SPLASH: '/trainee-splash/:userName'\r\n    },\r\n    PROFILE: '/users/:userId',\r\n    PROFILE_SETTINGS: {\r\n        SECURITY: '/users/:userId/security',\r\n        NOTIFICATIONS: '/users/:userId/notifications',\r\n    },\r\n    ORGANIZATION_LOGS: '/logs',\r\n    ORGANIZATION_ASSESSMENT_LOGS: '/ai-assessment',\r\n    COMPANY_SETTINGS: {\r\n        ROOT: '/company',\r\n        LOGO: '/company/logo',\r\n        USER_LIMIT: '/company/user-limit',\r\n        VOICE: '/company/voice',\r\n    },\r\n    ACTION_ITEMS: {\r\n        NEW_USER: '/drafts/:draftId',\r\n    },\r\n    PROGRESS: '/progress',\r\n    PROGRESS_PAGES: {\r\n        PRACTIS_SETS: '/progress/practis-sets',\r\n        PRACTIS_SETS_DETAILS: '/progress/practis-sets/:practisSetId',\r\n        TRAINEE_INVITATION: '/progress/practis-sets/:practisSetId/invite',\r\n    },\r\n    SUBMISSIONS: '/feed',\r\n    SUBMISSION_SETTINGS: {\r\n        ACCURACY_TESTS: {\r\n            ALL: '/feed/accuracy',\r\n            SINGLE: '/feed/accuracy/submission/:submissionId',\r\n            OLD_SINGLE: '/feed/accuracy/:submissionId',\r\n        },\r\n        CHALLENGES: {\r\n            ALL: '/feed/challenges',\r\n            SINGLE: '/feed/challenges/submission/:submissionId',\r\n            OLD_SINGLE: '/feed/challenges/:submissionId',\r\n        }\r\n    },\r\n    LIBRARY: '/library',\r\n    LIBRARY_SETTINGS: {\r\n        SCENARIOS: {\r\n            ALL: '/library/scenarios',\r\n            SINGLE: '/library/scenarios/:scenarioId',\r\n        },\r\n        PRACTISSETS: {\r\n            ALL: '/library/practis-sets',\r\n            SINGLE: '/library/practis-sets/:practisSetId',\r\n            QUICK_ASSIGNMENT:\r\n                '/library/practis-sets/:practisSetId/quick-assignment',\r\n            ASSIGN_USERS: '/library/practis-sets/:practisSetId/assign-users',\r\n        },\r\n        CHALLENGES: {\r\n            ALL: '/library/challenges',\r\n            SINGLE: '/library/challenges/:challengeId',\r\n        },\r\n    },\r\n    TELEPROMTER: '/telepromter/:scenarioId',\r\n    TELEPROMTER_PAGES: {\r\n        PLAYBACK: '/telepromter/:scenarioId/playback',\r\n        COMPLETED: '/telepromter/:scenarioId/completed',\r\n        TRAINING: '/telepromter/:scenarioId/train',\r\n        EXIT: '/telepromter/:scenarioId/exit',\r\n    },\r\n    TEAMS: '/teams',\r\n    TEAMS_PAGES: {\r\n        LIST_OF_TEAMS: '/teams',\r\n        MEMBERS: '/teams/:teamId/members',\r\n        NEW_TEAM: '/teams/new',\r\n        MANAGE_TEAM: '/teams/:teamId/members/manage',\r\n        TRAINING: '/teams/:teamId/training',\r\n        TRAINING_PAGES: {\r\n            PRACTIS_SETS: '/teams/:teamId/training/practis-sets',\r\n            PRACTIS_SETS_DETAILS:\r\n                '/teams/:teamId/training/practis-sets/:practisSetId',\r\n            TRAINEE_INVITATION:\r\n                '/teams/:teamId/training/practis-sets/:practisSetId/invite',\r\n        },\r\n    },\r\n    OVERDUE_LEARNERS: '/overdue-learners',\r\n    TRAINEE_DETAILS_REPS: '/user/performance/:userId/enrollments/:enrollmentId/scenario/:scenarioId',\r\n    TRAINEE_DETAILS: '/user/performance/:userId/enrollments/:enrollmentId',\r\n    USERS: '/users',\r\n    USER_INVITATIONS: '/invitations',\r\n    USER_PERFORMANCE: '/user/performance/:userId',\r\n    INVITATION_PERFORMANCE: '/invitation/performance/:userId',\r\n    INVITATIONS: '/invitations',\r\n    DRAFTS: '/drafts',\r\n    PRIVACY: '/privacy',\r\n    TERMS: '/terms',\r\n    SUPPORT: '/support',\r\n    Health: '/health',\r\n    BROKEN_SHARED_LINK: '/broken-shared-link',\r\n    MOBILE_DEEP_LINKS: {\r\n        PRACTIS_SET_INVITATION: '/practis-set-invitation',\r\n        SUBMISSIONS: '/submissions',\r\n        V2_SUBMISSIONS: '/v2/submissions',\r\n        CHALLENGE_FEEDBACK: '/challenge-feedback',\r\n        V2_CHALLENGE_FEEDBACK: '/v2/challenge-feedback',\r\n        PRACTIS_SET_DETAILS: '/practis-set-details',\r\n    },\r\n    REPORTS: {\r\n        LIST_OF_REPORTS: '/reports',\r\n        PRACTIS_SET_SUMMARY_REPORT: '/reports/practis-set-summary',\r\n        USER_ACTIVITY_REPORT: '/reports/user-activity',\r\n        TEAM_LEADER_ACTIVITY_REPORT: '/reports/team-leader-activity',\r\n        BILLING_REPORT: '/reports/billing',\r\n        TRAINING_TIME_REPORT: '/reports/training-time',\r\n    },\r\n    ROLEPLAYS: {\r\n        LIST_OF_ROLEPLAYS: '/roleplays',\r\n        NEW_ROLEPLAY: '/roleplay/create',\r\n        SINGLE: '/roleplay/:roleplayId',\r\n    }\r\n};\r\n\r\nexport default ROUTES;\r\n\r\nexport const MEID = 'me';\r\n\r\nexport function useUserIdMatch(): number | 'me' {\r\n    const {\r\n        params: { userId },\r\n    } = useRouteMatch<{ userId?: string }>();\r\n    return userId && userId !== MEID ? parseInt(userId) : (userId as 'me');\r\n}\r\n\r\nexport function replaceUserId(path: string, userId: number | 'me') {\r\n    return path.replace(':userId', userId.toString());\r\n}\r\n\r\nexport function isMe(userId: number | 'me') {\r\n    return userId === MEID;\r\n}\r\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    LoginApiParams,\n    ForgotPasswordApiParams,\n    LoginByPhoneCodeApiParams,\n    ResetPasswordApiParams,\n    GetPhoneCodeApiParams,\n    RegistrationApiParams,\n    GetAccessTokenApiParams,\n    AuthTypeApiParams,\n    AuthZeroTokenTypeApiParams,\n} from './types';\n\n/**\n * @function useAuthTypeApi\n * @returns { AuthTypeApiParams }\n */\nexport function useAuthTypeApi(): AuthTypeApiParams {\n    const http = useHttp();\n    return useCallback(params => http.post('auth/get-auth-type', params, true), [http]);\n}\n\n/**\n * @function useAuthZeroTokenTypeApi\n * @returns { AuthZeroTokenTypeApiParams }\n */\nexport function useAuthZeroTokenTypeApi(): AuthZeroTokenTypeApiParams {\n    const http = useHttp();\n    return useCallback(params => http.post('auth/authZero/token', params, true), [http]);\n}\n\n/**\n * @function useLoginApi\n * @returns { LoginApiParams }\n */\nexport function useLoginApi(): LoginApiParams {\n    const http = useHttp();\n    return useCallback(params => http.post('auth/login', params, true), [http]);\n}\n\n/**\n * @function useRegistrationApi\n * @returns { RegistrationApiParams }\n */\nexport function useRegistrationApi(): RegistrationApiParams {\n    const http = useHttp();\n    return useCallback(params => http.post('auth/signup', params, true), [http]);\n}\n\n/**\n * @function useLoginByPhoneCodeApi\n * @returns { LoginByPhoneCodeApiParams }\n */\nexport function useLoginByPhoneCodeApi(): LoginByPhoneCodeApiParams {\n    const http = useHttp();\n    return useCallback(\n        params => http.post('/auth/phone/confirm', params, true),\n        [http],\n    );\n}\n\n/**\n * @function useForgotPasswordApi\n * @returns { ForgotPasswordApiParams }\n */\nexport function useForgotPasswordApi(): ForgotPasswordApiParams {\n    const http = useHttp();\n    return useCallback(\n        (email: string): any => http.post(`auth/password/forgot`, { email }, true),\n        [http],\n    );\n}\n\n/**\n * @function useResetPasswordApi\n * @returns { ResetPasswordApiParams }\n */\nexport function useResetPasswordApi(): ResetPasswordApiParams {\n    const http = useHttp();\n    return useCallback(\n        (password: string, token: string) =>\n            http.post('auth/password/reset', { password, token }, true),\n        [http],\n    );\n}\n\n/**\n * @function useGetPhoneCodeApi\n * @returns { GetPhoneCodeApiParams }\n */\nexport function useGetPhoneCodeApi(): GetPhoneCodeApiParams {\n    const http = useHttp();\n    return useCallback(\n        (phone: string) =>\n            http.post('auth/phone', { phone }, true),\n        [http],\n    );\n}\n\n/**\n * @function useGetAccessTokenApi\n * @returns { GetAccessTokenApiParams }\n */\nexport function useGetAccessTokenApi(): GetAccessTokenApiParams {\n    const http = useHttp();\n    return useCallback(\n        code =>\n            http.get(`/auth/google/code`, { code }, undefined, true),\n        [http],\n    );\n}\n\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport { SearchAiLogsApiParams } from './types';\n\n/**\n * @function useSearchAiLogsApi\n * @returns { SearchAiLogsApiParams }\n */\nexport const useSearchAiLogsApi = (): SearchAiLogsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        params =>\n            http.get('submissions/assessments', params, undefined, true),\n        [http]\n    );\n};","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    AssignLinesToChallengeApiParams,\n    CreateChallengeApiParams,\n    DeleteChallengesApiParams,\n    GetChallengeApiParams,\n    SearchChallengesApiParams,\n    UpdateChallengeInfoApiParams,\n    UpdateChallengeLabelsApiParams,\n    UpdateChallengeStatusApiParams,\n} from './types';\n\n/**\n * @function useGetChallengeApi\n * @returns { GetChallengeApiParams }\n */\nexport function useGetChallengeApi(): GetChallengeApiParams {\n    const http = useHttp();\n    return useCallback(\n        challengeId =>\n            http.get(`challenges/${challengeId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useSearchChallengesApi\n * @returns { SearchChallengesApiParams }\n */\nexport const useSearchChallengesApi = (): SearchChallengesApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.get('challenges', searchParams, undefined, true),\n        [http]\n    );\n};\n\n/**\n * @function useDeleteChallengesApi\n * @returns { DeleteChallengesApiParams }\n */\n export const useDeleteChallengesApi = (): DeleteChallengesApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (challengeIds) =>\n            http.delete('challenges/delete', challengeIds, true),\n        [http]\n    );\n};\n\n/**\n * @function useAssignChallengeLabelsApi\n * @returns { UpdateChallengeLabelsApiParams }\n */\nexport const useAssignChallengeLabelsApi = (): UpdateChallengeLabelsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        labels => http.post(`challenges/labels`, labels, true),\n        [http]\n    );\n};\n\n/**\n * @function useDeleteChallengeLabelsApi\n * @returns { UpdateChallengeLabelsApiParams }\n */\n export const useDeleteChallengeLabelsApi = (): UpdateChallengeLabelsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        labels => http.delete(`challenges/labels`, labels, true),\n        [http]\n    );\n};\n\n/**\n * @function useCreateChallengeApi\n * @returns { CreateChallengeApiParams }\n */\n export const useCreateChallengeApi = (): CreateChallengeApiParams => {\n    const http = useHttp();\n    return useCallback(\n        challengeInfo => http.post(`challenges`, challengeInfo, true),\n        [http]\n    );\n};\n\n/**\n * @function useUpdateChallengeInfoApi\n * @returns { UpdateChallengeInfoApiParams }\n */\n export const useUpdateChallengeInfoApi = (): UpdateChallengeInfoApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (challengeId, challengeInfo) =>\n            http.put(`challenges/${challengeId}`, challengeInfo, true),\n        [http]\n    );\n};\n\n/**\n * @function useUpdateChallengeStatusApi\n * @returns { UpdateChallengeStatusApiParams }\n */\n export function useUpdateChallengeStatusApi(): UpdateChallengeStatusApiParams {\n    const http = useHttp();\n    return useCallback(\n        (status, challengeIds) =>\n            http.put(`challenges/${status}`, challengeIds, true),\n        [http]\n    );\n}\n\n /**\n * @function useAssignLinesToChallengeApi\n * @returns { AssignLinesToChallengeApiParams }\n */\n  export function useAssignLinesToChallengeApi(): AssignLinesToChallengeApiParams {\n    const http = useHttp();\n    return useCallback(\n        (challengeId, lines) => http.post(`challenges/${challengeId}/lines`, lines, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    FileUploadApiParams,\n    CreateMediaApiParams,\n    VerifyMediaApiParams,\n} from './types';\n\n/**\n * @function useFileUploadApi\n * @returns { FileUploadApiParams }\n */\nexport const useFileUploadApi = (): FileUploadApiParams => {\n    const http = useHttp();\n    return useCallback(data => http.post('files', data), [http]);\n};\n\n/**\n * @function useCreateMedia\n * @returns { CreateMediaApiParams }\n */\nexport function useCreateMediaApi(): CreateMediaApiParams {\n    const http = useHttp();\n    return useCallback(mimeType => http.post('media', { mimeType }, true), [http]);\n}\n\n/**\n * @function useVerifyMedia\n * @returns { VerifyMediaApiParams }\n */\nexport function useVerifyMediaApi(): VerifyMediaApiParams {\n    const http = useHttp();\n    return useCallback(mediaId => http.post(`media/${mediaId}/verify`, undefined, true), [http]);\n}","import { useCallback } from 'react';\nimport { CompanyStatus } from '../../constants/interfaces/Company';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    ActiveDeActivateCompaniesApiParams,\n    CreateCompanyApiParams,\n    DownloadCompanyUsersReportApiParams,\n    GetCompanyApiParams,\n    GetCompanyUserStatsApiParams,\n    SearchCompaniesApiParams,\n    SetCompanyUsersLimitApiParams,\n    SetCompanyLogoApiParams,\n    DeleteCompanyLogoApiParams,\n    SetCompanyOwnerApiParams,\n    UpdateCompanyNameApiParams,\n    GetCompanyVoiceSettingsApiParams,\n    SetCompanyVoiceSettingsApiParams,\n} from './types';\n\n/**\n * @function useSearchCompaniesApi\n * @returns { SearchCompaniesApiParams }\n */\nexport const useSearchCompaniesApi = (): SearchCompaniesApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (searchParams, statuses) => {\n            const params = {\n                limit: searchParams?.limit ?? 2000,\n                offset: searchParams?.offset ?? 0,\n                query: searchParams?.searchTerm,\n                sort: searchParams?.orderBy\n                    ? `${searchParams.orderBy.field || 'name'}_${searchParams.orderBy.asc ? 'asc' : 'desc'}`\n                    : 'name_asc',\n                status: statuses?.join(',') || `${CompanyStatus.ACTIVE},${CompanyStatus.DELETED}`\n            };\n            return http.get('companies', params, undefined, true);\n        },\n        [http]\n    );\n};\n\n/**\n * @function useSearchListCompaniesApi\n * @returns { SearchCompaniesApiParams }\n */\nexport const useSearchListCompaniesApi = (): SearchCompaniesApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (searchParams, statuses) => {\n            const params = {\n                limit: searchParams?.limit ?? 2000,\n                offset: searchParams?.offset ?? 0,\n                query: searchParams?.searchTerm,\n                sort: searchParams?.orderBy\n                    ? `${searchParams.orderBy.field || 'name'}_${searchParams.orderBy.asc ? 'asc' : 'desc'}`\n                    : 'name_asc',\n                status: statuses?.join(',') || `${CompanyStatus.ACTIVE},${CompanyStatus.DELETED}`\n            };\n            return http.get('companies/admin-search', params, undefined, true);\n        },\n        [http]\n    );\n};\n\n/**\n * @function useGetCompanyApi\n * @returns { GetCompanyApiParams }\n */\nexport function useGetCompanyApi(): GetCompanyApiParams {\n    const http = useHttp();\n    return useCallback(\n        companyId =>\n            http.get(`companies/${companyId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useCreateCompanyApi\n * @returns { CreateCompanyApiParams }\n */\nexport function useCreateCompanyApi(): CreateCompanyApiParams {\n    const http = useHttp();\n    return useCallback(\n        (name, subdomain) => http.post('companies/create-company', { name, subdomain }, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateCompanyNameApi\n * @returns { UpdateCompanyNameApiParams }\n */\nexport function useUpdateCompanyNameApi(): UpdateCompanyNameApiParams {\n    const http = useHttp();\n    return useCallback(\n        (companyId, name) => http.put(`companies/${companyId}`, { name }, true),\n        [http]\n    );\n}\n\n/**\n * @function useDownloadCompanyUsersReportApi\n * @returns { DownloadCompanyUsersReportApiParams }\n */\nexport function useDownloadCompanyUsersReportApi(): DownloadCompanyUsersReportApiParams {\n    const http = useHttp();\n    return useCallback(\n        companyId =>\n            http.post(`users/export-company-users`, {\n                companyId,\n            }),\n        [http]\n    );\n}\n\n/**\n * @function useActivateCompany\n * @returns { ActiveDeActivateCompaniesApiParams }\n */\nexport function useActivateCompanies(): ActiveDeActivateCompaniesApiParams {\n    const http = useHttp();\n    return useCallback(\n        companyIds => http.put(`companies/active`, companyIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useDeActivateCompanies\n * @returns { ActiveDeActivateCompaniesApiParams }\n */\nexport function useDeActivateCompanies(): ActiveDeActivateCompaniesApiParams {\n    const http = useHttp();\n    return useCallback(\n        companyIds => http.put(`companies/archive`, companyIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetCompanyUserStatsApi\n * @returns { GetCompanyUserStatsApiParams }\n */\nexport function useGetCompanyUserStatsApi(): GetCompanyUserStatsApiParams {\n    const http = useHttp();\n    return useCallback(\n        companyId =>\n            http.get(`companies/${companyId}/users-stats`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useSetCompanyUsersLimitApi\n * @returns { SetCompanyUsersLimitApiParams }\n */\nexport function useSetCompanyUsersLimitApi(): SetCompanyUsersLimitApiParams {\n    const http = useHttp();\n    return useCallback(\n        (companyId, usersLimit) =>\n            http.post(`companies/${companyId}/set-users-limit`, { usersLimit }, true),\n        [http]\n    );\n}\n\n/**\n * @function useSetCompanyOwnerApi\n * @returns { SetCompanyOwnerApiParams }\n */\nexport function useSetCompanyOwnerApi(): SetCompanyOwnerApiParams {\n    const http = useHttp();\n    return useCallback(\n        (companyId, ownerId) =>\n            http.post(`companies/${companyId}/set-owner`, { ownerId }, true),\n        [http]\n    );\n}\n\n/**\n * @function useSetCompanyLogoApi\n * @returns { SetCompanyLogoApiParams }\n */\nexport function useSetCompanyLogoApi(): SetCompanyLogoApiParams {\n    const http = useHttp();\n    return useCallback(\n        (companyId, mediaId) =>\n            http.post(`companies/${companyId}/update-logo`, { mediaId }, true),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteCompanyLogoApi\n * @returns { DeleteCompanyLogoApiParams }\n */\nexport function useDeleteCompanyLogoApi(): DeleteCompanyLogoApiParams {\n    const http = useHttp();\n    return useCallback(\n        (companyId) =>\n            http.delete(`companies/${companyId}/delete-logo`, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetCompanyVoiceSettingsApi\n * @returns { GetCompanyVoiceSettingsApiParams }\n */\nexport function useGetCompanyVoiceSettingsApi(): GetCompanyVoiceSettingsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (companyId, role) =>\n            http.get('voiceSettings', { companyId, role }, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useSetCompanyVoiceSettingsApi\n * @returns { SetCompanyVoiceSettingsApiParams }\n */\nexport function useSetCompanyVoiceSettingsApi(): SetCompanyVoiceSettingsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (settings) =>\n            http.post('voiceSettings/update', settings, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport { SearchInvitersApiParams } from './types';\n\n/**\n * @function useSearchInvitersApi\n * @returns { SearchInvitersApiParams }\n */\nexport const useSearchInvitersApi = (): SearchInvitersApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams =>\n            http.post('invitations/load-filters-data', searchParams),\n        [http]\n    );\n};\n\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    AssignedLabelsIdsApiParams,\n    AssignLabelsApiParams,\n    CreateLabelApiParams,\n    DeleteLabelApiParams,\n    SearchLabelsApiParams,\n    UpdateLabelApiParams,\n} from './types';\n\n\n/**\n * @function useCreateLabelApi\n * @returns { CreateLabelApiParams }\n */\nexport const useCreateLabelApi = (): CreateLabelApiParams => {\n    const http = useHttp();\n    return useCallback(params => http.post('labels', params), [http]);\n};\n\n/**\n * @function useSearchLabelsApi\n * @returns { SearchLabelsApiParams }\n */\nexport const useSearchLabelsApi = (): SearchLabelsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.post('labels/search', searchParams),\n        [http]\n    );\n};\n\n/**\n * @function useDeleteLabelApi\n * @returns { DeleteLabelApiParams }\n */\nexport const useDeleteLabelApi = (): DeleteLabelApiParams => {\n    const http = useHttp();\n    return useCallback(labelId => http.delete(`labels/${labelId}`), [http]);\n};\n\n/**\n * @function useUpdateLabelApi\n * @returns { UpdateLabelApiParams }\n */\nexport const useUpdateLabelApi = (): UpdateLabelApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (labelId, params) => http.put(`labels/${labelId}`, params),\n        [http]\n    );\n};\n\n/**\n * @function useAssignLabelsApi\n * @returns { AssignLabelsApiParams }\n */\nexport const useAssignLabelsApi = (): AssignLabelsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (\n            labels,\n            entities,\n            deleted,\n            entityType,\n            selectAll,\n            search,\n            assignedArea\n        ) =>\n            http.post(`labels/assign`, {\n                labels,\n                entities,\n                entityType: entityType,\n                deleted,\n                selectAll,\n                search,\n                assignedArea,\n            }),\n        [http]\n    );\n};\n\n/**\n * @function useAssignedLabelsIdsApi\n * @returns { AssignedLabelsIdsApiParams }\n */\nexport const useAssignedLabelsIdsApi = (): AssignedLabelsIdsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (entityIds, assignedArea, entityType, search, selectAll) =>\n            http.post(`labels/load-assigned`, {\n                entityIds,\n                assignedArea,\n                entityType,\n                search,\n                selectAll,\n            }),\n        [http]\n    );\n};\n\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    DeletePractisSetsApiParams,\n    GetPractisSetApiParams,\n    SearchPractisSetsApiParams,\n    UpdatePractisSetApiParams,\n    GetPractisSetContentApiParams,\n    UpdatePractisSetLabelsApiParams,\n    CreateNewPractisSetApiParams,\n    AssignPractisSetContentApiParams,\n    UpdatePractisSetStatusApiParams,\n} from './types';\n\n/**\n * @function useSearchPractisSetsApi\n * @returns { SearchPractisSetsApiParams }\n */\nexport const useSearchPractisSetsApi = (): SearchPractisSetsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.get('practisSets', searchParams, undefined, true),\n        [http]\n    );\n};\n\n/**\n * @function useDeletePractisSetsApi\n * @returns { DeletePractisSetsApiParams }\n */\n export const useDeletePractisSetsApi = (): DeletePractisSetsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (practisSetIds) =>\n            http.delete('practisSets/delete', practisSetIds, true),\n        [http]\n    );\n};\n\n/**\n * @function useGetPractisSetApi\n * @returns { GetPractisSetApiParams }\n */\nexport function useGetPractisSetApi(): GetPractisSetApiParams {\n    const http = useHttp();\n    return useCallback(\n        practisSetId =>\n            http.get(`practisSets/${practisSetId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetPractisSetContentApi\n * @returns { GetPractisSetContentApiParams }\n */\n export function useGetPractisSetContentApi(): GetPractisSetContentApiParams {\n    const http = useHttp();\n    return useCallback(\n        practisSetId =>\n            http.get(\n                `practisSets/${practisSetId}/content`,\n                undefined,\n                undefined,\n                true\n            ),\n        [http]\n    );\n}\n \n/**\n * @function useAssignPractisSetContentApi\n * @returns { AssignPractisSetContentApiParams }\n */\n export function useAssignPractisSetContentApi(): AssignPractisSetContentApiParams {\n    const http = useHttp();\n    return useCallback(\n        (practisSetId, practisSetContentData) =>\n            http.post(\n                `practisSets/${practisSetId}/content`,\n                practisSetContentData,\n                true\n            ),\n        [http]\n    );\n}\n\n/**\n * @function useUpdatePractisSetApi\n * @returns { UpdatePractisSetApiParams }\n */\nexport function useUpdatePractisSetApi(): UpdatePractisSetApiParams {\n    const http = useHttp();\n    return useCallback(\n        (practisSetId, data) => http.put(`practisSets/${practisSetId}`, data, true),\n        [http]\n    );\n}\n/**\n * @function useAssignPractisSetLabelsApi\n * @returns { UpdatePractisSetLabelsApiParams }\n */\n export function useAssignPractisSetLabelsApi(): UpdatePractisSetLabelsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (practisSetLabels) =>\n            http.post('practisSets/labels', practisSetLabels, true),\n        [http]\n    );\n}\n\n/**\n * @function useDeletePractisSetLabelsApi\n * @returns { UpdatePractisSetLabelsApiParams }\n */\nexport function useDeletePractisSetLabelsApi(): UpdatePractisSetLabelsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (practisSetLabels) =>\n            http.delete('practisSets/labels', practisSetLabels, true),\n        [http]\n    );\n}\n\n/**\n * @function useCreateNewPractisSetApi\n * @returns { CreateNewPractisSetApiParams }\n */\n export function useCreateNewPractisSetApi(): CreateNewPractisSetApiParams {\n    const http = useHttp();\n    return useCallback(\n        practisSet => http.post('practisSets', practisSet, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdatePractisSetStatusApi\n * @returns { UpdatePractisSetStatusApiParams }\n */\n export function useUpdatePractisSetStatusApi(): UpdatePractisSetStatusApiParams {\n    const http = useHttp();\n    return useCallback(\n        (status, practisSetIds) =>\n            http.put(`practisSets/${status}`, practisSetIds, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    AssignLinesToScenarioApiParams,\n    CreateNewScenarioApiParams,\n    DeleteScenariosApiParams,\n    DownloadScenarioReportApiParams,\n    GetScenarioApiParams,\n    SearchScenariosApiParams,\n    UpdateScenarioApi,\n    UpdateScenarioLabelApi,\n    UpdateScenarioStatusApiParams,\n} from './types';\n\n\n/**\n * @function useSearchScenariosApi\n * @returns { SearchScenariosApiParams }\n */\nexport const useSearchScenariosApi = (): SearchScenariosApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.get('scenarios', searchParams, undefined, true),\n        [http]\n    );\n};\n\n/**\n * @function useDeleteScenariosApi\n * @returns { DeleteScenariosApiParams }\n */\n export const useDeleteScenariosApi = (): DeleteScenariosApiParams => {\n    const http = useHttp();\n    return useCallback(\n        (scenarioIds) =>\n            http.delete('scenarios/delete', scenarioIds, true),\n        [http]\n    );\n};\n\n/**\n * @function useDownloadScenarioReportApi\n * @returns { DownloadScenarioReportApiParams }\n */\nexport const useDownloadScenarioReportApi = (): DownloadScenarioReportApiParams => {\n    const http = useHttp();\n    return useCallback(\n        scenarioId => http.get(`scenarios/report/${scenarioId}`, null, 'blob'),\n        [http]\n    );\n};\n\n/**\n * @function useGetScenarioApi\n * @returns { GetScenarioApiParams }\n */\nexport function useGetScenarioApi(): GetScenarioApiParams {\n    const http = useHttp();\n    return useCallback(\n        scenarioId =>\n            http.get(`scenarios/${scenarioId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateScenarioApi\n * @returns { UpdateScenarioApi }\n */\nexport function useUpdateScenarioApi(): UpdateScenarioApi {\n    const http = useHttp();\n    return useCallback(\n        (scenarioId, data) => http.put(`scenarios/${scenarioId}`, data, true),\n        [http]\n    );\n}\n\n/**\n * @function useAssignScenarioLabelApi\n * @returns { UpdateScenarioLabelApi }\n */\n export function useAssignScenarioLabelApi(): UpdateScenarioLabelApi {\n     const http = useHttp();\n     return useCallback(\n         labels => http.post(`scenarios/labels`, labels, true),\n         [http]\n     );\n }\n\n /**\n * @function useDeleteScenarioLabelApi\n * @returns { UpdateScenarioLabelApi }\n */\n  export function useDeleteScenarioLabelApi(): UpdateScenarioLabelApi {\n    const http = useHttp();\n    return useCallback(\n        labels => http.delete(`scenarios/labels`, labels, true),\n        [http]\n    );\n}\n\n /**\n * @function useCreateScenarioApi\n * @returns { CreateNewScenarioApiParams }\n */\n  export function useCreateScenarioApi(): CreateNewScenarioApiParams {\n    const http = useHttp();\n    return useCallback(\n        (scenarioInfo) => http.post(`scenarios`, scenarioInfo, true),\n        [http]\n    );\n}\n\n /**\n * @function useAssignLinesToScenarioApi\n * @returns { AssignLinesToScenarioApiParams }\n */\n  export function useAssignLinesToScenarioApi(): AssignLinesToScenarioApiParams {\n    const http = useHttp();\n    return useCallback(\n        (scenarioId, lines) => http.post(`scenarios/${scenarioId}/lines`, lines, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateScenarioStatusApi\n * @returns { UpdateScenarioStatusApiParams }\n */\n export function useUpdateScenarioStatusApi(): UpdateScenarioStatusApiParams {\n    const http = useHttp();\n    return useCallback(\n        (status, ScenarioIds) =>\n            http.put(`scenarios/${status}`, ScenarioIds, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\nimport { useHttp } from '../../tools/http/Http';\nimport { GetAuditLogsApiParams, SearchLogsApiParams } from './types';\n\n/**\n * @function useSearchLogsApi\n * @returns { SearchLogsApiParams }\n */\nexport const useSearchLogsApi = (): SearchLogsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.post('companies/logs', searchParams),\n        [http]\n    );\n};\n\n/**\n * @function useSearchAdminLogsApi\n * @returns { SearchLogsApiParams }\n */\nexport function useSearchAdminLogsApi(): SearchLogsApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.post('admin/logs/search', searchParams),\n        [http]\n    );\n}\n\n/**\n * @function useGetAuditLogs\n * @returns { GetAuditLogsApiParams }\n */\nexport function useGetAuditLogsApi(): GetAuditLogsApiParams {\n    const http = useHttp();\n    return useCallback(\n        params => http.get('audits', params, undefined, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport { SearchPacingsApiParams } from './types';\n\n/**\n * @function useSearchPacingsApi\n * @returns { SearchPacingsApiParams }\n */\nexport const useSearchPacingsApi = (): SearchPacingsApiParams => {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.post('pacings/search', searchParams),\n        [http]\n    );\n};\n\n","import { useCallback } from 'react';\nimport { getSearchSortingValue } from '../../helpers/functions/search-params-helpers';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    AddStagingUsersApiParams,\n    AssignFiltersToStagingUsersApiParams,\n    AssignTeamsToUserApiParams,\n    CreateUserStagingApiParams,\n    DeleteStagingApiParams,\n    DeleteStagingUsersApiParams,\n    DeleteUserApi,\n    GetUserReportApiParams,\n    InviteStagingUsersApiParams,\n    LoadUserRolesApiParams,\n    SearchCreatedByUsersListApiParams,\n    SearchEditedByUsersListApiParams,\n    SearchStagingDraftsApiParams,\n    SearchStagingUsersApiParams,\n    SearchUsersApiParams,\n    UpdateStagingUsersApiParams,\n    GetUserFeaturesApiParams,\n    DeleteUserLabelsApiParams,\n    UpdateUserInfoApiParams,\n    UpdateUserPhoneNumberApiParams,\n    ConfirmUserPhoneNumberApiParams,\n    AssignUserLabelsApiParams,\n    UpdateUserPasswordApiParams,\n    RevokePendingUsersApiParams,\n    GetUserApiParams,\n    UpdateUserRoleParams,\n    DeleteUserNumberApi,\n    GetUserPermissionsApiParams,\n    GetUserSettingsApiParams,\n    SaveUserSettingsApiParams,\n    SetUserPhotoApiParams,\n    SearchUserEnrollmentsApiParams,\n    ActivateUsersApiParams,\n    GetUserPreferencesApiParams,\n    UpdateUserPreferencesApiParams,\n    CreateUsersApiParams,\n} from './types';\n\n/**\n * @function useGetUserApi\n * @returns { GetUserApiParams }\n */\nexport function useGetUserApi(): GetUserApiParams {\n    const http = useHttp();\n    return useCallback((userId) =>\n        http.get(`users/${userId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateUserRole\n * @returns { UpdateUserRoleParams }\n */\nexport function useUpdateUserRole(): UpdateUserRoleParams {\n    const http = useHttp();\n    return useCallback((userId, params) =>\n        http.put(`users/${userId}/role`, params,  true),\n        [http]\n    );\n}\n\n/**\n * @function useLoadUserRolesApi\n * @returns { LoadUserRolesApiParams }\n */\nexport const useLoadUserRolesApi = (): LoadUserRolesApiParams => {\n    const http = useHttp();\n    return useCallback(() => http.get('roles'), [http]);\n};\n\n/**\n * @function useSearchUserEnrollmentsApi\n * @returns { SearchUserEnrollmentsApiParams }\n */\nexport function useSearchUserEnrollmentsApi(): SearchUserEnrollmentsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, params) => {\n            const searchParams = params || {\n                sort: getSearchSortingValue({}, 'assigned', false),\n                limit: 10000\n            };\n            return http.get(`users/${userId}/enrollments`, searchParams, undefined, true);\n        },\n        [http]\n    );\n}\n\n/**\n * @function useSearchUsersApi\n * @returns { SearchUsersApiParams }\n */\nexport function useSearchUsersApi(): SearchUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.get('users', searchParams, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useCreateUsersApi\n * @returns { CreateUsersApiParams }\n */\nexport function useCreateUsersApi(): CreateUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        usersData => http.post('users', usersData, true),\n        [http]\n    );\n}\n\n\n/**\n * @function useDeleteUserApi\n * @returns { DeleteUserApi }\n */\nexport function useDeleteUserApi(): DeleteUserApi {\n    const http = useHttp();\n    return useCallback(userIds => http.delete(`/users`, userIds, true), [http]);\n}\n\n/**\n * @function useDeleteUserNumberApi\n * @returns { DeleteUserNumberApi }\n */\nexport function useDeleteUserNumberApi(): DeleteUserNumberApi {\n    const http = useHttp();\n    return useCallback(userIds => http.delete(`/users/phone`, userIds, true), [http]);\n}\n\n/**\n * @function useGetUserReportApi\n * @returns { GetUserReportApiParams }\n */\nexport function useGetUserReportApi(): GetUserReportApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams => {\n            return http.get('users/report', searchParams, undefined, true);\n        },\n        [http]\n    );\n}\n\n/**\n * @function useSearchStagingDraftsApi\n * @returns { SearchStagingDraftsApiParams }\n */\nexport function useSearchStagingDraftsApi(): SearchStagingDraftsApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.post('staging/search', searchParams),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteStagingApi\n * @returns { DeleteStagingApiParams }\n */\nexport function useDeleteStagingApi(): DeleteStagingApiParams {\n    const http = useHttp();\n    return useCallback(\n        (stagingIds, search, selectAll): Promise<any> =>\n            http.delete(`/staging`, {\n                stagingIds: stagingIds,\n                search,\n                selectAll,\n            }),\n        [http]\n    );\n}\n\n/**\n * @function useSearchCreatedByUsersListApi\n * @returns { SearchCreatedByUsersListApiParams }\n */\nexport function useSearchCreatedByUsersListApi(): SearchCreatedByUsersListApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams =>\n            http.post(`/staging/load-created-filters-data`, searchParams),\n        [http]\n    );\n}\n\n/**\n * @function useSearchEditedByUsersListApi\n * @returns { SearchEditedByUsersListApiParams }\n */\nexport function useSearchEditedByUsersListApi(): SearchEditedByUsersListApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams =>\n            http.post(`/staging/load-edited-filters-data`, searchParams),\n        [http]\n    );\n}\n\n/**\n * @function useAssignTeamsToUserApi\n * @returns { AssignTeamsToUserApiParams }\n */\nexport function useAssignTeamsToUserApi(): AssignTeamsToUserApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, addedTeamIds, deletedTeamIds) =>\n            http.put(`users/${userId}/manage-teams`, {\n                addedTeamIds,\n                deletedTeamIds,\n            }),\n        [http]\n    );\n}\n\n/**\n * @function useCreateUserStagingApi\n * @returns { CreateUserStagingApiParams }\n */\nexport function useCreateUserStagingApi(): CreateUserStagingApiParams {\n    const http = useHttp();\n    return useCallback(\n        (name, users) => http.post('staging', { name, users }),\n        [http]\n    );\n}\n\n/**\n * @function useSearchStagingUsersApi\n * @returns { SearchStagingUsersApiParams }\n */\nexport function useSearchStagingUsersApi(): SearchStagingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (draftId, searchParams) =>\n            http.post(`staging/${draftId}/user/search`, searchParams),\n        [http]\n    );\n}\n\n/**\n * @function useAddStagingUsersApi\n * @returns { AddStagingUsersApiParams }\n */\nexport function useAddStagingUsersApi(): AddStagingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (stagingId, users) =>\n            http.post(`staging/${stagingId}/user`, { users: users }),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateStagingUsersApi\n * @returns { UpdateStagingUsersApiParams }\n */\nexport function useUpdateStagingUsersApi(): UpdateStagingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (stagingId, stagingUserId, user) =>\n            http.put(`staging/${stagingId}/user/${stagingUserId}`, user),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteStagingUsersApi\n * @returns { DeleteStagingUsersApiParams }\n */\nexport function useDeleteStagingUsersApi(): DeleteStagingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (stagingId, stagingUserIds, search, selectAll) =>\n            http.delete(`/staging/${stagingId}/user`, {\n                stagingUserIds: stagingUserIds,\n                search,\n                selectAll,\n            }),\n        [http]\n    );\n}\n\n/**\n * @function useInviteStagingUsersApi\n * @returns { InviteStagingUsersApiParams }\n */\nexport function useInviteStagingUsersApi(): InviteStagingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (stagingId, stagingUserIds, selectAll, search) =>\n            http.post(`/staging/${stagingId}/user/invite`, {\n                stagingUserIds: stagingUserIds,\n                selectAll: selectAll,\n                search,\n            }),\n        [http]\n    );\n}\n\n/**\n * @function useAssignFiltersToStagingUsersApi\n * @returns { AssignFiltersToStagingUsersApiParams }\n */\nexport function useAssignFiltersToStagingUsersApi(): AssignFiltersToStagingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (stagingId, assignFilters) =>\n            http.post(`/staging/${stagingId}/user/assign-data`, assignFilters),\n        [http]\n    );\n}\n\n/**\n * @function useGetUserFeaturesApi\n * @returns { GetUserFeaturesApiParams }\n */\nexport function useGetUserFeaturesApi(): GetUserFeaturesApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId: number) =>\n            http.get(`users/${userId}/features`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useAssignUserLabelsApi\n * @returns { AssignUserLabelsApiParams }\n */\nexport function useAssignUserLabelsApi(): AssignUserLabelsApiParams {\n    const http = useHttp();\n    return useCallback(\n        labels => http.post('users/labels', labels, true),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteUserLabelsApi\n * @returns { DeleteUserLabelsApiParams }\n */\nexport function useDeleteUserLabelsApi(): DeleteUserLabelsApiParams {\n    const http = useHttp();\n    return useCallback(\n        labels => http.delete('users/labels', labels, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateUserInfo\n * @returns { UpdateUserInfoApiParams }\n */\nexport function useUpdateUserInfo(): UpdateUserInfoApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, newUserInfo) => http.put(`users/${userId}`, newUserInfo, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateUserPhoneNumber\n * @returns { UpdateUserPhoneNumberApiParams }\n */\nexport function useUpdateUserPhoneNumber(): UpdateUserPhoneNumberApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, phoneNumber) =>\n            http.put(`users/${userId}/phone`, { phone: phoneNumber }, true),\n        [http]\n    );\n}\n\n/**\n * @function useConfirmUserPhoneNumber\n * @returns { ConfirmUserPhoneNumberApiParams }\n */\nexport function useConfirmUserPhoneNumber(): ConfirmUserPhoneNumberApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, code) =>\n            http.post(`users/${userId}/phone/confirm`, { code }, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateUserPassword\n * @returns { UpdateUserPasswordApiParams }\n */\nexport function useUpdateUserPassword(): UpdateUserPasswordApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, password) =>\n            http.post(`users/${userId}/password`, password, true),\n        [http]\n    );\n}\n\n/**\n * @function useRevokePendingUsers\n * @returns { RevokePendingUsersApiParams }\n */\nexport function useRevokePendingUsers(): RevokePendingUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        userIds => http.post(`users/invite/revoke`, userIds, true),\n        [http]\n    );\n}\n/**\n * @function useGetUserPermissionsApi\n * @returns { GetUserPermissionsApiParams }\n */\n export function useGetUserPermissionsApi(): GetUserPermissionsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId: number) =>\n            http.get(`users/${userId}/permissions`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetUserSettingsApi\n * @returns { GetUserSettingsApiParams }\n */\n export function useGetUserSettingsApi(): GetUserSettingsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId: number) =>\n            http.get(`users/${userId}/settings`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useSaveUserSettingsApi\n * @returns { SaveUserSettingsApiParams }\n */\n export function useSaveUserSettingsApi(): SaveUserSettingsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId: number, labels: number[] | null) =>\n            http.post(`users/${userId}/settings`, labels, true),\n        [http]\n    );\n}\n/**\n * @function useSetUserPhotoApi\n * @returns { SetUserPhotoApiParams }\n */\n export function useSetUserPhotoApi(): SetUserPhotoApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, mediaId) => http.post(`users/${userId}/picture`, { mediaId }, true), [http]);\n}\n\n/**\n * @function useActivateUsersApi\n * @returns { ActivateUsersApiParams }\n */\nexport function useActivateUsersApi(): ActivateUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        userIds => http.put(`users/activate`, userIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetUserPreferencesApi\n * @returns { GetUserPreferencesApiParams }\n */\nexport function useGetUserPreferencesApi(): GetUserPreferencesApiParams {\n    const http = useHttp();\n    return useCallback(\n        userId => http.get(`users/${userId}/preferences`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateUserPreferencesApi\n * @returns { UpdateUserPreferencesApiParams }\n */\nexport function useUpdateUserPreferencesApi(): UpdateUserPreferencesApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, preferences) => http.patch(`users/${userId}/preferences`, preferences, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    GetSubmissionDetailsApiParams,\n    SubmissionActionApiParams,\n    RequestSubmissionRedoApiParams,\n    SearchSubmissionsApiParams,\n    ArchiveSubmissionsApiParams,\n    RestoreSubmissionsApiParams,\n    GetSubmissionReviewApiParams,\n    PerformSubmissionReviewApiParams,\n    AddSubmissionFlagApiParams,\n    DeleteSubmissionFlagApiParams,\n    GetSubmissionIdByOldIdParams,\n    GetSubmissionRepLinesParams,\n} from './types';\n\n/**\n * @function useSearchSubmissionsApi\n * @returns { SearchSubmissionsApiParams }\n */\n export function useSearchSubmissionsApi(): SearchSubmissionsApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.get('submissions', searchParams, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetSubmissionDetailsApi\n * @returns { GetSubmissionDetailsApiParams }\n */\nexport function useGetSubmissionDetailsApi(): GetSubmissionDetailsApiParams {\n    const http = useHttp();\n    return useCallback(\n        submissionId => http.get(`submissions/${submissionId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useRequestSubmissionRedoApi\n * @returns { RequestSubmissionRedoApiParams }\n */\nexport function useRequestSubmissionRedoApi(): RequestSubmissionRedoApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionId, { senderName, text }) =>\n            http.put(`submissions/${submissionId}/redo`, {\n                senderName,\n                text,\n            }, true),\n        [http]\n    );\n}\n\n/**\n * @function usePerformSubmissionActionApi\n * @returns { SubmissionActionApiParams }\n */\nexport function usePerformSubmissionActionApi(): SubmissionActionApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionId: number, action: string) =>\n            http.post(`submissions/${submissionId}/actions`, { action }, true),\n        [http]\n    );\n}\n\n/**\n * @function useArchiveSubmissionsApi\n * @returns { ArchiveSubmissionsApiParams }\n */\n export function useArchiveSubmissionsApi(): ArchiveSubmissionsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionsIds) =>\n            http.put('submissions/archive', submissionsIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useRestoreSubmissionsApi\n * @returns { RestoreSubmissionsApiParams }\n */\n export function useRestoreSubmissionsApi(): RestoreSubmissionsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionsIds) =>\n            http.put('submissions/active', submissionsIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetSubmissionReviewApi\n * @returns { GetSubmissionReviewApiParams }\n */\nexport function useGetSubmissionReviewApi(): GetSubmissionReviewApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionId) =>\n            http.get(`submissions/${submissionId}/reviews`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function usePerformSubmissionReviewApi\n * @returns { PerformSubmissionReviewApiParams }\n */\n export function usePerformSubmissionReviewApi(): PerformSubmissionReviewApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionId, params) => http.post(`submissions/${submissionId}/reviews`, params, true),\n        [http]\n    );\n}\n\n/**\n * @function useAddSubmissionFlag\n * @returns { AddSubmissionFlagApiParams }\n */\nexport function useAddSubmissionFlag(): AddSubmissionFlagApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionId, type) =>\n            http.post(`submissions/${submissionId}/flags`, { type }, true),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteSubmissionFlag\n * @returns { AddSubmissionFlagApiParams }\n */\nexport function useDeleteSubmissionFlag(): DeleteSubmissionFlagApiParams {\n    const http = useHttp();\n    return useCallback(\n        (submissionId, flagId) =>\n            http.delete(`submissions/${submissionId}/flags/${flagId}`, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetSubmissionIdByOldId\n * @returns { GetSubmissionIdByOldIdParams }\n */\nexport function useGetSubmissionIdByOldId(): GetSubmissionIdByOldIdParams {\n    const http = useHttp();\n    return useCallback(\n        (oldSubmissionId, type) =>\n            http.get(`submissions/old/${oldSubmissionId}`, { type }, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetSubmissionRepLines\n * @returns { GetSubmissionRepLinesParams }\n */\nexport function useGetSubmissionRepLines(): GetSubmissionRepLinesParams {\n    const http = useHttp();\n    return useCallback(\n        (params) =>\n            http.get(`/submissions/rep-log`, params, undefined, true),\n        [http]\n    );\n}","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    AssignMembersToTeamsApiParams,\n    CreateNewTeamApiParams,\n    DeleteMembersToTeamsApiParams,\n    DeleteTeamsApiParams,\n    GetMembersReportApiParams,\n    GetPractisSetsReportApiParams,\n    GetEnrollmentsReportApiParams,\n    GetSingleTeamApiParams,\n    MarkTeamAsViewedApiParams,\n    SearchPractisSetDetailsUsersApiParams,\n    SearchTeamLeadersApiParams,\n    SearchTeamMembersApiParams,\n    SearchTeamsApiParams,\n    SearchTrainingPractisSetsApiParams,\n    UpdateLabelsTeamsApiParams,\n    UpdateTeamLeaderApiParams,\n    UpdateTeamNameApiParams,\n} from './types';\n\n/**\n * @function useSearchTeamsApi\n * @returns { SearchTeamsApiParams }\n */\nexport function useSearchTeamsApi(): SearchTeamsApiParams {\n    const http = useHttp();\n    return useCallback(searchParams => http.get(`teams`, searchParams, undefined, true), [http]);\n}\n\n/**\n * @function useSearchTeamLeadersApi\n * @returns { SearchTeamLeadersApiParams }\n */\nexport function useSearchTeamLeadersApi(): SearchTeamLeadersApiParams {\n    const http = useHttp();\n    return useCallback(\n        searchParams => http.post('teams/leaders-search', searchParams),\n        [http]\n    );\n}\n\n/**\n * @function useGetSingleTeamApi\n * @returns { GetSingleTeamApiParams }\n */\nexport function useGetSingleTeamApi(): GetSingleTeamApiParams {\n    const http = useHttp();\n    return useCallback(\n        teamId => http.get(`teams/${teamId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useSearchTrainingPractisSetsApi\n * @returns { SearchTrainingPractisSetsApiParams }\n */\nexport function useSearchTrainingPractisSetsApi(): SearchTrainingPractisSetsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (teamId, searchParams) =>\n            http.get(\n                `teams/${teamId}/practisSets`,\n                searchParams,\n                undefined,\n                true\n            ),\n        [http]\n    );\n}\n\n/**\n * @function useSearchPractisSetDetailsUsersApi\n * @returns { SearchPractisSetDetailsUsersApiParams }\n */\nexport function useSearchPractisSetDetailsUsersApi(): SearchPractisSetDetailsUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        (teamId, practisSetId, searchParams) =>\n            http.get(\n                `teams/${teamId}/practisSets/${practisSetId}/enrollments`,\n                searchParams,\n                undefined,\n                true\n            ),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteTeamsApi\n * @returns { DeleteTeamsApiParams }\n */\nexport function useDeleteTeamsApi(): DeleteTeamsApiParams {\n    const http = useHttp();\n    return useCallback(\n        (teamIds) =>\n            http.delete(`teams`, teamIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetMembersReportApi\n * @returns { GetMembersReportApiParams }\n */\nexport function useGetMembersReportApi(): GetMembersReportApiParams {\n    const http = useHttp();\n    return useCallback(\n        (teamId, searchParams) => {\n                return http.get(`teams/${teamId}/reports/members`, searchParams, \"blob\", true);\n        },\n        [http]\n    );\n}\n\n/**\n * @function useGetPractisSetsReportApi\n * @returns { GetPractisSetsReportApiParams }\n */\nexport function useGetPractisSetsReportApi(): GetPractisSetsReportApiParams {\n    const http = useHttp();\n    return useCallback(\n        (searchParams, teamId) => {\n            return http.get(`teams/${teamId}/reports/practisSets`, searchParams, \"blob\", true);\n        },\n        [http]\n    );\n}\n\n/**\n * @function useGetEnrollmentsReportApi\n * @returns { GetEnrollmentsReportApiParams }\n */\n export function useGetEnrollmentsReportApi(): GetEnrollmentsReportApiParams {\n    const http = useHttp();\n    return useCallback(\n        (searchParams, teamId, psetId) => {\n            return http.get(`teams/${teamId}/reports/practisSets/${psetId}/enrollments`, searchParams, \"blob\", true);\n        },\n        [http]\n    );\n}\n\n/**\n * @function useSearchTeamMembersApi\n * @returns { SearchTeamMembersApiParams }\n */\nexport const useSearchTeamMembersApi = (): SearchTeamMembersApiParams => {\n    const http = useHttp();\n\n    return useCallback(\n        (teamId, searchParams) => {\n            return http.get(\n                `/teams/${teamId}/members`,\n                searchParams,\n                undefined,\n                true\n            );\n        },\n        [http]\n    );\n};\n\n/**\n * @function useMarkTeamAsViewedApi\n * @returns { MarkTeamAsViewedApiParams }\n */\nexport function useMarkTeamAsViewedApi(): MarkTeamAsViewedApiParams {\n    const http = useHttp();\n    return useCallback(\n        teamId => http.put(`teams/${teamId}/user/mark-as-viewed`),\n        [http]\n    );\n}\n\n/**\n * @function useCreateNewTeamApi\n * @returns { CreateNewTeamApiParams }\n */\nexport function useCreateNewTeamApi(): CreateNewTeamApiParams {\n    const http = useHttp();\n    return useCallback(name => http.post('teams', { name }, true), [http]);\n}\n\n/**\n * @function useAssignMembersToTeamsApi\n * @returns { AssignMembersToTeamsApiParams }\n */\nexport function useAssignMembersToTeamsApi(): AssignMembersToTeamsApiParams {\n    const http = useHttp();\n    return useCallback(\n        members => http.post('teams/members', members, true),\n        [http]\n    );\n}\n\n\n/**\n * @function useDeleteMembersFromTeamsApi\n * @returns { DeleteMembersToTeamsApiParams }\n */\nexport function useDeleteMembersFromTeamsApi(): DeleteMembersToTeamsApiParams {\n    const http = useHttp();\n    return useCallback(\n        members => http.delete('teams/members', members, true),\n        [http]\n    );\n}\n\n/**\n * @function useAssignLabelsToTeamsApi\n * @returns { UpdateLabelsTeamsApiParams }\n */\nexport function useAssignLabelsToTeamsApi(): UpdateLabelsTeamsApiParams {\n    const http = useHttp();\n    return useCallback(\n        labels => http.post('teams/labels', labels, true),\n        [http]\n    );\n}\n/**\n * @function useDeleteLabelsFromTeamsApi\n * @returns { UpdateLabelsTeamsApiParams }\n */\nexport function useDeleteLabelsFromTeamsApi(): UpdateLabelsTeamsApiParams {\n    const http = useHttp();\n    return useCallback(\n        labels => http.delete('teams/labels', labels, true),\n        [http]\n    );\n}\n/**\n * @function useUpdateTeamNameApi\n * @returns { UpdateTeamNameApiParams }\n */\nexport function useUpdateTeamNameApi(): UpdateTeamNameApiParams {\n    const http = useHttp();\n    return useCallback(\n        (teamId, name) => http.put(`teams/${teamId}`, { name }, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateTeamLeaderApi\n * @returns { UpdateTeamLeaderApiParams }\n */\nexport function useUpdateTeamLeaderApi(): UpdateTeamLeaderApiParams {\n    const http = useHttp();\n    return useCallback(\n        (teamUserId, isTeamLead) =>\n            http.put(`teams/members/${teamUserId}`, { isTeamLead }, true),\n        [http]\n    );\n}\n","import { useCallback } from 'react';\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    EnrollPractisSetsToUserApiParams,\n    DeleteEnrollmentsParams,\n    EnrollmentsDueDateType,\n    EnrollmentSearchParams,\n    GetEnrollmentsParams,\n    GetEnrollmentApiParams,\n    GetEnrollmentProgressApiParams,\n    GetEnrollmentDailyTrainingApiParams,\n    OverdueLearnersSearchParams,\n    getOverdueLearnersParams\n} from './types';\n\n\n/**\n * @function useEnrollPractisSetsToUserApi\n * @returns { EnrollPractisSetsToUserApiParams }\n */\n export function useEnrollPractisSetsToUserApi() {\n    const http = useHttp();\n    return useCallback(\n        enrollments => http.post('enrollments', enrollments, true),\n        [http]\n    ) as EnrollPractisSetsToUserApiParams;\n}\n\n/**\n * @function useDeleteEnrollmentsApi\n * @param { number[] } enrollmentIds\n * @returns { Promise<void> }\n */\n export function useDeleteEnrollmentsApi() {\n    const http = useHttp();\n    return useCallback(\n        (enrollmentIds) =>\n            http.delete(`enrollments`, enrollmentIds, true),\n        [http]\n    ) as DeleteEnrollmentsParams;\n}\n\n/**\n * @function useCreateUpdateEnrollmentDueDate\n * @param { EnrollmentsDueDateType[] } enrollmentDueDates\n * @returns { Promise<void> }\n */\nexport function useCreateUpdateEnrollmentDueDate() {\n    const http = useHttp();\n    return useCallback(\n        (enrollmentDueDates: EnrollmentsDueDateType[]) =>\n            http.post(`/enrollments/dueDate`, enrollmentDueDates, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetEnrollments\n * @param { searchParams[] } EnrollmentSearchParams\n * @returns { Promise<void> }\n */\nexport function useGetEnrollments() {\n    const http = useHttp();\n    return useCallback(\n        (searchParams: EnrollmentSearchParams) => http.get('enrollments', searchParams, undefined, true),\n        [http]\n    ) as GetEnrollmentsParams;\n}\n\n/**\n * @function useGetEnrollmentApi\n * @returns { GetEnrollmentApiParams }\n */\nexport function useGetEnrollmentApi(): GetEnrollmentApiParams {\n    const http = useHttp();\n    return useCallback(\n        (enrollmentId) =>\n            http.get(`/enrollments/${enrollmentId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetEnrollmentProgressApi\n * @returns { GetEnrollmentProgressApiParams }\n */\nexport function useGetEnrollmentProgressApi(): GetEnrollmentProgressApiParams {\n    const http = useHttp();\n    return useCallback(\n        (enrollmentId) =>\n            http.get(`/enrollments/${enrollmentId}/progress_status`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetEnrollmentDailyTrainingApi\n * @returns { GetEnrollmentProgressApiParams }\n */\nexport function useGetEnrollmentDailyTrainingApi(): GetEnrollmentDailyTrainingApiParams {\n    const http = useHttp();\n    return useCallback(\n        (enrollmentId) =>\n            http.get(`/enrollments/${enrollmentId}/daily_training`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetOverdueLearners\n * @param { searchParams[] } OverdueLearnersSearchParams\n * @returns { getOverdueLearnersParams }\n */\nexport function useGetOverdueLearners() {\n    const http = useHttp();\n    return useCallback(\n        (searchParams: OverdueLearnersSearchParams) => http.get('/enrollments/overdue-users', searchParams, undefined, true),\n        [http]\n    ) as getOverdueLearnersParams;\n}\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    InviteUsersApiParams,\n    ResendInvitationApiParams,\n    TestInvitationApiParams,\n    UserPerformanceApiParams,\n} from './types';\n\n/**\n * @function useUserPerformanceApi\n * @returns { UserPerformanceApiParams }\n */\nexport function useUserPerformanceApi(): UserPerformanceApiParams {\n    const http = useHttp();\n    return useCallback(\n        (userId, isInvitation) => {\n            return isInvitation\n                ? http.get(`invitations/${userId}/preview`)\n                : http.get(`users/${userId}`, undefined, undefined, true);\n        },\n        [http]\n    );\n}\n\n/**\n * @function useTestInvitationApi\n * @returns { TestInvitationApiParams }\n */\nexport function useTestInvitationApi(): TestInvitationApiParams {\n    const http = useHttp();\n    return useCallback(\n        (code: string): any => http.get(`invitations/${code}`),\n        [http]\n    );\n}\n\n/**\n * @function useInviteUsers\n * @returns { InviteUsersApiParams }\n */\nexport function useInviteUsers(): InviteUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        users => http.post(`/users/invite`, users, true),\n        [http]\n    );\n}\n\n/**\n * @function useResendInvitationApi\n * @returns { ResendInvitationApiParams }\n */\n export function useResendInvitationApi(): ResendInvitationApiParams {\n    const http = useHttp();\n    return useCallback(\n        invitationIds => http.post('/users/invite/resend', invitationIds, true),\n        [http]\n    );\n}\n\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../tools/http/Http';\nimport { NudgeUsersApiParams, RemindToStartApiParams } from './types';\n\n/**\n * @function useNudgeUsersApi\n * @returns { NudgeUsersApiParams }\n */\nexport function useNudgeUsersApi(): NudgeUsersApiParams {\n    const http = useHttp();\n    return useCallback(\n        nudgeDateList => http.post('nudges/users', nudgeDateList, true),\n        [http]\n    );\n}\n\n/**\n * @function useRemindToStartApi\n * @returns { RemindToStartApiParams }\n */\nexport function useRemindToStartApi(): RemindToStartApiParams {\n    const http = useHttp();\n    return useCallback(\n        enrollments => http.post('alerts', enrollments, true),\n        [http]\n    );\n}","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Check = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 -21 512.016 512\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <path d=\"m234.667969 469.339844c-129.386719 0-234.667969-105.277344-234.667969-234.664063s105.28125-234.6679685 234.667969-234.6679685c44.992187 0 88.765625 12.8203125 126.589843 37.0976565 7.425782 4.78125 9.601563 14.679687 4.820313 22.125-4.796875 7.445312-14.675781 9.597656-22.121094 4.820312-32.640625-20.972656-70.441406-32.042969-109.289062-32.042969-111.746094 0-202.667969 90.921876-202.667969 202.667969 0 111.742188 90.921875 202.664063 202.667969 202.664063 111.742187 0 202.664062-90.921875 202.664062-202.664063 0-6.679687-.320312-13.292969-.9375-19.796875-.851562-8.8125 5.589844-16.621094 14.378907-17.472656 8.832031-.8125 16.617187 5.589844 17.472656 14.378906.722656 7.53125 1.085937 15.167969 1.085937 22.890625 0 129.386719-105.277343 234.664063-234.664062 234.664063zm0 0\" />\n                    <path d=\"m261.332031 288.007812c-4.09375 0-8.191406-1.558593-11.304687-4.691406l-96-96c-6.25-6.253906-6.25-16.386718 0-22.636718s16.382812-6.25 22.632812 0l84.695313 84.695312 223.335937-223.339844c6.253906-6.25 16.386719-6.25 22.636719 0s6.25 16.382813 0 22.632813l-234.667969 234.667969c-3.136718 3.113281-7.230468 4.671874-11.328125 4.671874zm0 0\" />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Check;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Error = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 -21 512.016 512\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            id=\"a\"\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <path\n                        d=\"M478.309,456.832l-64-128c-2.72-5.408-8.256-8.832-14.304-8.832h-48c-8.832,0-16,7.168-16,16c0,8.832,7.168,16,16,16\n\t\t\th38.112l48,96H41.893l48-96h38.112c8.832,0,16-7.168,16-16c0-8.832-7.168-16-16-16h-48c-6.048,0-11.584,3.424-14.304,8.864\n\t\t\tl-64,128c-2.496,4.96-2.208,10.848,0.704,15.552c2.912,4.704,8.064,7.584,13.6,7.584h448c5.536,0,10.688-2.88,13.632-7.616\n\t\t\tC480.517,467.68,480.773,461.792,478.309,456.832z\"\n                    />\n                    <path\n                        d=\"M367.429,331.776L286.053,34.56C279.941,13.568,261.893,0,240.005,0s-39.968,13.568-46.144,34.816l-81.28,296.96\n\t\t\tc-0.384,1.376-0.576,2.784-0.576,4.224c0,46.656,114.912,48,128,48c13.088,0,128-1.344,128-48\n\t\t\tC368.005,334.56,367.813,333.152,367.429,331.776z M240.005,352c-56.096,0-89.824-11.68-95.52-15.616l80.16-292.864\n\t\t\tC227.749,32.832,237.189,32,240.005,32s12.256,0.832,15.296,11.264l79.776,291.488C326.565,341.408,293.413,352,240.005,352z\"\n                    />\n                    <path\n                        d=\"M345.765,252.672c-3.264-8.192-12.576-12.224-20.768-8.96c-38.272,15.2-131.712,15.2-169.952,0\n\t\t\tc-8.224-3.232-17.472,0.768-20.768,8.96c-3.264,8.192,0.768,17.504,8.96,20.768c22.976,9.12,59.136,14.56,96.768,14.56\n\t\t\tc37.632,0,73.824-5.44,96.8-14.56C345.029,270.208,349.029,260.896,345.765,252.672z\"\n                    />\n                    <path\n                        d=\"M322.213,166.08c-1.952-8.608-10.4-14.016-19.136-12.096c-35.072,7.872-91.104,7.872-126.112,0\n\t\t\tc-8.704-1.888-17.184,3.488-19.136,12.096c-1.92,8.608,3.488,17.184,12.096,19.136c19.776,4.448,44.032,6.784,70.08,6.784\n\t\t\tc26.048,0,50.272-2.336,70.08-6.784C318.725,183.264,324.165,174.72,322.213,166.08z\"\n                    />\n                    <path\n                        d=\"M297.189,75.808c-1.12-8.8-9.312-15.072-17.856-13.92c-22.624,2.816-56.128,2.784-78.624,0\n\t\t\tc-8.864-1.024-16.768,5.12-17.856,13.888c-1.088,8.8,5.12,16.768,13.888,17.856C209.317,95.2,223.877,96,240.005,96\n\t\t\ts30.688-0.8,43.264-2.336C292.069,92.544,298.277,84.576,297.189,75.808z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Error;\n","import React, { memo } from 'react';\nimport styled from 'styled-components';\n\nimport Check from '../../icons/Check';\nimport Error from '../../icons/Error';\nimport { Variables } from '../../../theme/variables';\nimport { ErrorMessagesInterface } from '../ErrorMessages/ErrorMessages';\n\nexport const variantIcon = {\n    success: Check,\n    error: Error,\n};\n\nconst styleProperties = {\n    success: {\n        backgroundColor: Variables.Colors.topaz,\n    },\n    error: {\n        backgroundColor: Variables.Colors.tomato,\n    },\n};\n\nexport interface Props {\n    className?: string;\n    message: ErrorMessagesInterface['message'];\n    handleClose?: () => void;\n    open: boolean;\n    variant: keyof typeof variantIcon;\n}\n\nconst SnackbarContainer = styled.div<{\n    backgroundColor: string;\n    open?: boolean;\n}>`\n    box-sizing: border-box;\n    min-width: 280px;\n    max-width: 550px;\n    min-height: 64px;\n    background-color: ${props => props.backgroundColor};\n    position: absolute;\n    left: 24px;\n    bottom: 24px;\n    display: flex;\n    align-items: center;\n    visibility: ${props => (props.open ? 'visible' : 'hidden')};\n    transition: visibility 1s linear;\n    z-index: 99999;\n    padding: 20px 24px;\n    border-radius: 4px;\n\n    @media(max-width:600px) {\n        max-width: calc(100vw - 48px);\n        height: auto;\n        min-height: 64px;\n        padding: 3px 18px;\n    }\n`;\n\nconst IconWrapper = styled.div`\n    width: 16px;\n    flex-shrink: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-right: 12px;\n`;\n\nconst StyledIcon = styled.div`\n    height: 16px;\n    width: 16px;\n    color: ${props => props.theme.Colors.white};\n    flex: 1;\n`;\n\nconst StyledText = styled.div``;\n\nconst StyledMessageContainer = styled.div`\n    font-size: 15px;\n    color: ${props => props.theme.Colors.white};\n`;\n\nexport const InfoSnackbar = memo((props: Props) => {\n    const { message, variant, open } = props;\n    const Icon = variantIcon[variant];\n\n    let content;\n\n    if (typeof message === 'string') {\n        content = message;\n    } else if (Array.isArray(message)) {\n        content = message.map((text, index) => (\n            <StyledText key={index}>{text}</StyledText>\n        ));\n    } else {\n        content = 'unknown message';\n    }\n\n    return (\n        <SnackbarContainer\n            backgroundColor={styleProperties[variant].backgroundColor}\n            open={open}\n            data-test=\"message-box\"\n        >\n            <IconWrapper>\n                <StyledIcon>\n                    <Icon />\n                </StyledIcon>\n            </IconWrapper>\n            <StyledMessageContainer>{content}</StyledMessageContainer>\n        </SnackbarContainer>\n    );\n});\n","import { useCallback } from 'react';\nimport { connect, useDispatch } from 'react-redux';\nimport { bindActionCreators, Dispatch } from 'redux';\n\nimport { InfoSnackbar, variantIcon } from '../InfoSnackbar/InfoSnackbar';\nimport { displayMessage, hideMessage } from './store/actions';\nimport { getErrorMessages } from './store/reducers';\nimport { AppState } from '../../../store/reducers';\nimport { CLIENT_SIDE_ERROR_MESSAGE } from './constants';\n\n\nexport const handleMessage = (\n    dispatch: Dispatch,\n    error: string | Array<string>,\n    status: keyof typeof variantIcon = 'error'\n) => {\n    const clientSideErrorMessage: string | Array<string> =\n        (!Array.isArray(error) && CLIENT_SIDE_ERROR_MESSAGE[error]) ||\n        error;\n\n\n        dispatch(\n        displayMessage({\n            message: clientSideErrorMessage,\n            status: status,\n        })\n    );\n    setTimeout(() => {\n        dispatch(hideMessage());\n    }, 5000);\n};\n\nexport const useShowMessage = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (message: string | string[], status: keyof typeof variantIcon) =>\n            handleMessage(dispatch, message, status),\n        [dispatch]\n    );\n};\n\nexport interface ErrorMessagesInterface {\n    status: keyof typeof variantIcon | null;\n    message: string | Array<string>;\n}\n\nconst ErrorMessages = ({\n    messages,\n    hideMessage,\n}: {\n    messages: ErrorMessagesInterface;\n    hideMessage: Function;\n}) => {\n    return (\n        <>\n            {!!messages.status && (\n                <InfoSnackbar\n                    open={!!messages.status}\n                    variant={messages.status ? messages.status : 'error'}\n                    message={messages.message}\n                    handleClose={() => hideMessage()}\n                />\n            )}\n        </>\n    );\n};\n\nfunction mapStateToProps(state: AppState) {\n    return {\n        messages: getErrorMessages(state),\n    };\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch) =>\n    bindActionCreators(\n        {\n            hideMessage: hideMessage,\n        },\n        dispatch\n    );\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ErrorMessages);\n","import { Variables } from '../../../theme/variables';\nimport { Theme } from './type';\n\nexport const COLORS: Record<\n    Theme,\n    { light: string; normal: string; dark: string; text: string }\n> = {\n    default: {\n        light: Variables.Colors.darkSkyBlue,\n        normal: Variables.Colors.darkSkyBlueTwo,\n        dark: Variables.Colors.coolBlue,\n        text: Variables.Colors.white,\n    },\n    warning: {\n        light: Variables.Colors.tomato,\n        normal: Variables.Colors.coral,\n        dark: Variables.Colors.paleRed,\n        text: Variables.Colors.white,\n    },\n    'warning-inverse': {\n        light: Variables.Colors.tomato,\n        normal: Variables.Colors.salmon,\n        dark: Variables.Colors.paleRed,\n        text: Variables.Colors.white,\n    },\n    white: {\n        light: Variables.Colors.white,\n        normal: Variables.Colors.white,\n        dark: Variables.Colors.white,\n        text: Variables.Colors.black,\n    },\n    gray: {\n        light: Variables.Colors.steelGrey,\n        normal: Variables.Colors.battleshipGrey,\n        dark: Variables.Colors.darkerGray,\n        text: Variables.Colors.white,\n    },\n    grayLight: {\n        light: Variables.Colors.whiteFive,\n        normal: Variables.Colors.lightGray,\n        dark: Variables.Colors.whiteFive,\n        text: Variables.Colors.steelGrey,\n    },\n    green: {\n        light: Variables.Colors.green,\n        normal: Variables.Colors.greenTwo,\n        dark: Variables.Colors.greenTwo,\n        text: Variables.Colors.white,\n    },\n};\n","import styled from 'styled-components';\n\nimport { COLORS } from './constants';\nimport { Theme, Variant } from './type';\n\nexport const StyledButtonContent = styled.div<{\n    height?: string;\n    width?: string;\n    fontSize?: number;\n    borderRadius?: string;\n    hasIcon?: boolean;\n    color: Theme;\n}>`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: ${props => (props.fontSize ? `${props.fontSize}px` : '13px')};\n    font-weight: 500;\n    flex: 1;\n    padding: 0 16px;\n    height: ${props => (props.height ? props.height : '40px')};\n    min-width: ${props => (props.width ? props.width : '100px')};\n    border-radius: ${props =>\n        props.hasIcon ? '0' : props.borderRadius ? props.borderRadius : '4px'};\n\n    border-top-left-radius: ${props =>\n        props.borderRadius ? props.borderRadius : '4px'};\n    border-bottom-left-radius: ${props =>\n        props.borderRadius ? props.borderRadius : '4px'};\n    box-sizing: border-box;\n`;\n\nexport const StyledButtonIconContainer = styled.div<{\n    height?: string;\n    color: Theme;\n    onlyIcon?: boolean;\n    borderRadius?: string;\n}>`\n    display: flex;\n    width: 40px;\n    height: ${props => (props.height ? props.height : '40px')};\n    justify-content: center;\n    border-radius: ${props =>\n        props.onlyIcon\n            ? props.borderRadius\n                ? props.borderRadius\n                : '4px'\n            : '0'};\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    background: ${props => COLORS[props.color].light};\n    align-items: center;\n    & img {\n        height: 20px;\n    }\n`;\n\nexport const StyledButtonIcon = styled.div<{ buttonSize?: number }>`\n    height: ${props => (props.buttonSize ? props.buttonSize : 20)}px;\n    width: ${props => (props.buttonSize ? props.buttonSize : 20)}px;\n    display: flex;\n    justify-content: center;\n`;\n\nexport const StyledButton = styled.button<{\n    color: Theme;\n    customColor?: string;\n    variant?: Variant;\n    width?: string;\n    buttonSize?: number;\n    borderRadius?: string;\n    customDisabledColor?: string;\n    buttonWidth?: string;\n}>`\n    display: flex;\n    border: none;\n    cursor: pointer;\n    padding: 0;\n    border-radius: ${props =>\n        props.borderRadius ? props.borderRadius : '4px'};\n    font-family: Manrope, serif !important;\n    height: fit-content;\n    ${props => !!props.buttonWidth && `width: ${props.buttonWidth};`}\n    &.primary {\n        background: ${props =>\n            !!props.customColor\n                ? props.customColor\n                : COLORS[props.color].light};\n        color: ${props => COLORS[props.color].text};\n        &:hover {\n            background: ${props => COLORS[props.color].normal};\n        }\n        &:active {\n            background: ${props => COLORS[props.color].dark};\n        }\n        &:disabled {\n            cursor: default;\n            background: ${props =>\n                !!props.customDisabledColor\n                    ? props.customDisabledColor\n                    : props.theme.Colors.cloudyBlue};\n        }\n    }\n\n    &.inverse {\n        background: transparent;\n        color: ${props =>\n            !!props.customColor\n                ? props.customColor\n                : COLORS[props.color].light};\n        box-shadow: inset 0 0 0 1px\n            ${props =>\n                !!props.customColor\n                    ? props.customColor\n                    : COLORS[props.color].light};\n        &:hover {\n            background: ${props => COLORS[props.color].light};\n            color: ${props => COLORS[props.color].text};\n        }\n        &:active {\n            background: ${props => COLORS[props.color].normal};\n            color: ${props => COLORS[props.color].text};\n        }\n        &:disabled {\n            background: transparent;\n            color: ${props => props.theme.Colors.cloudyBlue};\n            cursor: default;\n            box-shadow: inset 0 0 0 1px\n                ${props => props.theme.Colors.cloudyBlue};\n        }\n    }\n\n    &.transparent {\n        font-weight: bold;\n        background: transparent;\n        color: ${props => COLORS[props.color].light};\n        flex-direction: row-reverse;\n        display: flex;\n        align-items: center;\n        ${StyledButtonContent} {\n            padding: 0;\n            justify-content: flex-start;\n            margin: 0 8px;\n            min-width: ${props => (props.width ? props.width : '100px')};\n            height: 24px;\n        }\n\n        ${StyledButtonIconContainer} {\n            background: transparent;\n            width: ${props => (props.buttonSize ? props.buttonSize : 20)}px;\n            height: auto;\n            color: ${props => COLORS[props.color].light};\n        }\n        &:hover,\n        &:hover ${StyledButtonIconContainer} {\n            color: ${props => COLORS[props.color].normal};\n        }\n        &:active,\n        :active ${StyledButtonIconContainer} {\n            color: ${props => COLORS[props.color].dark};\n        }\n        &:disabled,\n        &:disabled ${StyledButtonIconContainer} {\n            color: ${props => props.theme.Colors.blueyGray};\n        }\n    }\n\n    &.with-icon {\n        background: ${props => COLORS[props.color].normal};\n        color: ${props => COLORS[props.color].text};\n        &:hover ${StyledButtonIconContainer} {\n            background: ${props => COLORS[props.color].normal};\n        }\n        &:active,\n        :active ${StyledButtonIconContainer} {\n            background: ${props => COLORS[props.color].dark};\n        }\n        &:disabled {\n            background: ${props => props.theme.Colors.blueyGray};\n            cursor: default;\n        }\n        &:disabled ${StyledButtonIconContainer} {\n            background: ${props => props.theme.Colors.cloudyBlue};\n            cursor: default;\n        }\n    }\n`;\n\n","import { forwardRef } from 'react';\n\nimport { Loading } from '../LoadingCopmonent';\nimport { COLORS } from './constants';\nimport {\n    StyledButton,\n    StyledButtonContent,\n    StyledButtonIcon,\n    StyledButtonIconContainer,\n} from './style';\nimport { ButtonProps } from './type';\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n    (\n        {\n            label,\n            children,\n            action,\n            height,\n            style,\n            color,\n            disabled,\n            icon,\n            iconRender,\n            loading,\n            loadingSize,\n            loadingColor,\n            variant,\n            width,\n            className,\n            type,\n            onlyIcon,\n            buttonSize,\n            borderRadius,\n            fontSize,\n            customColor,\n            customDisabledColor,\n            buttonWidth,\n            dataTest\n        },\n        ref\n    ) => {\n        return (\n            <StyledButton\n                ref={ref}\n                title={label}\n                type={type || 'submit'}\n                disabled={disabled || loading}\n                onClick={action}\n                width={width}\n                buttonWidth={buttonWidth}\n                style={style}\n                variant={variant}\n                className={[\n                    icon || iconRender\n                        ? variant === 'transparent'\n                            ? 'transparent'\n                            : 'with-icon'\n                        : variant\n                        ? variant\n                        : 'primary',\n                ].join(' ')}\n                color={color ? color : 'default'}\n                customColor={customColor}\n                customDisabledColor={customDisabledColor}\n                buttonSize={buttonSize}\n                data-test={dataTest}\n            >\n                {!onlyIcon && (\n                    <StyledButtonContent\n                        hasIcon={!!icon || !!iconRender}\n                        height={height}\n                        width={width}\n                        color={color ? color : 'default'}\n                        borderRadius={borderRadius}\n                        fontSize={fontSize}\n                        className={\n                            variant\n                                ? [className, variant].join(' ')\n                                : `${className} primary`\n                        }\n                    >\n                        {loading ? (\n                            <Loading\n                                color={loadingColor ?? COLORS[color ? color : 'default'].dark}\n                                size={loadingSize ?? 15}\n                            />\n                        ) : (\n                            children || label\n                        )}\n                    </StyledButtonContent>\n                )}\n                {icon && (\n                    <StyledButtonIconContainer\n                        color={color ? color : 'default'}\n                        height={height}\n                        onlyIcon={onlyIcon}\n                        borderRadius={borderRadius}\n                    >\n                        <img src={icon} alt={'icon'} />\n                    </StyledButtonIconContainer>\n                )}\n                {iconRender && (\n                    <StyledButtonIconContainer\n                        color={color ? color : 'default'}\n                        height={height}\n                        onlyIcon={onlyIcon}\n                        borderRadius={borderRadius}\n                    >\n                        <StyledButtonIcon buttonSize={buttonSize}>\n                            {iconRender}\n                        </StyledButtonIcon>\n                    </StyledButtonIconContainer>\n                )}\n            </StyledButton>\n        );\n    }\n);\n\nexport default Button;\n","import { FC, MouseEvent } from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.div<{\n    color?: string;\n    disabled?: boolean;\n}>`\n    display: flex;\n    cursor: pointer;\n    height: 40px;\n    width: 40px;\n    padding: 0;\n    border-radius: 4px;\n    font-family: Manrope !important;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: ${props => props.theme.Colors.darkSkyBlue};\n    color: ${props => props.theme.Colors.white};\n    &:hover {\n        background: ${props => props.theme.Colors.cornflowerBlue};\n    }\n    &:active {\n        background: ${props => props.theme.Colors.coolBlue};\n    }\n    &:disabled {\n        background: transparent;\n        color: ${props => props.theme.Colors.blueyGray};\n        box-shadow: inset 0px 0px 0px 1px\n            ${props => props.theme.Colors.blueyGray};\n    }\n`;\n\nexport const SmallButton: FC<{\n    action?: (e: MouseEvent<HTMLDivElement>) => void;\n    disabled?: boolean;\n    loading?: boolean;\n    icon?: string;\n    className?: string;\n}> = ({ children, action, disabled, className }) => {\n    return (\n        <StyledButton\n            disabled={disabled}\n            onClick={action}\n            className={className}\n        >\n            {children}\n        </StyledButton>\n    );\n};\n\nexport default SmallButton;\n","export enum NEW_PERMISSIONS {\r\n    LOGIN_WEB = 'LOGIN_WEB',\r\n    LOGIN_MOBILE = 'LOGIN_MOBILE',\r\n    LOGIN_ADMIN = 'LOGIN_ADMIN',\r\n    SIGNUP_WEB = 'SIGNUP_WEB',\r\n    SIGNUP_MOBILE = 'SIGNUP_MOBILE',\r\n    COMPANY_REPORT = 'COMPANY_REPORT',\r\n    LIST_LOGS = 'LIST_LOGS',\r\n    MANAGE_RECORDINGS = 'MANAGE_RECORDINGS',\r\n    MANAGE_OWN_FILES = 'MANAGE_OWN_FILES',\r\n    UPDATE_COMPANY_INFO = 'UPDATE_COMPANY_INFO',\r\n    UPDATE_TTS_SETTINGS = 'UPDATE_TTS_SETTINGS',\r\n    VIEW_TTS_SETTINGS = 'VIEW_TTS_SETTINGS',\r\n    CREATE_PRACTIS_SET = 'CREATE_PRACTIS_SET',\r\n    CREATE_SCENARIO = 'CREATE_SCENARIO',\r\n    CREATE_CHALLENGE = 'CREATE_CHALLENGE',\r\n    UPDATE_PRACTIS_SET = 'UPDATE_PRACTIS_SET',\r\n    UPDATE_SCENARIO = 'UPDATE_SCENARIO',\r\n    UPDATE_CHALLENGE = 'UPDATE_CHALLENGE',\r\n    ARCHIVE_PRACTIS_SET = 'ARCHIVE_PRACTIS_SET',\r\n    ARCHIVE_SCENARIO = 'ARCHIVE_SCENARIO',\r\n    ARCHIVE_CHALLENGE = 'ARCHIVE_CHALLENGE',\r\n    DELETE_PRACTIS_SET = 'DELETE_PRACTIS_SET',\r\n    DELETE_SCENARIO = 'DELETE_SCENARIO',\r\n    DELETE_CHALLENGE = 'DELETE_CHALLENGE',\r\n    COPY_PRACTIS_SET = 'COPY_PRACTIS_SET',\r\n    COPY_SCENARIO = 'COPY_SCENARIO',\r\n    COPY_CHALLENGE = 'COPY_CHALLENGE',\r\n    GENERATE_CHALLENGE = 'GENERATE_CHALLENGE',\r\n    PUBLISH_PRACTIS_SET = 'PUBLISH_PRACTIS_SET',\r\n    PUBLISH_SCENARIO = 'PUBLISH_SCENARIO',\r\n    PUBLISH_CHALLENGE = 'PUBLISH_CHALLENGE',\r\n    LIST_PRACTIS_SET = 'LIST_PRACTIS_SET',\r\n    LIST_SCENARIO = 'LIST_SCENARIO',\r\n    LIST_CHALLENGE = 'LIST_CHALLENGE',\r\n    SET_DUE_DATE = 'SET_DUEDATE',\r\n    CREATE_INVITATION = 'CREATE_INVITATION',\r\n    INVITE_TRAINEE = 'INVITE_TRAINEE',\r\n    INVITE_TRAINER = 'INVITE_TRAINER',\r\n    INVITE_SUPERVISOR = 'INVITE_SUPERVISOR',\r\n    INVITE_CUSTOM_ROLE = 'INVITE_CUSTOM_ROLE',\r\n    INVITE_COMPANY_ADMIN = 'INVITE_COMPANY_ADMIN',\r\n    UPDATE_INVITATION = 'UPDATE_INVITATION',\r\n    DELETE_INVITATION = 'DELETE_INVITATION',\r\n    ASSIGN_INVITATION_PRACTIS_SET = 'ASSIGN_INVITATION_PRACTIS_SET',\r\n    ASSIGN_INVITATION_TEAM = 'ASSIGN_INVITATION_TEAM',\r\n    ASSIGN_INVITATION_LABEL = 'ASSIGN_INVITATION_LABEL',\r\n    ASSIGN_INVITATION_ROLE = 'ASSIGN_INVITATION_ROLE',\r\n    MANAGE_ROLES = 'MANAGE_ROLES',\r\n    CREATE_USER = 'CREATE_USER',\r\n    UPDATE_USER = 'UPDATE_USER',\r\n    DELETE_USER = 'DELETE_USER',\r\n    LIST_USER = 'LIST_USER',\r\n    EXPORT_LIST_USER = 'EXPORT_LIST_USER',\r\n    LIST_INVITATION = 'LIST_INVITATION',\r\n    REVOKE_INVITATION = 'REVOKE_INVITATION',\r\n    RESEND_INVITATION = 'RESEND_INVITATION',\r\n    VIEW_USER_PERFORMANCE = 'VIEW_USER_PERFORMANCE',\r\n    CREATE_LABEL = 'CREATE_LABEL',\r\n    UPDATE_LABEL = 'UPDATE_LABEL',\r\n    DELETE_LABEL = 'DELETE_LABEL',\r\n    MANAGE_PACINGS = 'MANAGE_PACINGS',\r\n    ASSIGN_PRACTIS_SET_LABEL = 'ASSIGN_PRACTIS_SET_LABEL',\r\n    ASSIGN_SCENARIO_LABEL = 'ASSIGN_SCENARIO_LABEL',\r\n    ASSIGN_CHALLENGE_LABEL = 'ASSIGN_CHALLENGE_LABEL',\r\n    ASSIGN_USER_LABEL = 'ASSIGN_USER_LABEL',\r\n    REMOVE_PRACTIS_SET_LABEL = 'REMOVE_PRACTIS_SET_LABEL',\r\n    REMOVE_SCENARIO_LABEL = 'REMOVE_SCENARIO_LABEL',\r\n    REMOVE_CHALLENGE_LABEL = 'REMOVE_CHALLENGE_LABEL',\r\n    REMOVE_USER_LABEL = 'REMOVE_USER_LABEL',\r\n    LIST_SUBMISSION = 'LIST_SUBMISSION',\r\n    VIEW_SUBMISSION = 'VIEW_SUBMISSION',\r\n    REVIEW_SUBMISSION = 'REVIEW_SUBMISSION',\r\n    REQUEST_SUBMISSION_REDO = 'REQUEST_SUBMISSION_REDO',\r\n    ARCHIVE_SUBMISSION = 'ARCHIVE_SUBMISSION',\r\n    RESTORE_SUBMISSION = 'RESTORE_SUBMISSION',\r\n    LIST_ACTIVE_PRACTIS_SET = 'LIST_ACTIVE_PRACTIS_SET',\r\n    VIEW_PRACTIS_SET_PROGRESS = 'VIEW_PRACTIS_SET_PROGRESS',\r\n    SEND_NUDGE = 'SEND_NUDGE',\r\n    EXPORT_LIST_PRACTIS_SET = 'EXPORT_LIST_PRACTIS_SET',\r\n    EXPORT_LIST_PRACTIS_SET_USER = 'EXPORT_LIST_PRACTIS_SET_USER',\r\n    ASSIGN_ENROLLMENT = 'ASSIGN_ENROLLMENT',\r\n    VIEW_USER_PRACTIS_SET_REPORT = 'VIEW_USER_PRACTIS_SET_REPORT',\r\n    VIEW_ENROLLMENT = 'VIEW_ENROLLMENT',\r\n    VIEW_NOTIFICATION = 'VIEW_NOTIFICATION',\r\n    VIEW_SUBMISSION_FEEDBACK = 'VIEW_SUBMISSION_FEEDBACK',\r\n    VIEW_PROFILE = 'VIEW_PROFILE',\r\n    UPDATE_PROFILE = 'UPDATE_PROFILE',\r\n    RECEIVE_PUSH = 'RECEIVE_PUSH',\r\n    TRACK_ACTIVITY = 'TRACK_ACTIVITY',\r\n    ASSIGN_INVITATION_PERMISSION = 'ASSIGN_INVITATION_PERMISSION',\r\n    ASSIGN_USER_PERMISSION = 'ASSIGN_USER_PERMISSION',\r\n    RESTORE_PRACTIS_SET = 'RESTORE_PRACTIS_SET',\r\n    RESTORE_SCENARIO = 'RESTORE_SCENARIO',\r\n    RESTORE_CHALLENGE = 'RESTORE_CHALLENGE',\r\n    GROUP_NAME = 'GROUP_NAME',\r\n    VIEW_COMPANY = 'VIEW_COMPANY',\r\n    REMOVE_INVITATION_LABEL = 'REMOVE_INVITATION_LABEL',\r\n    UNASSIGN_ENROLLMENT = 'UNASSIGN_ENROLLMENT',\r\n    SAVE_SEARCH_FILTER = 'SAVE_SEARCH_FILTER',\r\n    VIEW_LOG_DETAILS = 'VIEW_LOG_DETAILS',\r\n    MANAGE_STAGING_USERS = 'MANAGE_STAGING_USERS',\r\n    REMOVE_USER_FROM_STAGING = 'REMOVE_USER_FROM_STAGING',\r\n    ADD_USER_IN_STAGING = 'ADD_USER_IN_STAGING',\r\n    LIST_STAGING = 'LIST_STAGING',\r\n    DELETE_STAGING = 'DELETE_STAGING',\r\n    UPDATE_STAGING = 'UPDATE_STAGING',\r\n    CREATE_STAGING = 'CREATE_STAGING',\r\n    VIEW_STAGING = 'VIEW_STAGING',\r\n    LIST_TEAM = 'LIST_TEAM',\r\n    DELETE_TEAM = 'DELETE_TEAM',\r\n    UPDATE_TEAM = 'UPDATE_TEAM',\r\n    CREATE_TEAM = 'CREATE_TEAM',\r\n    VIEW_TEAM = 'VIEW_TEAM',\r\n    REMOVE_TEAM_MEMBER = 'REMOVE_TEAM_MEMBER',\r\n    DUPLICATE_TEAM = 'DUPLICATE_TEAM',\r\n    ASSIGN_TEAM_LABEL = 'ASSIGN_TEAM_LABEL',\r\n    INVITE_USER = 'INVITE_USER',\r\n\r\n    // System permissions\r\n    ACCESS_ANY_COMPANY = 'ACCESS_ANY_COMPANY',\r\n    MANAGE_SYSTEM_FILES = 'MANAGE_SYSTEM_FILES',\r\n    UPDATE_SETTINGS = 'UPDATE_SETTINGS',\r\n    RUN_MIGRATION = 'RUN_MIGRATION',\r\n    TRIGGER_CRON = 'TRIGGER_CRON',\r\n    UPDATE_PRACTIS_ADMIN = 'UPDATE_PRACTIS_ADMIN',\r\n    DELETE_PRACTIS_ADMIN = 'DELETE_PRACTIS_ADMIN',\r\n    CREATE_PRACTIS_ADMIN = 'CREATE_PRACTIS_ADMIN',\r\n    CREATE_COMPANY = 'CREATE_COMPANY',\r\n    LIST_COMPANY = 'LIST_COMPANY',\r\n    LIST_PRACTIS_ADMIN = 'LIST_PRACTIS_ADMIN',\r\n    UPDATE_COMPANY = 'UPDATE_COMPANY',\r\n    DELETE_COMPANY = 'DELETE_COMPANY',\r\n    MANAGE_DICTIONARIES = 'MANAGE_DICTIONARIES',\r\n    MANAGE_PERMISSIONS = 'MANAGE_PERMISSIONS',\r\n    MANAGE_TIMEZONES = 'MANAGE_TIMEZONES',\r\n    MANAGE_DEFAULT_ROLES = 'MANAGE_DEFAULT_ROLES',\r\n    MANAGE_SYSTEM_ROLES = 'MANAGE_SYSTEM_ROLES',\r\n    ASSIGN_SYSTEM_PERMISSIONS = 'ASSIGN_SYSTEM_PERMISSIONS',\r\n    SET_USER_PASSWORD = 'SET_USER_PASSWORD',\r\n}","import { createContext, useContext } from 'react';\n\nexport type HttpMethod = 'get' | 'post' | 'delete' | 'put' | 'patch';\n\nexport interface Http {\n    request(method: HttpMethod, path: string, data?: any): Promise<any>;\n    get(path: string, data?: any, responseType?: 'blob', isV2?: boolean): Promise<any>;\n    post(path: string, data?: any, isV2?: boolean): Promise<any>;\n    delete(path: string, data?: any, isV2?: boolean): Promise<any>;\n    put(path: string, data?: any, isV2?: boolean): Promise<any>;\n    patch(path: string, data?: any, isV2?: boolean): Promise<any>;\n}\n\nexport const HttpContext = createContext<Http>(undefined!);\n\nexport function useHttp() {\n    return useContext(HttpContext);\n}\n","export enum TrainingMode {\n    SCRIPT = 'script',\n    NO_SCRIPT = 'no_script',\n    KEYWORDS = 'keywords',\n    TEST_YOURSELF = 'test'\n  }\n\nexport const trainingModeNames = {\n    [TrainingMode.SCRIPT as string]: 'Script',\n    [TrainingMode.NO_SCRIPT as string]: 'No Script',\n    [TrainingMode.KEYWORDS as string]: 'Keywords',\n    [TrainingMode.TEST_YOURSELF as string]: 'Test Yourself',\n};\n\nexport function trainingModeName(mode: TrainingMode | undefined | null): string {\n    return !!mode\n        ? (trainingModeNames[mode] || mode || '')\n        : '';\n}","import { ALL_FILTER_VALUE } from '../interfaces/filters';\nimport { UserWithRole, UserV2 } from '../interfaces/User';\nimport { NEW_PERMISSIONS } from './permissions';\n\nexport * from './TrainingMode';\n\nexport const MAIN_ROLES = {\n    COMPANY_ADMIN: 'COMPANY_ADMIN',\n    USER: 'USER',\n}\n\nexport const ROLE_NAMES = {\n    ...MAIN_ROLES,\n    PRACTIS_ADMIN: 'PRACTIS_ADMIN',\n    TEAM_LEADER: 'TEAM_LEADER'\n};\n\nexport const ROLE_INVITE_PERMISSIONS = {\n    [ROLE_NAMES.USER]: [NEW_PERMISSIONS.INVITE_TRAINEE],\n    [ROLE_NAMES.COMPANY_ADMIN]: [NEW_PERMISSIONS.INVITE_COMPANY_ADMIN],\n};\n\nexport const PRACTIS_SET_STATUS_ITEMS: Array<{\n    name: string;\n    value: string;\n}> = [\n    { name: 'Not Started', value: 'PENDING' },\n    { name: 'In Progress', value: 'IN_PROGRESS' },\n    { name: 'Completed', value: 'COMPLETED' },\n];\n\nexport const PRACTIS_SET_PROGRESS_STATUS_ITEMS: Array<{\n    name: string;\n    value: string;\n}> = [\n    { name: 'Show All', value: ALL_FILTER_VALUE },\n    { name: 'Complete', value: 'Complete' },\n    { name: 'Incomplete', value: 'Incomplete' },\n];\n\nexport const ENROLLMENT_STATUS: Array<{ name: string; value: string }> = [\n    { name: 'Show All', value: ALL_FILTER_VALUE },\n    { name: 'In Progress', value: 'IN_PROGRESS' },\n    { name: 'Completed', value: 'COMPLETED' },\n    { name: 'Pending', value: 'PENDING' },\n];\n\nexport function isUserRole(role?: string): boolean {\n    return role === ROLE_NAMES.USER;\n}\n\nexport function isCompanyAdminRole(role?: string): boolean {\n    return role === ROLE_NAMES.COMPANY_ADMIN;\n}\n\nexport function isPractisAdminRole(role?: string): boolean {\n    return role === ROLE_NAMES.PRACTIS_ADMIN;\n}\n\nexport function isAdminRole(role?: string): boolean {\n    return role === ROLE_NAMES.PRACTIS_ADMIN || role === ROLE_NAMES.COMPANY_ADMIN;\n}\n\nexport function isTeamLeader(role?: string): boolean {\n    return role === ROLE_NAMES.TEAM_LEADER;\n}\n\nconst rolePermissions = {\n    [ROLE_NAMES.USER as string]: [\n        ROLE_NAMES.USER,\n        ROLE_NAMES.COMPANY_ADMIN,\n        ROLE_NAMES.PRACTIS_ADMIN,\n    ],\n    [ROLE_NAMES.COMPANY_ADMIN as string]: [\n        ROLE_NAMES.COMPANY_ADMIN,\n        ROLE_NAMES.PRACTIS_ADMIN,\n    ],\n    [ROLE_NAMES.PRACTIS_ADMIN as string]: [ROLE_NAMES.PRACTIS_ADMIN],\n};\n\nexport function roleViewPermissions(role?: string): string[] {\n    if (!role) return [];\n    return rolePermissions[role];\n}\n\nexport function userRoleTitle(user: UserWithRole | Partial<UserV2> | undefined): string {\n    return user?.role?.title || '';\n}\n\nexport function pendingUserRoleTitle(user: UserWithRole | undefined): string {\n    if (user?.role?.name === 'COMPANY_ADMIN') {\n        return 'Admin';\n    }\n\n    return user?.role?.name.replace('_', ' ').toLowerCase() || '';\n}\n\nexport const ASSIGN_LABEL_OPTIONS = {\n    USER: 'USER',\n    SCENARIO: 'SCENARIO',\n    CHALLENGE: 'CHALLENGE',\n    PRACTISSET: 'PRACTIS_SET',\n    INVITATION: 'INVITATION',\n    SUBMISSIONS: 'SUBMISSIONS',\n    PRACTIS_SET: 'PRACTIS_SET',\n    TEAM: 'TEAM',\n};\n\nexport const LOAD_ASSIGNED_LABELS = {\n    PRACTIS_SETS_SCREEN_LIBRARY: 'PRACTIS_SETS_SCREEN_LIBRARY',\n    SCENARIOS_SCREEN_LIBRARY: 'SCENARIOS_SCREEN_LIBRARY',\n    CHALLENGES_SCREEN_LIBRARY: 'CHALLENGES_SCREEN_LIBRARY',\n    USERS_ACTIVE: 'USERS_ACTIVE',\n    USERS_PENDING: 'USERS_PENDING',\n    TEAMS_SCREEN: 'TEAMS_SCREEN',\n    MEMBERS_SCREEN: 'MEMBERS_SCREEN',\n    TRAINING_SCREEN: 'TRAINING_SCREEN'\n};\n\nexport const ASSIGNED_AREA_BY_ENTITY = {\n    PRACTIS_SET: 'PRACTIS_SETS_SCREEN_LIBRARY',\n    SCENARIO: 'SCENARIOS_SCREEN_LIBRARY',\n    CHALLENGE: 'CHALLENGES_SCREEN_LIBRARY',\n    INVITATION: 'USERS_PENDING',\n    USER: 'USERS_ACTIVE'\n}\n\nexport enum PractisWebMode {\n    'WEB_PORTAL',\n    'ADMIN_PORTAL',\n}","import {\n    USER_PROFILE,\n    USER_PROFILE_SUCCESS,\n    USER_PROFILE_FAILURE,\n    UPDATE_USER_PROFILE,\n    UPDATE_USER_PROFILE_SUCCESS,\n    UPDATE_USER_PROFILE_FAILURE,\n    RESET_PROFILE_INFORMATION,\n} from './actions';\nimport { AppState } from '../../../store/reducers';\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport { ACTIONS } from '../../../features/labels/store/actions';\nimport { toggleItemInArray } from '../../../helpers/functions/array-helpers';\n\nexport interface UserProfileState {\n    info?: UserProfile;\n    isLoading?: boolean;\n    error?: any;\n}\n\nconst initialState: any = {\n    info: {},\n    isLoading: false,\n    error: null,\n};\n\nconst userProfileReducer = (state = initialState, action: any) => {\n    switch (action.type) {\n        case USER_PROFILE:\n            return {\n                ...state,\n                isLoading: true,\n                error: null,\n            };\n        case USER_PROFILE_SUCCESS:\n            return {\n                info: {\n                    ...state.info,\n                    ...action.data,\n                },\n                isLoading: false,\n                error: null,\n            };\n        case USER_PROFILE_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error,\n            };\n        case UPDATE_USER_PROFILE:\n            return {\n                ...state,\n                error: null,\n            };\n        case UPDATE_USER_PROFILE_SUCCESS:\n            return {\n                info: {\n                    ...state.info,\n                    ...action.data,\n                },\n                error: null,\n            };\n        case UPDATE_USER_PROFILE_FAILURE:\n            return {\n                ...state,\n                error: action.error,\n            };\n        case RESET_PROFILE_INFORMATION:\n            return {\n                ...initialState,\n            };\n        case ACTIONS.SAVE_LABEL_FILTERS_SUCCESS:\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    labelFilters: action.filters,\n                },\n            };\n        case ACTIONS.SELECT_LABEL_FILTER: {\n            let selectedLabels = toggleItemInArray(\n                state.info.searchFilter,\n                action.labelId\n            );\n\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    searchFilter: selectedLabels,\n                },\n            };\n        }\n        case ACTIONS.CLEAR_LABEL_FILTERS: {\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    searchFilter: [],\n                },\n            };\n        }\n        default:\n            return state;\n    }\n};\n\nexport const getProfileState = (state: AppState) => state.profile.info;\nexport const getProfileLoading = (state: AppState) => state.profile.isLoading;\nexport const getProfileError = (state: AppState) => state.profile.error;\n\nexport default userProfileReducer;\n","import { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { PerformanceTrainee } from '../../../constants/interfaces/PerformanceTrainee';\nimport { UserInterface, UserV2 } from '../../../constants/interfaces/User';\nimport { PractisSets, EnrollmentPractisSet } from '../../../constants/interfaces/PractisSets';\nimport { Draft, DraftUser } from '../../../constants/interfaces/Draft';\nimport { UserFeatures } from '../../../constants/interfaces/UserFeatures';\nimport { EnrollmentInterface } from '../../../constants/interfaces/Enrollments';\nimport { UserPreference } from '../../../constants/interfaces/UserPreference';\n\nexport const FETCH_ALL_USERS = 'FETCH_ALL_USERS';\nexport const FETCH_ALL_USERS_SUCCESS = 'FETCH_ALL_USERS_SUCCESS';\nexport const FETCH_ALL_USERS_FAILURE = 'FETCH_ALL_USERS_FAILURE';\nexport const CLEAR_ALL_USERS = 'CLEAR_ALL_USERS';\nexport const FETCH_USER = 'FETCH_USER';\nexport const FETCH_USER_SUCCESS = 'FETCH_USER_SUCCESS';\nexport const FETCH_USER_FAILURE = 'FETCH_USER_FAILURE';\nexport const UPDATE_USER = 'UPDATE_USER_DPR';\nexport const UPDATE_USER_SUCCESS = 'UPDATE_USER_DPR_SUCCESS';\nexport const UPDATE_USER_FAILURE = 'UPDATE_USER_DPR_FAILURE';\n\nexport enum ACTIONS {\n    UPDATE_USER_START = 'UPDATE_USER_START',\n    UPDATE_USER_SUCCESS = 'UPDATE_USER_SUCCESS',\n    UPDATE_USER_FAILURE = 'UPDATE_USER_FAILURE',\n\n    SEARCH_USER_INVITATIONS_START = 'SEARCH_USER_INVITATIONS_START',\n    SEARCH_USER_INVITATIONS_SUCCESS = 'SEARCH_USER_INVITATIONS_SUCCESS',\n    SEARCH_USER_INVITATIONS_FAILURE = 'SEARCH_USER_INVITATIONS_FAILURE',\n    UPDATE_USER_INVITATION_START = 'UPDATE_USER_INVITATION_START',\n    UPDATE_USER_INVITATION_SUCCESS = 'UPDATE_USER_INVITATION_SUCCESS',\n    UPDATE_USER_INVITATION_FAILURE = 'UPDATE_USER_INVITATION_FAILURE',\n\n    GET_USER_PERFORMANCE_START = 'GET_USER_PERFORMANCE_START',\n    GET_USER_PERFORMANCE_SUCCESS = 'GET_USER_PERFORMANCE_SUCCESS',\n    GET_USER_PERFORMANCE_FAILURE = 'GET_USER_PERFORMANCE_FAILURE',\n    RESET_USER_PERFORMANCE = 'RESET_USER_PERFORMANCE',\n\n    UPDATE_SELECTED_USER_STATE = 'UPDATE_SELECTED_USER_STATE',\n    UPDATE_ALL_SELECTED_USERS_STATE = 'UPDATE_ALL_SELECTED_USERS_STATE',\n\n    UPDATE_SELECTED_INVITATION_STATE = 'UPDATE_SELECTED_INVITATION_STATE',\n    UPDATE_ALL_SELECTED_INVITATIONS_STATE = 'UPDATE_ALL_SELECTED_INVITATIONS_STATE',\n\n    USER_LABELS_UPDATED = 'USER_LABELS_UPDATED',\n\n    SEARCH_USER_PRACTIS_SETS_START = 'SEARCH_USER_PRACTIS_SETS_START',\n    SEARCH_USER_PRACTIS_SETS_SUCCESS = 'SEARCH_USER_PRACTIS_SETS_SUCCESS',\n    SEARCH_USER_PRACTIS_SETS_FAILURE = 'SEARCH_USER_PRACTIS_SETS_FAILURE',\n    FETCH_PORTABLE_PRACTIS_SETS_START = 'FETCH_PORTABLE_PRACTIS_SETS_START',\n    FETCH_PORTABLE_PRACTIS_SETS_SUCCESS = 'FETCH_PORTABLE_PRACTIS_SETS_SUCCESS',\n    FETCH_PORTABLE_PRACTIS_SETS_FAILURE = 'FETCH_PORTABLE_PRACTIS_SETS_FAILURE',\n    UPDATE_USER_PRACTIS_SETS_SUCCESS = 'UPDATE_USER_PRACTIS_SETS_SUCCESS',\n    UPDATE_USER_PRACTIS_SETS_START = 'UPDATE_USER_PRACTIS_SETS_START',\n    UPDATE_USER_PRACTIS_SETS_FAILURE = 'UPDATE_USER_PRACTIS_SETS_FAILURE',\n    UPDATE_ALL_SELECTED_TRAINEE_PROFILE_PRACTIS_SETS_STATE = 'UPDATE_ALL_SELECTED_TRAINEE_PROFILE_PRACTIS_SETS_STATE',\n    UPDATE_SELECTED_TRAINEE_PROFILE_PRACTIS_SET_STATE = 'UPDATE_SELECTED_TRAINEE_PROFILE_PRACTIS_SET_STATE',\n\n    SEARCH_STAGING_DRAFTS = 'SEARCH_STAGING_DRAFTS',\n    SEARCH_STAGING_DRAFTS_SUCCESS = 'SEARCH_STAGING_DRAFTS_SUCCESS',\n    SEARCH_STAGING_DRAFTS_FAILURE = 'SEARCH_STAGING_DRAFTS_FAILURE',\n    UPDATE_STAGING_DRAFTS_START = 'UPDATE_STAGING_DRAFTS_START',\n    UPDATE_STAGING_DRAFTS_SUCCESS = 'UPDATE_STAGING_DRAFTS_SUCCESS',\n    UPDATE_STAGING_DRAFTS_FAILURE = 'UPDATE_STAGING_DRAFTS_FAILURE',\n    UPDATE_SELECTED_DRAFT_STATE = 'UPDATE_SELECTED_DRAFT_STATE',\n    UPDATE_ALL_SELECTED_DRAFT_STATE = 'UPDATE_ALL_SELECTED_DRAFT_STATE',\n\n    FETCH_CREATED_BY_USERS_START = 'FETCH_CREATED_BY_USERS_START',\n    FETCH_CREATED_BY_USERS_SUCCESS = 'FETCH_CREATED_BY_USERS_SUCCESS',\n    FETCH_CREATED_BY_USERS_FAILURE = 'FETCH_CREATED_BY_USERS_FAILURE',\n    FETCH_EDITED_BY_USERS_START = 'FETCH_EDITED_BY_USERS_START',\n    FETCH_EDITED_BY_USERS_SUCCESS = 'FETCH_EDITED_BY_USERS_SUCCESS',\n    FETCH_EDITED_BY_USERS_FAILURE = 'FETCH_EDITED_BY_USERS_FAILURE',\n\n    FETCH_USER_FEATURES_START = 'FETCH_USER_FEATURES_START',\n    FETCH_USER_FEATURES_SUCCESS = 'FETCH_USER_FEATURES_SUCCESS',\n    FETCH_USER_FEATURES_FAILURE = 'FETCH_USER_FEATURES_FAILURE',\n\n    REMOVE_USER_LABEL = 'REMOVE_USER_LABEL',\n    REMOVE_PENDING_USER_LABEL = 'REMOVE_PENDING_USER_LABEL',\n\n    FETCH_USER_ALL_PRACTIS_SETS = 'FETCH_USER_ALL_PRACTIS_SETS',\n\n    FETCH_USER_PREFERENCES_START = 'FETCH_USER_PREFERENCES_START',\n    FETCH_USER_PREFERENCES_SUCCESS = 'FETCH_USER_PREFERENCES_SUCCESS',\n    FETCH_USER_PREFERENCES_FAILURE = 'FETCH_USER_PREFERENCES_FAILURE',\n\n    UPDATE_USER_PREFERENCES_START = 'UPDATE_USER_PREFERENCES_START',\n    UPDATE_USER_PREFERENCES_SUCCESS = 'UPDATE_USER_PREFERENCES_SUCCESS',\n    UPDATE_USER_PREFERENCES_FAILURE = 'UPDATE_USER_PREFERENCES_FAILURE',\n}\n\nexport function searchUserPractisSetsStart() {\n    return {\n        type: ACTIONS.SEARCH_USER_PRACTIS_SETS_START as ACTIONS.SEARCH_USER_PRACTIS_SETS_START,\n    };\n}\n\nexport function searchUserPractisSetsSuccess(\n    practisSets: ListResult<EnrollmentInterface>\n) {\n    return {\n        type: ACTIONS.SEARCH_USER_PRACTIS_SETS_SUCCESS as ACTIONS.SEARCH_USER_PRACTIS_SETS_SUCCESS,\n        practisSets,\n    };\n}\n\nexport function searchUserPractisSetsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_USER_PRACTIS_SETS_FAILURE as ACTIONS.SEARCH_USER_PRACTIS_SETS_FAILURE,\n        error,\n    };\n}\n\nexport function fetchPortablePractisSetsStart() {\n    return {\n        type: ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_START as ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_START,\n    };\n}\n\nexport function fetchPortablePractisSetsSuccess(\n    practisSets: ListResult<EnrollmentPractisSet>\n) {\n    return {\n        type: ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_SUCCESS as ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_SUCCESS,\n        practisSets,\n    };\n}\n\nexport function fetchPortablePractisSetsFailure(error: string) {\n    return {\n        type: ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_FAILURE as ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_FAILURE,\n        error,\n    };\n}\n\nexport function updateTraineeProfilePractisSetCheckedState(id: number) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_TRAINEE_PROFILE_PRACTIS_SET_STATE as ACTIONS.UPDATE_SELECTED_TRAINEE_PROFILE_PRACTIS_SET_STATE,\n        id,\n    };\n}\n\nexport function updateAllPractisSetsCheckedState(\n    selectedPractisSetIds: number[],\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_TRAINEE_PROFILE_PRACTIS_SETS_STATE as ACTIONS.UPDATE_ALL_SELECTED_TRAINEE_PROFILE_PRACTIS_SETS_STATE,\n        selectedPractisSetIds,\n        checked,\n        partial,\n    };\n}\n\nexport function updateUserPractisSetsStart() {\n    return {\n        type: ACTIONS.UPDATE_USER_PRACTIS_SETS_START as ACTIONS.UPDATE_USER_PRACTIS_SETS_START,\n    };\n}\n\nexport function updateUserPractisSetsSuccess(practisSets: PractisSets) {\n    return {\n        type: ACTIONS.UPDATE_USER_PRACTIS_SETS_SUCCESS as ACTIONS.UPDATE_USER_PRACTIS_SETS_SUCCESS,\n        practisSets,\n    };\n}\n\nexport function updateUserPractisSetsFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_USER_PRACTIS_SETS_FAILURE as ACTIONS.UPDATE_USER_PRACTIS_SETS_FAILURE,\n        error,\n    };\n}\n\nexport function fetchAllUsers() {\n    return {\n        type: FETCH_ALL_USERS,\n    };\n}\n\nexport function fetchAllUsersSuccess(data: ListResult<UserV2>) {\n    return {\n        type: FETCH_ALL_USERS_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchAllUsersFailure(error: any) {\n    return {\n        type: FETCH_ALL_USERS_FAILURE,\n        error,\n    };\n}\n\nexport function clearAllUsers() {\n    return {\n        type: CLEAR_ALL_USERS,\n    };\n}\n\nexport function updateUserActionStart() {\n    return {\n        type: ACTIONS.UPDATE_USER_START as ACTIONS.UPDATE_USER_START,\n    };\n}\n\nexport function updateUserActionSuccess(\n    user: UserInterface,\n    updateType: 'create' | 'update' | 'delete' | 'labels'\n) {\n    return {\n        type: ACTIONS.UPDATE_USER_SUCCESS as ACTIONS.UPDATE_USER_SUCCESS,\n        user,\n        updateType,\n    };\n}\n\nexport function updateUserActionFailure(error: any) {\n    return {\n        type: ACTIONS.UPDATE_USER_FAILURE as ACTIONS.UPDATE_USER_FAILURE,\n        error,\n    };\n}\n\nexport function fetchUserAction() {\n    return {\n        type: FETCH_USER,\n    };\n}\n\nexport function fetchUserSuccess(data: UserV2) {\n    return {\n        type: FETCH_USER_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchUserFailure(error: string) {\n    return {\n        type: FETCH_USER_FAILURE,\n        error,\n    };\n}\n\nexport function updateUserAction() {\n    return {\n        type: UPDATE_USER,\n    };\n}\n\nexport function updateUserSuccess(data: any) {\n    return {\n        type: UPDATE_USER_SUCCESS,\n        data,\n    };\n}\n\nexport function updateUserFailure(error: any) {\n    return {\n        type: UPDATE_USER_FAILURE,\n        error,\n    };\n}\n\nexport function searchInvitationsStart() {\n    return {\n        type: ACTIONS.SEARCH_USER_INVITATIONS_START as ACTIONS.SEARCH_USER_INVITATIONS_START,\n    };\n}\n\nexport function searchInvitationsSuccess(users: ListResult<UserV2>) {\n    return {\n        type: ACTIONS.SEARCH_USER_INVITATIONS_SUCCESS as ACTIONS.SEARCH_USER_INVITATIONS_SUCCESS,\n        users,\n    };\n}\n\nexport function searchInvitationsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_USER_INVITATIONS_FAILURE as ACTIONS.SEARCH_USER_INVITATIONS_FAILURE,\n        error,\n    };\n}\n\nexport function updateInvitationStart() {\n    return {\n        type: ACTIONS.UPDATE_USER_INVITATION_START as ACTIONS.UPDATE_USER_INVITATION_START,\n    };\n}\n\nexport function updateInvitationSuccess(\n    invitation: { id: number },\n    updateType: 'create' | 'update' | 'delete' | 'labels'\n) {\n    return {\n        type: ACTIONS.UPDATE_USER_INVITATION_SUCCESS as ACTIONS.UPDATE_USER_INVITATION_SUCCESS,\n        invitation,\n        updateType,\n    };\n}\n\nexport function updateInvitationFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_USER_INVITATION_FAILURE as ACTIONS.UPDATE_USER_INVITATION_FAILURE,\n        error,\n    };\n}\n\nexport function getUserPerformanceStart() {\n    return {\n        type: ACTIONS.GET_USER_PERFORMANCE_START as ACTIONS.GET_USER_PERFORMANCE_START,\n    };\n}\n\nexport function getUserPerformanceSuccess(trainee: PerformanceTrainee) {\n    return {\n        type: ACTIONS.GET_USER_PERFORMANCE_SUCCESS as ACTIONS.GET_USER_PERFORMANCE_SUCCESS,\n        trainee,\n    };\n}\n\nexport function getUserPerformanceFailure(error: string) {\n    return {\n        type: ACTIONS.GET_USER_PERFORMANCE_FAILURE as ACTIONS.GET_USER_PERFORMANCE_FAILURE,\n        error,\n    };\n}\n\nexport function resetUserPerformanceAction() {\n    return {\n        type: ACTIONS.RESET_USER_PERFORMANCE as ACTIONS.RESET_USER_PERFORMANCE,\n    };\n}\n\nexport function fetchUserAllPractisSetsSuccess(\n    data: ListResult<EnrollmentPractisSet>\n) {\n    return {\n        type: ACTIONS.FETCH_USER_ALL_PRACTIS_SETS as ACTIONS.FETCH_USER_ALL_PRACTIS_SETS,\n        data,\n    };\n}\n\nexport function updateSelectedUserState(userId: number) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_USER_STATE as ACTIONS.UPDATE_SELECTED_USER_STATE,\n        userId,\n    };\n}\n\nexport function updateAllSelectedUsersState(\n    userIds: number[],\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_USERS_STATE as ACTIONS.UPDATE_ALL_SELECTED_USERS_STATE,\n        userIds,\n        checked,\n        partial,\n    };\n}\n\nexport function updateSelectedInvitationState(invitationId: number) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_INVITATION_STATE as ACTIONS.UPDATE_SELECTED_INVITATION_STATE,\n        invitationId,\n    };\n}\n\nexport function updateAllSelectedInvitationsState(\n    invitationIds: number[],\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_INVITATIONS_STATE as ACTIONS.UPDATE_ALL_SELECTED_INVITATIONS_STATE,\n        invitationIds,\n        checked,\n        partial,\n    };\n}\n\nexport function userLabelsUpdatedAction() {\n    return {\n        type: ACTIONS.USER_LABELS_UPDATED as ACTIONS.USER_LABELS_UPDATED,\n    };\n}\n\nexport function fetchAllDrafts() {\n    return {\n        type: ACTIONS.SEARCH_STAGING_DRAFTS as ACTIONS.SEARCH_STAGING_DRAFTS,\n    };\n}\n\nexport function fetchAllDraftsSuccess(data: any) {\n    return {\n        type: ACTIONS.SEARCH_STAGING_DRAFTS_SUCCESS as ACTIONS.SEARCH_STAGING_DRAFTS_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchAllDraftsFailure(error: any) {\n    return {\n        type: ACTIONS.SEARCH_STAGING_DRAFTS_FAILURE as ACTIONS.SEARCH_STAGING_DRAFTS_FAILURE,\n        error,\n    };\n}\n\nexport function updateDraftsStart() {\n    return {\n        type: ACTIONS.UPDATE_STAGING_DRAFTS_START as ACTIONS.UPDATE_STAGING_DRAFTS_START,\n    };\n}\n\nexport function updateDraftsSuccess(\n    draft: Draft,\n    updateType: 'create' | 'update' | 'delete' | 'labels'\n) {\n    return {\n        type: ACTIONS.UPDATE_STAGING_DRAFTS_SUCCESS as ACTIONS.UPDATE_STAGING_DRAFTS_SUCCESS,\n        draft,\n        updateType,\n    };\n}\n\nexport function updateDraftsFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_STAGING_DRAFTS_FAILURE as ACTIONS.UPDATE_STAGING_DRAFTS_FAILURE,\n        error,\n    };\n}\n\nexport function updateSelectedDraftState(draftId: number) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_DRAFT_STATE as ACTIONS.UPDATE_SELECTED_DRAFT_STATE,\n        draftId,\n    };\n}\n\nexport function updateAllSelectedDraftState(\n    draftIds: number[],\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_DRAFT_STATE as ACTIONS.UPDATE_ALL_SELECTED_DRAFT_STATE,\n        draftIds,\n        checked,\n        partial,\n    };\n}\n\nexport function fetchCreatedByUsersStart() {\n    return {\n        type: ACTIONS.FETCH_CREATED_BY_USERS_START as ACTIONS.FETCH_CREATED_BY_USERS_START,\n    };\n}\n\nexport function fetchCreatedByUsersSuccess(data: Partial<DraftUser>[]) {\n    return {\n        type: ACTIONS.FETCH_CREATED_BY_USERS_SUCCESS as ACTIONS.FETCH_CREATED_BY_USERS_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchCreatedByUsersFailure(error: any) {\n    return {\n        type: ACTIONS.FETCH_CREATED_BY_USERS_FAILURE as ACTIONS.FETCH_CREATED_BY_USERS_FAILURE,\n        error,\n    };\n}\n\nexport function fetchEditedByUsersStart() {\n    return {\n        type: ACTIONS.FETCH_EDITED_BY_USERS_START as ACTIONS.FETCH_EDITED_BY_USERS_START,\n    };\n}\n\nexport function fetchEditedByUsersSuccess(data: Partial<DraftUser>[]) {\n    return {\n        type: ACTIONS.FETCH_EDITED_BY_USERS_SUCCESS as ACTIONS.FETCH_EDITED_BY_USERS_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchEditedByUsersFailure(error: any) {\n    return {\n        type: ACTIONS.FETCH_EDITED_BY_USERS_FAILURE as ACTIONS.FETCH_EDITED_BY_USERS_FAILURE,\n        error,\n    };\n}\n\nexport function fetchUserFeaturesStart() {\n    return {\n        type: ACTIONS.FETCH_USER_FEATURES_START as ACTIONS.FETCH_USER_FEATURES_START\n    };\n}\n\nexport function fetchUserFeaturesSuccess(data: UserFeatures) {\n    return {\n        type: ACTIONS.FETCH_USER_FEATURES_SUCCESS as ACTIONS.FETCH_USER_FEATURES_SUCCESS,\n        data\n    };\n}\n\nexport function fetchUserFeaturesFailure(error: string) {\n    return {\n        type: ACTIONS.FETCH_USER_FEATURES_FAILURE as ACTIONS.FETCH_USER_FEATURES_FAILURE,\n        error\n    };\n}\n\nexport function removeUserLabel(userId: number, labelId: number) {\n    return {\n        type: ACTIONS.REMOVE_USER_LABEL as ACTIONS.REMOVE_USER_LABEL,\n        userId,\n        labelId\n    };\n}\n\nexport function removePendingUserLabel(userId: number, labelId: number) {\n    return {\n        type: ACTIONS.REMOVE_PENDING_USER_LABEL as ACTIONS.REMOVE_PENDING_USER_LABEL,\n        userId,\n        labelId\n    };\n}\n\nexport function fetchUserPreferencesStart() {\n    return {\n        type: ACTIONS.FETCH_USER_PREFERENCES_START as ACTIONS.FETCH_USER_PREFERENCES_START\n    };\n}\n\nexport function fetchUserPreferencesSuccess(data: UserPreference[]) {\n    return {\n        type: ACTIONS.FETCH_USER_PREFERENCES_SUCCESS as ACTIONS.FETCH_USER_PREFERENCES_SUCCESS,\n        data\n    };\n}\n\nexport function fetchUserPreferencesFailure(error: string) {\n    return {\n        type: ACTIONS.FETCH_USER_PREFERENCES_FAILURE as ACTIONS.FETCH_USER_PREFERENCES_FAILURE,\n        error\n    };\n}\n\nexport function updateUserPreferencesStart(data: { key: string, value: unknown }[]) {\n    return {\n        type: ACTIONS.UPDATE_USER_PREFERENCES_START as ACTIONS.UPDATE_USER_PREFERENCES_START,\n        data\n    };\n}\n\nexport function updateUserPreferencesSuccess(keys: string[]) {\n    return {\n        type: ACTIONS.UPDATE_USER_PREFERENCES_SUCCESS as ACTIONS.UPDATE_USER_PREFERENCES_SUCCESS,\n        keys\n    };\n}\n\nexport function updateUserPreferencesFailure(keys: string[]) {\n    return {\n        type: ACTIONS.UPDATE_USER_PREFERENCES_FAILURE as ACTIONS.UPDATE_USER_PREFERENCES_FAILURE,\n        keys\n    };\n}","import { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\n\nimport { useWithLabelsContext } from '../context/useWithLabelsContext';\nimport { encapsulateAction } from '../../../../../../store/helpers/encapsulateAction';\nimport { ActionLabel } from '../actions';\nimport { DEFAULT_LABELS_SCOPE, Scope, WithLabelsScopes } from '../scopes';\n\nexport const useEncapsulatedDispatch = () => {\n    const dispatch = useDispatch();\n    const { reducerName, scope } = useWithLabelsContext();\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithLabelsContext.Provider props'\n        );\n    }\n\n    const targetScope = (scope || DEFAULT_LABELS_SCOPE) as Scope;\n    if (\n        targetScope !== DEFAULT_LABELS_SCOPE &&\n        !WithLabelsScopes[reducerName]?.includes(targetScope)\n    ) {\n        throw new Error(\n            `Undefined \"${targetScope}\" scope of portableLabels. Please check config (WithLabelsScopes) for \"${reducerName}\" reducer`\n        );\n    }\n\n    return useCallback(\n        <T extends ActionLabel>(action: T) => {\n            action._scope = targetScope;\n            dispatch(encapsulateAction(`${reducerName}/labels/`, action));\n        },\n        [dispatch, reducerName, targetScope]\n    );\n};\n","import { useCallback } from 'react';\n\nimport { useSearchLabelsApi } from './api';\nimport {\n    clearAction,\n    saveAction,\n    searchFailureAction,\n    searchSuccessAction,\n    selectAllAction,\n    deselectAllAction,\n    selectLabelsAction,\n    toggleCollapseLabelAction,\n    toggleCollapseAllLabelsAction,\n    searchStartAction,\n    resetSelectedAction,\n    resetAction,\n    resetCollapseAllLabelsAction,\n} from './actions';\n\nimport { useEncapsulatedDispatch } from './helpers/useEncapsulatedDispatch';\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\nimport { useDispatch } from 'react-redux';\nimport { usePortableLabelsState } from '../../states';\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { Label } from '../../../../../constants/interfaces/Label';\nimport { unionWith } from 'lodash';\nimport { NOT_AUTHORIZED_ERROR_MESSAGE } from '../../../../../ui/components/ErrorMessages/constants';\n\nexport const useFetchAllLabelsService = () => {\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n    const searchLabels = useSearchLabelsApi();\n    return useCallback(\n        async () => {\n            dispatch(searchStartAction());\n            try {\n                let sp = { offset: 0, limit: 20, orderBy: { field: \"id\", asc: true } } as SearchParams;\n                let data = { items: [] as Label[], totalCount: 0 } as PaginationResult<Label>;\n                let pageNum = 0;\n                do {\n                    const prevItems = data.items;\n                    data = await searchLabels(sp);\n                    data = sp.offset === 0 || !prevItems\n                        ? data\n                        : {\n                            ...data,\n                            items: unionWith(\n                                prevItems,\n                                data.items,\n                                (i1, i2) => i1.id === i2.id\n                            ),\n                        };\n                    sp = {\n                        ...sp,\n                        offset: Math.min(data.items.length, data.totalCount)\n                    };\n                    pageNum++;\n                } while(data.items.length < data.totalCount && pageNum < data.numberOfPages);\n                dispatch(searchSuccessAction(data));\n            } catch(error: any) {\n                dispatch(searchFailureAction(error.message));\n                error?.message !== NOT_AUTHORIZED_ERROR_MESSAGE &&\n                    showMessage(error.message, 'error');\n            }\n        },\n        [dispatch, showMessage, searchLabels]\n    );\n};\n\nexport const useToggleCollapseLabel = () => {\n    const dispatch = useEncapsulatedDispatch();\n \n    return useCallback(\n        (id: number) => {\n            dispatch(toggleCollapseLabelAction(id));\n        },\n        [dispatch]\n    );\n};\n\nexport const useToggleCollapseAllLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n    const collapsedLabelsList = usePortableLabelsState().data.items.filter(item => item.children?.length).map(item => item.id);\n    return useCallback(\n        () => {\n            dispatch(toggleCollapseAllLabelsAction(collapsedLabelsList));\n        },\n        [dispatch, collapsedLabelsList]\n    );\n};\n\nexport const useResetCollapseAllLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n    return useCallback(\n        () => {\n            dispatch(resetCollapseAllLabelsAction());\n        },\n        [dispatch]\n    );\n};\n\nexport const useClearLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(clearAction());\n    }, [dispatch]);\n};\n\nexport const useSaveLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(saveAction());\n    }, [dispatch]);\n};\n\nexport const useSelectLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n    return useCallback(\n        (ids: number[]) => {\n            dispatch(selectLabelsAction(ids));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSelectAllLabels = () => {\n    \n    const dispatch = useEncapsulatedDispatch();\n    const labelsList = usePortableLabelsState().data.items;\n    \n    return useCallback((selectedList: any) => {\n        dispatch(selectAllAction(selectedList));\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [dispatch, labelsList]);\n};\n\nexport const useDeselectAllLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(deselectAllAction());\n    }, [dispatch]);\n};\n\nexport const useResetSelectedLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(resetSelectedAction());\n    }, [dispatch]);\n};\n\nexport const useResetLabels = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(resetAction());\n    }, [dispatch]);\n};\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../../../../tools/http/Http';\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { Label } from '../../../../../constants/interfaces/Label';\n\nexport const useSearchLabelsApi = () => {\n    const http = useHttp();\n    return useCallback(\n        (sp?: SearchParams): Promise<PaginationResult<Label>> =>\n            http.post('labels/search', sp),\n        [http]\n    );\n};\n","import { Action } from 'redux';\n\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { Label } from '../../../../../constants/interfaces/Label';\nimport { Scope } from './scopes';\n\n//region Types\ntype ReturnTypeLabelAction<T extends (...args: any) => any> = ReturnType<T> &\n    ActionPayload;\n\ntype ActionPayload = { _scope?: Scope };\n\nexport type ActionLabel<T = any> = Action<T> & ActionPayload;\n\nexport type Actions =\n    | ReturnTypeLabelAction<typeof selectAllAction>\n    | ReturnTypeLabelAction<typeof deselectAllAction>\n    | ReturnTypeLabelAction<typeof resetSelectedAction>\n    | ReturnTypeLabelAction<typeof selectLabelsAction>\n    | ReturnTypeLabelAction<typeof clearAction>\n    | ReturnTypeLabelAction<typeof saveAction>\n    | ReturnTypeLabelAction<typeof toggleCollapseLabelAction>\n    | ReturnTypeLabelAction<typeof resetAction>\n    | ReturnTypeLabelAction<typeof toggleCollapseAllLabelsAction>\n    | ReturnTypeLabelAction<typeof resetCollapseAllLabelsAction>;\n//endregion\n\nexport const searchStartAction = (): ActionLabel<'searchStartLabels'> => ({\n    type: 'searchStartLabels',\n});\n\nexport const searchSuccessAction = (\n    result: PaginationResult<Label>\n): ActionLabel<'searchSuccessLabels'> & {\n    result: PaginationResult<Label>;\n} => ({\n    type: 'searchSuccessLabels',\n    result,\n});\n\nexport const searchFailureAction = (\n    message: string\n): ActionLabel<'searchFailureLabels'> & { message: string } => ({\n    type: 'searchFailureLabels',\n    message,\n});\n\nexport const selectAllAction = (\n    allLabels: Label[]\n): ActionLabel<'selectAllLabels'> & { allLabels: Label[] } => ({\n    type: 'selectAllLabels',\n    allLabels,\n});\n\nexport const deselectAllAction = (): ActionLabel<'deselectAllLabels'> => ({\n    type: 'deselectAllLabels',\n});\n\nexport const resetSelectedAction = (): ActionLabel<'resetSelectedLabels'> => ({\n    type: 'resetSelectedLabels',\n});\n\nexport const selectLabelsAction = (\n    ids: number[]\n): ActionLabel<'selectLabels'> & { ids: number[] } => ({\n    type: 'selectLabels',\n    ids,\n});\n\nexport const clearAction = (): ActionLabel<'clearLabels'> => ({\n    type: 'clearLabels',\n});\n\nexport const saveAction = (): ActionLabel<'saveLabels'> => ({\n    type: 'saveLabels',\n});\n\nexport const resetAction = (): ActionLabel<'resetLabels'> => ({\n    type: 'resetLabels',\n});\n\nexport const toggleCollapseLabelAction = (\n    id: number\n): ActionLabel<'toggleCollapseLabel'> & { id: number } => ({\n    type: 'toggleCollapseLabel',\n    id,\n});\n\nexport const toggleCollapseAllLabelsAction = (\n    ids: number[]\n): ActionLabel<'toggleCollapseAllLabels'> & { ids: number[] } => ({\n    type: 'toggleCollapseAllLabels',\n    ids,\n});\n\n\nexport const resetCollapseAllLabelsAction = (): ActionLabel<'resetCollapseAllLabels'> & {} => ({\n    type: 'resetCollapseAllLabels',\n});","export function searchTree(leaf: any, id: any): any {\n    if (leaf.id === id || leaf.id === -id) {\n        return leaf;\n    } else if (leaf.children != null) {\n        let i;\n        let result = null;\n        for (i = 0; result == null && i < leaf.children.length; i++) {\n            result = searchTree(leaf.children[i], id);\n        }\n        return result;\n    }\n    return null;\n}\n","import { useCallback } from 'react';\nimport { listToTree } from '../../helpers/functions/list-to-tree';\nimport { searchTree } from '../../helpers/functions/search-tree';\nimport { Label } from '../../constants/interfaces/Label';\nimport { PaginationResult } from '../../constants/interfaces/PaginationResult';\nimport { usePortableLabelsState } from '../portableLabels/store/states';\n\nconst recursiveParent = (label: Label, selected: any, labelsTree: any) => {\n    if (label && label.parentId) {\n        for (let leaf of labelsTree) {\n            const parentLabel = searchTree(leaf, label.parentId);\n\n            if (parentLabel) {\n                const siblingIds = parentLabel.children.map((x: Label) => x.id);\n\n                if (siblingIds.every((x: number) => selected.has(x))) {\n                    if (!selected.has(parentLabel.id))\n                        selected.add(parentLabel.id);\n                    if (selected.has(-parentLabel.id))\n                        selected.delete(-parentLabel.id);\n                } else if (\n                    siblingIds.every(\n                        (x: number) => selected.has(x) || selected.has(-x)\n                    )\n                ) {\n                    selected.delete(parentLabel.id);\n                    selected.add(-parentLabel.id);\n                } else if (\n                    siblingIds.some(\n                        (x: number) => selected.has(x) || selected.has(-x)\n                    )\n                ) {\n                    if (selected.has(parentLabel.id)) {\n                        selected.delete(parentLabel.id);\n                    }\n                    if (!selected.has(-parentLabel.id))\n                        selected.add(-parentLabel.id);\n                } else {\n                    if (selected.has(parentLabel.id))\n                        selected.delete(parentLabel.id);\n                    if (selected.has(-parentLabel.id))\n                        selected.delete(-parentLabel.id);\n                }\n\n                recursiveParent(parentLabel, selected, labelsTree);\n            }\n        }\n    }\n};\n\nconst recursiveMarkChildren = (label: Label, selected: any) => {\n    if (label && label.children) {\n        for (let child of label.children) {\n            selected.delete(-child.id);\n            selected.add(child.id);\n            recursiveMarkChildren(child, selected);\n        }\n    }\n};\n\nconst recursiveUnmarkChildren = (label: Label, selected: any) => {\n    if (label && label.children) {\n        for (let child of label.children) {\n            selected.delete(child.id);\n            selected.delete(-child.id);\n            recursiveUnmarkChildren(child, selected);\n        }\n    }\n};\n\nexport const useCalculatePreSelectedLabels = () => {\n    const labelsList = usePortableLabelsState().data;\n\n    return useCallback(\n        (\n            selectedItems: number[],\n            entity?: any,\n            assignedLabels?: number[]\n        ): { preAssignedLabels: number[] } => {\n            let preAssignedLabelsSet = new Set<number>(assignedLabels?.length ? assignedLabels: []);\n\n            if (!entity) {\n                return {\n                    preAssignedLabels: Array.from(preAssignedLabelsSet),\n                };\n            }\n\n            // the case when assigned labels are not coming from BE \n            if (assignedLabels === undefined) {\n                let countLabels: any = {};\n                const selectedItemEntities = entity.items.filter(\n                    (item: { id: number }) => selectedItems.includes(item.id)\n                );\n    \n                for (let selectedEntity of selectedItemEntities) {\n                    if (selectedEntity.labels) {\n                        selectedEntity.labels.forEach((x: { id: number }) => {\n                            countLabels[x.id] = (countLabels[x.id] || 0) + 1;\n                        });\n                    } else if (selectedEntity.labelIDs) {\n                        selectedEntity.labelIDs.forEach((x: number) => {\n                            countLabels[x] = (countLabels[x] || 0) + 1;\n                        });\n                    }\n                }\n    \n                for (const labelId in countLabels) {\n                    if (countLabels.hasOwnProperty(labelId)) {\n                        if (\n                            Number(countLabels[labelId]) ===\n                            selectedItemEntities.length\n                        ) {\n                            preAssignedLabelsSet.add(Number(labelId));\n                        } else {\n                            preAssignedLabelsSet.add(-Number(labelId));\n                        }\n                    }\n                }\n    \n            }\n            \n            if (labelsList && labelsList.items) {\n                const labelsTree = listToTree(labelsList.items);\n\n                for (let labelId of Array.from(preAssignedLabelsSet)) {\n                    for (let leaf of labelsTree) {\n                        const matchedLabel = searchTree(leaf, labelId);\n                        if (matchedLabel && matchedLabel.parentId) {\n                            if (\n                                !preAssignedLabelsSet.has(matchedLabel.parentId)\n                            ) {\n                                preAssignedLabelsSet.add(\n                                    -matchedLabel.parentId\n                                );\n                            }\n                        }\n                        if (matchedLabel && matchedLabel.parentId) {\n                            recursiveParent(\n                                matchedLabel,\n                                preAssignedLabelsSet,\n                                labelsTree\n                            );\n                        }\n                    }\n                }\n            }\n\n            const preAssignedLabels = Array.from(preAssignedLabelsSet);\n\n            return { preAssignedLabels };\n        },\n        [labelsList]\n    );\n};\nexport const useCalculatePreSelectedLabelsForSingleItem = () => {\n    return useCallback(\n        (selectedItems: number[], labelsList?: PaginationResult<Label>) => {\n            let preAssignedLabelsSet = new Set(selectedItems);\n            if (labelsList && labelsList.items) {\n                const labelsTree = listToTree(labelsList.items);\n\n                for (let labelId of Array.from(preAssignedLabelsSet)) {\n                    for (let leaf of labelsTree) {\n                        const matchedLabel = searchTree(leaf, labelId);\n                        if (matchedLabel && matchedLabel.parentId) {\n                            if (\n                                !preAssignedLabelsSet.has(matchedLabel.parentId)\n                            ) {\n                                preAssignedLabelsSet.add(\n                                    -matchedLabel.parentId\n                                );\n                            }\n                        }\n                        if (matchedLabel && matchedLabel.parentId) {\n                            recursiveParent(\n                                matchedLabel,\n                                preAssignedLabelsSet,\n                                labelsTree\n                            );\n                        }\n                    }\n                }\n            }\n            return Array.from(preAssignedLabelsSet);\n        },\n        []\n    );\n};\n\nexport const useHandleSelectLabels = () => {\n    return useCallback((label, selectedLabels, labelsTree) => {\n        const newSelectedLabels = new Set([...selectedLabels]);\n\n        if (!newSelectedLabels.has(label.id)) {\n            newSelectedLabels.delete(-label.id);\n            newSelectedLabels.add(label.id);\n        } else if (newSelectedLabels.has(-label.id)) {\n            newSelectedLabels.delete(-label.id);\n            newSelectedLabels.add(label.id);\n        } else {\n            newSelectedLabels.delete(-label.id);\n            newSelectedLabels.delete(label.id);\n        }\n\n        for (let leaf of labelsTree) {\n            const selectedLabel = searchTree(leaf, label.id);\n            if (selectedLabel) {\n                if (!newSelectedLabels.has(selectedLabel.id)) {\n                    recursiveUnmarkChildren(selectedLabel, newSelectedLabels);\n                    newSelectedLabels.delete(-selectedLabel.id);\n                    if (selectedLabel.parentId) {\n                        recursiveParent(\n                            selectedLabel,\n                            newSelectedLabels,\n                            labelsTree\n                        );\n                    }\n                } else {\n                    if (selectedLabel.children) {\n                        recursiveMarkChildren(selectedLabel, newSelectedLabels);\n                    }\n\n                    if (selectedLabel.parentId) {\n                        recursiveParent(\n                            selectedLabel,\n                            newSelectedLabels,\n                            labelsTree\n                        );\n                    }\n                }\n            }\n        }\n\n        return Array.from(newSelectedLabels);\n    }, []);\n};\n\nexport const useCalculateDeletedLabels = () => {\n    const labelsList = usePortableLabelsState().data;\n\n    return useCallback(\n        assignedLabels => {\n            return (\n                labelsList?.items\n                    .map(x => x.id)\n                    .filter(\n                        x =>\n                            !assignedLabels.includes(x) &&\n                            !assignedLabels.includes(-x)\n                    ) ?? []\n            );\n        },\n        [labelsList]\n    );\n};\n\n/**\n * @function calculateRemovedLabels\n * @param { number[] } selectedLabelIds \n * @param { number[] } initialSelectedIds \n * @returns { number[] }\n */\nexport const calculateRemovedLabels = (\n    selectedLabelIds: number[],\n    initialSelectedIds: number[]\n) => {\n    return (\n        initialSelectedIds?.filter(\n            id =>\n                !selectedLabelIds.includes(id) &&\n                !selectedLabelIds.includes(-id)\n        ) ?? []\n    );\n};\n\n/**\n * @function calculateAssignedLabels\n * @param { number[] } selectedLabelIds \n * @param { number[] } initialSelectedIds \n * @returns { number[] }\n */\nexport const calculateAssignedLabels = (\n    selectedLabelIds: number[],\n    initialSelectedIds: number[]\n) => {\n    return (\n        selectedLabelIds\n            ?.filter(\n                id =>\n                    !initialSelectedIds.includes(id) &&\n                    !initialSelectedIds.includes(-id)\n            )\n            ?.filter(id => id > 0) ?? []\n    );\n};\n\n\nexport const clearSelectedItemIfNotLoaded = (\n    selectedList?: number[],\n    loadedList?: number[]\n) => {\n    if (!selectedList || !loadedList) return selectedList;\n    return selectedList.filter((selected: number) => {\n        return !loadedList.includes(selected);\n    });\n};\n\nexport const mergeLabelArrays = (\n    labels: number[],\n    selected: number[],\n    deleted: number[]\n) => {\n    for (let selectedLabel of selected) {\n        if (!labels.includes(selectedLabel)) {\n            labels.push(selectedLabel);\n        }\n    }\n\n    return labels.filter(label => !deleted.includes(label));\n};\n\nexport const useRenewLabelsStateOnUpdate = () => {\n    return useCallback(\n        (\n            label,\n            selectedLabels,\n            labelsTree,\n            updateType: 'delete' | 'create'\n        ) => {\n            const newSelectedLabels = new Set([...selectedLabels]);\n            for (let leaf of labelsTree) {\n                if (updateType === 'create') {\n                    const selectedLabel = searchTree(leaf, label.id);\n                    if (selectedLabel && selectedLabel.parentId) {\n                        recursiveParent(\n                            selectedLabel,\n                            newSelectedLabels,\n                            labelsTree\n                        );\n                    }\n                } else {\n                    const selectedLabel = searchTree(leaf, label.parentId);\n                    if (selectedLabel) {\n                        recursiveParent(\n                            selectedLabel && selectedLabel.children[0],\n                            newSelectedLabels,\n                            labelsTree\n                        );\n                    }\n                }\n            }\n            return Array.from(newSelectedLabels);\n        },\n        []\n    );\n};\n\nconst hasChildren = (label?: Label) => {\n    return label && label.children && label.children.length > 0;\n};\n\nfunction compare(a: any, b: any) {\n    if (a.name < b.name) {\n        return -1;\n    }\n    if (a.name > b.name) {\n        return 1;\n    }\n    return 0;\n}\n\nexport function sortLabels(nodes: any) {\n    nodes.sort(compare);\n    nodes.forEach(function (node: any) {\n        if (hasChildren(node)) {\n            sortLabels(node.children);\n        }\n    });\n\n    return nodes;\n}\n\nexport const filterLabels = (term: string) => (labels: Label[]): Label[] => {\n    if (!term) {\n        return labels;\n    }\n    const getNodes = (result: Label[], object: Label) => {\n        if (object.name.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\n            result.push(object);\n            return result;\n        }\n        if (Array.isArray(object.children)) {\n            const children = object.children.reduce(getNodes, []);\n            if (children.length) result.push({ ...object, children });\n        }\n        return result;\n    };\n\n    return labels.reduce(getNodes, []);\n};\n","import { History, Location } from 'history';\nimport { useHistory as useBaseHistory, useLocation } from 'react-router';\n\nexport enum LocationStateType {\n    MODAL = 'MODAL',\n    EXTERNAL_URL = 'EXTERNAL_URL',\n}\n\nexport interface LocationState {\n    type?: LocationStateType;\n    prevLocation?: Location<LocationState>;\n    useGoBack?: boolean;\n    background?: Location<LocationState>;\n    companyId?: any;\n    data?: any;\n}\n\nexport function useLocations() {\n    const history = useBaseHistory<LocationState>();\n    const location = useLocation<LocationState>(); //current location\n    const state = location.state;\n\n    var rootLocation: Location<LocationState> = location;\n    var modalLocation: Location<LocationState> | undefined = undefined;\n\n    if (state) {\n        if (state.type === LocationStateType.EXTERNAL_URL) {\n            history.location = location;\n        } else if (\n            state.type === LocationStateType.MODAL ||\n            !!state.background\n        ) {\n            rootLocation = findRootLocation(location);\n            modalLocation = location;\n        }\n    }\n\n    return {\n        rootLocation,\n        modalLocation,\n    };\n}\n\nexport function findRootLocation(location: Location<LocationState>) {\n    var result: Location<LocationState> = location;\n    var state: LocationState | undefined = location.state;\n    while (!!state) {\n        if (state.background) result = state.background;\n        else if (state.prevLocation) result = state.prevLocation;\n        else break;\n        state = result.state;\n    }\n    return result;\n}\n\nexport function useHistory() {\n    return useBaseHistory<LocationState>();\n}\n\nexport function pushModal(\n    history: History<LocationState>,\n    path: string,\n    data?: any,\n) {\n    const state = history.location.state;\n    return history.push(path, {\n        type: LocationStateType.MODAL,\n        prevLocation: state?.type === LocationStateType.MODAL\n            ? state?.prevLocation \n            : state?.background ?? history.location,\n        data,\n    });\n}\n\nexport function replaceModal(\n    history: History<LocationState>,\n    path: string,\n    data?: any,\n) {\n    const state = history.location.state;\n    return history.replace(path, {\n        type: LocationStateType.MODAL,\n        prevLocation: state?.type === LocationStateType.MODAL\n            ? state?.prevLocation \n            : state?.background ?? history.location,\n        data\n    });\n}\n\n\n","import { useCallback } from 'react';\nimport { Action } from 'redux';\nimport { useDispatch } from 'react-redux';\n\nimport { ModalDialogInterface } from './types';\nimport { HIDE_MODAL, SHOW_MODAL, UPDATE_LOADING_STATUS } from './constants';\nimport { ConfirmationModalViewProps } from '../types';\n\nexport type ShowModalAction = Action<typeof SHOW_MODAL> & {\n    modalOptions: ModalDialogInterface;\n};\n\nexport type UpdateModalLoadingStatusAction = Action<\n    typeof UPDATE_LOADING_STATUS\n> & {\n    isLoading: boolean;\n};\n\n/**\n * @function showModalDialog\n * @param { ModalDialogInterface } modalOptions\n * @returns { ShowModalAction }\n */\nexport function showModalDialog(\n    modalOptions: ModalDialogInterface\n): ShowModalAction {\n    return {\n        type: SHOW_MODAL,\n        modalOptions,\n    };\n}\n\nexport type HideModalAction = Action<typeof HIDE_MODAL>;\n\n/**\n * @function hideModalDialog\n * @returns { HideModalAction }\n */\nexport function hideModalDialog(): HideModalAction {\n    return {\n        type: HIDE_MODAL,\n    };\n}\n\n/**\n * @function useHideModalDialog\n * @returns { void }\n */\nexport const useHideModalDialog = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(hideModalDialog());\n    }, [dispatch]);\n};\n\n/**\n * @function updateModalDialogLoadingStatus\n * @param { boolean } isLoading\n * @returns { UpdateModalLoadingStatusAction }\n */\nexport function updateModalDialogLoadingStatus(\n    isLoading: boolean\n): UpdateModalLoadingStatusAction {\n    return {\n        type: UPDATE_LOADING_STATUS,\n        isLoading,\n    };\n}\n\n/**\n * @function useShowConfirmModalDialog\n * @returns { CallableFunction }\n */\nexport const useShowConfirmModalDialog = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (modalProps: ConfirmationModalViewProps) => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'CONFIRMATION_MODAL',\n                    modalProps,\n                })\n            );\n        },\n        [dispatch]\n    );\n};\n\n/**\n * @function useSetModalDialogLoadingStatus\n * @returns { CallableFunction }\n */\nexport const useSetModalDialogLoadingStatus = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (isLoading: boolean) => {\n            dispatch(updateModalDialogLoadingStatus(isLoading));\n        },\n        [dispatch]\n    );\n};\n\nexport type ModalDialogActions =\n    | ShowModalAction\n    | HideModalAction\n    | UpdateModalLoadingStatusAction;\n","import React, { FC } from 'react';\nimport { NEW_PERMISSIONS } from '../../constants/enums/permissions';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../pages/UserProfile/store/reducers';\n\nexport const CheckPermission: FC<{\n    permissions?: NEW_PERMISSIONS[];\n    alternateContent?: any;\n    matchAll?: boolean;\n}> = ({ permissions, children, alternateContent, matchAll }) => {\n    const profile = useSelector(getProfileState);\n    if (!permissions) return <>{children}</>;\n    let hasPermission;\n\n    const permissionList =\n        profile && profile.permissions ? profile.permissions : [];\n\n    if (matchAll) {\n        hasPermission = permissions.every(r => permissionList.includes(r));\n    } else {\n        hasPermission = permissions.some(r => permissionList.includes(r));\n    }\n\n    if (hasPermission) {\n        return <>{children}</>;\n    } else {\n        return alternateContent ? alternateContent : null;\n    }\n};\n","import { ListResult, PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\n\nexport enum ACTIONS {\n    SEARCH_LIBRARY_PRACTIS_SETS_START = 'SEARCH_LIBRARY_PRACTIS_SETS_START',\n    SEARCH_LIBRARY_PRACTIS_SETS_SUCCESS = 'SEARCH_LIBRARY_PRACTIS_SETS_SUCCESS',\n    SEARCH_LIBRARY_PRACTIS_SETS_FAILURE = 'SEARCH_LIBRARY_PRACTIS_SETS_FAILURE',\n\n    GET_FULL_LIBRARY_PRACTIS_SETS_START = 'GET_FULL_LIBRARY_PRACTIS_SETS_START',\n    GET_FULL_LIBRARY_PRACTIS_SETS_SUCCESS = 'GET_FULL_LIBRARY_PRACTIS_SETS_SUCCESS',\n    GET_FULL_LIBRARY_PRACTIS_SETS_FAILURE = 'GET_FULL_LIBRARY_PRACTIS_SETS_FAILURE',\n\n    GET_TOTAL_LIBRARY_PRACTIS_SETS_COUNT_START = 'GET_TOTAL_LIBRARY_PRACTIS_SETS_COUNT_START',\n    GET_TOTAL_LIBRARY_PRACTIS_SETS_COUNT_SUCCESS = 'GET_TOTAL_LIBRARY_PRACTIS_SETS_COUNT_SUCCESS',\n    GET_TOTAL_LIBRARY_PRACTIS_SETS_COUNT_FAILURE = 'GET_TOTAL_LIBRARY_PRACTIS_SETS_COUNT_FAILURE',\n\n    UPDATE_LIBRARY_PRACTIS_SET_START = 'UPDATE_LIBRARY_PRACTIS_SET_START',\n    UPDATE_LIBRARY_PRACTIS_SET_SUCCESS = 'UPDATE_LIBRARY_PRACTIS_SET_SUCCESS',\n    UPDATE_LIBRARY_PRACTIS_SET_FAILURE = 'UPDATE_LIBRARY_PRACTIS_SET_FAILURE',\n\n    UPDATE_ASSIGNED_LIBRARY_PRACTIS_SET = 'UPDATE_ASSIGNED_LIBRARY_PRACTIS_SET',\n    UPDATE_SEPARATE_ASSIGNED_LIBRARY_PRACTIS_SET = 'UPDATE_SEPARATE_ASSIGNED_LIBRARY_PRACTIS_SET',\n    SET_SEARCH_TERM_FOR_LIBRARY_PRACTIS_SET = 'SET_SEARCH_TERM_FOR_LIBRARY_PRACTIS_SET',\n\n    UPDATE_SELECTED_PRACTIS_SET_STATE = 'UPDATE_SELECTED_PRACTIS_SET_STATE',\n    UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE = 'UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE',\n    UPDATE_PRACTIS_SET_DELETE_LABEL_SUCCESS = 'UPDATE_PRACTIS_SET_DELETE_LABEL_SUCCESS',\n\n    SEARCH_LIBRARY_SCENARIOS_START = 'SEARCH_LIBRARY_SCENARIOS_START',\n    SEARCH_LIBRARY_SCENARIOS_SUCCESS = 'SEARCH_LIBRARY_SCENARIOS_SUCCESS',\n    SEARCH_LIBRARY_SCENARIOS_FAILURE = 'SEARCH_LIBRARY_SCENARIOS_FAILURE',\n\n    GET_TOTAL_LIBRARY_SCENARIOS_COUNT_START = 'GET_TOTAL_LIBRARY_SCENARIOS_COUNT_START',\n    GET_TOTAL_LIBRARY_SCENARIOS_COUNT_SUCCESS = 'GET_TOTAL_LIBRARY_SCENARIOS_COUNT_SUCCESS',\n    GET_TOTAL_LIBRARY_SCENARIOS_COUNT_FAILURE = 'GET_TOTAL_LIBRARY_SCENARIOS_COUNT_FAILURE',\n\n    UPDATE_LIBRARY_SCENARIO_START = 'UPDATE_LIBRARY_SCENARIO_START',\n    UPDATE_LIBRARY_SCENARIO_SUCCESS = 'UPDATE_LIBRARY_SCENARIO_SUCCESS',\n    UPDATE_LIBRARY_SCENARIO_FAILURE = 'UPDATE_LIBRARY_SCENARIO_FAILURE',\n\n    UPDATE_SELECTED_SCENARIO_STATE = 'UPDATE_SELECTED_SCENARIO_STATE',\n    UPDATE_ALL_SELECTED_SCENARIOS_STATE = 'UPDATE_ALL_SELECTED_SCENARIOS_STATE',\n    UPDATE_SCENARIOS_DELETE_LABEL_SUCCESS = 'UPDATE_SCENARIOS_DELETE_LABEL_SUCCESS',\n\n    SEARCH_LIBRARY_CHALLENGES_START = 'SEARCH_LIBRARY_CHALLENGES_START',\n    SEARCH_LIBRARY_CHALLENGES_SUCCESS = 'SEARCH_LIBRARY_CHALLENGES_SUCCESS',\n    SEARCH_LIBRARY_CHALLENGES_FAILURE = 'SEARCH_LIBRARY_CHALLENGES_FAILURE',\n\n    GET_TOTAL_LIBRARY_CHALLENGES_COUNT_START = 'GET_TOTAL_LIBRARY_CHALLENGES_COUNT_START',\n    GET_TOTAL_LIBRARY_CHALLENGES_COUNT_SUCCESS = 'GET_TOTAL_LIBRARY_CHALLENGES_COUNT_SUCCESS',\n    GET_TOTAL_LIBRARY_CHALLENGES_COUNT_FAILURE = 'GET_TOTAL_LIBRARY_CHALLENGES_COUNT_FAILURE',\n\n    UPDATE_LIBRARY_CHALLENGES_START = 'UPDATE_LIBRARY_CHALLENGES_START',\n    UPDATE_LIBRARY_CHALLENGES_SUCCESS = 'UPDATE_LIBRARY_CHALLENGES_SUCCESS',\n    UPDATE_LIBRARY_CHALLENGES_FAILURE = 'UPDATE_LIBRARY_CHALLENGES_FAILURE',\n\n    UPDATE_SELECTED_CHALLENGE_STATE = 'UPDATE_SELECTED_CHALLENGE_STATE',\n    UPDATE_ALL_SELECTED_CHALLENGES_STATE = 'UPDATE_ALL_SELECTED_CHALLENGES_STATE',\n    UPDATE_CHALLENGES_DELETE_LABEL_SUCCESS = 'UPDATE_CHALLENGES_DELETE_LABEL_SUCCESS',\n}\n\nexport function searchLibraryPractisSetsStart() {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_START as ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_START,\n    };\n}\n\nexport function searchLibraryPractisSetsSuccess(\n    practisSets: ListResult<PractisSets>\n) {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_SUCCESS as ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_SUCCESS,\n        practisSets,\n    };\n}\n\nexport function searchLibraryPractisSetsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_FAILURE as ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_FAILURE,\n        error,\n    };\n}\n\nexport function getFullLibraryPractisSetsStart() {\n    return {\n        type: ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_START as ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_START,\n    };\n}\n\nexport function getFullLibraryPractisSetsSuccess(\n    practisSets: ListResult<PractisSets>\n) {\n    return {\n        type: ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_SUCCESS as ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_SUCCESS,\n        practisSets,\n    };\n}\n\nexport function getFullLibraryPractisSetsFailure(error: string) {\n    return {\n        type: ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_FAILURE as ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_FAILURE,\n        error,\n    };\n}\n\nexport function updateLibraryPractisSetStart() {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_START as ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_START,\n    };\n}\n\nexport function updateLibraryPractisSetSuccess(\n    updatedPractisSet: PractisSets,\n    updateType: 'create' | 'update' | 'delete' | 'labels'\n) {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_SUCCESS as ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_SUCCESS,\n        updatedPractisSet,\n        updateType,\n    };\n}\n\nexport function updateLibraryPractisSetFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_FAILURE as ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_FAILURE,\n        error,\n    };\n}\n\nexport function updateAssignedLibraryPractisSet(assignedPractisSets: number[]) {\n    return {\n        type: ACTIONS.UPDATE_ASSIGNED_LIBRARY_PRACTIS_SET as ACTIONS.UPDATE_ASSIGNED_LIBRARY_PRACTIS_SET,\n        assignedPractisSets,\n    };\n}\n\nexport function updateSeparateAssignedLibraryPractisSet(\n    assignedPractisSets: number[]\n) {\n    return {\n        type: ACTIONS.UPDATE_SEPARATE_ASSIGNED_LIBRARY_PRACTIS_SET as ACTIONS.UPDATE_SEPARATE_ASSIGNED_LIBRARY_PRACTIS_SET,\n        assignedPractisSets,\n    };\n}\n\nexport function setSearchTermForLibraryPractisSet(value: string) {\n    return {\n        type: ACTIONS.SET_SEARCH_TERM_FOR_LIBRARY_PRACTIS_SET as ACTIONS.SET_SEARCH_TERM_FOR_LIBRARY_PRACTIS_SET,\n        value,\n    };\n}\n\nexport function updateLibraryPractisSetCheckedState(id: number) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_PRACTIS_SET_STATE as ACTIONS.UPDATE_SELECTED_PRACTIS_SET_STATE,\n        id,\n    };\n}\n\nexport function updateAllPractisSetsCheckedState(\n    selectedPractisSetIds: number[],\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE as ACTIONS.UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE,\n        selectedPractisSetIds,\n        checked,\n        partial,\n    };\n}\n\nexport function updatePractisSetDeleteLabelSuccess(\n    labelId: number,\n    id: number | string\n) {\n    return {\n        type: ACTIONS.UPDATE_PRACTIS_SET_DELETE_LABEL_SUCCESS as ACTIONS.UPDATE_PRACTIS_SET_DELETE_LABEL_SUCCESS,\n        labelId,\n        id,\n    };\n}\n\nexport function searchLibraryScenariosStart() {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_SCENARIOS_START as ACTIONS.SEARCH_LIBRARY_SCENARIOS_START,\n    };\n}\n\nexport function searchLibraryScenariosSuccess(scenarios: ListResult<Scenario>) {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_SCENARIOS_SUCCESS as ACTIONS.SEARCH_LIBRARY_SCENARIOS_SUCCESS,\n        scenarios,\n    };\n}\n\nexport function searchLibraryScenariosFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_SCENARIOS_FAILURE as ACTIONS.SEARCH_LIBRARY_SCENARIOS_FAILURE,\n        error,\n    };\n}\n\nexport function updateLibraryScenarioStart() {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_SCENARIO_START as ACTIONS.UPDATE_LIBRARY_SCENARIO_START,\n    };\n}\n\nexport function updateLibraryScenarioSuccess(\n    updatedScenario: Scenario,\n    updateType: 'create' | 'update' | 'delete' | 'labels'\n) {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_SCENARIO_SUCCESS as ACTIONS.UPDATE_LIBRARY_SCENARIO_SUCCESS,\n        updatedScenario,\n        updateType,\n    };\n}\n\nexport function updateLibraryScenarioFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_SCENARIO_FAILURE as ACTIONS.UPDATE_LIBRARY_SCENARIO_FAILURE,\n        error,\n    };\n}\n\nexport function updateLibraryScenarioCheckedState(id: number) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_SCENARIO_STATE as ACTIONS.UPDATE_SELECTED_SCENARIO_STATE,\n        id,\n    };\n}\n\nexport function updateAllScenarioCheckedState(\n    selectedScenarioIds: number[],\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_SCENARIOS_STATE as ACTIONS.UPDATE_ALL_SELECTED_SCENARIOS_STATE,\n        selectedScenarioIds,\n        checked,\n        partial,\n    };\n}\n\nexport function updateScenarioDeleteLabelSuccess(\n    labelId: number,\n    id: number | string\n) {\n    return {\n        type: ACTIONS.UPDATE_SCENARIOS_DELETE_LABEL_SUCCESS as ACTIONS.UPDATE_SCENARIOS_DELETE_LABEL_SUCCESS,\n        labelId,\n        id,\n    };\n}\n\nexport function searchLibraryChallengesStart() {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_CHALLENGES_START as ACTIONS.SEARCH_LIBRARY_CHALLENGES_START,\n    };\n}\n\nexport function searchLibraryChallengesSuccess(\n    challenges: ListResult<Challenge>\n) {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_CHALLENGES_SUCCESS as ACTIONS.SEARCH_LIBRARY_CHALLENGES_SUCCESS,\n        challenges,\n    };\n}\n\nexport function searchLibraryChallengesFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_LIBRARY_CHALLENGES_FAILURE as ACTIONS.SEARCH_LIBRARY_CHALLENGES_FAILURE,\n        error,\n    };\n}\n\nexport function getTotalLibraryChallengesCountStart() {\n    return {\n        type: ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_START as ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_START,\n    };\n}\n\nexport function getTotalLibraryChallengesCountSuccess(\n    challenges: PaginationResult<Challenge>\n) {\n    return {\n        type: ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_SUCCESS as ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_SUCCESS,\n        challenges,\n    };\n}\n\nexport function getTotalLibraryChallengesCountFailure(error: string) {\n    return {\n        type: ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_FAILURE as ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_FAILURE,\n        error,\n    };\n}\n\nexport function updateLibraryChallengeStart() {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_CHALLENGES_START as ACTIONS.UPDATE_LIBRARY_CHALLENGES_START,\n    };\n}\n\nexport function updateLibraryChallengeSuccess(\n    updatedChallenge: Challenge,\n    updateType: 'create' | 'update' | 'delete' | 'labels'\n) {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_CHALLENGES_SUCCESS as ACTIONS.UPDATE_LIBRARY_CHALLENGES_SUCCESS,\n        updatedChallenge,\n        updateType,\n    };\n}\n\nexport function updateLibraryChallengeFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_LIBRARY_CHALLENGES_FAILURE as ACTIONS.UPDATE_LIBRARY_CHALLENGES_FAILURE,\n        error,\n    };\n}\n\nexport function updateLibraryChallengeCheckedState(id: number | string) {\n    return {\n        type: ACTIONS.UPDATE_SELECTED_CHALLENGE_STATE as ACTIONS.UPDATE_SELECTED_CHALLENGE_STATE,\n        id,\n    };\n}\n\nexport function updateAllChallengesCheckedState(\n    selectedChallengeIds: any,\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.UPDATE_ALL_SELECTED_CHALLENGES_STATE as ACTIONS.UPDATE_ALL_SELECTED_CHALLENGES_STATE,\n        selectedChallengeIds,\n        checked,\n        partial,\n    };\n}\n\nexport function updateChallengeDeleteLabelSuccess(\n    labelId: number,\n    id: number | string\n) {\n    return {\n        type: ACTIONS.UPDATE_CHALLENGES_DELETE_LABEL_SUCCESS as ACTIONS.UPDATE_CHALLENGES_DELETE_LABEL_SUCCESS,\n        labelId,\n        id,\n    };\n}\n","import { UserProfile } from '../../../constants/interfaces/User';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport {useLoggedInUserProfileState} from \"../store/states\";\nimport {useMemo} from \"react\";\nimport { isTeamLeader as isTeamLead } from '../../../constants/enums';\n\nexport {\n    NEW_PERMISSIONS\n};\n\nexport function hasPermission(user: UserProfile | undefined, permission: NEW_PERMISSIONS) {\n    return user?.permissions?.includes(permission) === true;\n}\n\nfunction createLoggedInUserPermissionsHelper(\n    loggedInUser: UserProfile | undefined\n) {\n    const hasActionPermission = (permission: NEW_PERMISSIONS) =>\n        hasPermission(loggedInUser, permission);\n\n    const isTeamLeader = () => isTeamLead(loggedInUser?.role?.name);\n\n    return {\n        isTeamLeader,\n        hasActionPermission,\n    };\n}\n\nexport function useLoggedInUserPermissionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createLoggedInUserPermissionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}\n\n// export function hasPermissionToLoginWeb(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LOGIN_WEB);\n// }\n\n// export function hasPermissionToLoginMobile(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LOGIN_MOBILE);\n// }\n\n// export function hasPermissionToLoginAdmin(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LOGIN_ADMIN);\n// }\n\n// export function hasPermissionToSignupWeb(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.SIGNUP_WEB);\n// }\n\n// export function hasPermissionToSignupMobile(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.SIGNUP_MOBILE);\n// }\n\n// export function hasPermissionToCompanyReport(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.COMPANY_REPORT);\n// }\n\n// export function hasPermissionToListLogs(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_LOGS);\n// }\n\n// export function hasPermissionToManageRecordings(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_RECORDINGS);\n// }\n\n// export function hasPermissionToManageOwnFiles(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_OWN_FILES);\n// }\n\n// export function hasPermissionToUpdateCompanyInfo(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_COMPANY_INFO);\n// }\n\n// export function hasPermissionToUpdateTtsSettings(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_TTS_SETTINGS);\n// }\n\n// export function hasPermissionToViewTtsSettings(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_TTS_SETTINGS);\n// }\n\n// export function hasPermissionToCreatePractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_PRACTIS_SET);\n// }\n\n// export function hasPermissionToCreateScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_SCENARIO);\n// }\n\n// export function hasPermissionToCreateChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_CHALLENGE);\n// }\n\n// export function hasPermissionToUpdatePractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_PRACTIS_SET);\n// }\n\n// export function hasPermissionToUpdateScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_SCENARIO);\n// }\n\n// export function hasPermissionToUpdateChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_CHALLENGE);\n// }\n\n// export function hasPermissionToArchivePractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ARCHIVE_PRACTIS_SET);\n// }\n\n// export function hasPermissionToArchiveScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ARCHIVE_SCENARIO);\n// }\n\n// export function hasPermissionToArchiveChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ARCHIVE_CHALLENGE);\n// }\n\n// export function hasPermissionToDeletePractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_PRACTIS_SET);\n// }\n\n// export function hasPermissionToDeleteScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_SCENARIO);\n// }\n\n// export function hasPermissionToDeleteChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_CHALLENGE);\n// }\n\n// export function hasPermissionToCopyPractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.COPY_PRACTIS_SET);\n// }\n\n// export function hasPermissionToCopyScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.COPY_SCENARIO);\n// }\n\n// export function hasPermissionToCopyChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.COPY_CHALLENGE);\n// }\n\n// export function hasPermissionToGenerateChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.GENERATE_CHALLENGE);\n// }\n\n// export function hasPermissionToPublishPractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.PUBLISH_PRACTIS_SET);\n// }\n\n// export function hasPermissionToPublishScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.PUBLISH_SCENARIO);\n// }\n\n// export function hasPermissionToPublishChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.PUBLISH_CHALLENGE);\n// }\n\n// export function hasPermissionToListPractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_PRACTIS_SET);\n// }\n\n// export function hasPermissionToListScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_SCENARIO);\n// }\n\n// export function hasPermissionToListChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_CHALLENGE);\n// }\n\n// export function hasPermissionToUpdateDueDate(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_DUE_DATE);\n// }\n\n// export function hasPermissionToCreateInvitation(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_INVITATION);\n// }\n\n// export function hasPermissionToInviteTrainee(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.INVITE_TRAINEE);\n// }\n\n// export function hasPermissionToInviteTrainer(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.INVITE_TRAINER);\n// }\n\n// export function hasPermissionToInviteSupervisor(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.INVITE_SUPERVISOR);\n// }\n\n// export function hasPermissionToInviteCustomRole(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.INVITE_CUSTOM_ROLE);\n// }\n\n// export function hasPermissionToInviteCompanyAdmin(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.INVITE_COMPANY_ADMIN);\n// }\n\n// export function hasPermissionToUpdateInvitation(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_INVITATION);\n// }\n\n// export function hasPermissionToDeleteInvitation(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_INVITATION);\n// }\n\n// export function hasPermissionToAssignInvitationPractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_INVITATION_PRACTIS_SET);\n// }\n\n// export function hasPermissionToAssignInvitationTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_INVITATION_TEAM);\n// }\n\n// export function hasPermissionToAssignInvitationLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_INVITATION_LABEL);\n// }\n\n// export function hasPermissionToAssignInvitationRole(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_INVITATION_ROLE);\n// }\n\n// export function hasPermissionToManageRoles(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_ROLES);\n// }\n\n// export function hasPermissionToCreateUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_USER);\n// }\n\n// export function hasPermissionToUpdateUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_USER);\n// }\n\n// export function hasPermissionToDeleteUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_USER);\n// }\n\n// export function hasPermissionToListUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_USER);\n// }\n\n// export function hasPermissionToExportListUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.EXPORT_LIST_USER);\n// }\n\n// export function hasPermissionToListInvitation(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_INVITATION);\n// }\n\n// export function hasPermissionToRevokeInvitation(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REVOKE_INVITATION);\n// }\n\n// export function hasPermissionToResendInvitation(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RESEND_INVITATION);\n// }\n\n// export function hasPermissionToViewUserPerformance(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_USER_PERFORMANCE);\n// }\n\n// export function hasPermissionToCreateLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_LABEL);\n// }\n\n// export function hasPermissionToUpdateLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_LABEL);\n// }\n\n// export function hasPermissionToDeleteLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_LABEL);\n// }\n\n// export function hasPermissionToManagePacings(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_PACINGS);\n// }\n\n// export function hasPermissionToAssignPractisSetLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_PRACTIS_SET_LABEL);\n// }\n\n// export function hasPermissionToAssignScenarioLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_SCENARIO_LABEL);\n// }\n\n// export function hasPermissionToAssignChallengeLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_CHALLENGE_LABEL);\n// }\n\n// export function hasPermissionToAssignUserLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_USER_LABEL);\n// }\n\n// export function hasPermissionToRemovePractisSetLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_PRACTIS_SET_LABEL);\n// }\n\n// export function hasPermissionToRemoveScenarioLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_SCENARIO_LABEL);\n// }\n\n// export function hasPermissionToRemoveChallengeLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_CHALLENGE_LABEL);\n// }\n\n// export function hasPermissionToRemoveUserLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_USER_LABEL);\n// }\n\n// export function hasPermissionToListSubmission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_SUBMISSION);\n// }\n\n// export function hasPermissionToViewSubmission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_SUBMISSION);\n// }\n\n// export function hasPermissionToReviewSubmission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REVIEW_SUBMISSION);\n// }\n\n// export function hasPermissionToRequestSubmissionRedo(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REQUEST_SUBMISSION_REDO);\n// }\n\n// export function hasPermissionToArchiveSubmission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ARCHIVE_SUBMISSION);\n// }\n\n// export function hasPermissionToRestoreSubmission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RESTORE_SUBMISSION);\n// }\n\n// export function hasPermissionToListActivePractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_ACTIVE_PRACTIS_SET);\n// }\n\n// export function hasPermissionToViewPractisSetProgress(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_PRACTIS_SET_PROGRESS);\n// }\n\n// export function hasPermissionToSendNudge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.SEND_NUDGE);\n// }\n\n// export function hasPermissionToExportListPractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.EXPORT_LIST_PRACTIS_SET);\n// }\n\n// export function hasPermissionToExportListPractisSetUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.EXPORT_LIST_PRACTIS_SET_USER);\n// }\n\n// export function hasPermissionToAssignEnrollment(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_ENROLLMENT);\n// }\n\n// export function hasPermissionToViewUserPractisSetReport(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_USER_PRACTIS_SET_REPORT);\n// }\n\n// export function hasPermissionToViewEnrollment(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_ENROLLMENT);\n// }\n\n// export function hasPermissionToViewNotification(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_NOTIFICATION);\n// }\n\n// export function hasPermissionToViewSubmissionFeedback(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_SUBMISSION_FEEDBACK);\n// }\n\n// export function hasPermissionToViewProfile(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_PROFILE);\n// }\n\n// export function hasPermissionToUpdateProfile(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_PROFILE);\n// }\n\n// export function hasPermissionToReceivePush(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RECEIVE_PUSH);\n// }\n\n// export function hasPermissionToTrackActivity(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.TRACK_ACTIVITY);\n// }\n\n// export function hasPermissionToAssignInvitationPermission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_INVITATION_PERMISSION);\n// }\n\n// export function hasPermissionToAssignUserPermission(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_USER_PERMISSION);\n// }\n\n// export function hasPermissionToRestorePractisSet(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RESTORE_PRACTIS_SET);\n// }\n\n// export function hasPermissionToRestoreScenario(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RESTORE_SCENARIO);\n// }\n\n// export function hasPermissionToRestoreChallenge(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RESTORE_CHALLENGE);\n// }\n\n// export function hasPermissionToGroupName(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.GROUP_NAME);\n// }\n\n// export function hasPermissionToViewCompany(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_COMPANY);\n// }\n\n// export function hasPermissionToRemoveInvitationLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_INVITATION_LABEL);\n// }\n\n// export function hasPermissionToUnassignEnrollment(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UNASSIGN_ENROLLMENT);\n// }\n\n// export function hasPermissionToSaveSearchFilter(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.SAVE_SEARCH_FILTER);\n// }\n\n// export function hasPermissionToViewLogDetails(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_LOG_DETAILS);\n// }\n\n// export function hasPermissionToManageStagingUsers(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_STAGING_USERS);\n// }\n\n// export function hasPermissionToRemoveUserFromStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_USER_FROM_STAGING);\n// }\n\n// export function hasPermissionToAddUserInStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ADD_USER_IN_STAGING);\n// }\n\n// export function hasPermissionToListStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_STAGING);\n// }\n\n// export function hasPermissionToDeleteStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_STAGING);\n// }\n\n// export function hasPermissionToUpdateStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_STAGING);\n// }\n\n// export function hasPermissionToCreateStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_STAGING);\n// }\n\n// export function hasPermissionToViewStaging(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_STAGING);\n// }\n\n// export function hasPermissionToListTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_TEAM);\n// }\n\n// export function hasPermissionToDeleteTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_TEAM);\n// }\n\n// export function hasPermissionToUpdateTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_TEAM);\n// }\n\n// export function hasPermissionToCreateTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_TEAM);\n// }\n\n// export function hasPermissionToViewTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.VIEW_TEAM);\n// }\n\n// export function hasPermissionToRemoveTeamMember(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.REMOVE_TEAM_MEMBER);\n// }\n\n// export function hasPermissionToDuplicateTeam(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DUPLICATE_TEAM);\n// }\n\n// export function hasPermissionToAssignTeamLabel(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_TEAM_LABEL);\n// }\n\n// export function hasPermissionToInviteUser(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.INVITE_USER);\n// }\n\n// // System permissions\n\n// export function hasPermissionToAccessAnyCompany(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ACCESS_ANY_COMPANY);\n// }\n\n// export function hasPermissionToManageSystemFiles(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_SYSTEM_FILES);\n// }\n\n// export function hasPermissionToUpdateSettings(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_SETTINGS);\n// }\n\n// export function hasPermissionToRunMigration(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.RUN_MIGRATION);\n// }\n\n// export function hasPermissionToTriggerCron(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.TRIGGER_CRON);\n// }\n\n// export function hasPermissionToUpdatePractisAdmin(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_PRACTIS_ADMIN);\n// }\n\n// export function hasPermissionToDeletePractisAdmin(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_PRACTIS_ADMIN);\n// }\n\n// export function hasPermissionToCreatePractisAdmin(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_PRACTIS_ADMIN);\n// }\n\n// export function hasPermissionToCreateCompany(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.CREATE_COMPANY);\n// }\n\n// export function hasPermissionToListCompany(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_COMPANY);\n// }\n\n// export function hasPermissionToListPractisAdmin(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.LIST_PRACTIS_ADMIN);\n// }\n\n// export function hasPermissionToUpdateCompany(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.UPDATE_COMPANY);\n// }\n\n// export function hasPermissionToDeleteCompany(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.DELETE_COMPANY);\n// }\n\n// export function hasPermissionToManageDictionaries(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_DICTIONARIES);\n// }\n\n// export function hasPermissionToManagePermissions(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_PERMISSIONS);\n// }\n\n// export function hasPermissionToManageTimezones(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_TIMEZONES);\n// }\n\n// export function hasPermissionToManageDefaultRoles(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_DEFAULT_ROLES);\n// }\n\n// export function hasPermissionToManageSystemRoles(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.MANAGE_SYSTEM_ROLES);\n// }\n\n// export function hasPermissionToAssignSystemPermissions(user: UserInterface | undefined) {\n//     return hasPermission(user, NEW_PERMISSIONS.ASSIGN_SYSTEM_PERMISSIONS);\n// }","import { useMemo } from 'react';\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport { ROLE_NAMES } from '../../../constants/enums';\nimport { useLoggedInUserProfileState } from \"../store/states\";\n\nexport enum UserRoleLevel {\n    NONE = 0,\n    USER = 1,\n    COMPANY_ADMIN = 2,\n    PRACTIS_ADMIN = 3,\n}\n\nconst userRoleLevelMap = {\n    [ROLE_NAMES.USER]: UserRoleLevel.USER,\n    [ROLE_NAMES.COMPANY_ADMIN]: UserRoleLevel.COMPANY_ADMIN,\n    [ROLE_NAMES.PRACTIS_ADMIN]: UserRoleLevel.PRACTIS_ADMIN,\n};\n\nexport function getRoleLevel(roleName: string | undefined): UserRoleLevel {\n    return !!roleName\n        ? (userRoleLevelMap[roleName] || UserRoleLevel.NONE)\n        : UserRoleLevel.NONE;\n}\n\nexport function getUserRoleLevel(user: UserProfile | undefined): UserRoleLevel {\n    return getRoleLevel(user?.role?.name);\n}\n\nfunction createUserRolesHelper(\n    loggedInUser: UserProfile | undefined\n) {\n    const loggedInUserRoleLevel = getUserRoleLevel(loggedInUser);\n\n    const canViewRole = (roleName: string | undefined) =>\n        loggedInUserRoleLevel >= getRoleLevel(roleName);\n    \n    return {\n        canViewRole,\n    };\n}\n\nexport type UserRolesHelper = ReturnType<typeof createUserRolesHelper>;\n\nexport function useLoggedInUserRolesHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createUserRolesHelper(loggedInUser),\n        [loggedInUser]\n    );\n}\n","import { useMemo } from \"react\";\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport { useLoggedInUserProfileState } from \"../store/states\";\nimport {\n    hasPermission,\n    NEW_PERMISSIONS,\n} from \"./UserPermissionHelpers\";\nimport { getUserRoleLevel, getRoleLevel } from \"./UserRoleHelpers\";\nimport {\n    getBulkActionsAvailability,\n    getBulkActionAvailabilityItem,\n} from '../../../tools/bulkActions';\n\nexport enum InvitationActions {\n    ASSIGN_INVITATION_LABEL,\n    RESEND_INVITATION,\n    REVOKE_INVITATION,\n}\n\nfunction createInvitationActionsHelper(\n    loggedInUser: UserProfile | undefined\n) {\n    const loggedInUserRoleLevel = getUserRoleLevel(loggedInUser);\n\n    const canAssignInvitationLabel = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.ASSIGN_INVITATION_LABEL);\n\n    const canResendInvitation = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.RESEND_INVITATION);\n    \n    const canRevokeInvitation = (invitation: UserProfile) =>\n        loggedInUserRoleLevel >= getRoleLevel(invitation.role?.name)\n            && hasRevokeInvitationPermission();\n\n    const hasRevokeInvitationPermission = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.REVOKE_INVITATION);\n    \n    const getBulkActions = (invitations: UserProfile[] | undefined) => {\n        const base = getBulkActionsAvailability(\n            invitations,\n            [\n                getBulkActionAvailabilityItem(\n                    InvitationActions.ASSIGN_INVITATION_LABEL,\n                    invitations,\n                    canAssignInvitationLabel\n                ),\n                getBulkActionAvailabilityItem(\n                    InvitationActions.RESEND_INVITATION,\n                    invitations,\n                    canResendInvitation\n                ),\n                getBulkActionAvailabilityItem(\n                    InvitationActions.REVOKE_INVITATION,\n                    invitations,\n                    canRevokeInvitation\n                ),\n            ]\n        );\n\n        return {\n            ...base,\n            isBulkActionVisible: (action: InvitationActions) =>\n                action === InvitationActions.REVOKE_INVITATION\n                    ? hasRevokeInvitationPermission()\n                    : base.isBulkActionVisible(action),\n        };\n    }\n\n    return {\n        canAssignInvitationLabel,\n        canResendInvitation,\n        canRevokeInvitation,\n        getBulkActions,\n    };\n}\n\nexport type InvitationActionsHelper = ReturnType<typeof createInvitationActionsHelper>;\n\nexport function useInvitationActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createInvitationActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}","import dayjs from 'dayjs';\nimport { ordinalSuffix } from './number-sufix';\nconst momentTZ = require('moment-timezone');\n\nexport function formatTime(date: any, withSeconds?: boolean) {\n    if (!date) return '';\n\n    const d = new Date(date);\n    var hours = d.getHours();\n    const minutes = d.getMinutes();\n    const seconds = d.getSeconds();\n    var ampm = 'am';\n    if (hours > 12) {\n        hours -= 12;\n        ampm = 'pm';\n    }\n    const secondsStr = withSeconds ? `:${leadZero(seconds)}` : '';\n    return `${hours}:${leadZero(minutes)}${secondsStr} ${ampm}`;\n}\n\nfunction leadZero(value: number) {\n    return value < 10 ? `0${value}` : `${value}`;\n}\n\nconst quoteRegEx = /\"/gi;\n\nexport function stringifyDate(date: Date | null | undefined) {\n    return date ? JSON.stringify(date).replace(quoteRegEx, '') : undefined;\n}\n\nexport const formatAMPM = (date: Date) => {\n    let hours = date.getHours();\n    let minutes = date.getMinutes();\n    const ampm = hours >= 12 ? 'PM' : 'AM';\n    hours = hours % 12;\n    hours = hours ? hours : 12;\n    const formatedMinutes = minutes < 10 ? '0' + minutes : minutes;\n    return hours + ':' + formatedMinutes + ' ' + ampm;\n};\n\nexport function formatMMDDYY(date: Date) {\n    if (!date) return '';\n    const d = dayjs(date).toDate();\n    const day = d.getDate();\n    const month = d.getMonth() + 1;\n    let year = d.getFullYear().toString();\n\n    return `${('0' + month).slice(-2)}/${('0' + day).slice(\n        -2\n    )}/${year.substring(2)}`;\n}\n\nexport const formatHour = (\n    date?: number | string | Date\n) => {\n    if (!date) return '';\n\n    const intDate = new Date(date);\n    return formatAMPM(intDate);\n    \n};\n\n/**\n * @function formatDate\n * @param { number | string | Date } date \n * @param { boolean } showToday - defines if today should be shown\n * @param { boolean } shouldShowTime - defines if the time should be shown\n * @returns { string }\n */\nexport const formatDate = (\n    date?: number | string | Date,\n    showToday?: boolean,\n    shouldShowTime: boolean = true,\n): string => {\n    if (!date) return '';\n\n    const intDate = dayjs(date).toDate();\n    if (isToday(date) && shouldShowTime) {\n        return `${showToday ? 'Today at ' : ''} ${formatAMPM(\n            new Date(intDate)\n        )}`;\n    } else {\n        return formatMMDDYY(intDate);\n    }\n};\n\n/**\n * @function formatDateWithTimeZone\n * @param { string | Date } date \n * @returns { string }\n */\nexport const formatDateWithTimeZone = (date: string | Date): string => {\n    const stringifiedDate = typeof date === 'string' ? date : date.toString();\n    const splittedDate = new Date(stringifiedDate);\n\n    return dayjs(splittedDate.toDateString()).format('MM/DD/YY');\n};\n\n/**\n * @function getDateWithTZOffset\n * @param { string | null } date \n * @returns { string }\n */\nexport const getDateWithTZOffset = (date: string | null): string | null => {\n    if (!date) return null;\n    const timezone = momentTZ.tz.guess();\n    const dayWithTimezone = momentTZ.tz(date, timezone).startOf(\"day\").format();\n    return dayWithTimezone\n}\nexport const formatDateChart = (date?: number | string | Date) => {\n    if (!date) return '';\n\n    const intDate = new Date(date);\n    if (isToday(date)) {\n        return `Today`;\n    } else {\n        return formatMMDDYY(intDate);\n    }\n};\n\nexport const isToday = (date: any) => {\n    if (!date) return false;\n    date = new Date(date);\n    const today = new Date();\n    return (\n        date.getDate() === today.getDate() &&\n        date.getMonth() === today.getMonth() &&\n        date.getFullYear() === today.getFullYear()\n    );\n};\n\nconst getShortMonth = (date: Date) => {\n    const options: Intl.DateTimeFormatOptions = { month: 'short' };\n    return new Intl.DateTimeFormat('en-US', options).format(date);\n};\n\nexport const formatMonDDYear = (date: any) => {\n    if (!date) return '';\n    date = new Date(date);\n\n    return `${getShortMonth(date)} ${ordinalSuffix(\n        date.getDate()\n    )}, ${date.getFullYear()}\n   `;\n};\n\nexport const countDaysBetweenDates = (first: any, second: any) => {\n    const diff = Math.abs(\n        new Date(second).getTime() - new Date(first).getTime()\n    );\n\n    const dayDiff = Math.ceil(diff / (1000 * 3600 * 24));\n    return dayDiff < 1 ? 1 : dayDiff;\n};\n\nexport const getCopyrightYear = () => {\n    return new Date().getFullYear();\n};\n","import React, { memo, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { CircularProgress } from '@material-ui/core';\n\nconst StyledLoadingComponent = styled.div`\n    width: 136px;\n    height: 40px;\n    display: flex;\n    position: fixed;\n    top: 0;\n    left: 50%;\n    transform: translate(-50%, 0);\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    overflow: hidden;\n`;\n\nconst LoadingIcon = styled.div`\n    width: 40px;\n    background: ${props => props.theme.Colors.darkTwo};\n    color: ${props => props.theme.Colors.white};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst LoadingText = styled.div`\n    flex: 1;\n    background: ${props => props.theme.Colors.dark};\n    color: ${props => props.theme.Colors.white};\n    font-size: 13px;\n    font-weight: 600;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledCircularProgress = styled(CircularProgress)``;\n\nexport const LoadingComponent: React.FC<{ shouldDelay?: boolean }> = memo(({ shouldDelay = true }) => {\n    const [show, setShow] = useState(!shouldDelay)\n\n    useEffect(() => {\n        const timeoutId = setTimeout(() => setShow(true), shouldDelay ? 2000 : 0)\n\n        return () => {\n            clearTimeout(timeoutId)\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [])\n\n    return (show ?\n        <StyledLoadingComponent>\n            <LoadingIcon>\n                <StyledCircularProgress size={16} color=\"inherit\" />\n            </LoadingIcon>\n            <LoadingText>Loading...</LoadingText>\n        </StyledLoadingComponent>\n     : <></>);\n});\n","import React, { FC, useState, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Input } from '../../../ui/components/input';\r\nimport Checkbox from '../../../ui/components/Checkbox';\r\nimport { Label } from '../../../constants/interfaces/Label';\r\nimport TriangleDown from '../../../ui/icons/TriangleDown';\r\nimport TriangleRight from '../../../ui/icons/TriangleRight';\r\nimport { useHandleSelectLabels } from '../../labels/tools';\r\n\r\nconst StyledLabelListItemContainer = styled.div``;\r\n\r\nconst ChildLabelsContainer = styled.div<{\r\n    expanded: boolean;\r\n}>`\r\n    display: ${props => (props.expanded ? 'block' : 'none')};\r\n    margin-left: 8px;\r\n`;\r\n\r\nconst LabelItemActions = styled.div<{ menuOpen?: boolean }>`\r\n    display: flex;\r\n    user-select: none;\r\n    height: 100%;\r\n    width: 40px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst StyledCheckbox = styled(Checkbox)`\r\n    height: 100%;\r\n`;\r\n\r\nconst LabelNameContainer = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    &:active {\r\n        opacity: 0.7;\r\n    }\r\n`;\r\n\r\nconst ArrowContainer = styled.div`\r\n    width: 8px;\r\n    margin-right: 4px;\r\n    cursor: pointer;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    pointer-events: none;\r\n`;\r\n\r\nconst CollapseArrow = styled.div`\r\n    height: 8px;\r\n    display: flex;\r\n`;\r\n\r\nconst LabelListItemInputContainer = styled.div`\r\n    flex: 1;\r\n`;\r\n\r\nconst LabelListItemInput = styled(Input)<{ ref?: any; hasChildren?: boolean; hint?: string; }>`\r\n    height: 100%;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    padding: 0 4px;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    cursor: ${props => props.hasChildren ? 'pointer' : 'default'};\r\n`;\r\n\r\nconst StyledLabelListItem = styled.div<{\r\n    selected?: boolean;\r\n    modified?: boolean;\r\n    searched?: boolean;\r\n}>`\r\n    height: 32px;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    border-radius: 4px;\r\n    font-size: 13px;\r\n    align-items: center;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    ${LabelListItemInput}, ${ArrowContainer} {\r\n        color: ${props =>\r\n            props.selected || props.modified || props.searched\r\n                ? props.theme.Colors.black\r\n                : 'unset'};\r\n    }\r\n    &:hover ${LabelListItemInput}, :hover ${ArrowContainer} {\r\n        color: ${props => props.theme.Colors.black};\r\n    }\r\n    &:hover {\r\n        background: ${props => props.theme.Colors.whiteTwo};\r\n    }\r\n`;\r\n\r\nexport const PortableLabelListItem: FC<{\r\n    label: Label;\r\n    allLabels?: Label[];\r\n    openActions: boolean;\r\n    toggleOpenActions: (open: boolean) => void;\r\n    toggleCollapse: (labelId: number) => void;\r\n    labelsCollapseState: number[];\r\n    selectedLabels: number[];\r\n    setLabelFilters?: (labelIds: number[]) => void;\r\n    disableLabels?: boolean;\r\n}> = ({\r\n    label,\r\n    allLabels,\r\n    openActions,\r\n    toggleCollapse,\r\n    labelsCollapseState,\r\n    setLabelFilters,\r\n    selectedLabels,\r\n    disableLabels,\r\n}) => {\r\n    const isLabelSelected = selectedLabels.includes(label.id);\r\n    const isLabelPartiallySelected = selectedLabels.includes(-label.id);\r\n    const isExpanded = labelsCollapseState.includes(label.id);\r\n    const inputRef = useRef<any>(null);\r\n\r\n    const hasChildren = (label?: Label) => {\r\n        return label && label.children && label.children.length > 0;\r\n    };\r\n\r\n    const handleSelectLabels = useHandleSelectLabels();\r\n\r\n    const handleLabelSelection = () => {\r\n        if (setLabelFilters) {\r\n            setLabelFilters(\r\n                handleSelectLabels(label, selectedLabels, allLabels)\r\n            );\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <StyledLabelListItemContainer data-test=\"label-item-container\">\r\n                <StyledLabelListItem\r\n                    selected={\r\n                        isLabelSelected ||\r\n                        isLabelPartiallySelected ||\r\n                        openActions\r\n                    }\r\n                    modified={false}\r\n                    searched={false}\r\n                >\r\n                    <LabelNameContainer\r\n                        onClick={e => {\r\n                            e.stopPropagation();\r\n                            toggleCollapse(label.id);\r\n                        }}\r\n                        data-test=\"label-item-name-container\"\r\n                    >\r\n                        <ArrowContainer data-test=\"label-item-arrow-container\">\r\n                            {hasChildren(label) && (\r\n                                <CollapseArrow>\r\n                                    {labelsCollapseState.includes(label.id) ? (\r\n                                        <TriangleDown />\r\n                                    ) : (\r\n                                        <TriangleRight />\r\n                                    )}\r\n                                </CollapseArrow>\r\n                            )}\r\n                        </ArrowContainer>\r\n                        <LabelListItemInputContainer data-test=\"label-item-input-container\">\r\n                            <LabelListItemInput\r\n                                ref={inputRef}\r\n                                height={'auto'}\r\n                                value={label.name}\r\n                                colorTheme=\"transparent\"\r\n                                maxLength={144}\r\n                                readOnly={true}\r\n                                hint={label.name}\r\n                                hasChildren={hasChildren(label)}\r\n                            />\r\n                        </LabelListItemInputContainer>\r\n                    </LabelNameContainer>\r\n                    <LabelItemActions menuOpen={openActions}>\r\n                        <StyledCheckbox\r\n                            checked={\r\n                                isLabelSelected || isLabelPartiallySelected\r\n                            }\r\n                            partial={isLabelPartiallySelected}\r\n                            handleChange={handleLabelSelection}\r\n                            size={12}\r\n                            disabled={disableLabels}\r\n                            border=\"var(--ps-grey-2)\"\r\n                            dataTest=\"label-item-checkbox\"\r\n                        />\r\n                    </LabelItemActions>\r\n                </StyledLabelListItem>\r\n            </StyledLabelListItemContainer>\r\n            {hasChildren(label) && (\r\n                <ChildLabelsContainer\r\n                    expanded={isExpanded}\r\n                >\r\n                    {label.children!.map((childLabel: Label) => (\r\n                        <PortableLabelListItemContainer\r\n                            key={childLabel.id}\r\n                            label={childLabel}\r\n                            allLabels={allLabels}\r\n                            labelsCollapseState={labelsCollapseState}\r\n                            selectedLabels={selectedLabels}\r\n                            siblingIds={\r\n                                label.children &&\r\n                                label.children.map(label => label.id)\r\n                            }\r\n                            disableLabels={disableLabels}\r\n                            toggleCollapse={toggleCollapse}\r\n                            setLabelFilters={setLabelFilters}\r\n                        />\r\n                    ))}\r\n                </ChildLabelsContainer>\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nconst PortableLabelListItemContainer: FC<{\r\n    label: Label;\r\n    allLabels?: Label[];\r\n    labelsCollapseState: number[];\r\n    selectedLabels: number[];\r\n    siblingIds?: number[];\r\n    disableLabels?: boolean;\r\n    toggleCollapse(labelId: number): void;\r\n    setLabelFilters?: (labelIds: number[]) => void;\r\n}> = ({\r\n    label,\r\n    allLabels,\r\n    labelsCollapseState,\r\n    selectedLabels,\r\n    disableLabels,\r\n    toggleCollapse,\r\n    setLabelFilters,\r\n}) => {\r\n    const [open, setOpen] = useState(false);\r\n\r\n    return (\r\n        <PortableLabelListItem\r\n            label={label}\r\n            allLabels={allLabels}\r\n            openActions={open}\r\n            toggleOpenActions={setOpen}\r\n            toggleCollapse={toggleCollapse}\r\n            labelsCollapseState={labelsCollapseState}\r\n            setLabelFilters={setLabelFilters}\r\n            selectedLabels={selectedLabels}\r\n            disableLabels={disableLabels}\r\n        />\r\n    );\r\n};\r\n\r\nexport default PortableLabelListItemContainer;\r\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Label } from '../../../constants/interfaces/Label';\nimport PortableLabelListItem from './PortableLabelListItem';\n\nconst StyledLabelsList = styled.div`\n    margin-bottom: 16px;\n    overflow: auto;\n`;\n\nconst ScrollableLabelContainer = styled.div`\n    height: 100%;\n`;\n\nexport const PortableLabelsList: FC<{\n    labels: Label[];\n    allLabels?: Label[];\n    labelsCollapseState: number[];\n    selectedLabels: number[];\n    disableLabels?: boolean;\n    toggleCollapse(labelId: number): void;\n    setLabelFilters?: (labelIds: number[]) => void;\n}> = ({\n    labels,\n    allLabels,\n    labelsCollapseState,\n    selectedLabels,\n    disableLabels,\n    setLabelFilters,\n    toggleCollapse,\n}) => {\n    if (!labels || (labels && labels.length === 0)) return null;\n    return (\n        <StyledLabelsList>\n            <ScrollableLabelContainer>\n                {labels &&\n                    labels.map(label => {\n                        return (\n                            <PortableLabelListItem\n                                allLabels={allLabels}\n                                key={label.id}\n                                label={label}\n                                labelsCollapseState={labelsCollapseState}\n                                selectedLabels={selectedLabels}\n                                disableLabels={disableLabels}\n                                setLabelFilters={setLabelFilters}\n                                toggleCollapse={toggleCollapse}\n                            />\n                        );\n                    })}\n            </ScrollableLabelContainer>\n        </StyledLabelsList>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\nimport NoLabels from '../../../ui/icons/NoLabels';\n\nconst Container = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst StyledEmptyContent = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst IconWrapper = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoTeamsTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst EmptyLabels: FC<{ loading?: boolean }> = ({ loading, children }) => {\n    if (loading) {\n        return (\n            <Container>\n                <Loading />\n            </Container>\n        );\n    }\n\n    return (\n        <Container>\n            <StyledEmptyContent>\n                <IconWrapper data-test=\"labels-searchbox-no-items-icon\">\n                    <NoLabels />\n                </IconWrapper>\n                <NoTeamsTitle data-test=\"labels-searchbox-no-items-text\">No Labels yet</NoTeamsTitle>\n            </StyledEmptyContent>\n        </Container>\n    );\n};\n\nexport default EmptyLabels;\n","import React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\r\nimport NoSearchResult from '../../../ui/icons/NoSearchResult';\r\n\r\nconst Container = styled.div`\r\n    flex-direction: column;\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 100px;\r\n`;\r\n\r\nconst SmallContainer = styled.div`\r\n    flex-direction: column;\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n`;\r\n\r\nconst StyledEmptyContent = styled.div`\r\n    text-align: center;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n`;\r\n\r\nconst StyledEmptyContentSmall = styled(StyledEmptyContent)`\r\n    flex-direction: row;\r\n    align-items: center;\r\n    margin: 8px 0;\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n    width: 32px;\r\n    height: 32px;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst NoLabelsTitle = styled.div`\r\n    font-family: ${props => props.theme.Fonts.manrope};\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    font-stretch: normal;\r\n    text-align: center;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n`;\r\n\r\nconst StyledEmptyLabelsContent = styled.div`\r\n    text-align: center;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n`;\r\n\r\nexport type NoResultType = 'default' | 'min';\r\n\r\nconst NoResults: FC<{ loading?: boolean; version: NoResultType }> = ({\r\n    loading,\r\n    version,\r\n}) => {\r\n    if (version === 'min') {\r\n        return (\r\n            <SmallContainer>\r\n                {loading ? (\r\n                    <Loading />\r\n                ) : (\r\n                    <StyledEmptyContentSmall>\r\n                        <StyledEmptyLabelsContent>\r\n                            <IconWrapper data-test=\"labels-searchbox-empty-result-icon\">\r\n                                <NoSearchResult />\r\n                            </IconWrapper>\r\n                            <NoLabelsTitle data-test=\"labels-searchbox-empty-result-label\">No Labels found</NoLabelsTitle>\r\n                        </StyledEmptyLabelsContent>\r\n                    </StyledEmptyContentSmall>\r\n                )}\r\n            </SmallContainer>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <Container>\r\n            {loading ? (\r\n                <Loading />\r\n            ) : (\r\n                <StyledEmptyContent>\r\n                    <IconWrapper data-test=\"labels-searchbox-empty-result-icon\">\r\n                        <NoSearchResult />\r\n                    </IconWrapper>\r\n                    <NoLabelsTitle data-test=\"labels-searchbox-empty-result-label\">No Labels found</NoLabelsTitle>\r\n                </StyledEmptyContent>\r\n            )}\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default NoResults;\r\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { compose } from 'redux';\r\nimport styled, { css } from 'styled-components';\r\nimport { PaginationResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { Label } from '../../../constants/interfaces/Label';\r\nimport { listToTree } from '../../../helpers/functions/list-to-tree';\r\nimport {treeToArray, treeToList} from '../../../helpers/functions/tree-to-list';\r\nimport { filterLabels, sortLabels } from '../../labels/tools';\r\nimport { PortableLabelsList } from './PortableLabelList';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport EmptyLabels from './EmptyLabels';\r\nimport { Variables } from '../../../theme/variables';\r\nimport NoResults, { NoResultType } from './NoResultLabels';\r\nimport { TableSearchInput } from '../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\n//region Types\r\ntype Action = 'clear' | 'select';\r\n\r\nexport type PortableLabelsProps = {\r\n    labels?: PaginationResult<Label>;\r\n    collapsedList: number[];\r\n    selectedList: number[];\r\n    onSave?: () => void;\r\n    onSelectAll?: (selectedList: number[]) => void;\r\n    onDeselectAll?: () => void;\r\n    onClearSelected?: () => void;\r\n    onToggleCollapse: (labelId: number) => void;\r\n    onToggleCollapseAll: () => void;\r\n    onSetSelected?: (labelIds: number[]) => void;\r\n    filtersTitle?: string;\r\n    disabled?: boolean;\r\n    loading?: boolean;\r\n    showSelectActions?: boolean;\r\n    showSearch?: boolean;\r\n    showSave?: boolean;\r\n    noResultType?: NoResultType;\r\n};\r\n//endregion\r\n\r\n//region Styles\r\nconst StyledCreateLabels = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst CreateLabelsBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst FiltersHeader = styled.div`\r\n    padding: 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    height: 24px;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst FiltersSavePanel = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst StyledPlainActionsWrapper = styled.div`\r\n    padding-right: 14px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst FilterTitle = styled.p`\r\n    margin: 0;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.black};\r\n    font-weight: 600;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n//endregion\r\n\r\nconst PortableLabels: FC<PortableLabelsProps> = ({\r\n    labels,\r\n    collapsedList,\r\n    selectedList,\r\n    disabled,\r\n    loading,\r\n    onSave,\r\n    onClearSelected,\r\n    onDeselectAll,\r\n    onSelectAll,\r\n    onToggleCollapse,\r\n    onToggleCollapseAll,\r\n    onSetSelected,\r\n    filtersTitle,\r\n    showSelectActions,\r\n    showSearch,\r\n    showSave = true,\r\n    noResultType = 'min',\r\n}) => {\r\n    const actionConfig: Record<\r\n        Action,\r\n        {\r\n            color: string;\r\n            colorHover: string;\r\n            colorActive: string;\r\n        }\r\n    > = {\r\n        clear: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n        select: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n    };\r\n    const [searchTerm, setSearchTerm] = useState('');\r\n    const [transformedLabels, setTransformedLabels] = useState(\r\n        listToTree(labels && labels.items)\r\n    );\r\n    const [processedSelectedList, setProcessedSelectedList] = useState<\r\n        number[]\r\n    >([]);\r\n    const [processedIds, setProcessedIds] = useState<any>([]);\r\n\r\n    const getPrecessedLabels = useMemo(() => {\r\n        const result = compose<Label[]>(\r\n            filterLabels(searchTerm),\r\n            sortLabels\r\n        )(transformedLabels);\r\n\r\n        if (result.length > 0) {\r\n            const filteredAndSortedLabelsArray = treeToArray(result);\r\n            const processedDataIds = filteredAndSortedLabelsArray.map((item: any) => item.id!)\r\n            setProcessedIds(processedDataIds);\r\n            setProcessedSelectedList(\r\n                selectedList.filter(item => processedDataIds.includes(Math.abs(item)))\r\n            );\r\n        }\r\n\r\n        return result;\r\n    }, [transformedLabels, searchTerm, selectedList]);\r\n\r\n    const isAllSelected = useMemo(\r\n        () => selectedList.length === processedIds.length,\r\n        [selectedList, processedIds]\r\n    );\r\n\r\n    const clearHandler = useCallback(() => {\r\n        onClearSelected?.();\r\n    }, [onClearSelected]);\r\n\r\n    const deSelectAllHandler = useCallback(() => {\r\n        if (isAllSelected && onDeselectAll) {\r\n            onDeselectAll();\r\n        } else {\r\n            if (searchTerm) {\r\n                onSetSelected?.(processedIds);\r\n            }\r\n            else if (onSelectAll) {\r\n                onSelectAll(processedIds);\r\n            }\r\n        }\r\n    }, [onDeselectAll, onSelectAll, onSetSelected, isAllSelected, processedIds, searchTerm]);\r\n\r\n    const searchHandler = (value: string) => {\r\n        if(!!value){\r\n            onToggleCollapseAll();\r\n        } else {\r\n            // clearHandler(); //FIXME: check if it's needed\r\n        }\r\n        setSearchTerm(value) \r\n    };\r\n\r\n\r\n \r\n  \r\n    useEffect(() => {\r\n        setTransformedLabels(listToTree(treeToList(labels && labels.items)));\r\n    }, [labels]);\r\n\r\n    const showNoItems = !labels?.totalCount;\r\n    const showNoResultsState = !getPrecessedLabels.length;\r\n    const showEmptyState = showNoItems || showNoResultsState || loading;\r\n\r\n    const selectedLabelsLength = selectedList.filter(id => id > 0).length\r\n\r\n    return (\r\n        <StyledCreateLabels>\r\n            <CreateLabelsBody>\r\n                {filtersTitle && (\r\n                    <FiltersHeader>\r\n                        <FilterTitle>{filtersTitle}</FilterTitle>\r\n                    </FiltersHeader>\r\n                )}\r\n                {showSearch && (\r\n                    <SearchWrapper data-test=\"labels-searchbox-wrapper\">\r\n                        <TableSearchInput\r\n                            onChange={searchHandler}\r\n                            disabled={showNoItems}\r\n                            dataTest=\"labels-searchbox-field\"\r\n                        />\r\n                    </SearchWrapper>\r\n                )}\r\n                {showSelectActions && !showNoItems && (\r\n                    <SelectActions>\r\n                        <div>\r\n                            <SelectedCaption data-test=\"labels-selected-caption\">\r\n                                {selectedLabelsLength > 0\r\n                                    ? `${selectedLabelsLength} ${\r\n                                          selectedLabelsLength > 1\r\n                                              ? ' Labels selected'\r\n                                              : ' Label selected'\r\n                                      }`\r\n                                    : 'No Labels selected'}\r\n                            </SelectedCaption>\r\n                        </div>\r\n                        <StyledPlainActionsWrapper>\r\n                            {isAllSelected ? (\r\n                                <PlainAction\r\n                                    disabled={\r\n                                        processedSelectedList.length === 0 ||\r\n                                        showNoResultsState\r\n                                    }\r\n                                    color={actionConfig.clear.color}\r\n                                    colorActive={actionConfig.clear.colorActive}\r\n                                    colorHover={actionConfig.clear.colorHover}\r\n                                    onClick={clearHandler}\r\n                                    data-test=\"labels-unselect-all-button\"\r\n                                >\r\n                                    Unselect All\r\n                                </PlainAction>\r\n                            ) : (\r\n                                <PlainAction\r\n                                    disabled={showNoResultsState}\r\n                                    color={actionConfig.select.color}\r\n                                    colorActive={\r\n                                        actionConfig.select.colorActive\r\n                                    }\r\n                                    colorHover={actionConfig.select.colorHover}\r\n                                    onClick={deSelectAllHandler}\r\n                                    data-test=\"labels-select-all-button\"\r\n                                >\r\n                                    Select All\r\n                                </PlainAction>\r\n                            )}\r\n                        </StyledPlainActionsWrapper>\r\n                    </SelectActions>\r\n                )}\r\n                {showEmptyState ? (\r\n                    showNoItems ? (\r\n                        <EmptyLabels loading={loading} />\r\n                    ) : (\r\n                        <NoResults version={noResultType} loading={loading} />\r\n                    )\r\n                ) : (\r\n                    <>\r\n                        <PortableLabelsList\r\n                            labels={getPrecessedLabels}\r\n                            allLabels={labels && labels.items}\r\n                            labelsCollapseState={collapsedList}\r\n                            selectedLabels={selectedList}\r\n                            disableLabels={disabled}\r\n                            setLabelFilters={onSetSelected}\r\n                            toggleCollapse={onToggleCollapse}\r\n                        />\r\n                        {onSave && showSave && (\r\n                            <FiltersSavePanel>\r\n                                <Button\r\n                                    type={'button'}\r\n                                    label={'Save'}\r\n                                    action={() => onSave()}\r\n                                    height={'48px'}\r\n                                    width={'160px'}\r\n                                />\r\n                            </FiltersSavePanel>\r\n                        )}\r\n                    </>\r\n                )}\r\n            </CreateLabelsBody>\r\n        </StyledCreateLabels>\r\n    );\r\n};\r\n\r\nexport { PortableLabels };\r\n","import React, { FC, useEffect } from 'react';\r\n\r\nimport {\r\n    useDeselectAllLabels,\r\n    useResetCollapseAllLabels,\r\n    useResetSelectedLabels,\r\n    useSaveLabels,\r\n    useSelectAllLabels,\r\n    useSelectLabels,\r\n    useToggleCollapseAllLabels,\r\n    useToggleCollapseLabel,\r\n} from '../store/hors/withLabels/services';\r\nimport { useLabelsState } from '../store/hors/withLabels/states';\r\nimport { PortableLabels, PortableLabelsProps } from './PortableLabels';\r\nimport { usePortableLabelsState } from '../store/states';\r\n\r\ntype Props = Pick<\r\n    PortableLabelsProps,\r\n    | 'filtersTitle'\r\n    | 'onSetSelected'\r\n    | 'showSelectActions'\r\n    | 'showSearch'\r\n    | 'showSave'\r\n> & {\r\n    resetSelectedOnUnmount?: boolean;\r\n};\r\n\r\nexport const PortableLabelsWithStore: FC<Props> = ({\r\n    onSetSelected,\r\n    resetSelectedOnUnmount = true,\r\n    ...rest\r\n}) => {\r\n    const { selected, collapsed } = useLabelsState();\r\n    const { data, loading } = usePortableLabelsState();\r\n    const collapseLabelHandler = useToggleCollapseLabel();\r\n    const collapseAllLabels = useToggleCollapseAllLabels();\r\n    const resetCollapsedLAbels = useResetCollapseAllLabels()  \r\n    const saveHandler = useSaveLabels();\r\n    const select = useSelectLabels();\r\n    const selectAll = useSelectAllLabels();\r\n    const deselectAll = useDeselectAllLabels();\r\n    const resetSelected = useResetSelectedLabels();\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            if (resetSelectedOnUnmount) {\r\n                resetSelected();\r\n            }\r\n        };\r\n    }, [resetSelectedOnUnmount, resetSelected]);\r\n\r\n    return (\r\n        <PortableLabels\r\n            labels={data}\r\n            selectedList={selected}\r\n            collapsedList={collapsed}\r\n            loading={loading}\r\n            onToggleCollapse={collapseLabelHandler}\r\n            onToggleCollapseAll={collapseAllLabels}\r\n            onClearSelected={() => {\r\n                resetCollapsedLAbels();\r\n                select([])\r\n                onSetSelected && onSetSelected([])}}\r\n            onSave={saveHandler}\r\n            onSetSelected={ids => {\r\n                select(ids);\r\n                onSetSelected && onSetSelected(ids);\r\n            }}\r\n            onSelectAll={(selectedList?: number[]) => {\r\n                selectAll(selectedList);\r\n                onSetSelected &&\r\n                    onSetSelected(data.items.map(label => label.id));\r\n            }}\r\n            onDeselectAll={() => {\r\n                deselectAll();\r\n                onSetSelected && onSetSelected([]);\r\n            }}\r\n            {...rest}\r\n        />\r\n    );\r\n};\r\n","import { useDispatch } from 'react-redux';\r\nimport { useCallback } from 'react';\r\nimport {\r\n    clearAssignLabelsAction,\r\n    clearLabelFilterAction,\r\n    closeLabelCreationPanelAction,\r\n    collapseAllLabelsAction,\r\n    collapseAllTableLabelsAction,\r\n    expandAllLabelsAction,\r\n    expandLabelFieldByIdAction,\r\n    expandMultipleLabelsAction,\r\n    modifyLabelNameAction,\r\n    openLabelCreationPanelAction,\r\n    saveLabelFiltersFailure,\r\n    saveLabelFiltersStart,\r\n    saveLabelFiltersSuccess,\r\n    searchLabelsFailure,\r\n    searchLabelsStart,\r\n    searchLabelsSuccess,\r\n    selectLabelFilterAction,\r\n    setAssignLabelsAction,\r\n    setEditingLabelAction,\r\n    setLabelFilterAction,\r\n    setLabelsSearchTerm,\r\n    toggleCollapseAssignLabelFieldAction,\r\n    toggleCollapseLabelFieldAction,\r\n    updateLabelFailure,\r\n    updateLabelStart,\r\n    updateLabelSuccess,\r\n    setPreviouslyAssignedLabels,\r\n} from './actions';\r\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\r\nimport {\r\n    useCreateLabelApi,\r\n    useDeleteLabelApi,\r\n    useSearchLabelsApi,\r\n    useUpdateLabelApi,\r\n} from '../../../api';\r\nimport { MutateLabelsParams } from '../../../api/labels/types';\r\nimport { Label } from '../../../constants/interfaces/Label';\r\nimport { SearchParams } from '../../../constants/interfaces/filters';\r\nimport { EditingLabels } from './states';\r\nimport { useSaveUserSettingsApi } from '../../../api';\r\nimport { isAuthorized, getCurrentUserId } from '../../../helpers/functions/auth-helpers';\r\n\r\nexport const useCreateLabelService = () => {\r\n    const dispatch = useDispatch();\r\n    const createLabelApi = useCreateLabelApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (params: MutateLabelsParams) => {\r\n            dispatch(updateLabelStart());\r\n            return createLabelApi(params)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLabelSuccess(data as Label, 'create'))\r\n                    );\r\n                    showMessage('Label created', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLabelFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error.message;\r\n                });\r\n        },\r\n        [dispatch, createLabelApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchLabelsService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchLabelsApi = useSearchLabelsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (sp?: SearchParams) => {\r\n            dispatch(searchLabelsStart());\r\n            return searchLabelsApi(sp)\r\n                .then(data => {\r\n                    dispatch(\r\n                        searchLabelsSuccess(\r\n                            data,\r\n                            sp && sp.searchTerm.length > 0\r\n                        )\r\n                    );\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchLabelsFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, searchLabelsApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useUpdateLabelService = () => {\r\n    const dispatch = useDispatch();\r\n    const updateLabelApi = useUpdateLabelApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (labelId: number, params: MutateLabelsParams) => {\r\n            dispatch(updateLabelStart());\r\n            return updateLabelApi(labelId, params)\r\n                .then(data => {\r\n                    dispatch(\r\n                        updateLabelSuccess({ id: data.id } as Label, 'update')\r\n                    );\r\n                    showMessage('Label updated', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLabelFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error.message;\r\n                });\r\n        },\r\n        [dispatch, updateLabelApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useDeleteLabelService = () => {\r\n    const dispatch = useDispatch();\r\n    const deleteLabelApi = useDeleteLabelApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (label: Label) => {\r\n            dispatch(updateLabelStart());\r\n            return deleteLabelApi(label.id)\r\n                .then(data => {\r\n                    dispatch(dispatch(updateLabelSuccess(label, 'delete')));\r\n                    showMessage('Label deleted', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLabelFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, deleteLabelApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useSaveUserFiltersService\r\n * @description saves labels selected by current user as filters\r\n * @param { number[] | null } labels\r\n * @returns { Promise }\r\n */\r\nexport const useSaveUserFiltersService = () => {\r\n    const dispatch = useDispatch();\r\n    const saveUserSettingsApi = useSaveUserSettingsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (labels: number[] | null) => {\r\n            if (!isAuthorized()) {\r\n                showMessage('User is not authorized to perform this action', 'error');\r\n                return Promise.reject();\r\n            }\r\n            dispatch(saveLabelFiltersStart(labels));\r\n            return saveUserSettingsApi(getCurrentUserId()!, labels)\r\n                .then(data => {\r\n                    dispatch(saveLabelFiltersSuccess(labels));\r\n                    dispatch(setLabelFilterAction(labels ?? []));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(saveLabelFiltersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, saveUserSettingsApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSelectLabelFilterActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelId: number) => {\r\n            dispatch(selectLabelFilterAction(labelId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSetPreviouslyAssignedLabelsAction = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labels: number[]) => {\r\n            dispatch(setPreviouslyAssignedLabels(labels));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useToggleCollapseLabelFieldService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelId: number) => {\r\n            dispatch(toggleCollapseLabelFieldAction(labelId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useToggleCollapseAssignLabelFieldService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelId: number) => {\r\n            dispatch(toggleCollapseAssignLabelFieldAction(labelId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useExpandLabelFieldByIdService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelId: number) => {\r\n            dispatch(expandLabelFieldByIdAction(labelId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSetLabelFilterActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labels: number[]) => {\r\n            dispatch(setLabelFilterAction(labels));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useClearLabelFilterActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(clearLabelFilterAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSetAssignLabelsActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labels: number[]) => {\r\n            dispatch(setAssignLabelsAction(labels));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useClearAssignLabelsActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(clearAssignLabelsAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useCollapseAllLabelsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(collapseAllLabelsAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useCollapseAllTableLabelsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(collapseAllTableLabelsAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useExpandAllLabelsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(expandAllLabelsAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useExpandMultipleLabelsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelIds: number[]) => {\r\n            dispatch(expandMultipleLabelsAction(labelIds));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useModifyLabelNameActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelId, value: string) => {\r\n            dispatch(modifyLabelNameAction(labelId, value));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useOpenLabelCreationPanelService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(openLabelCreationPanelAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useCloseLabelCreationPanelService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(closeLabelCreationPanelAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSetLabelsSearchTermService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (value: string) => {\r\n            dispatch(setLabelsSearchTerm(value));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSetEditingLabelActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (configs?: EditingLabels) => {\r\n            dispatch(setEditingLabelAction(configs));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n","import { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { Label } from '../../../constants/interfaces/Label';\nimport { useSelector } from 'react-redux';\n\ntype PortableLabelsBaseState = {\n    data: PaginationResult<Label>;\n    loading: boolean;\n};\n\nexport type PortableLabelsState = PortableLabelsBaseState;\n\nexport const initialState = {\n    data: {\n        items: [],\n        limit: 0,\n        offset: 0,\n        numberOfPages: 0,\n        totalCount: 0,\n        lastUpdated: undefined,\n    },\n    loading: false,\n};\n\nexport const usePortableLabelsState = (): PortableLabelsState => {\n    const appState = useSelector(state => state);\n    return appState.portableLabels;\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport Popover, { PopoverOrigin } from '@material-ui/core/Popover';\n\nconst Arrow = styled.div<{\n    width: number;\n    height: number;\n}>`\n    position: absolute;\n    top: 0;\n    left: 7px;\n    transform: translateY(-100%);\n    width: 38px;\n    height: 9px;\n    overflow: hidden;\n    box-shadow: 0 0 10px -17px rgba(166, 174, 190, 0.5);\n\n    :after {\n        content: '';\n        position: absolute;\n        width: 18px;\n        height: 36px;\n        background: white;\n        transform: rotate(45deg);\n        top: 0;\n        left: 0;\n        box-shadow: -1px -1px 10px -2px rgba(166, 174, 190, 0.5);\n    }\n`;\n\nconst StyledPopover = styled(Popover)<{\n    verticaloffset: number;\n    horizontaloffset: number;\n}>`\n    && > .MuiPopover-paper {\n        overflow: auto;\n        margin-top: ${({ verticaloffset }) => verticaloffset}px;\n        margin-left: ${({ horizontaloffset }) => horizontaloffset}px;\n    }\n    && > .MuiPaper-elevation8 {\n        border-radius: 0;\n        box-shadow: none;\n        background: transparent;\n        overflow: visible;\n    }\n`;\n\nconst Wrapper = styled.div<{\n    padding?: string;\n}>`\n    padding: ${({ padding }) => (padding ? padding : '32px 24px 24px 24px')};\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    background: ${({ theme }) => theme.Colors.white};\n    overflow: hidden;\n`;\n\nexport const PopupComponent: FC<{\n    triggerRef: any;\n    open: boolean;\n    onDismiss: () => void;\n    arrow?: boolean;\n    hideOnOutsideClick?: () => void;\n    padding?: string;\n    anchorOrigin?: PopoverOrigin;\n    transformOrigin?: PopoverOrigin;\n    verticalOffset?: number;\n    horizontalOffset?: number;\n}> = ({\n    triggerRef,\n    open,\n    onDismiss,\n    children,\n    arrow = false,\n    hideOnOutsideClick,\n    padding,\n    anchorOrigin,\n    transformOrigin,\n    verticalOffset,\n    horizontalOffset,\n}) => {\n    return (\n        <StyledPopover\n            anchorEl={triggerRef.current}\n            open={open}\n            onClose={() => {\n                if (!hideOnOutsideClick) {\n                    onDismiss();\n                }\n            }}\n            anchorOrigin={\n                anchorOrigin || {\n                    vertical: 'bottom',\n                    horizontal: 'right',\n                }\n            }\n            transformOrigin={\n                transformOrigin || {\n                    vertical: 'top',\n                    horizontal: 'right',\n                }\n            }\n            onClick={e => {\n                e.stopPropagation();\n            }}\n            verticaloffset={verticalOffset ? verticalOffset : 8}\n            horizontaloffset={horizontalOffset ? horizontalOffset : 0}\n        >\n            <Wrapper padding={padding}>\n                {arrow && (\n                    <Arrow\n                        width={triggerRef?.current?.clientWidth || 0}\n                        height={triggerRef?.current?.clientHeight || 0}\n                    />\n                )}\n                {children}\n            </Wrapper>\n        </StyledPopover>\n    );\n};\n","import React, {\n    PropsWithChildren,\n    ReactElement,\n    ReactNode,\n    RefObject,\n    useRef,\n    useMemo,\n    useState,\n    useEffect,\n    useCallback,\n} from 'react';\nimport { PopoverOrigin } from '@material-ui/core/Popover';\nimport { SingletonPopup } from './helpers/useSingleton';\nimport { useDismiss } from '../../../helpers/hooks/useDismiss';\nimport { PopupComponent } from './PopupComponent';\n\nexport type PopupProps = {\n    enabled: boolean;\n    enable: () => void;\n    disable: () => void;\n    show: () => void;\n    hide: () => void;\n    toggleShown: () => void;\n    shown: boolean;\n};\n\ntype Props<T> = {\n    content:\n        | ReactNode\n        | { (props: PopupProps, dismissProps: DismissProps): ReactNode };\n    contentWidth?: string;\n    padding?: string;\n    children: {\n        (\n            ref: RefObject<T>,\n            props: PopupProps,\n            dismissProps: DismissProps\n        ): ReactElement;\n    };\n    dismissKey?: string;\n    hideOnOutsideClick?: boolean;\n    anchorOrigin?: PopoverOrigin;\n    transformOrigin?: PopoverOrigin;\n    singleton?: SingletonPopup<T>;\n    arrow?: boolean;\n    verticalOffset?: number;\n    horizontalOffset?: number;\n};\n\nexport type DismissProps = {\n    dismiss: () => void;\n};\n\n/**\n * Absolute auto positioning Popup component\n * @param children render function with Ref object. Append that object on HTMLElement to trigger Popup\n * @param content content of Popup\n * @param dismissKey first time displaying based on useDismiss hook. Popup will always showing on component mount when the value is not dismissed\n * @param hideOnOutsideClick enable or disable hiding on click pout of content\n * @param arrow render arrow on the edge of content\n * @param padding\n * @param singleton\n * @param anchorPosition\n * @param verticalOffset adjust vertical position\n * @param horizontalOffset adjust horizontal position\n * @constructor\n */\nexport const Popup = <T extends HTMLElement = HTMLElement>({\n    children,\n    content,\n    arrow = false,\n    dismissKey,\n    hideOnOutsideClick,\n    padding,\n    anchorOrigin,\n    transformOrigin,\n    singleton,\n    verticalOffset,\n    horizontalOffset,\n}: PropsWithChildren<Props<T>>) => {\n    const [shown, _setShown] = useState(false);\n\n    const shownRef = useRef(shown);\n    const setShown = (value: boolean) => {\n        shownRef.current = value;\n        _setShown(value);\n    };\n    \n    const show = useCallback(() => {\n        setShown(true);\n    }, []);\n\n    const hide = () => {\n        setShown(false);\n    };\n    const toggleShown = () => {\n        if (shownRef.current) {\n            hide();\n        } else {\n            show();\n        }\n    };\n\n    const [enabled, setEnabled] = useState(true);\n\n    const enable = () => {\n        setEnabled(true);\n    };\n    const disable = () => {\n        hide();\n        setEnabled(false);\n    };\n\n    const [dismissed, setDismissed] = useDismiss(dismissKey);\n    useEffect(() => {\n        if (dismissKey && !dismissed) {\n            show();\n        }\n    }, [dismissKey, dismissed, show]);\n\n    const dismissProps = useMemo<DismissProps>(() => {\n        return {\n            dismiss: setDismissed,\n        };\n    }, [setDismissed]);\n\n    const innerTriggerRef = useRef<T>(null);\n\n    const triggerRef = useMemo(() => {\n        if (singleton) {\n            return singleton.triggerRef;\n        }\n        return innerTriggerRef;\n    }, [singleton]);\n\n    const getChildren = () => {\n        if (children) {\n            return children(\n                triggerRef,\n                {\n                    shown,\n                    toggleShown,\n                    hide,\n                    show,\n                    enabled,\n                    disable,\n                    enable,\n                },\n                dismissProps\n            );\n        }\n        return null;\n    };\n\n    const getContent = () => {\n        if (typeof content === 'function') {\n            return content(\n                {\n                    shown,\n                    toggleShown,\n                    hide,\n                    show,\n                    enabled,\n                    disable,\n                    enable,\n                },\n                dismissProps\n            );\n        }\n        return content;\n    };\n\n    return (\n        <>\n            {getChildren()}\n            <PopupComponent\n                triggerRef={triggerRef}\n                open={shown && enabled && !dismissed}\n                arrow={arrow}\n                padding={padding}\n                onDismiss={() => {\n                    if (!hideOnOutsideClick) {\n                        setShown(false);\n                        if (dismissKey) {\n                            setDismissed();\n                        }\n                    }\n                }}\n                anchorOrigin={\n                    anchorOrigin || {\n                        vertical: 'bottom',\n                        horizontal: 'right',\n                    }\n                }\n                transformOrigin={\n                    transformOrigin || {\n                        vertical: 'top',\n                        horizontal: 'right',\n                    }\n                }\n                verticalOffset={verticalOffset}\n                horizontalOffset={horizontalOffset}\n            >\n                {getContent()}\n            </PopupComponent>\n        </>\n    );\n};\n","import { useCallback, useMemo, useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getProfileState } from '../../pages/UserProfile/store/reducers';\n\n/**\n * Manual dismissing (based on local storage)\n * @param key - unique key value\n * @param forCurrentUser - dismiss for current authorized user (from redux storage: profile.id)\n * @return array with 2 items: the first item is a stateful boolean value, the second item is function for dismissing of current key\n */\nexport const useDismiss = (\n    key: string | undefined,\n    forCurrentUser = true\n): [boolean, () => void] => {\n    const dismissKey = 'dismissedItems';\n\n    const profile = useSelector(getProfileState);\n\n    const itemKey = useMemo(() => {\n        if (forCurrentUser && profile?.id !== undefined) {\n            return `${key}&userId=${profile.id}`;\n        } else if (forCurrentUser && !profile?.id) {\n            console.warn(\n                \"Cannot get ID of current authorized user. Seems like for now it's a guest user. Please make for sure you are doing good :)\"\n            );\n        }\n        return key;\n    }, [key, profile, forCurrentUser]);\n\n    const getValue = useCallback((): boolean => {\n        if (\n            itemKey === undefined ||\n            (forCurrentUser && profile?.id === undefined)\n        ) {\n            return true;\n        }\n\n        try {\n            const dismissedHashString = localStorage.getItem(dismissKey);\n            if (dismissedHashString === null) {\n                throw new Error();\n            }\n            const dismissedItemsHash = JSON.parse(dismissedHashString);\n            return dismissedItemsHash[itemKey];\n        } catch {\n            localStorage.setItem(\n                dismissKey,\n                JSON.stringify({ [itemKey]: false })\n            );\n            return false;\n        }\n    }, [itemKey, profile, forCurrentUser]);\n\n    const [isDismissed, setDismiss] = useState(getValue());\n\n    const onDismissHandler = useCallback(() => {\n        if (\n            itemKey === undefined ||\n            (forCurrentUser && profile?.id === undefined)\n        ) {\n            return;\n        }\n\n        try {\n            const dismissedHashString = localStorage.getItem(dismissKey);\n            if (dismissedHashString === null) {\n                throw new Error();\n            }\n            const dismissedItemsHash = JSON.parse(dismissedHashString);\n            dismissedItemsHash[itemKey] = true;\n            localStorage.setItem(\n                dismissKey,\n                JSON.stringify(dismissedItemsHash)\n            );\n        } catch {\n            localStorage.setItem(\n                dismissKey,\n                JSON.stringify({ [itemKey]: true })\n            );\n        }\n        setDismiss(true);\n    }, [setDismiss, itemKey, profile, forCurrentUser]);\n\n    // update state when authorized user was changed\n    useEffect(() => {\n        if (profile?.id !== undefined) {\n            setDismiss(getValue());\n        }\n    }, [profile, setDismiss, getValue]);\n\n    return [isDismissed, onDismissHandler];\n};\n","import { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Label } from '../../../constants/interfaces/Label';\nimport { isEqual } from 'lodash';\n\nexport interface LabelsState {\n    open: boolean;\n    data?: PaginationResult<Label>;\n    fullList?: PaginationResult<Label>;\n    collapseLabels: number[];\n    assignedLabels: number[];\n    collapseAssignLabels: number[];\n    selected: number[];\n    searchResults?: number[];\n    selectedModified: boolean;\n    totalCount?: number;\n    loading?: boolean;\n    saveLoading?: boolean;\n    error?: string;\n    previouslyAssignedLabels?: number[];\n}\n\nexport type LabelsStateSelector = (state: any) => LabelsState;\n\nexport const LabelsStateSelectorContext = React.createContext<\n    LabelsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useLabelsState(): LabelsState {\n    return useSelector(useContext(LabelsStateSelectorContext), isEqual);\n}\n\nexport interface EditingLabels {\n    id?: number | null;\n    mode?: 'edit' | 'new';\n}\n\nexport interface LabelsConfigState {\n    searchTerm: string;\n    editingLabels?: EditingLabels;\n    error?: string;\n}\n\nexport type LabelsConfigStateSelector = (state: any) => LabelsConfigState;\n\nexport const LabelsConfigStateSelectorContext = React.createContext<\n    LabelsConfigStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useLabelsConfigState(): LabelsConfigState {\n    return useSelector(useContext(LabelsConfigStateSelectorContext));\n}\n\nexport interface UpdatedLabelsState {\n    data?: Label;\n    updateType?: 'create' | 'update' | 'delete';\n    loading?: boolean;\n}\n\nexport type UpdatedLabelsStateSelector = (state: any) => UpdatedLabelsState;\n\nexport const UpdatedLabelsStateSelectorContext = React.createContext<\n    UpdatedLabelsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useUpdatedLabelsState(): UpdatedLabelsState {\n    return useSelector(useContext(UpdatedLabelsStateSelectorContext));\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Checked = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 5 4\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"none\"\n                    fillRule=\"evenodd\"\n                    stroke=\"currentColor\"\n                    strokeLinecap=\"round\"\n                    d=\"M176 164.456L177.712 166 180 163\"\n                    transform=\"translate(-176 -163)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Checked;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Dash = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 6 1\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"none\"\n                    fillRule=\"evenodd\"\n                    stroke=\"currentColor\"\n                    strokeLinecap=\"round\"\n                    d=\"M4 6.5L8 6.5\"\n                    transform=\"translate(-3 -6)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Dash;\n","import { FC, ChangeEvent, CSSProperties, ReactElement } from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../theme/variables';\nimport Checked from '../../icons/Checked';\nimport Dash from '../../icons/Dash';\n\nconst checkboxSize = 20;\n\nconst COLORS = {\n    background: Variables.Colors.white,\n    checkedBackground: Variables.Colors.darkSkyBlue,\n    checkedColor: Variables.Colors.white,\n    borderColor: Variables.Colors.iconGrayBg,\n    partial: {\n        checkedBackground: Variables.Colors.steelGrey,\n    },\n    disabled: {\n        background: Variables.Colors.lightBlueGray,\n        checkedBackground: Variables.Colors.iconGrayBg,\n        checkedColor: Variables.Colors.white,\n    },\n};\n\nconst StyledWrapper = styled.label<{ disabled?: boolean }>`\n    display: flex;\n    flex-direction: row-reverse;\n    align-items: center;\n    cursor: pointer;\n    ${props => props.disabled && 'pointer-events: none'}\n`;\n\nconst StyledLabel = styled.div<{\n    color?: string;\n    weight?: string;\n    size?: number;\n}>`\n    font-size: ${props => (!!props.size ? props.size : 13)}px;\n    margin-left: 8px;\n    color: ${props => (props.color ? props.color : Variables.Colors.labelGray)};\n    font-weight: ${props => (props.weight ? props.weight : 'normal')};\n`;\n\nconst SelectedIconContainer = styled.div<{ size: number; marginLeft?: string }>`\n    width: ${props => props.size}px;\n    max-width: 12px;\n    display: flex;\n    color: ${props => props.theme.Colors.white};\n    ${props => !!props.marginLeft && `margin-left: ${props.marginLeft};`}\n`;\n\nconst PartialIconContainer = styled.div`\n    height: 1px;\n    min-width: 4px;\n    display: flex;\n    color: ${props => props.theme.Colors.white};\n`;\n\nconst HiddenCheckbox = styled.input`\n    visibility: hidden;\n    position: absolute;\n`;\n\nconst StyledCheckbox = styled.div<{\n    color?: string;\n    background?: string;\n    size: number;\n    checked?: boolean;\n    disabled?: boolean;\n}>`\n    cursor: pointer;\n    height: ${props => props.size}px;\n    width: ${props => props.size}px;\n    border: ${({ disabled, checked }) => (disabled && checked ? 0 : 1)}px solid\n        ${props =>\n            props.disabled\n                ? props.theme.Colors.lightBlueGray\n                : props.checked\n                ? props.background\n                : props.theme.Colors.cloudyBlue};\n    border-radius: 2px;\n    background: ${props => props.background};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    flex-shrink: 0;\n`;\n\nexport const Checkbox: FC<{\n    checked: boolean;\n    partial?: boolean;\n    handleChange: (e: ChangeEvent<HTMLInputElement>) => void;\n    disabled?: boolean;\n    label?: ReactElement | string;\n    color?: string;\n    background?: string;\n    border?: string;\n    size?: number;\n    fontColor?: string;\n    fontWeight?: string;\n    fontSize?: number;\n    className?: string;\n    labelStyles?: CSSProperties;\n    checkedBackground?: string;\n    disabledCheckedBackground?: string;\n    checkboxMarginLeft?: string;\n    dataTest?: string;\n}> = ({\n    checked,\n    disabled,\n    handleChange,\n    label,\n    background,\n    border,\n    size,\n    partial,\n    fontColor,\n    fontWeight,\n    fontSize,\n    className,\n    labelStyles,\n    checkedBackground,\n    disabledCheckedBackground,\n    checkboxMarginLeft,\n    dataTest,\n}) => {\n    return (\n        <StyledWrapper className={className} disabled={disabled}>\n            <HiddenCheckbox\n                type=\"checkbox\"\n                checked={checked}\n                onChange={e => {\n                    handleChange(e);\n                }}\n                data-test={\n                    dataTest\n                    && `${dataTest}${partial ? '-partially-checked' : (checked ? '-checked' : '')}`\n                }\n            />\n            {label && (\n                <StyledLabel\n                    color={fontColor}\n                    weight={fontWeight}\n                    size={fontSize}\n                    style={labelStyles}\n                    data-test={dataTest && `${dataTest}-label`}\n                >\n                    {label}\n                </StyledLabel>\n            )}\n            <StyledCheckbox\n                size={size ? size : checkboxSize}\n                checked={checked}\n                background={\n                    checked\n                        ? partial\n                            ? border || COLORS.partial.checkedBackground\n                            : disabled\n                                ? (disabledCheckedBackground ?? COLORS.checkedBackground)\n                                : (checkedBackground ?? COLORS.checkedBackground)\n                        : background || COLORS.background\n                }\n                disabled={disabled}\n                data-test={dataTest && `${dataTest}-view`}\n            >\n                {checked ? (\n                    partial ? (\n                        <PartialIconContainer>\n                            <Dash />\n                        </PartialIconContainer>\n                    ) : (\n                        <SelectedIconContainer\n                            size={size ? size / 2 : 7}\n                            marginLeft={checkboxMarginLeft}\n                        >\n                            <Checked />\n                        </SelectedIconContainer>\n                    )\n                ) : (\n                    ''\n                )}\n            </StyledCheckbox>\n        </StyledWrapper>\n    );\n};\n\nexport default Checkbox;\n","import styled from 'styled-components';\n\nexport const Wrapper = styled.div<{\n    withoutBorder?: boolean;\n}>`\n    position: relative;\n    padding: ${props => (props.withoutBorder ? `0px` : `28px 24px 24px 24px`)};\n    border: solid ${props => (props.withoutBorder ? `0px` : `1px`)} ${props => props.theme.Colors.paleGrey};  \n    border-radius: ${props => (props.withoutBorder ? `0px` : `4px`)};\n    background-color: inherit;\n    width: 100%;\n    ${props =>\n        props.withoutBorder &&\n        `border-bottom: solid 1px ${props.theme.Colors.paleGrey};`}\n`;\n\nexport const Title = styled.span`\n    font-size: 13px;\n    font-weight: 500;\n    position: absolute;\n    top: -10px;\n    left: 18px;\n    z-index: 1;\n    padding: 0 6px;\n    font-weight: bold;\n    background-color: inherit;\n    color: ${props => props.theme.Colors.black};\n`;\n","import { FC, memo } from 'react';\n\nimport { Title, Wrapper } from './style';\nimport { FieldSetProps } from './type';\n\nconst Fieldset: FC<FieldSetProps> = ({\n    children,\n    title,\n    withoutBorder,\n    dataTest,\n}) => {\n    return (\n        <Wrapper withoutBorder={withoutBorder} data-test={dataTest}>\n            {title && <Title data-test={`${dataTest}-title`}>{title}</Title>}\n            {children}\n        </Wrapper>\n    );\n};\n\nexport default memo(Fieldset);","import { useSelector } from 'react-redux';\n\nimport { useWithLabelsContext } from './context/useWithLabelsContext';\nimport { LabelsState } from './reducer';\nimport { DEFAULT_LABELS_SCOPE } from './scopes';\n\nexport const useLabelsState = (): LabelsState => {\n    const { reducerName, scope } = useWithLabelsContext();\n    const appState = useSelector(state => state);\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithLabelsContext.Provider props'\n        );\n    }\n\n    const labelsState: LabelsState | undefined =\n        // @ts-ignore\n        // TODO implement `_labels?: LabelsState` field into each reducer (create general type)\n        // interface GeneralReducer {\n        //     _labels?: StateWithLabels;\n        //     _practisSets?: StateWithPractisSets;\n        // }\n        appState[reducerName]?._labels?.[scope || DEFAULT_LABELS_SCOPE];\n\n    if (!labelsState) {\n        throw new Error(\n            `Wrap your reducer ${reducerName} via \"withLabelsReducer\" HOR`\n        );\n    }\n\n    return labelsState;\n};\n","import { Label } from '../../../constants/interfaces/Label';\nimport { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { EditingLabels } from './states';\n\nexport enum ACTIONS {\n    OPEN_LABEL_CREATION_PANEL = 'OPEN_LABEL_CREATION_PANEL',\n    CLOSE_LABEL_CREATION_PANEL = 'CLOSE_LABEL_CREATION_PANEL',\n\n    SET_EDITING_LABEL = 'ADDING_LABELS',\n    SET_LABELS_SEARCH_TERM = 'SET_LABELS_SEARCH_TERM',\n\n    TOGGLE_COLLAPSE_LABEL_FIELD = 'TOGGLE_COLLAPSE_LABEL_FIELD',\n    EXPAND_LABEL_FIELD_BY_ID = 'EXPAND_LABEL_FIELD_BY_ID',\n\n    COLLAPSE_ALL_LABELS = 'COLLAPSE_ALL_LABELS',\n    EXPAND_ALL_LABELS = 'EXPAND_ALL_LABELS',\n    EXPAND_MULTIPLE_LABELS = 'EXPAND_MULTIPLE_LABELS',\n\n    COLLAPSE_ALL_TABLE_LABELS = 'COLLAPSE_ALL_TABLE_LABELS',\n\n    SELECT_LABEL_FILTER = 'SELECT_LABEL_FILTER',\n    SET_LABEL_FILTERS = 'SET_LABEL_FILTERS',\n    CLEAR_LABEL_FILTERS = 'CLEAR_LABEL_FILTERS',\n\n    SET_ASSIGN_LABELS = 'SET_ASSIGN_LABELS',\n    CLEAR_ASSIGN_LABELS = 'CLEAR_ASSIGN_LABELS',\n    TOGGLE_COLLAPSE_ASSIGN_LABEL_FIELD = 'TOGGLE_COLLAPSE_ASSIGN_LABEL_FIELD',\n\n    SAVE_LABEL_FILTERS_START = 'SAVE_LABEL_FILTERS_START',\n    SAVE_LABEL_FILTERS_SUCCESS = 'SAVE_LABEL_FILTERS_SUCCESS',\n    SAVE_LABEL_FILTERS_FAILURE = 'SAVE_LABEL_FILTERS_FAILURE',\n\n    SEARCH_LABELS_START = 'SEARCH_LABELS_START',\n    SEARCH_LABELS_SUCCESS = 'SEARCH_LABELS_SUCCESS',\n    SEARCH_LABELS_FAILURE = 'SEARCH_LABELS_FAILURE',\n\n    FETCH_FULL_LABELS_LIST_START = 'FETCH_FULL_LABELS_LIST_START',\n    FETCH_FULL_LABELS_LIST_SUCCESS = 'FETCH_FULL_LABELS_LIST_SUCCESS',\n    FETCH_FULL_LABELS_LIST_FAILURE = 'FETCH_FULL_LABELS_LIST_FAILURE',\n\n    UPDATE_LABEL_START = 'UPDATE_LABEL_START',\n    UPDATE_LABEL_SUCCESS = 'UPDATE_LABEL_SUCCESS',\n    UPDATE_LABEL_FAILURE = 'UPDATE_LABEL_FAILURE',\n\n    MODIFY_LABEL_NAME = 'MODIFY_LABEL_NAME',\n\n    SET_PREVIOUSLY_ASSIGNED_LABELS = 'SET_PREVIOUSLY_ASSIGNED_LABELS',\n}\n\nexport function selectLabelFilterAction(labelId: number) {\n    return {\n        type: ACTIONS.SELECT_LABEL_FILTER as ACTIONS.SELECT_LABEL_FILTER,\n        labelId,\n    };\n}\n\nexport function setPreviouslyAssignedLabels(labels: number[]) {\n    return {\n        type: ACTIONS.SET_PREVIOUSLY_ASSIGNED_LABELS as ACTIONS.SET_PREVIOUSLY_ASSIGNED_LABELS,\n        labels,\n    };\n}\n\nexport function setLabelFilterAction(labels: number[]) {\n    return {\n        type: ACTIONS.SET_LABEL_FILTERS as ACTIONS.SET_LABEL_FILTERS,\n        labels,\n    };\n}\n\nexport function clearLabelFilterAction() {\n    return {\n        type: ACTIONS.CLEAR_LABEL_FILTERS as ACTIONS.CLEAR_LABEL_FILTERS,\n    };\n}\n\nexport function setAssignLabelsAction(labels: number[]) {\n    return {\n        type: ACTIONS.SET_ASSIGN_LABELS as ACTIONS.SET_ASSIGN_LABELS,\n        labels,\n    };\n}\n\nexport function clearAssignLabelsAction() {\n    return {\n        type: ACTIONS.CLEAR_ASSIGN_LABELS as ACTIONS.CLEAR_ASSIGN_LABELS,\n    };\n}\n\nexport function saveLabelFiltersStart(filters: number[] | null) {\n    return {\n        type: ACTIONS.SAVE_LABEL_FILTERS_START as ACTIONS.SAVE_LABEL_FILTERS_START,\n        filters,\n    };\n}\n\nexport function saveLabelFiltersSuccess(filters: number[] | null) {\n    return {\n        type: ACTIONS.SAVE_LABEL_FILTERS_SUCCESS as ACTIONS.SAVE_LABEL_FILTERS_SUCCESS,\n        filters,\n    };\n}\n\nexport function saveLabelFiltersFailure(error: string) {\n    return {\n        type: ACTIONS.SAVE_LABEL_FILTERS_FAILURE as ACTIONS.SAVE_LABEL_FILTERS_FAILURE,\n        error,\n    };\n}\n\nexport function toggleCollapseLabelFieldAction(labelId: number) {\n    return {\n        type: ACTIONS.TOGGLE_COLLAPSE_LABEL_FIELD as ACTIONS.TOGGLE_COLLAPSE_LABEL_FIELD,\n        labelId,\n    };\n}\n\nexport function toggleCollapseAssignLabelFieldAction(labelId: number) {\n    return {\n        type: ACTIONS.TOGGLE_COLLAPSE_ASSIGN_LABEL_FIELD as ACTIONS.TOGGLE_COLLAPSE_ASSIGN_LABEL_FIELD,\n        labelId,\n    };\n}\n\nexport function expandLabelFieldByIdAction(labelId: number) {\n    return {\n        type: ACTIONS.EXPAND_LABEL_FIELD_BY_ID as ACTIONS.EXPAND_LABEL_FIELD_BY_ID,\n        labelId,\n    };\n}\n\nexport function collapseAllLabelsAction() {\n    return {\n        type: ACTIONS.COLLAPSE_ALL_LABELS as ACTIONS.COLLAPSE_ALL_LABELS,\n    };\n}\n\nexport function collapseAllTableLabelsAction() {\n    return {\n        type: ACTIONS.COLLAPSE_ALL_TABLE_LABELS as ACTIONS.COLLAPSE_ALL_TABLE_LABELS,\n    };\n}\n\nexport function expandAllLabelsAction() {\n    return {\n        type: ACTIONS.EXPAND_ALL_LABELS as ACTIONS.EXPAND_ALL_LABELS,\n    };\n}\n\nexport function expandMultipleLabelsAction(labelIds: number[]) {\n    return {\n        type: ACTIONS.EXPAND_MULTIPLE_LABELS as ACTIONS.EXPAND_MULTIPLE_LABELS,\n        labelIds,\n    };\n}\n\nexport function modifyLabelNameAction(labelId: number, value: string) {\n    return {\n        type: ACTIONS.MODIFY_LABEL_NAME as ACTIONS.MODIFY_LABEL_NAME,\n        labelId,\n        value,\n    };\n}\n\nexport function setEditingLabelAction(configs?: EditingLabels) {\n    return {\n        type: ACTIONS.SET_EDITING_LABEL as ACTIONS.SET_EDITING_LABEL,\n        configs,\n    };\n}\n\nexport function setLabelsSearchTerm(value: string) {\n    return {\n        type: ACTIONS.SET_LABELS_SEARCH_TERM as ACTIONS.SET_LABELS_SEARCH_TERM,\n        value,\n    };\n}\n\nexport function openLabelCreationPanelAction() {\n    return {\n        type: ACTIONS.OPEN_LABEL_CREATION_PANEL as ACTIONS.OPEN_LABEL_CREATION_PANEL,\n    };\n}\n\nexport function closeLabelCreationPanelAction() {\n    return {\n        type: ACTIONS.CLOSE_LABEL_CREATION_PANEL as ACTIONS.CLOSE_LABEL_CREATION_PANEL,\n    };\n}\n\nexport function searchLabelsStart() {\n    return {\n        type: ACTIONS.SEARCH_LABELS_START as ACTIONS.SEARCH_LABELS_START,\n    };\n}\n\nexport function searchLabelsSuccess(\n    data: PaginationResult<Label>,\n    searchTerm?: boolean\n) {\n    return {\n        type: ACTIONS.SEARCH_LABELS_SUCCESS as ACTIONS.SEARCH_LABELS_SUCCESS,\n        data,\n        searchTerm,\n    };\n}\n\nexport function searchLabelsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_LABELS_FAILURE as ACTIONS.SEARCH_LABELS_FAILURE,\n        error,\n    };\n}\n\nexport function fetchFullLabelsListStart() {\n    return {\n        type: ACTIONS.FETCH_FULL_LABELS_LIST_START as ACTIONS.FETCH_FULL_LABELS_LIST_START,\n    };\n}\n\nexport function fetchFullLabelsListSuccess(data: PaginationResult<Label>) {\n    return {\n        type: ACTIONS.FETCH_FULL_LABELS_LIST_SUCCESS as ACTIONS.FETCH_FULL_LABELS_LIST_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchFullLabelsListFailure(error: string) {\n    return {\n        type: ACTIONS.FETCH_FULL_LABELS_LIST_FAILURE as ACTIONS.FETCH_FULL_LABELS_LIST_FAILURE,\n        error,\n    };\n}\n\nexport function updateLabelStart() {\n    return {\n        type: ACTIONS.UPDATE_LABEL_START as ACTIONS.UPDATE_LABEL_START,\n    };\n}\n\nexport function updateLabelSuccess(\n    updatedLabel: Label,\n    updateType: 'create' | 'update' | 'delete'\n) {\n    return {\n        type: ACTIONS.UPDATE_LABEL_SUCCESS as ACTIONS.UPDATE_LABEL_SUCCESS,\n        updatedLabel,\n        updateType,\n    };\n}\n\nexport function updateLabelFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_LABEL_FAILURE as ACTIONS.UPDATE_LABEL_FAILURE,\n        error,\n    };\n}\n","import equal from 'deep-equal';\r\nimport { useCallback, useState } from 'react';\r\nimport { toggleItemInArray } from '../../helpers/functions/array-helpers';\r\nimport { escapeRegExp } from '../../helpers/functions/escape-reg-exp';\r\n\r\nexport interface SearchParams {\r\n    searchTerm: string;\r\n    companyId?: number;\r\n    teamId?: string | number;\r\n    teamIds?: number[];\r\n    teamLeadIds?: number[];\r\n    labelIDs?: number[];\r\n    practisSetIDs?: number[];\r\n    roleIDs?: number[];\r\n    invitersIDs?: number[];\r\n    filters?: { field: string; value: string | string[] | number | number[] | boolean }[];\r\n    filterByStatus?: string[] | null;\r\n    filterByRegistrationStatus?: string[] | null;\r\n    completion?: string;\r\n    filterByStatusValue?: string;\r\n    practisSetId?: number;\r\n    orderBy: {\r\n        field?: string;\r\n        asc?: boolean;\r\n    } | null;\r\n    limit?: number;\r\n    offset: number;\r\n    totalCount?: number;\r\n    count?: number;\r\n    numberOfPages: number;\r\n    refreshRate?: number;\r\n    startDate?: string;\r\n    endDate?: string;\r\n    scenarioIds?: number[];\r\n    userId?: string | number;\r\n    filterByDueDate?: string[] | null;\r\n    customFilters?: object;\r\n}\r\n\r\nexport interface SearchQuery {\r\n    searchTerm: string;\r\n}\r\n\r\nfunction ifChanged(\r\n    prevSearchParams: SearchParams,\r\n    newSearchParams: SearchParams\r\n) {\r\n    return equal(prevSearchParams, newSearchParams)\r\n        ? prevSearchParams\r\n        : newSearchParams;\r\n}\r\n\r\nexport const ALL_FILTER_NAME = 'All';\r\nexport const ALL_FILTER_VALUE = '--all--';\r\n\r\nconst ENROLLMENT_OPTIONS = {\r\n    [ALL_FILTER_VALUE]: ['ENROLLED', 'PENDING', 'COMPLETED', 'IN_PROGRESS'],\r\n    PENDING: ['PENDING'],\r\n    ENROLLED: ['ENROLLED'],\r\n    COMPLETED: ['COMPLETED'],\r\n    IN_PROGRESS: ['IN_PROGRESS'],\r\n};\r\n\r\nconst COMPLETION_OPTIONS = {\r\n    [ALL_FILTER_VALUE]: '',\r\n    Complete: 'Complete',\r\n    Incomplete: 'Incomplete',\r\n};\r\n\r\nexport function useSearchParams(\r\n    searchParams: SearchParams,\r\n    setSearchParams: (value: (prevState: SearchParams) => SearchParams) => void\r\n) {\r\n    const setSearchTerm = useCallback(\r\n        (searchTerm: string) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    searchTerm,\r\n                    offset: 0,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setFilter = useCallback(\r\n        (filter: {\r\n            field: string;\r\n            value: string | number | string[] | number[] | boolean;\r\n        }) =>\r\n            setSearchParams(prevSearchParams => {\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    filters: [\r\n                        ...(prevSearchParams.filters\r\n                            ? prevSearchParams.filters.filter(\r\n                                  f => f.field !== filter.field\r\n                              )\r\n                            : []),\r\n                        ...(filter.value === ALL_FILTER_VALUE ? [] : [filter]),\r\n                    ].filter(\r\n                        filter =>\r\n                            !Array.isArray(filter.value) ||\r\n                            filter.value.length > 0\r\n                    ), // TODO: refactor and simplify this logic, remove ALL_FILTER_VALUE when no longer needed in other places\r\n                    offset: 0,\r\n                });\r\n            }),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setOverrideFilter = useCallback(\r\n        (filter: { field: string; value: string | number }) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    filters: [\r\n                        ...(filter.value === ALL_FILTER_VALUE ? [] : [filter]), //TODO: remove ALL_FILTER_VALUE when not needed\r\n                    ],\r\n                    offset: 0,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setMultipleFilter = useCallback(\r\n        (filter: {\r\n            field: string;\r\n            value: string | number | string[] | number[] | boolean;\r\n        }) => {\r\n            setSearchParams(prevSearchParams => {\r\n                const prevMatchedFieldFilters = JSON.parse(\r\n                    JSON.stringify(\r\n                        prevSearchParams.filters\r\n                            ? prevSearchParams.filters.filter(\r\n                                  f => f.field === filter.field\r\n                              )\r\n                            : []\r\n                    )\r\n                );\r\n\r\n                const newMatchedFieldValues =\r\n                    prevMatchedFieldFilters && prevMatchedFieldFilters[0]\r\n                        ? prevMatchedFieldFilters[0]['value']\r\n                        : [];\r\n\r\n                const newFilters = {\r\n                    field: filter.field,\r\n                    value: toggleItemInArray(\r\n                        newMatchedFieldValues,\r\n                        filter.value\r\n                    ),\r\n                };\r\n\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    filters: [\r\n                        ...(prevSearchParams.filters\r\n                            ? prevSearchParams.filters.filter(\r\n                                  f => f.field !== filter.field\r\n                              )\r\n                            : []),\r\n                        ...(newFilters.value.length > 0 ? [newFilters] : []),\r\n                    ],\r\n                    offset: 0,\r\n                });\r\n            });\r\n        },\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setFilterByStatus = useCallback(\r\n        (filterByStatus: 'ENROLLED' | 'PENDING' | typeof ALL_FILTER_VALUE) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    filterByStatus: ENROLLMENT_OPTIONS[filterByStatus],\r\n                    filterByStatusValue: filterByStatus,\r\n                    offset: 0,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setCompletion = useCallback(\r\n        (\r\n            completionStatus:\r\n                | 'Complete'\r\n                | 'Incomplete'\r\n                | typeof ALL_FILTER_VALUE\r\n        ) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    completion:\r\n                        completionStatus === ALL_FILTER_VALUE\r\n                            ? ''\r\n                            : COMPLETION_OPTIONS[completionStatus],\r\n                    offset: 0,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setOrderBy = useCallback(\r\n        (field: string) =>\r\n            setSearchParams(prevSearchParams => {\r\n                const prevOrderBy = prevSearchParams.orderBy;\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    orderBy: prevOrderBy\r\n                        ? {\r\n                              ...prevOrderBy,\r\n                              field,\r\n                              asc:\r\n                                  field === prevOrderBy.field\r\n                                      ? !prevOrderBy.asc\r\n                                      : true,\r\n                          }\r\n                        : {\r\n                              field,\r\n                              asc: true,\r\n                          },\r\n                    offset: 0,\r\n                });\r\n            }),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setLabelIDs = useCallback(\r\n        (labels: number[]) =>\r\n            setSearchParams(prevSearchParams => {\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    labelIDs: labels,\r\n                });\r\n            }),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setPractisSetIDs = useCallback(\r\n        (practisSets: number[]) =>\r\n            setSearchParams(prevSearchParams => {\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    practisSetIDs: practisSets,\r\n                });\r\n            }),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setRoleIDs = useCallback(\r\n        (roles: number[]) =>\r\n            setSearchParams(prevSearchParams => {\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    roleIDs: roles,\r\n                });\r\n            }),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setTeamIDs = useCallback(\r\n        (teams: number[]) =>\r\n            setSearchParams(prevSearchParams => {\r\n                return ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    teamIds: teams,\r\n                });\r\n            }),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setLimit = useCallback(\r\n        (limit: number) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    limit,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setOffset = useCallback(\r\n        (offset: number) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    offset,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const setCustom = useCallback(\r\n        (name: keyof SearchParams, value: any) =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, {\r\n                    ...prevSearchParams,\r\n                    [name]: value,\r\n                    offset: 0,\r\n                })\r\n            ),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const getFilterByValue = useCallback(\r\n        (field?: string) => {\r\n            if (\r\n                searchParams &&\r\n                searchParams.filters &&\r\n                searchParams.filters.length\r\n            ) {\r\n                if (!field) {\r\n                    return (\r\n                        searchParams.filters[0] && searchParams.filters[0].value\r\n                    );\r\n                }\r\n\r\n                const filterValue = searchParams.filters.filter(\r\n                    filter => field === filter.field\r\n                )[0];\r\n\r\n                return !!filterValue ? filterValue.value : null;\r\n            }\r\n            return;\r\n        },\r\n        [searchParams]\r\n    );\r\n\r\n    const getCompletionValue = useCallback(() => {\r\n        return searchParams.completion;\r\n    }, [searchParams]);\r\n\r\n    const refreshSearchParams = useCallback(\r\n        () =>\r\n            setSearchParams(prevSearchParams => ({\r\n                ...prevSearchParams,\r\n                offset: 0,\r\n                refreshRate: Math.random(),\r\n            })),\r\n        [setSearchParams]\r\n    );\r\n\r\n    const applyLocalSearch = useCallback(\r\n        <T extends { [key: string]: any }>(fields: string[], data: T[]) => {\r\n            if (searchParams.searchTerm.length < 1) return data;\r\n            return data.filter((item: { [key: string]: number | string }) => {\r\n                if (fields.includes('firstName') && fields.includes('lastName')) {\r\n                    return (\r\n                        item['firstName'] && item['lastName'] &&\r\n                         new RegExp(\r\n                            escapeRegExp(\r\n                                searchParams.searchTerm\r\n                            ).trim().toLowerCase()\r\n                        ).test(`${item['firstName']} ${item['lastName']}`.trim().toLowerCase())\r\n                    );\r\n                }\r\n                \r\n                return fields\r\n                    .map((field: string) => {\r\n                        return (\r\n                            item[field] &&\r\n                             new RegExp(\r\n                                escapeRegExp(\r\n                                    searchParams.searchTerm\r\n                                ).toLowerCase()\r\n                            ).test(item[field].toString().toLowerCase())\r\n                        );\r\n                    })\r\n                    .reduce((a, b) => a || b);\r\n            });\r\n        },\r\n        [searchParams.searchTerm]\r\n    );\r\n\r\n    const applyLocalFiltering = useCallback(\r\n        <T extends { [key: string]: any }>(\r\n            fields: ('practisSetIDs' | 'labelIDs' | 'roleIDs')[],\r\n            data: T[],\r\n            statusFilter?: any[] | null,\r\n            filterLength?: number | null,\r\n            labelFilterLength?: number | null\r\n        ) => { \r\n            let filteredData: T[] = data;\r\n            for (let field of fields) {\r\n                const filterParam =\r\n                    (searchParams[field] && searchParams[field]) || [];       \r\n                if (field === 'roleIDs') {\r\n                    if (filterParam.length > 0) {\r\n                        filteredData = filteredData.filter(item => {\r\n                            return (\r\n                                item.roleId && filterParam.includes(item.roleId)\r\n                            );\r\n                        });\r\n                    }\r\n                } else {\r\n                    if (filterParam.length > 0) {\r\n                            filteredData = filteredData.filter(item => {\r\n                                return filterParam.some(id => {\r\n                                    return (\r\n                                        item[field] && item[field].indexOf(id) >= 0\r\n                                    );\r\n                                });\r\n                            });\r\n                    }\r\n                }\r\n\r\n                if(statusFilter && filterLength){\r\n                    if(labelFilterLength){\r\n                        filteredData = filteredData.filter(item => {\r\n                            return filterParam.some(id => {\r\n                                return (\r\n                                    item[field] && item[field].indexOf(id) >= 0\r\n                                );\r\n                            });\r\n                        }).filter(item => statusFilter!.includes(item.status))\r\n                    } else {\r\n                        filteredData = filteredData.filter(item => statusFilter.includes(item.status))\r\n                    }\r\n                } else if (!filterLength){\r\n                //   filteredData = data;\r\n                }\r\n\r\n            }\r\n\r\n          \r\n            return filteredData;\r\n        },\r\n        [searchParams]\r\n    );\r\n\r\n    type sortFieldValues<T extends string> = {\r\n        [field in T]: string;\r\n    };\r\n\r\n    const applyLocalSorting = useCallback(\r\n        <T extends { [key: string]: any }>(\r\n            mapItems: sortFieldValues<string>,\r\n            data: T[]\r\n        ) => {\r\n            let sortableItems = [...data];\r\n            if (searchParams.orderBy && searchParams.orderBy.field) {\r\n                const sortKey = searchParams.orderBy.field;\r\n                const sortDirection = searchParams.orderBy.asc;\r\n\r\n                sortableItems.sort((first, second) => {\r\n                    const a = first[mapItems[sortKey]];\r\n                    const b = second[mapItems[sortKey]];\r\n\r\n                    if (a !== Boolean(a)) {\r\n                        if (a === b) {\r\n                            return 0;\r\n                        } else if (!a) {\r\n                            return 1;\r\n                        } else if (!b) {\r\n                            return -1;\r\n                        }\r\n                    }\r\n\r\n                    if (sortDirection) {\r\n                        return a < b ? -1 : 1;\r\n                    } else {\r\n                        return a < b ? 1 : -1;\r\n                    }\r\n                });\r\n            }\r\n            return sortableItems;\r\n        },\r\n        [searchParams.orderBy]\r\n    );\r\n\r\n    return {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setFilter,\r\n        setOverrideFilter,\r\n        setMultipleFilter,\r\n        setFilterByStatus,\r\n        setCompletion,\r\n        setOrderBy,\r\n        setLabelIDs,\r\n        setPractisSetIDs,\r\n        setRoleIDs,\r\n        setTeamIDs,\r\n        setLimit,\r\n        setOffset,\r\n        setCustom,\r\n        refreshSearchParams,\r\n        getFilterByValue,\r\n        getCompletionValue,\r\n        applyLocalSearch,\r\n        applyLocalFiltering,\r\n        applyLocalSorting,\r\n    };\r\n}\r\n\r\nexport function useSearchParamsState(initialSearchParams: SearchParams) {\r\n    const [searchParams, setSearchParams] = useState(initialSearchParams);\r\n\r\n    const setInitial = useCallback(\r\n        () =>\r\n            setSearchParams(prevSearchParams =>\r\n                ifChanged(prevSearchParams, initialSearchParams)\r\n            ),\r\n        [setSearchParams, initialSearchParams]\r\n    );\r\n\r\n    return {\r\n        ...useSearchParams(searchParams, setSearchParams),\r\n        setInitial,\r\n    };\r\n}\r\n","import {\n    ACTIONS,\n    COMPANY_INFO,\n    COMPANY_INFO_FAILURE,\n    COMPANY_INFO_SUCCESS,\n    loadVoiceSettingsFailure,\n    loadVoiceSettingsStart,\n    loadVoiceSettingsSuccess,\n    RESET_COMPANY_INFORMATION,\n    fetchCompanyAdminsStart,\n    fetchCompanyAdminsSuccess,\n    fetchCompanyAdminsFailure,\n    fetchCompanyUserStatsStart,\n    fetchCompanyUserStatsSuccess,\n    fetchCompanyUserStatsFailure,\n    clearCompanyAdmins,\n} from './actions';\nimport { AppState } from '../../../store/reducers';\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\nimport { Reducer } from 'redux';\nimport {\n    CompanyVoiceSettingsState,\n    CompanyAdminsState,\n    CompanyUserStatsState,\n} from './states';\n\nexport interface CompanyProfileInterface {\n    info: CompanyInterface;\n    isLoading?: boolean;\n    error?: string;\n}\n\nconst initialState: any = {\n    info: {},\n    isLoading: false,\n    error: '',\n};\n\nconst companyProfileReducer = (state = initialState, action: any) => {\n    switch (action.type) {\n        case COMPANY_INFO:\n            return {\n                ...state,\n                isLoading: true,\n                error: null,\n            };\n        case COMPANY_INFO_SUCCESS:\n            return {\n                info: {\n                    ...action.data,\n                },\n                isLoading: false,\n                error: null,\n            };\n        case COMPANY_INFO_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error,\n            };\n        case RESET_COMPANY_INFORMATION:\n            return {\n                ...initialState,\n            };\n        default:\n            return state;\n    }\n};\n\nexport const getCompanyState = (state: AppState) => state.company.info;\nexport const getCompanyLoading = (state: AppState) => state.company.isLoading;\nexport const getCompanyError = (state: AppState) => state.company.error;\n\nexport default companyProfileReducer;\n\nconst initialCompanyVoiceSettingsState: CompanyVoiceSettingsState = {\n    data: [],\n    loading: false,\n};\n\nexport type CompanyVoiceSettingsAction =\n    | ReturnType<typeof loadVoiceSettingsStart>\n    | ReturnType<typeof loadVoiceSettingsSuccess>\n    | ReturnType<typeof loadVoiceSettingsFailure>;\n\nexport const companyVoiceSettingsReducer: Reducer<\n    CompanyVoiceSettingsState,\n    CompanyVoiceSettingsAction\n> = (\n    state = initialCompanyVoiceSettingsState,\n    action: CompanyVoiceSettingsAction\n): CompanyVoiceSettingsState => {\n    switch (action.type) {\n        case ACTIONS.LOAD_VOICE_SETTINGS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.LOAD_VOICE_SETTINGS_SUCCESS:\n            return {\n                ...state,\n                data: action.voiceSettings,\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.LOAD_VOICE_SETTINGS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        default:\n            return state;\n    }\n};\n\nconst initialCompanyAdminsState: CompanyAdminsState = {\n    data: undefined,\n    loading: false,\n    error: ''\n};\n\nexport type companyAdminsAction =\n    | ReturnType<typeof fetchCompanyAdminsStart>\n    | ReturnType<typeof fetchCompanyAdminsSuccess>\n    | ReturnType<typeof fetchCompanyAdminsFailure>\n    | ReturnType<typeof clearCompanyAdmins>;\n\nexport const companyAdminsReducer: Reducer<\n    CompanyAdminsState,\n    companyAdminsAction\n> = (\n    state = initialCompanyAdminsState,\n    action: companyAdminsAction\n): CompanyAdminsState => {\n    switch (action.type) {\n        case ACTIONS.FETCH_COMPANY_ADMINS_START:\n            return {\n                ...state,\n                loading: true\n            };\n        case ACTIONS.FETCH_COMPANY_ADMINS_SUCCESS:\n            return {\n                ...state,\n                data: action.data,\n                loading: false,\n                error: ''\n            };\n        case ACTIONS.FETCH_COMPANY_ADMINS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error\n            };\n        case ACTIONS.CLEAR_COMPANY_ADMINS:\n            return initialCompanyAdminsState;\n        default:\n            return state;\n    }\n};\n\nconst initialCompanyUserStatsState: CompanyUserStatsState = {\n    data: undefined,\n    loading: false,\n    error: ''\n};\n\nexport type companyUserStatsAction =\n    | ReturnType<typeof fetchCompanyUserStatsStart>\n    | ReturnType<typeof fetchCompanyUserStatsSuccess>\n    | ReturnType<typeof fetchCompanyUserStatsFailure>;\n\nexport const companyUserStatsReducer: Reducer<\n    CompanyUserStatsState,\n    companyUserStatsAction\n> = (\n    state = initialCompanyUserStatsState,\n    action: companyUserStatsAction\n): CompanyUserStatsState => {\n    switch (action.type) {\n        case ACTIONS.FETCH_COMPANY_USER_STATS_START:\n            return {\n                ...state,\n                loading: true\n            };\n        case ACTIONS.FETCH_COMPANY_USER_STATS_SUCCESS:\n            return {\n                ...state,\n                data: action.data,\n                loading: false,\n                error: ''\n            };\n        case ACTIONS.FETCH_COMPANY_USER_STATS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error\n            };\n        default:\n            return state;\n    }\n};","class StorageClass {\n    storage = localStorage;\n\n    get(key: string) {\n        return this.storage.getItem(key);\n    }\n\n    set(key: string, value: any) {\n        return this.storage.setItem(key, value);\n    }\n\n    clear() {\n        return this.storage.clear();\n    }\n\n    remove(key: string) {\n        return this.storage.removeItem(key);\n    }\n}\nconst Storage = new StorageClass();\nObject.freeze(Storage);\n\nexport default Storage;\n","import styled from 'styled-components';\n\nexport const Divider = styled.hr<{ height?: number; hide?: boolean; width?: string; }>`\n    width: ${props => props.width ?? '100%'};\n    height: ${props => (props.height ? props.height : 1)}px;\n    border: none;\n    margin: 0;\n    flex-shrink: 0;\n    background-color: ${props =>\n        !props.hide ? props.theme.Colors.paleGrey : 'transparent'};\n`;\n","import { FC, memo } from 'react';\n\nimport { Divider } from './style';\nimport { TableDividerProps } from './type';\n\nconst TableDivider: FC<TableDividerProps> = memo(props => {\n    const { height, hide, width} = props;\n\n    return <Divider height={height} hide={hide} width={width} />;\n});\n\nexport default TableDivider;\n","import { useDispatch } from 'react-redux';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    fetchAllDrafts,\n    fetchAllDraftsFailure,\n    fetchAllDraftsSuccess,\n    updateDraftsFailure,\n    updateDraftsStart,\n    updateDraftsSuccess,\n    updateAllSelectedDraftState,\n    updateSelectedDraftState,\n    fetchCreatedByUsersFailure,\n    fetchCreatedByUsersStart,\n    fetchCreatedByUsersSuccess,\n    fetchEditedByUsersFailure,\n    fetchEditedByUsersStart,\n    fetchEditedByUsersSuccess,\n} from '../actions';\nimport {\n    useSearchStagingDraftsApi,\n    useDeleteStagingApi,\n    useSearchCreatedByUsersListApi,\n    useSearchEditedByUsersListApi,\n} from '../../../../api';\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport { Draft } from '../../../../constants/interfaces/Draft';\n\nexport const useSearchDraftsService = () => {\n    const dispatch = useDispatch();\n    const searchStagingApi = useSearchStagingDraftsApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p?: SearchParams) => {\n            dispatch(fetchAllDrafts());\n            searchStagingApi(p)\n                .then(data => {\n                    dispatch(fetchAllDraftsSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchAllDraftsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchStagingApi, showMessage]\n    );\n};\n\nexport const useDeleteStagingService = () => {\n    const dispatch = useDispatch();\n    const deleteStagingApi = useDeleteStagingApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (stagingIds: number[], search?: SearchParams, selectAll?: boolean, successCallback?: () => void) => {\n            dispatch(updateDraftsStart());\n            return deleteStagingApi(stagingIds, search, selectAll)\n                .then(data => {\n                    dispatch(\n                        updateDraftsSuccess(\n                            { id: stagingIds.reduce((a, b) => a + b) } as Draft,\n                            'delete'\n                        )\n                    );\n                    showMessage(\n                        `${\n                            stagingIds.length > 1\n                                ? 'Invitation drafts has been deleted'\n                                : 'Invitation draft has been deleted'\n                        }`,\n                        'success'\n                    );\n\n                    successCallback?.();\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateDraftsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, deleteStagingApi, showMessage]\n    );\n};\n\nexport const useUpdateAllSelectedDraftStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (draftIds: number[], checked: boolean, partial?: boolean) => {\n            dispatch(updateAllSelectedDraftState(draftIds, checked, partial));\n        },\n        [dispatch]\n    );\n};\n\nexport const useUpdateSelectedDraftStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (draftId: number) => {\n            dispatch(updateSelectedDraftState(draftId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSearchCreatedByUsersService = () => {\n    const dispatch = useDispatch();\n    const searchCreatedByUsersListApi = useSearchCreatedByUsersListApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p: Partial<SearchParams>) => {\n            dispatch(fetchCreatedByUsersStart());\n            searchCreatedByUsersListApi(p)\n                .then(data => {\n                    dispatch(fetchCreatedByUsersSuccess(data.createdByUsers));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchCreatedByUsersFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchCreatedByUsersListApi, showMessage]\n    );\n};\n\nexport const useSearchEditedByUsersService = () => {\n    const dispatch = useDispatch();\n    const searchEditedByUsersListApi = useSearchEditedByUsersListApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p: SearchParams) => {\n            dispatch(fetchEditedByUsersStart());\n            searchEditedByUsersListApi(p)\n                .then(data => {\n                    dispatch(fetchEditedByUsersSuccess(data.lastEditedBy));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchEditedByUsersFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchEditedByUsersListApi, showMessage]\n    );\n};","import { SearchParams } from '../../../../constants/interfaces/filters';\nimport { UserV2 } from '../../../../constants/interfaces/User';\nimport {\n    searchInvitationsFailure,\n    searchInvitationsStart,\n    searchInvitationsSuccess,\n    updateAllSelectedInvitationsState,\n    updateInvitationFailure,\n    updateInvitationStart,\n    updateInvitationSuccess,\n    updateSelectedInvitationState,\n} from '../actions';\nimport { useDispatch } from 'react-redux';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    useResendInvitationApi,\n    useSearchUsersApi,\n    useRevokePendingUsers,\n} from '../../../../api';\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\nimport { UserRoles } from '../../../../pages/ActionPages/NewUser/tools';\nimport { copyTextToClipboard } from '../../../../helpers/functions/copy-to-clipboard';\nimport { setSearchState } from '../../../searchState/store/actions';\nimport { SEARCH_STATE } from '../../../searchState/constants';\nimport { buildRegistrationUrl } from '../../../../helpers/functions/url-helpers';\nimport { \n    InviteTextParams,\n    buildUserInviteText,\n    buildAdminInviteText\n} from '../../../../helpers/functions/invitation-templates';\nimport { SearchUsersParams } from '../../../../api/users/types';\nimport { getSearchSortingValue } from '../../../../helpers/functions/search-params-helpers';\nimport { UserStatus } from '../costants';\n\nexport const useSearchInvitationsService = () => {\n    const dispatch = useDispatch();\n    const searchUsersApi = useSearchUsersApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p: SearchParams, companyId: number, shouldSetStore = true) => {\n            shouldSetStore && dispatch(searchInvitationsStart());\n\n            const params: SearchUsersParams = {\n                status: UserStatus.PENDING,\n                roles: p.roleIDs?.join(','),\n                labels: p.labelIDs?.join(','),\n                invitedBy: p.invitersIDs?.join(','),\n                companies: companyId.toString(),\n                limit: p.limit ?? 20,\n                offset: p.offset ?? 0,\n                query: p.searchTerm,\n                sort: getSearchSortingValue(p.orderBy, 'name', true),\n            };\n            return searchUsersApi(params)\n                .then(data => {\n                    if (shouldSetStore) {\n                        dispatch(\n                            setSearchState(\n                                SEARCH_STATE.PENDING_USERS.name,\n                                SEARCH_STATE.PENDING_USERS.childrenKeys,\n                                p\n                            )\n                        );\n                        dispatch(searchInvitationsSuccess(data));\n                    }\n                    return data.items;\n                })\n                .catch((error: ErrorResult) => {\n                    if (shouldSetStore) {\n                        dispatch(searchInvitationsFailure(error.message));\n                        showMessage(error.message, 'error');\n                    }\n                });\n        },\n        [dispatch, searchUsersApi, showMessage]\n    );\n};\n\nexport const useResendInvitationService = () => {\n    const dispatch = useDispatch();\n    const resendInvitationApi = useResendInvitationApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (invitationIds: number[], isRowResend?: boolean, search?: SearchParams, selectAll?: boolean) => {\n            dispatch(updateInvitationStart());\n            resendInvitationApi(invitationIds)\n                .then((response: any) => {\n                    const error = Object.values(response).find(\n                        (item: any) => item?.error\n                    );\n                    if (invitationIds.length === 1 && error) {\n                        throw (error as any).error;\n                    }\n                    let message = '';\n\n                    if (isRowResend) {\n                        message = 'Invite has been sent';\n                    } else {\n                        message =\n                            invitationIds.length > 1\n                                ? `${\n                                      selectAll\n                                          ? search?.limit\n                                          : invitationIds.length\n                                  } Invites have been sent`\n                                : '1 Invite has been sent';\n                    }\n                    showMessage(message, 'success');\n                    dispatch(\n                        updateInvitationSuccess(\n                            { id: invitationIds[0] },\n                            'update'\n                        )\n                    );\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateInvitationFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, resendInvitationApi, showMessage]\n    );\n};\n\n/**\n * @function useCopyInviteTextService - copies user/admin invite text to a clipboard\n * @param { UserV2 } invitation\n * @param { CompanyInterface } company\n * @returns { void }\n */\nexport const useCopyInviteTextService = () => {\n    const showMessage = useShowMessage();\n    return useCallback(\n        (invitation: UserV2, company: CompanyInterface) => {\n            if (!invitation.invitationCode || !company.name) {\n                showMessage('Invalid invitation data', 'error');\n                return;\n            }\n            const inviteTextParams: InviteTextParams = {\n                name: invitation.firstName,\n                inviter: invitation.invitedBy\n                    ? `${invitation.invitedBy.firstName} ${invitation.invitedBy.lastName}`\n                    : 'Someone',\n                companyName: company.name,\n                registrationUrl: buildRegistrationUrl(invitation.invitationCode),\n            };\n            const inviteText: string = invitation.role?.name === UserRoles.USER\n                ? buildUserInviteText(inviteTextParams)\n                : buildAdminInviteText(inviteTextParams);\n            const copy: 'silent' | boolean = copyTextToClipboard(inviteText);\n\n            if (copy !== 'silent') {\n                if (copy) {\n                    showMessage(\n                        'Invite text has been copied',\n                        'success'\n                    );\n                } else {\n                    showMessage('Could not copy to clipboard', 'error');\n                }\n            }\n        },\n        [showMessage]\n    );\n};\n\nexport const useRevokeInvitationService = () => {\n    const dispatch = useDispatch();\n    const revokeInvitationApi = useRevokePendingUsers();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (invitationIds: number[], successCallback?: () => void) => {\n            dispatch(updateInvitationStart());\n            revokeInvitationApi(invitationIds)\n                .then(() => {\n                    successCallback?.();\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateInvitationFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, revokeInvitationApi, showMessage]\n    );\n};\n\nexport const useUpdateAllSelectedInvitationsStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (invitationIds: number[], checked: boolean, partial?: boolean) => {\n            dispatch(\n                updateAllSelectedInvitationsState(\n                    invitationIds,\n                    checked,\n                    partial\n                )\n            );\n        },\n        [dispatch]\n    );\n};\n\nexport const useUpdateSelectedInvitationStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (invitationId: number) => {\n            dispatch(updateSelectedInvitationState(invitationId));\n        },\n        [dispatch]\n    );\n};","export interface InviteTextParams {\n    name: string;\n    inviter: string;\n    companyName: string;\n    registrationUrl: string;\n}\n\n/**\n * @function buildUserInviteText - builds invite text of regular user\n * @param { InviteTextParams } params\n * @returns { string }\n */\nexport const buildUserInviteText = (params: InviteTextParams): string => `\nHi ${ params.name }\n \n${ params.inviter } at ${ params.companyName } invited you to join the Practis learning platform.\n \nJoin Now: ${ params.registrationUrl }\n \nNeed help? Watch the Registration & App Tutorial: https://vimeo.com/732000505/7f9448c420 or email support: support@gopractis.com.\n\nWhat is Practis?\nPractis is a role-playing app that prepares you for customer interactions by simulating a variety of real-world situations. Level up your communication skills and sales aptitude. We'll see you at the top!\n`;\n \n/**\n * @function buildAdminInviteText - builds invite text of admin user\n * @param { InviteTextParams } params\n * @returns { string }\n */\nexport const buildAdminInviteText = (params: InviteTextParams): string => `\nHi ${ params.name }\n \n${ params.inviter } at ${ params.companyName } invited you to join Practis as an Administrator. \n \nAs an Administrator, you will have full access to the Practis Admin Portal on the web, where learners, content, and training are managed. Note that the learners will only have access to the Practis mobile app, where all the training takes place.\n \nJoin Now: ${ params.registrationUrl }\n\nNeed help? Watch the Registration & App Tutorial: https://vimeo.com/732000505/7f9448c420 or email support: support@gopractis.com.\n \nWhat is Practis?\nPractis combines your company's \"best practice\" messaging with automated role-play and learning science to help customer-facing teams ramp up quickly, retain what they learn, and more consistently deliver results.\n`;","\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport { UserInterface } from '../../../../constants/interfaces/User';\n\nimport {\n    fetchAllUsers,\n    fetchAllUsersFailure,\n    fetchAllUsersSuccess,\n    updateAllSelectedUsersState,\n    updateInvitationSuccess,\n    updateSelectedUserState,\n    updateUserActionFailure,\n    updateUserActionStart,\n    updateUserActionSuccess,\n    fetchPortablePractisSetsFailure,\n    fetchPortablePractisSetsStart,\n    fetchPortablePractisSetsSuccess,\n    removeUserLabel,\n    removePendingUserLabel,\n    clearAllUsers,\n} from '../actions';\nimport { useDispatch } from 'react-redux';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    useDeleteUserApi,\n    useGetUserReportApi,\n    useSearchUsersApi,\n    useAssignTeamsToUserApi,\n    useDeleteUserLabelsApi,\n    useSearchUserEnrollmentsApi,\n} from '../../../../api';\nimport { setSearchState } from '../../../searchState/store/actions';\nimport { SEARCH_STATE } from '../../../searchState/constants';\nimport { SearchUsersParams, ReportUsersParams } from '../../../../api/users/types';\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\nimport { findAllChildIds } from '../../../../helpers/functions/tree-helpers';\nimport { getSearchSortingValue } from '../../../../helpers/functions/search-params-helpers';\nimport { UserStatus } from '../costants';\nimport { NudgeData } from '../../../../api/alert/types';\nimport { useNudgeUsersApi } from '../../../../api';\nimport { transformEnrollmentsToPractisSets } from '../helpers';\n\nexport const useSearchUsersService = () => {\n    const dispatch = useDispatch();\n    const searchUsersApi = useSearchUsersApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (\n            p: SearchParams,\n            userStatuses?: (keyof typeof UserStatus)[],\n            companyId?: number,\n            shouldSetStore = true\n        ) => {\n            shouldSetStore && dispatch(fetchAllUsers());\n            const params: SearchUsersParams = {\n                status: userStatuses?.join(',') || UserStatus.ACTIVE,\n                roles: p.roleIDs?.join(','),\n                teams: p.teamIds?.join(','),\n                labels: p.labelIDs?.join(','),\n                companies: companyId ? companyId.toString() : '',\n                limit: p.limit ?? 20,\n                offset: p.offset ?? 0,\n                query: p.searchTerm,\n                sort: getSearchSortingValue(p.orderBy, 'name', true),\n            };\n            return searchUsersApi(params)\n                .then(data => {\n                    if (shouldSetStore) {\n                        dispatch(\n                            setSearchState(\n                                SEARCH_STATE.ACTIVE_USERS.name,\n                                SEARCH_STATE.ACTIVE_USERS.childrenKeys,\n                                p\n                            )\n                        );\n                        dispatch(fetchAllUsersSuccess(data));\n                    }\n\n                    return data.items;\n                })\n                .catch((error: ErrorResult) => {\n                    if (shouldSetStore) {\n                        dispatch(fetchAllUsersFailure(error.message));\n                        showMessage(error.message, 'error');\n                    }\n                });\n        },\n        [dispatch, searchUsersApi, showMessage]\n    );\n};\n\nexport const useClearAllUsersService = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(clearAllUsers());\n    }, [dispatch]);\n};\n\nexport const useDeleteUserService = () => {\n    const dispatch = useDispatch();\n    const deleteUserApi = useDeleteUserApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (userIds: number[], search?: SearchParams, selectAll?: boolean, successCallback?: () => void) => {\n            dispatch(updateUserActionStart());\n            return deleteUserApi(userIds)\n                .then(data => {\n                    dispatch(\n                        updateUserActionSuccess(\n                            { id: Math.random() } as UserInterface,\n                            'delete'\n                        )\n                    );\n                    \n                    showMessage(\n                        `${\n                            userIds.length > 1\n                                ? `${selectAll ? search?.limit : userIds.length} Users have been deactivated`\n                                : '1 User has been deactivated'\n                        }`,\n                        'success'\n                    );\n\n                    successCallback?.();\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateUserActionFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, deleteUserApi, showMessage]\n    );\n};\n\nexport const usePractisSetsEnrollmentsService = (userId: string) => {\n    const dispatch = useDispatch();\n    const searchUserPractisSetsApi = useSearchUserEnrollmentsApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (successCallback?: () => void) => {\n            dispatch(fetchPortablePractisSetsStart());\n            searchUserPractisSetsApi(userId)\n                .then(data => {\n                    const practisSets = transformEnrollmentsToPractisSets(data);\n                    dispatch(fetchPortablePractisSetsSuccess(practisSets));\n                    successCallback?.();\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchPortablePractisSetsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchUserPractisSetsApi, showMessage, userId]\n    );\n};\n\nexport const useAssignTeamsToUsersService = () => {\n    const dispatch = useDispatch();\n    const assignTeamsApi = useAssignTeamsToUserApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (\n            userId: number,\n            teams: number[],\n            deleted: number[],\n            hideMessage = false,\n            successCallback?: () => void\n        ) => {\n            assignTeamsApi(userId, teams, deleted)\n                .then(() => {\n                    dispatch(\n                        updateUserActionSuccess(\n                            { id: userId } as UserInterface,\n                            'update'\n                        )\n                    );\n\n                    if (!hideMessage) {\n                        showMessage('Changes have been saved', 'success');\n                    }\n\n                    successCallback?.();\n                })\n                .catch((error: ErrorResult) => {\n                    showMessage(error.message, 'error');\n                });\n        },\n        [showMessage, assignTeamsApi, dispatch]\n    );\n};\n\nexport const useNudgeTraineesService = () => {\n    const nudgeTraineesApi = useNudgeUsersApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (nudgeUserData: NudgeData[], successCallback?: () => void) => {\n            nudgeTraineesApi(nudgeUserData)\n                .then(() => {\n                    const numberOfUsers = nudgeUserData.length;\n                    const message =\n                        numberOfUsers > 1\n                            ? `${numberOfUsers} Messages were sent successfully`\n                            : 'Message was sent successfully';\n\n                    showMessage(message, 'success');\n                    successCallback?.();\n                })\n                .catch((error: ErrorResult) => {\n                    showMessage(error.message, 'error');\n                });\n        },\n        [showMessage, nudgeTraineesApi]\n    );\n};\n\nexport const useGetUsersReportService = () => {\n    const getUserReportApi = useGetUserReportApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p: SearchParams, companyId: number, userIds?: number[], totalCount?: number) => {\n            if (!userIds && !totalCount)\n                throw new Error('Either select users or total count should be specified for report');\n            const params: ReportUsersParams = {\n                status: UserStatus.ACTIVE,\n                roles: p.roleIDs?.join(','),\n                teams: p.teamIds?.join(','),\n                labels: p.labelIDs?.join(','),\n                companies: companyId.toString(),\n                users: userIds?.join(','),\n                limit: userIds?.length ?? totalCount!,\n                offset: 0,\n                query: p.searchTerm,\n                sort: getSearchSortingValue(p.orderBy, 'name', true)\n            };\n            return getUserReportApi(params)\n                .then((data: any) => {\n                    const url = window.URL.createObjectURL(\n                        new Blob([data as any])\n                    );\n                    const link = document.createElement('a');\n                    link.href = url;\n                    link.setAttribute('download', `report.csv`); //or any other extension\n                    document.body.appendChild(link);\n                    link.click();\n\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    showMessage(error.message, 'error');\n                });\n        },\n        [getUserReportApi, showMessage]\n    );\n};\n\n/**\n * @description deletes user label including children labels\n * @function useDeleteUserLabelService\n * @param { number } userId\n * @param { number } labelId\n * @param { Function } successCallback\n * @returns { void }\n */\n export const useDeleteUserLabelService = (isPending: boolean = false) => {\n    const deleteUserLabelsApi = useDeleteUserLabelsApi();\n    const showMessage = useShowMessage();\n    const labels = usePortableLabelsState();\n    const dispatch = useDispatch();\n    return useCallback(\n        (userId: number, labelId: number, successCallback?: () => void) => {\n            const payload: { userId: number; labelId: number }[] = [\n                { userId, labelId },\n            ];\n            const children: any[] = [];\n            findAllChildIds(labels.data.items, labelId, children);\n            if (children.length > 0)\n                children.forEach(item =>\n                    payload.push({ userId, labelId: item.id })\n                );\n            return deleteUserLabelsApi(payload)\n                .then(() => {\n                    if (isPending) {\n                        dispatch(removePendingUserLabel(userId, labelId));\n                        dispatch(\n                            updateInvitationSuccess({ id: labelId }, 'labels')\n                        );\n                    } else {\n                        dispatch(removeUserLabel(userId, labelId));\n                        dispatch(\n                            updateUserActionSuccess({ id: labelId }, 'labels')\n                        );\n                    }\n\n                    successCallback?.();\n                    showMessage('Label removed successfully', 'success');\n                })\n                .catch((error: ErrorResult) => {\n                    showMessage(error.message, 'error');\n                });\n        },\n        [isPending, labels, showMessage, deleteUserLabelsApi, dispatch]\n    );\n};\n\nexport const useUpdateAllSelectedUsersStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (userIds: number[], checked: boolean, partial?: boolean) => {\n            dispatch(updateAllSelectedUsersState(userIds, checked, partial));\n        },\n        [dispatch]\n    );\n};\n\nexport const useUpdateSelectedUserStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (userId: number) => {\n            dispatch(updateSelectedUserState(userId));\n        },\n        [dispatch]\n    );\n};","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { isEmpty } from 'lodash';\nimport dayjs from 'dayjs';\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport {\n    searchUserPractisSetsStart,\n    searchUserPractisSetsFailure,\n    searchUserPractisSetsSuccess,\n    fetchUserAllPractisSetsSuccess,\n    getUserPerformanceStart,\n    getUserPerformanceSuccess,\n    getUserPerformanceFailure,\n    resetUserPerformanceAction,\n    updateAllPractisSetsCheckedState,\n    updateTraineeProfilePractisSetCheckedState,\n} from '../actions';\nimport { updateDraftUsersFailure } from '../../../../pages/ActionPages/NewUser/store/actions';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    useSearchUserEnrollmentsApi,\n    useDeleteEnrollmentsApi,\n    useUserPerformanceApi,\n    useAssignTeamsToUserApi,\n    useEnrollPractisSetsToUserApi,\n    useAssignLabelsApi,\n    useCreateUpdateEnrollmentDueDate,\n    useRemindToStartApi,\n} from '../../../../api';\nimport {\n    transformEnrollmentsToPractisSets,\n    getSearchUserPractisSetsParams\n} from '../helpers';\nimport { DATE_FORMAT } from '../../../../constants/interfaces/DueDates';\nimport { AssignFiltersToUserParams } from '../../types';\nimport { ENROLLMENT_REMIND_TO_START } from '../../../../api/alert/constants';\nimport { RemindToStartEnrollment } from '../../../../api/alert/types';\n\nexport const useSearchUserPractisSetsService = (userId: string) => {\n    const dispatch = useDispatch();\n    const searchUserPractisSetsApi = useSearchUserEnrollmentsApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (searchParams: SearchParams) => {\n            if (userId) {\n                const params = getSearchUserPractisSetsParams(searchParams);\n                dispatch(searchUserPractisSetsStart());\n                searchUserPractisSetsApi(userId, params)\n                    .then(data => {\n                        dispatch(searchUserPractisSetsSuccess(data));\n                    })\n                    .catch((error: ErrorResult) => {\n                        dispatch(searchUserPractisSetsFailure(error.message));\n                        showMessage(error.message, 'error');\n                    });\n            }\n        },\n        [dispatch, searchUserPractisSetsApi, showMessage, userId]\n    );\n};\n\nexport const useFetchUserAllPractisSets = () => {\n    const dispatch = useDispatch();\n    const fetchUserPractisSets = useSearchUserEnrollmentsApi();\n   \n    return useCallback(\n        (userId: string) => {\n            return fetchUserPractisSets(userId).then(data => {\n                const practisSets = transformEnrollmentsToPractisSets(data);\n                \n                dispatch(fetchUserAllPractisSetsSuccess(practisSets));\n            });\n        },\n        [dispatch, fetchUserPractisSets]\n    );\n};\n\nexport const useUnEnrollPractisSetService = () => {\n    const unenrollEnrollmentApi = useDeleteEnrollmentsApi();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (unEnrolledPractisSetIds: number[]) => {\n            return unenrollEnrollmentApi(unEnrolledPractisSetIds).then(() => {\n                const message = unEnrolledPractisSetIds.length > 1 ? \n                    `${unEnrolledPractisSetIds.length} Practis Sets have been unassigned` : \n                    '1 Practis Set has been unassigned';\n                showMessage(message, 'success');\n            })\n            .catch((error: ErrorResult) => {\n                showMessage(error.message, 'error');\n            });\n        },\n        [unenrollEnrollmentApi, showMessage]\n    );\n};\n\nexport const useUserPerformanceService = () => {\n    const dispatch = useDispatch();\n    const userPerformanceApi = useUserPerformanceApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (userId: number) => {\n            dispatch(getUserPerformanceStart());\n            return userPerformanceApi(userId, false)\n                .then(data => {\n                    dispatch(getUserPerformanceSuccess(data));\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(getUserPerformanceFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, userPerformanceApi, showMessage]\n    );\n};\n\nexport const useResetUserPerformanceService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetUserPerformanceAction());\n    }, [dispatch]);\n};\n\nexport const useUpdateAllPractisSetsCheckedStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (practisSetIds: number[], checked: boolean, partial?: boolean) => {\n            dispatch(\n                updateAllPractisSetsCheckedState(\n                    practisSetIds,\n                    checked,\n                    partial\n                )\n            );\n        },\n        [dispatch]\n    );\n};\n\nexport const useUpdateTraineeProfilePractisSetsCheckedStateService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (practisSetId: number) => {\n            dispatch(updateTraineeProfilePractisSetCheckedState(practisSetId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useAssignFiltersToUserService = () => {\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n    const assignTeamsToUserApi = useAssignTeamsToUserApi();\n    const enrollPractisSets = useEnrollPractisSetsToUserApi();\n    const unEnrollPractisSets = useDeleteEnrollmentsApi();\n    const assignLabelsApi = useAssignLabelsApi();\n    const updateEnrollmentsDueDate = useCreateUpdateEnrollmentDueDate();\n\n    return useCallback(\n        (\n            userId: number,\n            shouldAssignTeams: boolean,\n            assignFilters: AssignFiltersToUserParams,\n            search?: SearchParams\n        ) => {\n            return Promise.all([\n                shouldAssignTeams &&\n                    assignTeamsToUserApi(\n                        userId,\n                        assignFilters.assignedTeamIDs,\n                        assignFilters.deletedTeamIDs\n                    ),\n\n                !isEmpty(assignFilters?.assignedPractisSetIDs) &&\n                    enrollPractisSets(\n                        assignFilters?.assignedPractisSetIDs?.map(item => ({\n                            practisSetId: item.practisSetId,\n                            dueDate: item?.dueDate\n                                ? dayjs(item.dueDate).format(DATE_FORMAT)\n                                : null,\n                            userId\n                        })),\n                    ),\n\n                !isEmpty(assignFilters?.deletedEnrollmentIds) &&\n                    unEnrollPractisSets(assignFilters.deletedEnrollmentIds),\n\n                assignLabelsApi(\n                    assignFilters.assignedLabelsIDs,\n                    [userId],\n                    assignFilters.deletedLabelIDs,\n                    'USER',\n                    undefined,\n                    search\n                ),\n\n                !isEmpty(assignFilters.updatedEnrollments) && updateEnrollmentsDueDate(\n                    assignFilters.updatedEnrollments\n                )\n            ])\n                .then((datas: any[]) => {\n                    return datas;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateDraftUsersFailure(error.message));\n                    showMessage(error.message, 'error');\n                    return error;\n                });\n        },\n        [\n            assignTeamsToUserApi,\n            updateEnrollmentsDueDate,\n            enrollPractisSets,\n            unEnrollPractisSets,\n            assignLabelsApi,\n            dispatch,\n            showMessage,\n        ]\n    );\n};\n\nexport const useRemindUsersService = () => {\n    const remindUsersApi = useRemindToStartApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (enrollmentIds: number[]) => {\n            const enrollments = enrollmentIds.map(\n                enrollmentId =>\n                    ({\n                        enrollmentId,\n                        type: ENROLLMENT_REMIND_TO_START,\n                    } as RemindToStartEnrollment)\n            );\n            return remindUsersApi(enrollments)\n                .then(() => {\n                    showMessage('Remind sent successfully!', 'success');\n                })\n                .catch((error: ErrorResult) => {\n                    showMessage(error.message, 'error');\n                });\n        },\n        [remindUsersApi, showMessage]\n    );\n};","import { getConfig } from '../tools/config';\r\nimport Storage from './Storage';\r\nimport { clearAuthData } from '../helpers/functions/auth-helpers';\r\n\r\nconst axios = require('axios');\r\n\r\nexport interface LoginInterface {\r\n    email: string;\r\n    password: string;\r\n}\r\n\r\nexport class Http {\r\n    static get(path: string, data?: any) {\r\n        return this.request('get', path, data);\r\n    }\r\n\r\n    static getProtected(path: string, data?: any) {\r\n        const token = Storage.get('token');\r\n        return this.request('get', path, data, token);\r\n    }\r\n\r\n    static postProtected(path: string, data?: any) {\r\n        const token = Storage.get('token') || Storage.get('temp_token');\r\n        return this.request('post', path, data, token);\r\n    }\r\n\r\n    static deleteProtected(path: string, data?: any) {\r\n        const token = Storage.get('token');\r\n        return this.request('delete', path, data, token);\r\n    }\r\n\r\n    static post(path: string, data?: any, token?: boolean) {\r\n        return this.request('post', path, data, token);\r\n    }\r\n\r\n    static put(path: string, data: any) {\r\n        return this.request('put', path, data);\r\n    }\r\n\r\n    static putProtected(path: string, data?: any, useTempToken = false) {\r\n        const token = useTempToken\r\n            ? Storage.get('temp_token')\r\n            : Storage.get('token');\r\n        return this.request('put', path, data, token);\r\n    }\r\n\r\n    static request(method: string, path: string, data: any, token?: any) {\r\n        return axios({\r\n            method: method,\r\n            url: `${getConfig().API_BASE_URL}${path}`,\r\n            data: data,\r\n            headers: this.generateHeaders(token),\r\n        })\r\n            .then((response: any) => {\r\n                return response.data;\r\n            })\r\n            .catch((error: any) => {\r\n                if (error.response) {\r\n                    let message = '';\r\n                    switch (error.response.status) {\r\n                        case 401:\r\n                            clearAuthData();\r\n                            message = error.response.data.message;\r\n                            break;\r\n                        case 400:\r\n                        case 403:\r\n                        case 404:\r\n                        case 500:\r\n                            message = error.response.data.message;\r\n                            break;\r\n                        default:\r\n                            message = 'Unexpected Error';\r\n                    }\r\n                    return {\r\n                        status: 'error',\r\n                        code: error.response.status,\r\n                        errorCode: error.response.data\r\n                            ? error.response.data.code\r\n                            : 0,\r\n                        message,\r\n                        details: error.response.data\r\n                            ? error.response.data.details\r\n                            : [],\r\n                    };\r\n                } else if (error.request) {\r\n                    return {\r\n                        status: 'error',\r\n                        code: 504,\r\n                        message: 'Connection Error',\r\n                    };\r\n                } else {\r\n                    return {\r\n                        status: 'error',\r\n                        code: error.response.status,\r\n                        message: 'Unexpected Error',\r\n                    };\r\n                }\r\n            });\r\n    }\r\n\r\n    static generateHeaders = (token?: any, customHeaders?: Object) => {\r\n        let contentType = { 'Content-Type': 'application/json' };\r\n        let Client = { Client: 'WEB' };\r\n        let authorization = token ? { Authorization: 'JWT ' + token } : {};\r\n        let additionalHeaders = customHeaders ? customHeaders : {};\r\n        return {\r\n            ...contentType,\r\n            ...authorization,\r\n            ...Client,\r\n            ...additionalHeaders,\r\n        };\r\n    };\r\n}\r\n","import { UserV2, UserInterface } from '../../../../constants/interfaces/User';\nimport { Http } from '../../../../services/Http';\nimport {\n    updateUserAction,\n    updateUserFailure,\n    updateUserSuccess,\n    fetchUserAction,\n    fetchUserFailure,\n    fetchUserSuccess,\n    fetchUserFeaturesStart,\n    fetchUserFeaturesSuccess,\n    fetchUserFeaturesFailure,\n    fetchUserPreferencesStart,\n    fetchUserPreferencesSuccess,\n    fetchUserPreferencesFailure,\n    updateUserPreferencesStart,\n    updateUserPreferencesSuccess,\n    updateUserPreferencesFailure,\n} from '../actions';\nimport { updateUserProfileSuccess } from '../../../../pages/UserProfile/store/actions';\nimport { useDispatch } from 'react-redux';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    useGetUserFeaturesApi,\n    useGetUserPreferencesApi,\n    useUpdateUserPreferencesApi,\n    useGetUserApi,\n} from '../../../../api';\nimport { USER_NOT_FOUND_ERROR_MESSAGE } from '../costants';\nimport { handleMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\n\nexport const useFetchUser = () => {\n    const dispatch = useDispatch();\n    const getUser = useGetUserApi();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (id: number, successCallback?: (response: unknown) => void) => {\n            dispatch(fetchUserAction());\n            return getUser(id)\n                .then((response: UserV2) => {\n                    dispatch(fetchUserSuccess(response));\n                    successCallback?.(response);\n                    return response;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchUserFailure(error.message));\n                    if (error.code === 404) {\n                        showMessage(USER_NOT_FOUND_ERROR_MESSAGE, 'error');\n                    } else {\n                        showMessage(error.message, 'error');\n                    }\n                });\n        },\n        [dispatch, getUser, showMessage]\n    );\n};\n\nexport const updateUser = (\n    data: UserInterface,\n    userId: number,\n    self?: boolean,\n    successMessage?: string,\n    successCallback?: () => void,\n): any => {\n    return (dispatch: any) => {\n        dispatch(updateUserAction());\n        return Http.putProtected(\n            `admin/users/${userId}`,\n            data\n        )\n            .then((res: any) => {\n                if (res.status === 'error') {\n                    throw res.message;\n                }\n                self\n                    ? dispatch(updateUserProfileSuccess(res))\n                    : dispatch(updateUserSuccess(res));\n                handleMessage(\n                    dispatch,\n                    successMessage || 'Profile Updated!',\n                    'success'\n                );\n                successCallback?.();\n                return { status: 'success', data: res };\n            })\n            .catch((error: any) => {\n                self\n                    ? updateUserFailure(error)\n                    : dispatch(updateUserFailure(error));\n                handleMessage(dispatch, error, 'error');\n                return { status: 'error', data: error };\n            });\n    };\n};\n\nexport const useGetUserFeaturesService = () => {\n    const dispatch = useDispatch();\n    const getUserFeaturesApi = useGetUserFeaturesApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (userId: number) => {\n            dispatch(fetchUserFeaturesStart());\n            return getUserFeaturesApi(userId)\n                .then(data => {\n                    dispatch(fetchUserFeaturesSuccess(data));\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchUserFeaturesFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getUserFeaturesApi, showMessage]\n    );\n};\n\n/**\n * @function useGetUserPreferencesService\n * @returns { CallableFunction }\n */\nexport const useGetUserPreferencesService = () => {\n    const dispatch = useDispatch();\n    const getUserPreferencesApi = useGetUserPreferencesApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @param { number } userId\n     * @returns { Promise }\n     */\n    return useCallback(\n        (userId: number) => {\n            dispatch(fetchUserPreferencesStart());\n            return getUserPreferencesApi(userId)\n                .then(data => {\n                    dispatch(fetchUserPreferencesSuccess(data));\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchUserPreferencesFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getUserPreferencesApi, showMessage]\n    );\n};\n\n/**\n * @function useUpdateUserPreferenceService\n * @returns { CallableFunction }\n */\nexport const useUpdateUserPreferenceService = () => {\n    const dispatch = useDispatch();\n    const updateUserPreferencesApi = useUpdateUserPreferencesApi()\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @param { number } userId\n     * @param { string } key\n     * @param { boolean } value\n     * @param { Function } onSuccess\n     * @returns { Promise }\n     */\n    return useCallback(\n        (\n            userId: number,\n            key: string,\n            value: boolean,\n            onSuccess: () => void\n        ) => {\n            dispatch(updateUserPreferencesStart([{ key, value }]));\n            return updateUserPreferencesApi(userId, { [key]: value })\n                .then(() => {\n                    dispatch(updateUserPreferencesSuccess([key]));\n                    onSuccess();\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateUserPreferencesFailure([key]));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, updateUserPreferencesApi, showMessage]\n    );\n};","import { PaginationResult, ListResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { UserInterface, UserV2 } from '../../../constants/interfaces/User';\r\nimport React, { useContext } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { PerformanceTrainee } from '../../../constants/interfaces/PerformanceTrainee';\r\nimport { PractisSets, EnrollmentPractisSet } from '../../../constants/interfaces/PractisSets';\r\nimport { Draft, DraftUser } from '../../../constants/interfaces/Draft';\r\nimport { StateWithLabels } from '../../portableLabels/store/hors/withLabels';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { selectItemsByIds } from '../../../tools/redux';\r\nimport { UserFeatures } from '../../../constants/interfaces/UserFeatures';\r\nimport { StateWithPractisSets } from '../../portablePractisSets/store/hors/withPractisSets';\r\nimport { EnrollmentInterface } from '../../../constants/interfaces/Enrollments';\r\nimport { UserPreference } from '../../../constants/interfaces/UserPreference';\r\n\r\n\r\nexport function useLoggedInUserProfileState() {\r\n    return useSelector(getProfileState);\r\n}\r\n\r\nexport interface UsersState {\r\n    list: ListResult<UserV2>;\r\n    selectedUsers?: number[];\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nexport type UsersStateSelector = (state: any) => UsersState;\r\n\r\nexport const UsersStateSelectorContext = React.createContext<UsersStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUsersState(): UsersState {\r\n    return useSelector(useContext(UsersStateSelectorContext));\r\n}\r\n\r\nexport interface UpdateUsersState {\r\n    data?: UserInterface;\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdateUsersStateStateSelector = (state: any) => UpdateUsersState;\r\n\r\nexport const UpdateUsersStateStateSelectorContext = React.createContext<UpdateUsersStateStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdateUsersState(): UpdateUsersState {\r\n    return useSelector(useContext(UpdateUsersStateStateSelectorContext));\r\n}\r\n\r\nexport interface InvitationsState {\r\n    data?: ListResult<UserV2>;\r\n    selectedInvitations?: number[];\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nexport type InvitationsStateSelector = (state: any) => InvitationsState;\r\n\r\nexport const InvitationsStateSelectorContext = React.createContext<InvitationsStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function selectSelectedInvitations(state: InvitationsState): UserV2[] {\r\n    return selectItemsByIds<UserV2>(state?.selectedInvitations, state?.data?.items);\r\n}\r\n\r\nexport function useInvitationsState(): InvitationsState {\r\n    return useSelector(useContext(InvitationsStateSelectorContext));\r\n}\r\n\r\nexport interface UpdateInvitationState {\r\n    data?: { id: number };\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdateInvitationStateStateSelector = (\r\n    state: any\r\n) => UpdateInvitationState;\r\n\r\nexport const UpdateInvitationStateStateSelectorContext = React.createContext<UpdateInvitationStateStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdateInvitationsState(): UpdateInvitationState {\r\n    return useSelector(useContext(UpdateInvitationStateStateSelectorContext));\r\n}\r\n\r\nexport interface DraftsState {\r\n    data?: PaginationResult<Draft>;\r\n    draftedUsers?: PaginationResult<DraftUser>;\r\n    selectedDrafts?: number[];\r\n    createdByUsers?: DraftUser[];\r\n    editedByUsers?: DraftUser[];\r\n    loading?: boolean;\r\n    loadingCreatedBy: boolean,\r\n    loadingEditedBy: boolean,\r\n    error?: string;\r\n}\r\n\r\nexport type DraftsStateSelector = (state: any) => DraftsState;\r\n\r\nexport const DraftsStateSelectorContext = React.createContext<DraftsStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useDraftsState(): DraftsState {\r\n    return useSelector(useContext(DraftsStateSelectorContext));\r\n}\r\n\r\nexport interface UpdatedDraftsState {\r\n    data?: Draft;\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdateDraftsStateStateSelector = (state: any) => UpdatedDraftsState;\r\n\r\nexport const UpdateDraftsStateStateSelectorContext = React.createContext<UpdateDraftsStateStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdatedDraftsState(): UpdatedDraftsState {\r\n    return useSelector(useContext(UpdateDraftsStateStateSelectorContext));\r\n}\r\n\r\nexport type PerformanceState = {\r\n    data?: PerformanceTrainee;\r\n    practisSets?: ListResult<EnrollmentInterface>;\r\n    selectedPractisSets?: number[];\r\n    loading?: boolean;\r\n    practisSetsLoading?: boolean;\r\n    error?: string;\r\n    portablePractisSets?: EnrollmentPractisSet[];\r\n    portablePractisSetsLoading?: boolean;\r\n};\r\n\r\nexport type UserPerformanceState = PerformanceState & StateWithLabels & StateWithPractisSets;\r\n\r\nexport type UserPerformanceStateSelector = (state: any) => UserPerformanceState;\r\n\r\nexport const UserPerformanceStateSelectorContext = React.createContext<UserPerformanceStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUserPerformanceState(): UserPerformanceState {\r\n    return useSelector(useContext(UserPerformanceStateSelectorContext));\r\n}\r\n\r\nexport interface UpdatedUserPractisSetsState {\r\n    data?: PractisSets;\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdatedUserPractisSetsStateSelector = (\r\n    state: any\r\n) => UpdatedUserPractisSetsState;\r\n\r\nexport const UpdatedUserPractisSetsStateSelectorContext = React.createContext<UpdatedUserPractisSetsStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdatedUserPractisSetsState(): UpdatedUserPractisSetsState {\r\n    return useSelector(useContext(UpdatedUserPractisSetsStateSelectorContext));\r\n}\r\n\r\nexport interface UserFeaturesState {\r\n    data?: UserFeatures;\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nexport interface UserPreferencesState {\r\n    data?: UserPreference[];\r\n    pendingValues?: { key: string, value: unknown }[];\r\n    loading: boolean;\r\n    error?: string;\r\n}","import { DEFAULT_CHALLENGE_TRY_LIMIT } from '../../../challenges/constants';\nimport { GenerateChallengeData } from './types';\n\n// -------- PRACTIS_SET --------\nexport const ASSIGN_LABELS_TO_PRACTIS_SET_ACTION =\n    'ASSIGN_LABELS_TO_PRACTIS_SET_ACTION';\nexport const DELETE_LABELS_FROM_PRACTIS_SET_ACTION =\n    'DELETE_LABELS_FROM_PRACTIS_SET_ACTION';\nexport const GET_PRACTIS_SET_CONTENT_ACTION = 'GET_PRACTIS_SET_CONTENT_ACTION';\nexport const ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION =\n    'ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION';\nexport const UPDATE_PRACTIS_SET_STATUS_ACTION =\n    'UPDATE_PRACTIS_SET_STATUS_ACTION';\nexport const CREATE_PRACTIS_SET_ACTION = 'CREATE_PRACTIS_SET_ACTION';\nexport const UPDATE_PRACTIS_SET_ACTION = 'UPDATE_PRACTIS_SET_ACTION';\n\n// -------- SCENARIO --------\nexport const CREATE_SCENARIO_ACTION = 'CREATE_SCENARIO_ACTION';\nexport const UPDATE_SCENARIO_ACTION = 'UPDATE_SCENARIO_ACTION';\nexport const ASSIGN_LABELS_TO_SCENARIO_ACTION =\n    'ASSIGN_LABELS_TO_SCENARIO_ACTION';\nexport const DELETE_LABELS_FROM_SCENARIO_ACTION =\n    'DELETE_LABELS_FROM_SCENARIO_ACTION';\nexport const ASSIGN_LINES_TO_SCENARIO_ACTION =\n    'ASSIGN_LINES_TO_SCENARIO_ACTION';\nexport const UPDATE_SCENARIO_STATUS_ACTION = 'UPDATE_SCENARIO_STATUS_ACTION';\nexport const DELETE_LINES_FROM_SCENARIO_ACTION =\n    'DELETE_LINES_FROM_SCENARIO_ACTION';\n\n// -------- CHALLENGE --------\nexport const CREATE_CHALLENGE_ACTION = 'CREATE_CHALLENGE_ACTION';\nexport const UPDATE_CHALLENGE_ACTION = 'UPDATE_CHALLENGE_ACTION';\nexport const ASSIGN_LABELS_TO_CHALLENGE_ACTION =\n    'ASSIGN_LABELS_TO_CHALLENGE_ACTION';\nexport const DELETE_LABELS_FROM_CHALLENGE_ACTION =\n    'DELETE_LABELS_FROM_CHALLENGE_ACTION';\nexport const ASSIGN_LINES_TO_CHALLENGE_ACTION =\n    'ASSIGN_LINES_TO_CHALLENGE_ACTION';\nexport const UPDATE_CHALLENGE_STATUS_ACTION = 'UPDATE_CHALLENGE_STATUS_ACTION';\n\nexport const initialGenerateChallengeData: GenerateChallengeData = {\n    title: '',\n    description: '',\n    sourceScenarioId: null,\n    lines: [],\n    labelIds: [],\n    tryLimit: DEFAULT_CHALLENGE_TRY_LIMIT,\n};","import { UserInterface } from './User';\r\nimport { Scenario } from './Scenario';\r\nimport { Challenge } from './Challenge';\r\nimport { EnrollmentStatusEnum } from './Enrollments';\r\nimport { UserInfo } from './UserInfo';\r\n\r\nexport enum PractisSetStatuses {\r\n    DRAFT = 'DRAFT',\r\n    ACTIVE = 'ACTIVE',\r\n    ARCHIVED = 'ARCHIVED',\r\n    DELETED = 'DELETED',\r\n}\r\n\r\nexport type PractisSetContent = {\r\n    id: number;\r\n    uniqueId: string;\r\n    type: PractisSetContentEntities;\r\n    minRepsCount: number;\r\n    position: number;\r\n    cover?: {\r\n        id: number;\r\n        fileUrl: string;\r\n    };\r\n    challenge?: Challenge;\r\n    scenario?: Scenario;\r\n};\r\n\r\n\r\nexport type PractisSetContentEntities = 'CHALLENGE' | 'SCENARIO';\r\nexport type PractisSetStatusType =\r\n    | PractisSetStatuses.DRAFT\r\n    | PractisSetStatuses.ACTIVE\r\n    | PractisSetStatuses.ARCHIVED\r\n    | PractisSetStatuses.DELETED;\r\n\r\nexport interface PractisSets {\r\n    id?: number;\r\n    name: string;\r\n    description: string;\r\n    updatedAt?: string;\r\n    lastTraining?: string;\r\n    lastTrainingAt?: string;\r\n    createdAt?: string;\r\n    enrolledAt?: string;\r\n    creatorId?: number;\r\n    summary?: string;\r\n    totalEnrollmentCount?: number;\r\n    acceptedEnrollmentCount?: number;\r\n    pendingEnrollmentCount?: number;\r\n    inProgressEnrollmentCount?: number;\r\n    completedEnrollmentCount?: number;\r\n    completionRate?: number;\r\n    pacing?: {\r\n        id: number;\r\n        type: string;\r\n    };\r\n    scenarioCount: number;\r\n    challengeCount: number;\r\n    countOfScenarios?: number;\r\n    countOfChallenges?: number;\r\n    challengesWithSentSubmissionCount?: number;\r\n    currentRepsCountTotal?: number;\r\n    minRepsCountTotal?: number;\r\n    passedScenarioCount?: number;\r\n    displayStatus?: EnrollmentStatusEnum;\r\n    totalDuration: number | null;\r\n    dueDate?: string | null;\r\n    status: PractisSetStatusType;\r\n    enrollmentStatus?: 'PENDING' | 'ENROLLED' | 'COMPLETED' | '';\r\n    progressValue?: number;\r\n    creator?: UserInterface;\r\n    contentList?: PractisSetContent[];\r\n    content: PractisSetContent[];\r\n    labels?: any[];\r\n    updatedLabels?: number[];\r\n    checked?: boolean;\r\n    enrollmentId?: number;\r\n    trainingStatus?: PractisSetStatusType;\r\n    dailyTrainings?: number;\r\n    monthlyTrainings?: number;\r\n    averageAccuracy?: number;\r\n    completedAt?: string;\r\n    trainingTime?: number;\r\n    minutesPerDay?: number;\r\n    totalTimeInMinutes?: number;\r\n    lastActivity?: any;\r\n    hasOverdue?: boolean;\r\n}\r\n\r\nexport interface PractisSetV2 {\r\n    id: number;\r\n    name: string;\r\n    description: string;\r\n    status: string;\r\n    companyId: number;\r\n    scenarioCount: number;\r\n    challengeCount: number;\r\n    minRepsCountTotal: number;\r\n    totalDuration: number;\r\n    createdAt: string;\r\n    updatedAt: string;\r\n    labels: number[];\r\n    creator: UserInfo;\r\n    cover: {\r\n        id: number;\r\n        fileUrl: string;\r\n    };\r\n    pacing: {\r\n        id: number;\r\n        type: string;\r\n    };\r\n}\r\n\r\nexport interface EnrollmentPractisSet extends PractisSetV2 {\r\n    enrollmentId: number;\r\n    dueDate: string;\r\n}","export const REFRESH_TEAMS_LIST = 'REFRESH_TEAMS_LIST';\nexport const REFRESH_TEAM_MEMBERS = 'REFRESH_TEAM_MEMBERS';\nexport const REFRESH_TEAM_CONTROLLER = 'REFRESH_TEAM_CONTROLLER';\nexport const REFRESH_TRAINING_PAGE = 'REFRESH_TRAINING_PAGE';\nexport const REFRESH_PENDING_USERS_PAGE = 'REFRESH_PENDING_USERS_PAGE';\nexport const CLEAR_PAGING = 'CLEAR_PAGING';\n\nexport enum EventNameList {\n    REFRESH_TEAMS_LIST = 'REFRESH_TEAMS_LIST',\n    REFRESH_TEAM_CONTROLLER = 'REFRESH_TEAM_CONTROLLER',\n    REFRESH_TEAM_MEMBERS = 'REFRESH_TEAM_MEMBERS',\n    REFRESH_TRAINING_PAGE = 'REFRESH_TRAINING_PAGE',\n    REFRESH_PENDING_USERS_PAGE = 'REFRESH_PENDING_USERS_PAGE',\n    CLEAR_PAGING = 'CLEAR_PAGING',\n}","import { isEmpty } from 'lodash';\nimport { useCallback, useEffect } from 'react';\n\nimport { isAdminPortal } from '../functions/general';\nexport const PRACTIS_ADMIN_SUFFIX = 'Practis Admin Portal';\nexport const PRACTIS_WEB_SUFFIX = 'Practis';\n\nexport default function useHtmlPageTitle(\n    title?: string,\n    dependencies?: (string | undefined)[]\n) {\n    const isItAdminPortal = isAdminPortal();\n\n    const suffix = isItAdminPortal ? PRACTIS_ADMIN_SUFFIX : PRACTIS_WEB_SUFFIX;\n\n    const generateHtmlTitle = useCallback(() => {\n        let htmlTitle = suffix;\n\n        if (!isEmpty(dependencies)) {\n            for (const dependency of dependencies!.reverse()) {\n                // the dependency can be a string of multiple values\n                // that each of them can be undefined.\n                // ex: `${enrollment?.user.firstName} ${enrollment?.user.lastName}`\n                // result: 'undefined undefined'\n                if (dependency && !dependency.includes('undefined')) {\n                    htmlTitle = `${dependency} - ${htmlTitle}`;\n                }\n            }\n        }\n\n        if (title) {\n            htmlTitle = `${title} - ${htmlTitle}`;\n        }\n\n        return htmlTitle;\n    }, [dependencies, suffix, title]);\n\n    useEffect(() => {\n        const htmlTitle = generateHtmlTitle();\n\n        document.title = htmlTitle;\n    }, [dependencies, generateHtmlTitle]);\n}","export * from './Tooltip';\n","export enum BulkActionAvailability {\n    UNAVAILABLE_FOR_ALL,\n    AVAILABLE_FOR_SOME,\n    AVAILABLE_FOR_ALL,\n}\n\nexport interface BulkActionAvailabilityItem<TAction> {\n    action: TAction;\n    availability: BulkActionAvailability;\n}\n\nexport function getBulkActionAvailability<TItem>(\n    items: TItem[] | undefined,\n    canPerformAction: (item: TItem) => boolean\n): BulkActionAvailability {\n    if (!!items?.length) {\n        const availableFor = items.filter(canPerformAction);\n        if (availableFor.length === items.length) {\n            return BulkActionAvailability.AVAILABLE_FOR_ALL;\n        }\n        else if (availableFor.length > 0 && availableFor.length < items.length) {\n            return BulkActionAvailability.AVAILABLE_FOR_SOME;\n        }\n    }\n    return BulkActionAvailability.UNAVAILABLE_FOR_ALL;\n}\n\nexport function getBulkActionAvailabilityItem<TItem, TAction>(\n    action: TAction,\n    items: TItem[] | undefined,\n    canPerformAction: (item: TItem) => boolean\n): BulkActionAvailabilityItem<TAction> {\n    return {\n        action,\n        availability: getBulkActionAvailability(items, canPerformAction),\n    };\n}\n\nexport function getBulkActionsAvailability<TItem, TAction extends string | number>(\n    items: TItem[] | undefined,\n    actions: BulkActionAvailabilityItem<TAction>[]\n) {\n    const actionsMap = getBulkActionsMap(actions);\n    \n    const areItemsEmpty = () =>\n        !items?.length;\n\n    const areBulkActionsDisabled = () =>\n        areItemsEmpty()\n            || actions.every(a => a.availability !== BulkActionAvailability.AVAILABLE_FOR_ALL);\n    \n    const isBulkActionVisible = (action: TAction) =>\n        actionsMap[action]?.availability === BulkActionAvailability.AVAILABLE_FOR_ALL\n            || actionsMap[action]?.availability === BulkActionAvailability.AVAILABLE_FOR_SOME;\n\n    const isBulkActionDisabled = (action: TAction) =>\n        actionsMap[action]?.availability === BulkActionAvailability.AVAILABLE_FOR_SOME\n            || actionsMap[action]?.availability === BulkActionAvailability.UNAVAILABLE_FOR_ALL;\n\n    return {\n        areItemsEmpty,\n        areBulkActionsDisabled,\n        isBulkActionVisible,\n        isBulkActionDisabled,\n    };\n}\n\nfunction getBulkActionsMap<TAction extends string | number>(\n    actions: BulkActionAvailabilityItem<TAction>[]\n) {\n    return actions.reduce((result, a) => {\n        result[a.action] = a;\n        return result;\n    }, {} as Record<TAction, BulkActionAvailabilityItem<TAction>>);\n}\n","export const SEARCH_STATE = {\n    ACCURACY: {\n        name: '/feed/accuracy',\n        childrenKeys: ['/feed/accuracy', 'teams/training/practis-sets', 'user/performance/']\n    },\n    SUBMISSIONS: {\n        name: '/feed/challenges',\n        childrenKeys: ['/feed/challenges', 'library/challenges/', 'teams/training/practis-sets', 'user/performance/']\n    },\n    TEAMS: {\n        name: '/teams',\n        childrenKeys: ['/members']\n    },\n    MEMBERS: {\n        name: '/members',\n        childrenKeys: ['user/performance/', 'teams/training/practis-sets/'],\n        parentKey: ['/teams']\n    },\n    TRAINING: {\n        name: '/training/practis-sets',\n        childrenKeys: ['/training/practis-sets/', 'teams/training/practis-sets/'],\n        parentKey: ['/teams']\n    },\n    PRACTIS_SET_DETAILS: {\n        name: '/training/practis-sets/',\n        childrenKeys: ['user/performance/']\n    },\n    ACTIVE_USERS: {\n        name: '/users',\n        childrenKeys: ['user/performance/', 'teams/training/practis-sets/', '/users/']\n    },\n    PENDING_USERS: {\n        name: '/invitations',\n        childrenKeys: ['invitation/performance/', 'teams/training/practis-sets/']\n    },\n    \n}","export { default as TableWrapper } from './view';\nexport * from './types';\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const HourGlass = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, width, height }, ref) => {\n        return (\n            <svg width={width || '11'} height={height || '13'} viewBox=\"0 0 11 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M0 0h11v13H0V0z\" fill=\"#fff\"/>\n            <path d=\"M10.445 3.414V2.36c.33-.173.555-.492.555-.861v-.25c0-.138-.124-.25-.277-.25H1.278C1.124 1 1 1.112 1 1.25v.25c0 .369.225.688.556.86v1.054c0 .99.469 1.939 1.287 2.601L4.06 7l-1.216.985c-.818.662-1.287 1.61-1.287 2.601v1.053c-.33.174-.556.492-.556.861v.25c0 .138.124.25.278.25h9.445c.153 0 .277-.112.277-.25v-.25c0-.369-.225-.688-.555-.86v-1.054c0-.99-.47-1.939-1.288-2.601L7.942 7l1.215-.985c.818-.662 1.288-1.61 1.288-2.601zM8.414 5.272 6.74 6.628A.479.479 0 0 0 6.556 7c0 .142.066.277.184.372l1.674 1.356c.584.473.92 1.15.92 1.858v.914H2.667v-.914c0-.707.335-1.385.92-1.858L5.26 7.372A.479.479 0 0 0 5.445 7a.478.478 0 0 0-.184-.372L3.586 5.272c-.584-.473-.92-1.15-.92-1.858V2.5h6.668v.914c0 .707-.336 1.385-.92 1.858z\" fill=\"#F0A803\"/>\n            <path d=\"M7.747 4H4.253c-.1 0-.19.056-.231.142a.229.229 0 0 0 .044.258L5.83 5.938A.26.26 0 0 0 6 6a.26.26 0 0 0 .17-.062L7.934 4.4a.229.229 0 0 0 .044-.258A.254.254 0 0 0 7.747 4zM4.253 12h3.494c.1 0 .19-.084.231-.214a.479.479 0 0 0-.044-.386L6.17 9.093A.217.217 0 0 0 6 9c-.061 0-.122.03-.17.093L4.066 11.4a.479.479 0 0 0-.044.386c.04.13.131.214.231.214z\" fill=\"#F0A803\"/>\n        </svg>\n        \n        );\n    }\n);\n\nexport default HourGlass;\n","import { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const StyledAvatarContainer = styled.div<{\n    size?: string;\n    disabled?: boolean;\n    backgroundColor?: string;\n    imgBorderRadius?: string;\n}>`\n    font-size: ${props => (props.size === 'sm' ? '13px' : '18px')};\n    height: 100%;\n    width: 100%;\n    border-radius: 4px;\n    background: ${props =>\n        props.backgroundColor\n            ? props.backgroundColor\n            : props.theme.Colors.whiteFive};\n    color: ${props => props.theme.Colors.black};\n    opacity: ${props => (props.disabled ? 0.7 : 1)};\n    font-weight: bold;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-shrink: 0;\n    position: relative;\n\n    img {\n        height: 100%;\n        width: 100%;\n        border-radius: ${props =>\n            !!props.imgBorderRadius ? props.imgBorderRadius : '4px'};\n        object-fit: cover;\n    }\n`;\n\nexport const StyledNavLink = styled(NavLink)`\n    text-decoration: none;\n    color: ${props => props.theme.Colors.dark};\n    height: 100%;\n    width: 100%;\n    display: flex;\n    align-items: center;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const CustomPlaceholderContainer = styled.div`\n    height: 16px;\n    width: 16px;\n    align-self: center;\n    display: flex;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nexport const CustomNamePlaceholder = styled.div`\n    width: 100%;\n    height: 100%;\n    border-radius: 4px;\n    align-items: center;\n    justify-content: center;\n    display: flex;\n    border: 1px solid ${props => props.theme.Colors.cloudyBlue};\n    box-sizing: border-box;\n`;\n\nexport const PendingWrapper = styled.div<{\n    bottomPosition?: number;\n}>`\n    position: absolute;\n    pointer-events: all;\n    right: 0px;\n    bottom: ${props =>\n        !!props.bottomPosition ? props.bottomPosition : '-5'}px;\n`;\n","import React, { useMemo } from 'react';\n\nimport HourGlass from '../../icons/HourGlass';\nimport Loading from '../LoadingCopmonent/Loading';\nimport { UserInterface } from '../../../constants/interfaces/User';\nimport { Tooltip } from '../Tooltip';\nimport {\n    CustomNamePlaceholder,\n    CustomPlaceholderContainer,\n    PendingWrapper,\n    StyledAvatarContainer,\n    StyledNavLink,\n} from './styles';\nimport { AvatarPlaceholderProps } from './types';\n\nconst AvatarPlaceholder = ({\n    profile,\n    customProfile,\n    loading,\n    size,\n    link,\n    disabled,\n    className,\n    backgroundColor,\n    imgBorderRadius,\n    customPlaceholder: CustomPlaceholder,\n    customWrapper: CustomWrapper,\n    iconWidth,\n    iconHeight,\n    hidePending,\n    bottomPosition,\n    noHint,\n    dataTest\n}: AvatarPlaceholderProps) => {\n    const content = useMemo((): React.ReactNode => {\n        if (loading) {\n            return <Loading />;\n        }\n\n        if (customProfile) {\n            if (customProfile.picture) {\n                return (\n                    <img\n                        data-test={dataTest}\n                        src={customProfile.picture}\n                        alt={`${customProfile.firstName} ${customProfile.lastName}`}\n                    />\n                );\n            }\n\n            return (\n                <CustomNamePlaceholder data-test={dataTest}>\n                    {customProfile.firstName.charAt(0).toUpperCase()}\n                </CustomNamePlaceholder>\n            );\n        }\n\n        if (!profile) {\n            return <div />;\n        }\n\n        const mediaUrl =\n            profile.logoUrl ||\n            profile.logo ||\n            profile.imageUrl ||\n            (profile as UserInterface)?.picture;\n\n        if (mediaUrl) {\n            return (\n                <img\n                    src={mediaUrl}\n                    alt={'profile'}\n                    data-test={dataTest}\n                />\n            );\n        }\n\n        if (CustomPlaceholder) {\n            return (\n                <CustomPlaceholderContainer>\n                    <CustomPlaceholder />\n                </CustomPlaceholderContainer>\n            );\n        }\n\n        if (CustomWrapper) {\n            if (profile.firstName && profile.lastName) {\n                return (\n                    <CustomWrapper data-test={dataTest}>\n                        {profile.firstName.charAt(0).toUpperCase()}\n                    </CustomWrapper>\n                );\n            }\n            if (profile.name) {\n                return (\n                    <CustomWrapper data-test={dataTest}>\n                        {profile.name.charAt(0).toUpperCase()}\n                    </CustomWrapper>\n                );\n            }\n        }\n\n        if (profile.firstName) {\n            return (\n                <CustomNamePlaceholder data-test={dataTest}>\n                    {profile.firstName.charAt(0).toUpperCase()}\n                </CustomNamePlaceholder>\n            );\n        }\n\n        if (profile.name) {\n            return (\n                <CustomNamePlaceholder data-test={dataTest}>\n                    {profile.name.charAt(0).toUpperCase()}\n                </CustomNamePlaceholder>\n            );\n        }\n\n        return null;\n    }, [CustomPlaceholder, CustomWrapper, loading, profile, customProfile, dataTest]);\n\n    return (\n        <StyledAvatarContainer\n            size={size}\n            disabled={disabled}\n            className={className}\n            backgroundColor={backgroundColor}\n            imgBorderRadius={imgBorderRadius}\n        >\n            {link ? (\n                <StyledNavLink to={link}>{content}</StyledNavLink>\n            ) : (\n                content\n            )}\n\n            {!hidePending &&\n                (profile?.status === 'PENDING' ||\n                    customProfile?.status === 'PENDING') &&\n                (noHint ? (\n                    <PendingWrapper bottomPosition={bottomPosition} data-test={dataTest && `${dataTest}-pending-icon`}>\n                        <HourGlass width={iconWidth} height={iconHeight} />\n                    </PendingWrapper>\n                ) : (\n                    <Tooltip\n                        trigger=\"hover\"\n                        label={'Pending Registration'}\n                        preset=\"pending-user\"\n                        dataTest=\"pending-user-tooltip\"\n                    >\n                        <PendingWrapper bottomPosition={bottomPosition} data-test={dataTest && `${dataTest}-pending-icon`}>\n                            <HourGlass width={iconWidth} height={iconHeight} />\n                        </PendingWrapper>\n                    </Tooltip>\n                ))}\n        </StyledAvatarContainer>\n    );\n};\n\nexport default AvatarPlaceholder;\n\n","import { motion } from 'framer-motion';\nimport styled from 'styled-components';\nimport { rgba } from 'polished';\n\nexport const StyledConfirmDialogBlacker = styled(motion.div)`\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1200;\n    background: ${rgba('#232e3a', 0.8)};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    color: var(--ps-black-main);\n`;\n\nexport const StyledConfirmDialog = styled(motion.div)<{\n    width?: number;\n    height?: number;\n    minHeight?: number;\n    padding?: string;\n}>`\n    width: ${props => props.width || '400'}px;\n    height: ${props => props.height ? `${props.height}px` : 'auto'};\n    min-height: ${props => `${props.minHeight ?? 200}px`};\n    box-shadow: 0 5px 20px -5px rgba(166, 174, 190, 0.5);\n    background-color: var(--ps-white-1);\n    border-radius: 8px;\n    display: flex;\n    flex-direction: column;\n    padding: ${props =>\n        !!props.padding ? props.padding : '32px 32px 32px 40px;'};\n`;\n\nexport const StyledTitle = styled.div<{\n    marginBottom?: number;\n    color?: string;\n}>`\n    font-size: 20px;\n    font-weight: 800;\n    letter-spacing: 0.5px;\n    color: ${props =>\n        !!props.color ? `${props.color}` : 'var(--ps-black-main)'};\n    text-align: left;\n    margin-bottom: ${props =>\n        !!props.marginBottom ? `${props.marginBottom}px` : '14px'};\n    text-align: left;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 24px;\n    letter-spacing: normal;\n`;\n\nexport const StyledDescription = styled.div<{ marginBottom?: number }>`\n    color: var(--ps-grey-1);\n    font-size: 13px;\n    text-align: left;\n    margin-bottom: ${props =>\n        !!props.marginBottom ? `${props.marginBottom}px` : '0px'};\n    white-space: break-spaces;\n`;\n\nexport const StyledActions = styled.div<{ center?: boolean }>`\n    display: flex;\n    justify-content: ${props => (props.center ? 'center' : 'flex-end')};\n`;\n\nexport const ButtonWrapper = styled.div`\n    margin-left: 16px;\n`;","import { FC } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '../Button';\n\nimport {\n    ButtonWrapper,\n    StyledActions,\n    StyledConfirmDialog,\n    StyledConfirmDialogBlacker,\n    StyledDescription,\n    StyledTitle,\n} from './styles';\nimport { DialogWrapperProps } from './types';\n\nconst DialogWrapper: FC<DialogWrapperProps> = ({\n    modalTitle,\n    description,\n    dialogType = 'WARNING',\n    confirmButtonText,\n    cancelButtonText,\n    onConfirm,\n    onCancel,\n    customization,\n    children,\n    onClickAway,\n    isLoading,\n    isConfirmDisabled,\n    dataTest = 'dialog-wrapper',\n}) => {\n    const container = document.querySelector('body') as HTMLElement;\n\n    const {\n        width = 400,\n        height = undefined,\n        minHeight = undefined,\n        padding = '32px 32px 32px 40px',\n        titleMarginBottom = 14,\n        descriptionMarginBottom = 30,\n        shouldCenterButton = false,\n    } = customization || {};\n\n    return createPortal(\n        <StyledConfirmDialogBlacker onClick={onClickAway}>\n            <StyledConfirmDialog\n                initial={{ scale: 0.8 }}\n                animate={{ scale: 1 }}\n                width={width}\n                height={height}\n                minHeight={minHeight}\n                padding={padding}\n                data-test={dataTest}\n            >\n                {!!modalTitle && (\n                    <StyledTitle\n                        marginBottom={titleMarginBottom}\n                        color={\n                            dialogType === 'DANGER'\n                                ? 'var(--ps-red-main)'\n                                : undefined\n                        }\n                        data-test={dataTest && `${dataTest}-title`}\n                    >\n                        {modalTitle}\n                    </StyledTitle>\n                )}\n                {!!description ? (\n                    <StyledDescription\n                        marginBottom={descriptionMarginBottom}\n                        data-test={dataTest && `${dataTest}-description`}\n                    >\n                        {description}\n                    </StyledDescription>\n                ) : (\n                    <div>{children}</div>\n                )}\n                {!!onCancel || !!onConfirm ? (\n                    <StyledActions center={shouldCenterButton}>\n                        {!!onCancel && (\n                            <ButtonWrapper>\n                                <Button\n                                    height=\"40px\"\n                                    width=\"128px\"\n                                    action={onCancel}\n                                    variant=\"inverse\"\n                                    color={\n                                        dialogType === 'INFO'\n                                            ? 'default'\n                                            : 'warning'\n                                    }\n                                    dataTest={dataTest && `${dataTest}-cancel`}\n                                >\n                                    {cancelButtonText\n                                        ? cancelButtonText\n                                        : 'Cancel'}\n                                </Button>\n                            </ButtonWrapper>\n                        )}\n                        {!!onConfirm && (\n                            <ButtonWrapper>\n                                <Button\n                                    height=\"40px\"\n                                    width=\"128px\"\n                                    action={onConfirm}\n                                    color={\n                                        dialogType === 'INFO'\n                                            ? 'default'\n                                            : 'warning'\n                                    }\n                                    loading={isLoading}\n                                    disabled={isConfirmDisabled}\n                                    dataTest={dataTest && `${dataTest}-confirm`}\n                                >\n                                    {confirmButtonText\n                                        ? confirmButtonText\n                                        : 'Yes, Delete'}\n                                </Button>\n                            </ButtonWrapper>\n                        )}\n                    </StyledActions>\n                ) : null}\n            </StyledConfirmDialog>\n        </StyledConfirmDialogBlacker>,\n        container\n    );\n};\n\n\n\nexport default DialogWrapper;","export enum UserStatus {\n    PENDING = 'PENDING',\n    ACTIVE = 'ACTIVE',\n    DELETED = 'DELETED',\n}\n\nexport const UserItemsStatusNames = {\n    [UserStatus.ACTIVE as string]: 'Registered',\n    [UserStatus.DELETED as string]: 'Inactive',\n    [UserStatus.PENDING as string]: 'Pending Registration',\n};\n\nexport const USER_NOT_FOUND_ERROR_MESSAGE = 'User can\\'t be found!';","import { find } from 'lodash';\n\nimport { SearchLibraryParams } from '../../../api/types';\nimport { SearchParams } from \"../../../constants/interfaces/filters\";\nimport { getSearchSortingValue } from \"../../../helpers/functions/search-params-helpers\";\n\nexport enum LibraryItemsStatus {\n    ACTIVE = 'ACTIVE',\n    DRAFT = 'DRAFT',\n    ARCHIVED = 'ARCHIVED',\n    DELETED = 'DELETED',\n    IN_PROGRESS = 'IN_PROGRESS',\n    COMPLETED = 'COMPLETED',\n    PENDING = 'PENDING',\n}\n\nconst libraryItemsStatusNames = {\n    [LibraryItemsStatus.ACTIVE as string]: 'Active',\n    [LibraryItemsStatus.DRAFT as string]: 'Draft',\n    [LibraryItemsStatus.ARCHIVED as string]: 'Archived',\n    [LibraryItemsStatus.DELETED as string]: 'Deleted',\n    [LibraryItemsStatus.IN_PROGRESS as string]: 'In Progress',\n    [LibraryItemsStatus.COMPLETED as string]: 'Completed',\n    [LibraryItemsStatus.PENDING as string]: 'Pending',\n};\n\nexport function libraryItemsStatusName(status?: string): string {\n    return (status && libraryItemsStatusNames[status]) || status || '';\n}\n\nexport const LIBRARY_STATUS = {\n    ACTIVE: 'active',\n    DRAFT: 'draft',\n    ARCHIVED: 'archived',\n};\n\nexport const LIBRARY_STATUS_NAMES = {\n    [LIBRARY_STATUS.ACTIVE]: 'Active',\n    [LIBRARY_STATUS.DRAFT]: 'Draft',\n    [LIBRARY_STATUS.ARCHIVED]: 'Archived',\n};\n\nexport const LIBRARY_STATUS_ITEMS: Array<{ name: string; value: string }> = [\n    {\n        name: LIBRARY_STATUS_NAMES[LIBRARY_STATUS.ACTIVE],\n        value: LIBRARY_STATUS.ACTIVE,\n    },\n    {\n        name: LIBRARY_STATUS_NAMES[LIBRARY_STATUS.DRAFT],\n        value: LIBRARY_STATUS.DRAFT,\n    },\n    {\n        name: LIBRARY_STATUS_NAMES[LIBRARY_STATUS.ARCHIVED],\n        value: LIBRARY_STATUS.ARCHIVED,\n    },\n];\n\n/**\n * @function createSearchLibraryParams\n * @param { SearchParams } searhParams\n * @returns { SearchLibraryParams }\n */\n export const createSearchLibraryParams = (\n    searchParams: SearchParams\n): SearchLibraryParams => {\n    return {\n        limit: searchParams.limit ?? 20,\n        offset: searchParams.offset ?? 0,\n        query: searchParams.searchTerm,\n        sort: getSearchSortingValue(searchParams.orderBy, ''),\n        status: (\n            find(searchParams?.filters, { field: 'status' })?.value as string[]\n        )\n            ?.map(status => status.toUpperCase())\n            ?.join(','),\n        labels: searchParams?.labelIDs?.join(','),\n        companies: searchParams.companyId?.toString()\n    };\n};","export enum BulkActionAvailability {\n    AVAILABLE_FOR_ALL,\n    AVAILABLE_FOR_SOME,\n    UNAVAILABLE_FOR_ALL,\n}\n\nexport function canPerformBulkAction<TItem>(items: TItem[] | undefined, canPerformAction: (item: TItem) => boolean): BulkActionAvailability {\n    if (!!items?.length) {\n        const availableFor = items.filter(canPerformAction);\n        if (availableFor.length === items.length) {\n            return BulkActionAvailability.AVAILABLE_FOR_ALL;\n        }\n        else if (availableFor.length > 0 && availableFor.length < items.length) {\n            return BulkActionAvailability.AVAILABLE_FOR_SOME;\n        }\n    }\n    return BulkActionAvailability.UNAVAILABLE_FOR_ALL;\n}\n\nexport function bulkAvailabilityToFlags(bulkActionAvailability: BulkActionAvailability) {\n    const visibleAvailabilities = [BulkActionAvailability.AVAILABLE_FOR_ALL, BulkActionAvailability.AVAILABLE_FOR_SOME];\n    const disabledAvailabilities = [BulkActionAvailability.AVAILABLE_FOR_SOME, BulkActionAvailability.UNAVAILABLE_FOR_ALL];\n    return {\n        visible: visibleAvailabilities.includes(bulkActionAvailability),\n        disabled: disabledAvailabilities.includes(bulkActionAvailability),\n    };\n}","import { useMemo } from \"react\";\nimport { PractisSets, PractisSetStatuses } from \"../../../constants/interfaces/PractisSets\";\nimport { UserProfile } from \"../../../constants/interfaces/User\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\n\nexport enum PractisSetActions {\n    EDIT,\n    ASSIGN_LABELS,\n    DUPLICATE,\n    ARCHIVE,\n    RESTORE,\n    DELETE,\n}\n\nfunction createPractisSetActionsHelper(\n    loggedInUser: UserProfile | undefined\n) {\n    const canEdit = (practisSet: PractisSets) =>\n        practisSet.status !== PractisSetStatuses.DELETED &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.UPDATE_PRACTIS_SET);\n\n    const canAssignLabels = (practisSet: PractisSets) =>\n        practisSet.status !== PractisSetStatuses.DELETED &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.ASSIGN_PRACTIS_SET_LABEL);\n\n    const canAssignUsers = (practisSet: PractisSets) => \n        practisSet.status === PractisSetStatuses.ACTIVE &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.ASSIGN_ENROLLMENT);\n\n    const canDuplicate = (practisSet: PractisSets) =>\n        (practisSet.status === PractisSetStatuses.DRAFT ||\n            practisSet.status === PractisSetStatuses.ACTIVE) &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.COPY_PRACTIS_SET);\n\n    const canArchive = (practisSet: PractisSets) =>\n        (practisSet.status === PractisSetStatuses.DRAFT ||\n            practisSet.status === PractisSetStatuses.ACTIVE) &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.ARCHIVE_PRACTIS_SET);\n\n    const canRestore = (practisSet: PractisSets) =>\n        practisSet.status === PractisSetStatuses.ARCHIVED &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.RESTORE_PRACTIS_SET);\n\n    const canDelete = (practisSet: PractisSets) =>\n        practisSet.status === PractisSetStatuses.ARCHIVED &&\n        hasPermission(loggedInUser, NEW_PERMISSIONS.DELETE_PRACTIS_SET);\n\n    const getBulkActions = (practisSets: PractisSets[] | undefined) =>\n        getBulkActionsAvailability(practisSets, [\n            getBulkActionAvailabilityItem(\n                PractisSetActions.ASSIGN_LABELS,\n                practisSets,\n                canAssignLabels\n            ),\n            getBulkActionAvailabilityItem(\n                PractisSetActions.DUPLICATE,\n                practisSets,\n                canDuplicate\n            ),\n            getBulkActionAvailabilityItem(\n                PractisSetActions.ARCHIVE,\n                practisSets,\n                canArchive\n            ),\n            getBulkActionAvailabilityItem(\n                PractisSetActions.RESTORE,\n                practisSets,\n                canRestore\n            ),\n            getBulkActionAvailabilityItem(\n                PractisSetActions.DELETE,\n                practisSets,\n                canDelete\n            ),\n        ]);\n\n    return {\n        canEdit,\n        canAssignUsers,\n        canAssignLabels,\n        canDuplicate,\n        canArchive,\n        canRestore,\n        canDelete,\n        getBulkActions,\n    };\n}\n\nexport type PractisSetActionsHelper = ReturnType<typeof createPractisSetActionsHelper>;\n\nexport function usePractisSetActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createPractisSetActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}","import { Scenario, ScenarioStatuses } from '../../../constants/interfaces/Scenario';\nimport { UserProfile } from \"../../../constants/interfaces/User\";\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { useMemo } from 'react';\n\nexport enum ScenarioActions {\n    EDIT,\n    ASSIGN_LABELS,\n    DUPLICATE,\n    ARCHIVE,\n    RESTORE,\n    DELETE,\n    GENERATE_CHALLENGE,\n    DOWNLOAD_PDF,\n}\n\nfunction createScenarioActionsHelper(loggedInUser: UserProfile | undefined) {\n    const canEdit = (scenario: Scenario) =>\n        scenario.status !== ScenarioStatuses.DELETED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.UPDATE_SCENARIO);\n    \n    const canAssignLabels = (scenario: Scenario) =>\n        scenario.status !== ScenarioStatuses.DELETED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.ASSIGN_SCENARIO_LABEL);\n    \n    const canDuplicate = (scenario: Scenario) =>\n        (scenario.status === ScenarioStatuses.DRAFT || scenario.status === ScenarioStatuses.ACTIVE)\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.COPY_SCENARIO);\n    \n    const canArchive = (scenario: Scenario) =>\n        (scenario.status === ScenarioStatuses.DRAFT || scenario.status === ScenarioStatuses.ACTIVE)\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.ARCHIVE_SCENARIO);\n    \n    const canRestore = (scenario: Scenario) =>\n        scenario.status === ScenarioStatuses.ARCHIVED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.RESTORE_SCENARIO);\n    \n    const canDelete = (scenario: Scenario) =>\n        scenario.status === ScenarioStatuses.ARCHIVED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.DELETE_SCENARIO);\n\n    const canGenerateChallenge = (scenario: Scenario) =>\n        scenario.status !== ScenarioStatuses.DELETED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.GENERATE_CHALLENGE);\n\n    const canDownloadPdf = (scenario: Scenario) =>\n        scenario.status === ScenarioStatuses.DRAFT || scenario.status === ScenarioStatuses.ACTIVE;\n    \n    const getBulkActions = (scenarios: Scenario[] | undefined) =>\n        getBulkActionsAvailability(\n            scenarios,\n            [\n                getBulkActionAvailabilityItem(\n                    ScenarioActions.ASSIGN_LABELS,\n                    scenarios,\n                    canAssignLabels\n                ),\n                getBulkActionAvailabilityItem(\n                    ScenarioActions.DUPLICATE,\n                    scenarios,\n                    canDuplicate\n                ),\n                getBulkActionAvailabilityItem(\n                    ScenarioActions.ARCHIVE,\n                    scenarios,\n                    canArchive\n                ),\n                getBulkActionAvailabilityItem(\n                    ScenarioActions.RESTORE,\n                    scenarios,\n                    canRestore\n                ),\n                getBulkActionAvailabilityItem(\n                    ScenarioActions.DELETE,\n                    scenarios,\n                    canDelete\n                ),\n            ]\n        );\n\n    return {\n        canEdit,\n        canAssignLabels,\n        canDuplicate,\n        canArchive,\n        canRestore,\n        canDelete,\n        getBulkActions,\n        canGenerateChallenge,\n        canDownloadPdf,\n    };\n}\n\nexport type ScenarioActionsHelper = ReturnType<typeof createScenarioActionsHelper>;\n\nexport function useScenarioActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createScenarioActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}","import { useMemo } from \"react\";\nimport { Challenge, ChallengeStatuses } from \"../../../constants/interfaces/Challenge\";\nimport { UserProfile } from \"../../../constants/interfaces/User\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\n\nexport enum ChallengeActions {\n    EDIT,\n    ASSIGN_LABELS,\n    DUPLICATE,\n    ARCHIVE,\n    RESTORE,\n    DELETE,\n}\n\nfunction createChallengeActionsHelper(loggedInUser: UserProfile | undefined) {\n    const canEdit = (challenge: Challenge) =>\n        challenge.status !== ChallengeStatuses.DELETED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.UPDATE_CHALLENGE);\n    \n    const canAssignLabels = (challenge: Challenge) =>\n        challenge.status !== ChallengeStatuses.DELETED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.ASSIGN_CHALLENGE_LABEL);\n    \n    const canDuplicate = (challenge: Challenge) =>\n        (challenge.status === ChallengeStatuses.DRAFT || challenge.status === ChallengeStatuses.ACTIVE)\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.COPY_CHALLENGE);\n    \n    const canArchive = (challenge: Challenge) =>\n        (challenge.status === ChallengeStatuses.DRAFT || challenge.status === ChallengeStatuses.ACTIVE)\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.ARCHIVE_CHALLENGE);\n    \n    const canRestore = (challenge: Challenge) =>\n        challenge.status === ChallengeStatuses.ARCHIVED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.RESTORE_CHALLENGE);\n    \n    const canDelete = (challenge: Challenge) =>\n        challenge.status === ChallengeStatuses.ARCHIVED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.DELETE_CHALLENGE);\n\n    const getBulkActions = (challenges: Challenge[] | undefined) =>\n        getBulkActionsAvailability(\n            challenges,\n            [\n                getBulkActionAvailabilityItem(\n                    ChallengeActions.ASSIGN_LABELS,\n                    challenges,\n                    canAssignLabels\n                ),\n                getBulkActionAvailabilityItem(\n                    ChallengeActions.DUPLICATE,\n                    challenges,\n                    canDuplicate\n                ),\n                getBulkActionAvailabilityItem(\n                    ChallengeActions.ARCHIVE,\n                    challenges,\n                    canArchive\n                ),\n                getBulkActionAvailabilityItem(\n                    ChallengeActions.RESTORE,\n                    challenges,\n                    canRestore\n                ),\n                getBulkActionAvailabilityItem(\n                    ChallengeActions.DELETE,\n                    challenges,\n                    canDelete\n                ),\n            ]\n        );\n\n    return {\n        canEdit,\n        canAssignLabels,\n        canDuplicate,\n        canArchive,\n        canRestore,\n        canDelete,\n        getBulkActions,\n    };\n}\n\nexport type ChallengeActionsHelper = ReturnType<typeof createChallengeActionsHelper>;\n\nexport function useChallengeActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createChallengeActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\n\nexport type PermissionsStateSelector = (state: any) => NEW_PERMISSIONS[];\n\nexport const PermissionsStateSelectorContext = React.createContext<\n    PermissionsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function usePermissionsState(): NEW_PERMISSIONS[] {\n    return useSelector(useContext(PermissionsStateSelectorContext));\n}\n","import { PractisSetV2 } from \"./PractisSets\";\r\nimport { SubmissionV2 } from \"./Reviews\";\r\nimport { Scenario } from \"./Scenario\";\r\nimport { UserInfo } from \"./UserInfo\";\r\n\r\nexport enum EnrollmentStatus {\r\n    ENROLLED = 'ENROLLED',\r\n    PENDING = 'PENDING',\r\n    COMPLETED = 'COMPLETED',\r\n}\r\n\r\nexport enum EnrollmentStatusEnum {\r\n    IN_PROGRESS = 'IN_PROGRESS',\r\n    PENDING = 'PENDING',\r\n    COMPLETED = 'COMPLETED',\r\n}\r\n\r\nexport enum TrainingContentType {\r\n    SCENARIO = 'SCENARIO',\r\n    CHALLENGE = 'CHALLENGE',\r\n}\r\n\r\nexport interface Enrollments {\r\n    id?: number;\r\n    userId?: number;\r\n    practisSetId?: number;\r\n    status?: EnrollmentStatus | '';\r\n    progressValue?: number;\r\n    enrolledAt?: string;\r\n    averageAccuracy?: number;\r\n    declinedAt?: string;\r\n    createdAt?: string;\r\n    completedAt?: string;\r\n    submissionsAverageScore?: number;\r\n    updatedAt?: string;\r\n    progress?: {\r\n        id: number;\r\n        type: 'CHALLENGE' | 'SCENARIO';\r\n        status: 'AVAILABLE' | 'PASSED' | 'UNAVAILABLE';\r\n    }[];\r\n    daysActive: number;\r\n    displayStatus?: EnrollmentStatusEnum | '';\r\n    challengesWithSentSubmissionCount?: number | null;\r\n    weeklyActiveDays: number;\r\n    monthlyActiveDays: number;\r\n    totalActiveDays: number;\r\n    trainingTime: number;\r\n    lastTrainingAt?: string;\r\n    lastTraining?: string;\r\n    currentRepsCountTotal?: number;\r\n    minRepsCountTotal?: number;\r\n    passedScenarioCount?: number;\r\n    minutesPerDay?: number;\r\n    totalTimeInMinutes?: number;\r\n    lastActivity?: any;\r\n    dueDate?: string;\r\n    hasOverdue?: boolean;\r\n}\r\n\r\nexport interface EnrollmentInterface {\r\n    id: number;\r\n    practisSet: PractisSetV2;\r\n    user: UserInfo;\r\n    dueDate: string;\r\n    status: string;\r\n    progress: number;\r\n    averageAccuracy: number;\r\n    trainingTime: number;\r\n    createdAt: string;\r\n    startedAt: string;\r\n    lastTrainingAt: string;\r\n    completedAt: string;\r\n    hasOverdue: boolean;\r\n    passedScenarioCount: number;\r\n    passedChallengeCount: number;\r\n}\r\n\r\nexport interface EnrollmentProgress {\r\n    content: {\r\n        title: string;\r\n        scenarioId?: number;\r\n        scenario?: Scenario;\r\n        challengeId?: number;\r\n        type: string;\r\n        minRepsCount: number;\r\n        position: number;\r\n        cover: {\r\n            id: number;\r\n            fileUrl: string;\r\n        };\r\n    };\r\n    progress: {\r\n        submissions?: SubmissionV2[];\r\n        submission?: SubmissionV2;\r\n        completedAt?: string;\r\n        countReps: number;\r\n        countTries?: number;\r\n    };\r\n}\r\n\r\nexport interface EnrollmentDailyTraining {\r\n    date: string;\r\n    timeSpent: number;\r\n}\r\n\r\n","import { PaginationResult } from '../../../../constants/interfaces/PaginationResult';\nimport { DraftUser } from '../../../../constants/interfaces/Draft';\n\nexport enum ACTIONS {\n    SEARCH_DRAFT_USERS_START = 'SEARCH_DRAFT_USERS_START',\n    SEARCH_DRAFT_USERS_SUCCESS = 'SEARCH_DRAFT_USERS_SUCCESS',\n    SEARCH_DRAFT_USERS_FAILURE = 'SEARCH_DRAFT_USERS_FAILURE',\n    MODIFY_DRAFT_USERS = 'MODIFY_DRAFT_USERS',\n    MODIFY_DRAFT_USERS_WITHOUT_VALIDATION = 'MODIFY_DRAFT_USERS_WITHOUT_VALIDATION',\n    RESET_DRAFTS_PAGE = 'RESET_DRAFTS_PAGE',\n\n    UPDATE_DRAFT_USERS_START = 'UPDATE_DRAFT_USERS_START',\n    UPDATE_DRAFT_USERS_SUCCESS = 'UPDATE_DRAFT_USERS_SUCCESS',\n    UPDATE_DRAFT_USERS_FAILURE = 'UPDATE_DRAFT_USERS_FAILURE',\n}\n\nexport function searchDraftUsersStart() {\n    return {\n        type: ACTIONS.SEARCH_DRAFT_USERS_START as ACTIONS.SEARCH_DRAFT_USERS_START,\n    };\n}\n\nexport function searchDraftUsersSuccess(data: PaginationResult<DraftUser>) {\n    return {\n        type: ACTIONS.SEARCH_DRAFT_USERS_SUCCESS as ACTIONS.SEARCH_DRAFT_USERS_SUCCESS,\n        data,\n    };\n}\n\nexport function searchDraftUsersFailure(error: any) {\n    return {\n        type: ACTIONS.SEARCH_DRAFT_USERS_FAILURE as ACTIONS.SEARCH_DRAFT_USERS_FAILURE,\n        error,\n    };\n}\n\nexport function modifyDraftUsersAction(data: PaginationResult<DraftUser>) {\n    return {\n        type: ACTIONS.MODIFY_DRAFT_USERS as ACTIONS.MODIFY_DRAFT_USERS,\n        data,\n    };\n}\n\nexport function modifyDraftUsersWithoutValidationAction(\n    data: PaginationResult<DraftUser>\n) {\n    return {\n        type: ACTIONS.MODIFY_DRAFT_USERS_WITHOUT_VALIDATION as ACTIONS.MODIFY_DRAFT_USERS_WITHOUT_VALIDATION,\n        data,\n    };\n}\n\nexport function resetDraftsPageAction() {\n    return {\n        type: ACTIONS.RESET_DRAFTS_PAGE as ACTIONS.RESET_DRAFTS_PAGE,\n    };\n}\n\nexport function updateDraftUsersStart() {\n    return {\n        type: ACTIONS.UPDATE_DRAFT_USERS_START as ACTIONS.UPDATE_DRAFT_USERS_START,\n    };\n}\n\nexport function updateDraftUsersSuccess(\n    data: Partial<DraftUser>,\n    updateType:\n        | 'draft-created'\n        | 'draft-updated'\n        | 'draft-deleted'\n        | 'user-invited'\n) {\n    return {\n        type: ACTIONS.UPDATE_DRAFT_USERS_SUCCESS as ACTIONS.UPDATE_DRAFT_USERS_SUCCESS,\n        data,\n        updateType,\n    };\n}\n\nexport function updateDraftUsersFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_DRAFT_USERS_FAILURE as ACTIONS.UPDATE_DRAFT_USERS_FAILURE,\n        error,\n    };\n}\n","import { UserInterface } from './User';\nimport { Script } from './Script';\n\nexport enum ScenarioStatuses {\n    DRAFT = 'DRAFT',\n    ACTIVE = 'ACTIVE',\n    ARCHIVED = 'ARCHIVED',\n    DELETED = 'DELETED',\n}\n\nexport type Status =\n    | ScenarioStatuses.DRAFT\n    | ScenarioStatuses.ACTIVE\n    | ScenarioStatuses.ARCHIVED\n    | ScenarioStatuses.DELETED;\n\nexport interface Scenario {\n    uniqueId?: string;\n    id?: number;\n    scriptId?: number;\n    title: string;\n    type?: 'SCENARIO';\n    description: string;\n    instructions: string;\n    createdAt?: string;\n    updatedAt?: string;\n    companyId?: string;\n    creatorId?: number;\n    status: Status;\n    script: Script;\n    creator?: UserInterface;\n    checked?: boolean;\n    labels?: any[];\n    updatedLabels?: number[];\n    minRepsCount?: number;\n}\n","import styled from 'styled-components';\nimport { isAdminPortal } from '../../../helpers/functions/general';\nimport PractisAdminPlatformLogo from '../../icons/PractisAdminPlatformLogo';\nimport PractisLogo from '../../icons/PractisLogo';\n\nexport const StyledLogoContainer = styled.div<{ width: number, marginBottom?: number }>`\n    width: ${props => props.width}px;\n    max-width: 100%;\n    margin: 0 auto;\n    margin-bottom: ${props => `${props.marginBottom ?? 57}px`};\n`;\n\nexport const StyledLogo = styled(isAdminPortal() ? PractisAdminPlatformLogo : PractisLogo)`\n    width: 100%;\n    color: ${props => props.theme.Colors.white};\n`;","import { AuthLogoProps } from './types';\nimport {\n    StyledLogoContainer,\n    StyledLogo\n} from './styles';\n\nfunction AuthLogoView({ width, marginBottom }: AuthLogoProps) {\n    return (\n        <StyledLogoContainer\n            width={width ? width : 153}\n            marginBottom={marginBottom}\n            data-test=\"practis-logo\"\n        >\n            <StyledLogo />\n        </StyledLogoContainer>\n    );\n}\n\nexport default AuthLogoView;\n","import AuthLogoView from './view';\n\nexport default AuthLogoView;","import styled from 'styled-components';\n\nexport const BackgroundWrapper = styled.div`\n    height: 100vh;\n    width: 100%;\n    position: fixed;\n    background: var(--ps-graphite-1);\n    overflow: auto;\n    z-index: 1;\n`;\n\nexport const BackgroundImage = styled.img`\n    max-height: 90%;\n    max-width: 100%;\n    right: 0;\n    bottom: 0;\n    position: fixed;\n    z-index: 1;\n`;\n\nexport const PageContainer = styled.div`\n    position: relative;\n    z-index: 2;\n    height: 100vh;\n    overflow: auto;\n    box-sizing: border-box;\n`\n\nexport const LogoContainer = styled.div<{\n    desktopMinWidth: number;\n    heightToShowScroll: number\n}>`\n    height: 44px;\n\n    @media(max-width:767px) {\n        padding-top: 24px;\n    }\n    @media(min-width:768px) {\n        padding-top: 56px;\n    }\n    @media(min-width: ${props => props.desktopMinWidth}px) {\n        padding-top: 48px;\n    }\n    @media(max-height: ${props => props.heightToShowScroll}px) {\n        padding-bottom: 20px;\n    }\n`\n\nexport const PageContent = styled.div<{\n    desktopMinWidth: number;\n    heightToShowScroll: number;\n    contentWidth?: number;\n}>`\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    margin: 0 auto;\n    box-sizing: border-box;\n    ${props => props.contentWidth && `width: ${props.contentWidth}px;`};\n   \n    @media(max-width:767px) {\n        height: calc(100vh - 69px);\n        padding-bottom: 69px;\n    }\n    @media(min-width: 768px) {\n        height: calc(100vh - 101px);\n        padding-bottom: 101px;\n    }\n    @media(min-width: ${props => props.desktopMinWidth}px) {\n        height: calc(100vh - 93px);\n        padding-bottom: 93px;\n    }\n    @media(max-height: ${props => props.heightToShowScroll}px) {\n        height: auto!important;\n        padding-bottom: 142px;\n    }\n`;\n\nexport const Footer = styled.div`\n    position: absolute;\n    bottom: 24px;\n    display: flex;\n`;\n\nexport const FooterLink = styled.a`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    text-decoration: none;\n`;\n\nexport const FooterLinkSeparator = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    padding: 0 3px;\n`;","import authBackground from '../../../assets/images/auth-background.png';\nimport authBackground2x from '../../../assets/images/auth-background2x.png';\nimport authBackground3x from '../../../assets/images/auth-background3x.png';\nimport useWindowDimensions from '../../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../../theme/variables';\nimport AuthLogo from '../AuthLogo';\nimport { LoginAuthWrapperProps } from './types';\nimport {\n    BackgroundWrapper,\n    BackgroundImage,\n    PageContainer,\n    LogoContainer,\n    PageContent,\n    Footer,\n    FooterLink,\n    FooterLinkSeparator,\n} from './styles';\n\nfunction LoginAuthWrapperView({\n    desktopMinWidth = 1024,\n    heightToShowScroll = 500,\n    contentWidth,\n    hideLogo,\n    hideFooter,\n    children\n}: LoginAuthWrapperProps) {\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.small;\n\n    return <>\n        <BackgroundWrapper>\n            <BackgroundImage\n                src={authBackground}\n                srcSet={`${authBackground2x} 2x, ${authBackground3x} 3x`}\n            />\n        </BackgroundWrapper>\n        <PageContainer>\n            <LogoContainer desktopMinWidth={desktopMinWidth} heightToShowScroll={heightToShowScroll}>\n                {!hideLogo && <AuthLogo width={isMobile ? 110 : 141} marginBottom={0} />}\n            </LogoContainer>\n            <PageContent\n                desktopMinWidth={desktopMinWidth}\n                heightToShowScroll={heightToShowScroll}\n                contentWidth={contentWidth}\n            >\n                {children}\n                {!hideFooter && <Footer>\n                    <FooterLink\n                        href=\"https://www.gopractis.com/document-privacy-policy\"\n                        target=\"_blank\"\n                        data-test=\"privacy-policy-link\"\n                    >\n                        Privacy Policy\n                    </FooterLink>\n                    <FooterLinkSeparator>•</FooterLinkSeparator>\n                    <FooterLink\n                        href=\"https://www.gopractis.com/document-terms-of-use\"\n                        target=\"_blank\"\n                        data-test=\"terms-of-use-link\"\n                    >\n                        Terms of Use\n                    </FooterLink>\n                    <FooterLinkSeparator>•</FooterLinkSeparator>\n                    <FooterLink\n                        href=\"https://www.gopractis.com/document-terms-of-service\"\n                        target=\"_blank\"\n                        data-test=\"terms-of-service-link\"\n                    >\n                        Terms of Service\n                    </FooterLink>\n                </Footer>}\n            </PageContent>\n        </PageContainer>\n    </>\n}\n\nexport default LoginAuthWrapperView;","import LoginAuthWrapperView from './view'\n\nexport default LoginAuthWrapperView;","import { useCallback } from 'react';\nimport { SearchParams } from '../../constants/interfaces/filters';\n\nconst MIN_CHARACTERS = 0;\n\nexport const useSearchDebounced = (\n    searchEntity: (searchParams: SearchParams, isRefreshed?: boolean) => void,\n    minChars: number = MIN_CHARACTERS\n) => {\n    return useCallback(\n        (searchParams?: SearchParams, isRefreshed?: boolean) => {\n            if (!searchParams) {\n                return searchEntity(null as unknown as SearchParams);\n            }\n            const searchTermLength = searchParams.searchTerm.length;\n            if (searchTermLength > minChars || searchTermLength < 1) {\n                return searchEntity(searchParams, isRefreshed);\n            }\n        },\n        [searchEntity, minChars]\n    );\n};\n","export const getSearchSortingValue = (\n    orderBy: {\n        field?: string;\n        asc?: boolean;\n    } | null,\n    defaultField: string,\n    isAscByDefault?: boolean) => {\n        if (orderBy?.field)\n            return `${orderBy.field}_${orderBy.asc ? 'asc' : 'desc'}`;\n        if (typeof isAscByDefault === 'undefined')\n            return defaultField;\n        return `${defaultField}_${isAscByDefault ? 'asc' : 'desc'}`;\n}","import { isEmpty } from 'lodash';\r\n\r\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport {\r\n    getFullLibraryPractisSetsFailure,\r\n    getFullLibraryPractisSetsStart,\r\n    getFullLibraryPractisSetsSuccess,\r\n    searchLibraryChallengesFailure,\r\n    searchLibraryChallengesStart,\r\n    searchLibraryChallengesSuccess,\r\n    searchLibraryPractisSetsFailure,\r\n    searchLibraryPractisSetsStart,\r\n    searchLibraryPractisSetsSuccess,\r\n    searchLibraryScenariosFailure,\r\n    searchLibraryScenariosStart,\r\n    searchLibraryScenariosSuccess,\r\n    setSearchTermForLibraryPractisSet,\r\n    updateAllChallengesCheckedState,\r\n    updateAllPractisSetsCheckedState,\r\n    updateAllScenarioCheckedState,\r\n    updateAssignedLibraryPractisSet,\r\n    updateLibraryChallengeCheckedState,\r\n    updateLibraryChallengeFailure,\r\n    updateLibraryChallengeStart,\r\n    updateLibraryChallengeSuccess,\r\n    updateLibraryPractisSetCheckedState,\r\n    updateLibraryPractisSetFailure,\r\n    updateLibraryPractisSetStart,\r\n    updateLibraryPractisSetSuccess,\r\n    updateLibraryScenarioCheckedState,\r\n    updateLibraryScenarioFailure,\r\n    updateLibraryScenarioStart,\r\n    updateLibraryScenarioSuccess,\r\n    updateSeparateAssignedLibraryPractisSet,\r\n} from './actions';\r\nimport { SearchParams } from '../../../constants/interfaces/filters';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useCallback } from 'react';\r\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\r\nimport {\r\n    useDeleteChallengesApi,\r\n    useDeletePractisSetsApi,\r\n    useDeleteScenariosApi,\r\n    useDownloadScenarioReportApi,\r\n    useSearchChallengesApi,\r\n    useSearchPractisSetsApi,\r\n    useSearchScenariosApi,\r\n    useDeletePractisSetLabelsApi,\r\n    useDeleteScenarioLabelApi,\r\n    useDeleteChallengeLabelsApi,\r\n    useUpdatePractisSetStatusApi,\r\n    useUpdateScenarioStatusApi,\r\n    useUpdateChallengeStatusApi,\r\n} from '../../../api';\r\nimport { Scenario } from '../../../constants/interfaces/Scenario';\r\nimport { Challenge } from '../../../constants/interfaces/Challenge';\r\nimport { useHistory } from 'react-router';\r\nimport ROUTES from '../../../routes/routes';\r\nimport { LocationState, pushModal } from '../../../tools/router';\r\nimport { History } from 'history';\r\nimport { fileDownload } from '../../../helpers/functions/file-download';\r\nimport {plural} from \"../../../helpers/functions/plural\";\r\nimport { createSearchLibraryParams } from '../tools';\r\nimport { LibraryEntity } from './types';\r\nimport { usePortableLabelsState } from '../../portableLabels/store/states';\r\nimport { findAllChildIds } from '../../../helpers/functions/tree-helpers';\r\nimport { CREATE_CHALLENGE_ACTION } from '../services/LibraryBulkActionsService/constants';\r\n\r\nexport const useSearchPractisSetsService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchPractisSetsApi = useSearchPractisSetsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (searchParams: SearchParams, shouldSetStore = true) => {\r\n\r\n            const searchPractisSetsParams =\r\n                createSearchLibraryParams(searchParams);\r\n\r\n            shouldSetStore && dispatch(searchLibraryPractisSetsStart());\r\n            return searchPractisSetsApi(searchPractisSetsParams)\r\n                .then(data => {\r\n                    if (shouldSetStore) {\r\n                        dispatch(searchLibraryPractisSetsSuccess(data));\r\n                    }\r\n\r\n                    return data.items;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    if (shouldSetStore) {\r\n                        dispatch(\r\n                            searchLibraryPractisSetsFailure(error.message)\r\n                        );\r\n                        showMessage(error.message, 'error');\r\n                    }\r\n                });\r\n        },\r\n        [dispatch, searchPractisSetsApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGetFullPractisSetsService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchPractisSetsApi = useSearchPractisSetsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (searchParams: SearchParams) => {\r\n            const searchPractisSetsParams =\r\n            createSearchLibraryParams(searchParams);\r\n\r\n            dispatch(getFullLibraryPractisSetsStart());\r\n            searchPractisSetsApi(searchPractisSetsParams)\r\n                .then(data => {\r\n                    dispatch(getFullLibraryPractisSetsSuccess(data));\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(getFullLibraryPractisSetsFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, searchPractisSetsApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useUpdateAssignedLibraryPractisSetService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (assignedPractisSets: number[]) => {\r\n            dispatch(updateAssignedLibraryPractisSet(assignedPractisSets));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateSeparateAssignedLibraryPractisSetService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (assignedPractisSets: number[]) => {\r\n            dispatch(\r\n                updateSeparateAssignedLibraryPractisSet(assignedPractisSets)\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSetSearchTermForLibraryPractisSetService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (value: string) => {\r\n            dispatch(setSearchTermForLibraryPractisSet(value));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useDeletePractisSetsService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useDeletePractisSetsService = () => {\r\n    const deletePractisSetsApi = useDeletePractisSetsApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { number[] } practisSetIds\r\n     * @param { Function } successCallback\r\n     * @returns { Promise }\r\n     */\r\n     return useCallback(\r\n        (practisSetIds: number[], successCallback?: () => void) => {\r\n            return deletePractisSetsApi(practisSetIds)\r\n                .then(() => {\r\n                    const message = `${practisSetIds.length} Practis ${plural(practisSetIds.length, 'Set has', 'Sets have')} been deleted`;\r\n                    showMessage(message, 'success');\r\n\r\n                    successCallback?.();\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [deletePractisSetsApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useArchivePractisSetService = () => {\r\n    const dispatch = useDispatch();\r\n    const updatePractisSetStatusApi = useUpdatePractisSetStatusApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (practisSetIds: number[]) => {\r\n            dispatch(updateLibraryPractisSetStart());\r\n            return updatePractisSetStatusApi('archive', practisSetIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLibraryPractisSetSuccess(data, 'update'))\r\n                    );\r\n\r\n                    showMessage('Practis Set has been archived', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLibraryPractisSetFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, updatePractisSetStatusApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useRestorePractisSetService = () => {\r\n    const dispatch = useDispatch();\r\n    const updatePractisSetStatusApi = useUpdatePractisSetStatusApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (practisSetIds: number[]) => {\r\n            dispatch(updateLibraryPractisSetStart());\r\n            return updatePractisSetStatusApi('draft', practisSetIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLibraryPractisSetSuccess(data, 'update'))\r\n                    );\r\n\r\n                    showMessage('Practis Set has been restored', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLibraryPractisSetFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, updatePractisSetStatusApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchScenariosService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchScenariosApi = useSearchScenariosApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (searchParams: SearchParams, shouldSetStore = true) => {\r\n            const searchScenariosParams =\r\n                createSearchLibraryParams(searchParams);\r\n\r\n            shouldSetStore && dispatch(searchLibraryScenariosStart());\r\n\r\n            return searchScenariosApi(searchScenariosParams)\r\n                .then(data => {\r\n                    if (shouldSetStore) {\r\n                        dispatch(searchLibraryScenariosSuccess(data));\r\n                    }\r\n\r\n                    return data.items;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    if (shouldSetStore) {\r\n                        dispatch(searchLibraryScenariosFailure(error.message));\r\n                        showMessage(error.message, 'error');\r\n                    }\r\n                });\r\n        },\r\n        [dispatch, searchScenariosApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useDeleteScenariosService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useDeleteScenariosService = () => {\r\n    const deleteScenariosApi = useDeleteScenariosApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { number[] } scenarioIds\r\n     * @param { Function } successCallback\r\n     * @returns { Promise }\r\n     */\r\n     return useCallback(\r\n        (scenarioIds: number[], successCallback?: () => void) => {\r\n            return deleteScenariosApi(scenarioIds)\r\n                .then(data => {\r\n                    const message = `${scenarioIds.length} ${plural(scenarioIds.length, 'Scenario has', 'Scenarios have')} been deleted`;\r\n                    showMessage(message, 'success');\r\n\r\n                    successCallback?.();\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [deleteScenariosApi, showMessage]\r\n    );\r\n};\r\n\r\n\r\nexport const useArchiveScenarioService = () => {\r\n    const dispatch = useDispatch();\r\n    const updateScenarioStatusApi = useUpdateScenarioStatusApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (scenarioIds: number[]) => {\r\n            dispatch(updateLibraryScenarioStart());\r\n            return updateScenarioStatusApi('archive', scenarioIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLibraryScenarioSuccess(data, 'update'))\r\n                    );\r\n\r\n                    showMessage('Scenario has been archived', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLibraryScenarioFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, updateScenarioStatusApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useRestoreScenarioService = () => {\r\n    const dispatch = useDispatch();\r\n    const updateScenarioStatusApi = useUpdateScenarioStatusApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (scenarioIds: number[]) => {\r\n            dispatch(updateLibraryScenarioStart());\r\n            return updateScenarioStatusApi('draft', scenarioIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLibraryScenarioSuccess(data, 'update'))\r\n                    );\r\n\r\n                    showMessage('Scenario has been restored', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLibraryScenarioFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, updateScenarioStatusApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchChallengesService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchChallengesApi = useSearchChallengesApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (searchParams: SearchParams, shouldSetStore = true) => {\r\n            const searchChallengesParams =\r\n                createSearchLibraryParams(searchParams);\r\n            shouldSetStore && dispatch(searchLibraryChallengesStart());\r\n\r\n            return searchChallengesApi(searchChallengesParams)\r\n                .then(data => {\r\n                    if (shouldSetStore) {\r\n                        dispatch(searchLibraryChallengesSuccess(data));\r\n                    }\r\n\r\n                    return data.items;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    if (shouldSetStore) {\r\n                        dispatch(searchLibraryChallengesFailure(error.message));\r\n                        showMessage(error.message, 'error');\r\n                    }\r\n                });\r\n        },\r\n        [dispatch, searchChallengesApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useDeleteChallengesService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useDeleteChallengesService = () => {\r\n    const deleteChallengesApi = useDeleteChallengesApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { number[] } challengeIds\r\n     * @param { Function } successCallback\r\n     * @returns { Promise }\r\n     */\r\n    return useCallback(\r\n        (challengeIds: number[], successCallback?: () => void) => { \r\n            return deleteChallengesApi(challengeIds)\r\n                .then(() => {\r\n                    const message = `${challengeIds.length} ${plural(challengeIds.length, 'Challenge has', 'Challenges have')} been deleted`;\r\n                    showMessage(message, 'success');\r\n\r\n                    successCallback?.();\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [deleteChallengesApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useArchiveChallengeService = () => {\r\n    const dispatch = useDispatch();\r\n    const updateChallengeStatusApi = useUpdateChallengeStatusApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (challengeIds: number[]) => {\r\n            dispatch(updateLibraryChallengeStart());\r\n            return updateChallengeStatusApi('archive', challengeIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLibraryChallengeSuccess(data, 'update'))\r\n                    );\r\n\r\n                    showMessage('Challenge has been archived', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLibraryChallengeFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, updateChallengeStatusApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useRestoreChallengeService = () => {\r\n    const dispatch = useDispatch();\r\n    const updateChallengeStatusApi = useUpdateChallengeStatusApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (challengeIds: number[]) => {\r\n            dispatch(updateLibraryChallengeStart());\r\n            return updateChallengeStatusApi('draft', challengeIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        dispatch(updateLibraryChallengeSuccess(data, 'update'))\r\n                    );\r\n\r\n                    showMessage('Challenge has been restored', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateLibraryChallengeFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, updateChallengeStatusApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGenerateChallengeSuccessCallback = () => {\r\n    const dispatch = useDispatch();\r\n    const history: History<LocationState> = useHistory();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (responses?: Record<string, unknown>) => {\r\n            if (!isEmpty(responses)) {\r\n                const createChallengeResponse =\r\n                    (responses?.[CREATE_CHALLENGE_ACTION] as Challenge) ||\r\n                    undefined;\r\n\r\n                if (createChallengeResponse) {\r\n                    dispatch(\r\n                        updateLibraryChallengeSuccess(\r\n                            createChallengeResponse,\r\n                            'update'\r\n                        )\r\n                    );\r\n\r\n                    pushModal(\r\n                        history,\r\n                        ROUTES.LIBRARY_SETTINGS.CHALLENGES.SINGLE.replace(\r\n                            ':challengeId',\r\n                            createChallengeResponse.id!.toString()\r\n                        )\r\n                    );\r\n                }\r\n            }\r\n            showMessage('Challenge generated!', 'success');\r\n        },\r\n        [dispatch, showMessage, history]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllScenarioCheckedStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (scenarioIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(\r\n                updateAllScenarioCheckedState(scenarioIds, checked, partial)\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateLibraryScenarioCheckedStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (scenarioId: number) => {\r\n            dispatch(updateLibraryScenarioCheckedState(scenarioId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllChallengeCheckedStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (challengeId: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(\r\n                updateAllChallengesCheckedState(challengeId, checked, partial)\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateLibraryChallengeCheckedStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (challengeId: number) => {\r\n            dispatch(updateLibraryChallengeCheckedState(challengeId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllPractisSetsCheckedStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (practisSetIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(\r\n                updateAllPractisSetsCheckedState(\r\n                    practisSetIds,\r\n                    checked,\r\n                    partial\r\n                )\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateLibraryPractisSetsCheckedStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (practisSetId: number) => {\r\n            dispatch(updateLibraryPractisSetCheckedState(practisSetId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useDownloadScenarioReportService = () => {\r\n    const downloadScenarioReportApi = useDownloadScenarioReportApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (scenarioId: number | string) => {\r\n            downloadScenarioReportApi(scenarioId)\r\n                .then((data: Scenario) => {\r\n                    fileDownload(data);\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [downloadScenarioReportApi, showMessage]\r\n    );\r\n};\r\n\r\n\r\n/**\r\n * @function useDeleteLibraryLabelTag\r\n * @returns { CallableFunction }\r\n */\r\nexport const useDeleteLibraryLabelTag = () => {\r\n    const showMessage = useShowMessage();\r\n    const portableLabels = usePortableLabelsState();\r\n\r\n    const deleteLabelsFromPractisSet = useDeletePractisSetLabelsApi();\r\n    const deleteLabelsFromScenario = useDeleteScenarioLabelApi();\r\n    const deleteLabelsFromChallenge = useDeleteChallengeLabelsApi();\r\n\r\n    /**\r\n     * @function getEntityItemLabels\r\n     * @param { number[] } labelIds\r\n     * @returns { Label[] }\r\n     */\r\n    const getEntityItemLabels = useCallback(\r\n        (labelIds: number[]) => {\r\n            return (\r\n                portableLabels.data?.items?.filter(label =>\r\n                    labelIds.includes(label.id)\r\n                ) || []\r\n            );\r\n        },\r\n        [portableLabels]\r\n    );\r\n\r\n    /**\r\n     * @dev Use this to delete label tags from 'practisSet' | 'scenario' | 'challenge' pages.\r\n     * @param { number } labelId\r\n     * @param { entityData } LibraryEntity\r\n     * @param { Function | undefined } successCallback\r\n     */\r\n    return useCallback(\r\n        (\r\n            labelId: number,\r\n            entityData: LibraryEntity,\r\n            successCallback?: () => void\r\n        ) => {\r\n            const deleteLabelFromLibraryActionList = {\r\n                practisSet: deleteLabelsFromPractisSet,\r\n                scenario: deleteLabelsFromScenario,\r\n                challenge: deleteLabelsFromChallenge,\r\n            };\r\n\r\n            if (!!labelId) {\r\n                const { entityName, entityItem } = entityData;\r\n\r\n                const labels = getEntityItemLabels(entityItem?.labels || []);\r\n\r\n                const entityRemovedLabels = [];\r\n\r\n                if (!isEmpty(labels)) {\r\n                    const currentLabel = labels.find(\r\n                        label => label.id === labelId\r\n                    );\r\n\r\n                    if (!isEmpty(currentLabel)) {\r\n                        const children: any[] = [];\r\n                        findAllChildIds(labels, currentLabel!.id, children);\r\n\r\n                        if (!!children && !!children.length) {\r\n                            children.forEach(label => {\r\n                                entityRemovedLabels.push({\r\n                                    [`${entityName}Id`]: entityItem.id,\r\n                                    labelId: label.id,\r\n                                });\r\n                            });\r\n                        }\r\n\r\n                        entityRemovedLabels.push({\r\n                            [`${entityName}Id`]: entityItem.id,\r\n                            labelId,\r\n                        });\r\n                    }\r\n\r\n                    const deleteLabelFromLibraryAction =\r\n                        deleteLabelFromLibraryActionList[entityName];\r\n\r\n                    deleteLabelFromLibraryAction(\r\n                        entityRemovedLabels as any\r\n                    ).then(() => {\r\n                        showMessage('Label removed successfully', 'success');\r\n\r\n                        successCallback?.();\r\n                    });\r\n                }\r\n            }\r\n        },\r\n        [\r\n            deleteLabelsFromChallenge,\r\n            deleteLabelsFromPractisSet,\r\n            deleteLabelsFromScenario,\r\n            getEntityItemLabels,\r\n            showMessage,\r\n        ]\r\n    );\r\n};","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoSearchResult = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 50 50\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M28.318 0C17.465 0 8.636 8.83 8.636 19.682c0 4.753 1.693 9.118 4.508 12.523L0 45.349 2.651 48l13.144-13.145c3.405 2.816 7.77 4.509 12.523 4.509C39.171 39.364 48 30.534 48 19.682 48 8.829 39.17 0 28.318 0zm0 35.615c-8.785 0-15.933-7.148-15.933-15.933S19.533 3.749 28.318 3.749s15.933 7.148 15.933 15.933-7.148 15.933-15.933 15.933zm8.947-22.229l-6.296 6.296 6.296 6.296-2.651 2.65-6.296-6.295-6.296 6.296-2.65-2.651 6.295-6.296-6.296-6.296 2.651-2.65 6.296 6.295 6.296-6.296 2.65 2.651z\"\n                    transform=\"translate(-821 -544) matrix(-1 0 0 1 869 544)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default NoSearchResult;\n","import { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\n\nimport { useWithPractisSetsContext } from '../context/useWithPractisSetsContext';\nimport { encapsulateAction } from '../../../../../../store/helpers/encapsulateAction';\nimport { ActionPractisSet } from '../actions';\nimport {\n    DEFAULT_PRACTIS_SETS_SCOPE,\n    Scope,\n    WithPractisSetsScopes,\n} from '../scopes';\n\nexport const useEncapsulatedDispatch = () => {\n    const dispatch = useDispatch();\n    const { reducerName, scope } = useWithPractisSetsContext();\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithPractisSetsContext.Provider props'\n        );\n    }\n\n    const targetScope = (scope || DEFAULT_PRACTIS_SETS_SCOPE) as Scope;\n    if (\n        targetScope !== DEFAULT_PRACTIS_SETS_SCOPE &&\n        !WithPractisSetsScopes[reducerName]?.includes(targetScope)\n    ) {\n        throw new Error(\n            `Undefined \"${targetScope}\" scope of portablePractisSets. Please check config (WithPractisSetsScopes) for \"${reducerName}\" reducer`\n        );\n    }\n\n    return useCallback(\n        <T extends ActionPractisSet>(action: T) => {\n            action._scope = targetScope;\n            dispatch(encapsulateAction(`${reducerName}/practisSets/`, action));\n        },\n        [dispatch, reducerName, targetScope]\n    );\n};\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n    clearAction,\r\n    saveAction,\r\n    searchFailureAction,\r\n    searchSuccessAction,\r\n    selectAllAction,\r\n    deselectAllAction,\r\n    selectPractisSetsAction,\r\n    searchStartAction,\r\n    resetSelectedAction,\r\n    resetAction,\r\n    selectMultiplePractisSetsAction,\r\n} from './actions';\r\n\r\nimport { useEncapsulatedDispatch } from './helpers/useEncapsulatedDispatch';\r\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\r\nimport { useDispatch } from 'react-redux';\r\nimport { PractisSets } from '../../../../../constants/interfaces/PractisSets';\r\nimport { ListResult } from '../../../../../constants/interfaces/PaginationResult';\r\nimport { unionWith } from 'lodash';\r\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\r\nimport { NOT_AUTHORIZED_ERROR_MESSAGE } from '../../../../../ui/components/ErrorMessages/constants';\r\nimport { useSearchPractisSetsApi } from '../../../../../api';\r\nimport { createSearchLibraryParams } from '../../../../library/tools';\r\n\r\nexport const useFetchAllPractisSetsService = () => {\r\n    const dispatch = useDispatch();\r\n    const showMessage = useShowMessage();\r\n    const searchPractisSets = useSearchPractisSetsApi();\r\n\r\n    return useCallback(\r\n        async () => {\r\n            dispatch(searchStartAction());\r\n            try {\r\n                let sp = {\r\n                    offset: 0,\r\n                    limit: 20,\r\n                    orderBy: { field: 'updated_at', asc: false },\r\n                } as SearchParams;\r\n                let data = {\r\n                    items: [] as PractisSets[],\r\n                    count: 0,\r\n                } as ListResult<PractisSets>;\r\n                do {\r\n                    const searchPractisSetsParams =\r\n                        createSearchLibraryParams(sp);\r\n\r\n                    const prevItems = data.items;\r\n                    data = await searchPractisSets(searchPractisSetsParams);\r\n                    data =\r\n                        sp.offset === 0 || !prevItems\r\n                            ? data\r\n                            : {\r\n                                  ...data,\r\n                                  items: unionWith(\r\n                                      prevItems,\r\n                                      data.items,\r\n                                      (i1, i2) => i1.id === i2.id\r\n                                  ),\r\n                              };\r\n                    sp = {\r\n                        ...sp,\r\n                        offset: Math.min(data.items.length, data.count),\r\n                    };\r\n                } while (\r\n                    data.items.length < data.count\r\n                );\r\n                dispatch(searchSuccessAction(data));\r\n            } catch (error: any) {\r\n                dispatch(searchFailureAction(error.message));\r\n                error?.message !== NOT_AUTHORIZED_ERROR_MESSAGE &&\r\n                    showMessage(error.message, 'error');\r\n            }\r\n        },\r\n        [dispatch, showMessage, searchPractisSets]\r\n    );\r\n};\r\n\r\nexport const useClearPractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(clearAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSavePractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(saveAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSelectPractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n    return useCallback(\r\n        (ids: number) => {\r\n            dispatch(selectPractisSetsAction(ids));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSelectMultiplePractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n    return useCallback(\r\n        (ids: PractisSetWithDueDate[]) => {\r\n            dispatch(selectMultiplePractisSetsAction(ids));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSelectAllPractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(\r\n        (practisSets: PractisSets[]) => {\r\n            dispatch(selectAllAction(practisSets));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useDeselectAllPractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(deselectAllAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useResetSelectedPractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(resetSelectedAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useResetPractisSets = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(resetAction());\r\n    }, [dispatch]);\r\n};\r\n","import { Action } from 'redux';\n\nimport { ListResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { Scope } from './scopes';\nimport { PractisSets } from '../../../../../constants/interfaces/PractisSets';\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\n\n//region Types\ntype ReturnTypePractisSetAction<\n    T extends (...args: any) => any\n> = ReturnType<T> & ActionPayload;\n\ntype ActionPayload = { _scope?: Scope };\n\nexport type ActionPractisSet<T = any> = Action<T> & ActionPayload;\n\nexport type Actions =\n    | ReturnTypePractisSetAction<typeof selectAllAction>\n    | ReturnTypePractisSetAction<typeof deselectAllAction>\n    | ReturnTypePractisSetAction<typeof resetSelectedAction>\n    | ReturnTypePractisSetAction<typeof selectPractisSetsAction>\n    | ReturnTypePractisSetAction<typeof selectMultiplePractisSetsAction>\n    | ReturnTypePractisSetAction<typeof clearAction>\n    | ReturnTypePractisSetAction<typeof saveAction>\n    | ReturnTypePractisSetAction<typeof resetAction>;\n\n//endregion\n\nexport const searchStartAction = (): ActionPractisSet<'searchStartPractisSets'> => ({\n    type: 'searchStartPractisSets',\n});\n\nexport const searchSuccessAction = (\n    result: ListResult<PractisSets>\n): ActionPractisSet<'searchSuccessPractisSets'> & {\n    result: ListResult<PractisSets>;\n} => ({\n    type: 'searchSuccessPractisSets',\n    result,\n});\n\nexport const searchFailureAction = (\n    message: string\n): ActionPractisSet<'searchFailurePractisSets'> & { message: string } => ({\n    type: 'searchFailurePractisSets',\n    message,\n});\n\nexport const selectAllAction = (\n    allPractisSets: PractisSets[]\n): ActionPractisSet<'selectAllPractisSets'> & {\n    allPractisSets: PractisSets[];\n} => ({\n    type: 'selectAllPractisSets',\n    allPractisSets,\n});\n\nexport const deselectAllAction = (): ActionPractisSet<'deselectAllPractisSets'> => ({\n    type: 'deselectAllPractisSets',\n});\n\nexport const resetSelectedAction = (): ActionPractisSet<'resetSelectedPractisSets'> => ({\n    type: 'resetSelectedPractisSets',\n});\n\nexport const selectPractisSetsAction = (\n    id: number\n): ActionPractisSet<'selectPractisSets'> & { id: number } => ({\n    type: 'selectPractisSets',\n    id,\n});\n\nexport const selectMultiplePractisSetsAction = (\n    ids: PractisSetWithDueDate[]\n): ActionPractisSet<'selectMultiplePractisSets'> & { ids: PractisSetWithDueDate[] } => ({\n    type: 'selectMultiplePractisSets',\n    ids,\n});\n\nexport const clearAction = (): ActionPractisSet<'clearPractisSets'> => ({\n    type: 'clearPractisSets',\n});\n\nexport const saveAction = (): ActionPractisSet<'savePractisSets'> => ({\n    type: 'savePractisSets',\n});\n\nexport const resetAction = (): ActionPractisSet<'resetPractisSets'> => ({\n    type: 'resetPractisSets',\n});\n","interface Window {\n    attachEvent(event: string, listener: EventListener): boolean;\n    detachEvent(event: string, listener: EventListener): void;\n}\n\n/**\n * @description -- dispatch an event --\n * ex: onTriggerEvent('fetchUserData')\n *\n * @function onTriggerEvent\n * @param { string } eventName\n */\nexport function onTriggerEvent(eventName: string) {\n    let event;\n    if (window.CustomEvent) {\n        event = new CustomEvent(eventName);\n    } else {\n        event = document.createEvent('CustomEvent');\n        event.initCustomEvent(eventName, true, true, undefined);\n    }\n    window.dispatchEvent(event);\n}\n\n/**\n * @description -- to listen to an event\n * @function onListenEvent\n * @param { string } eventName\n * @param { EventListener } handler\n */\nexport function onListenEvent(eventName: string, handler: EventListener) {\n    if (window.addEventListener) {\n        window.addEventListener(eventName, handler);\n    } else {\n        (window as unknown as Window).attachEvent('on' + eventName, handler);\n    }\n}\n\n/**\n * @description -- to remove event listener\n * @function onRemoveEvent\n * @param { string } eventName\n * @param { EventListener } handler\n */\nexport function onRemoveEvent(eventName: string, handler: EventListener) {\n    if (window.removeEventListener) {\n        window.removeEventListener(eventName, handler);\n    } else {\n        (window as unknown as Window).detachEvent('on' + eventName, handler);\n    }\n}\n","export { default as Input } from './view';\n","import CSS from 'csstype';\nimport React, { useEffect, useRef } from 'react';\nimport styled from 'styled-components';\n\nconst StyledActionBox = styled.div``;\n\nexport const OutsideActionBox: React.FC<{\n    open: boolean;\n    toggleOpen?: Function;\n    styles?: CSS.Properties;\n    className?: string;\n}> = ({ children, open, toggleOpen, styles, className }) => {\n    const ref = useRef<HTMLDivElement>(null);\n\n    const handleClickOutside = (event: any) => {\n        if (ref.current && !ref.current.contains(event.target)) {\n            if (!!toggleOpen) {\n                if (open) toggleOpen(false);\n            }\n        }\n    };\n\n    const checkIfInView = (element: any) => {\n        var offset = ref.current?.offsetTop || 0 - window.scrollY;\n\n        if (offset > window.innerHeight) {\n            return false;\n        }\n        return true;\n    }\n\n    useEffect(() => {\n        open && !checkIfInView(ref.current) && ref.current?.scrollIntoView();\n    }, [open]);\n\n    useEffect(() => {\n        document.addEventListener('click', handleClickOutside);\n        return () => {\n            document.removeEventListener('click', handleClickOutside);\n        };\n    });\n\n    return (\n        <StyledActionBox\n            ref={ref}\n            style={styles ? styles : undefined}\n            className={className}\n        >\n            {open ? children : ''}\n        </StyledActionBox>\n    );\n};\n\nexport default OutsideActionBox;\n","import { History } from 'history';\nimport { isPractisAdminRole, isUserRole } from '../../constants/enums';\nimport { UrlBuilder } from '../../tools/url/UrlBuilder';\nimport Storage from '../../services/Storage';\nimport { UserInterface, UserV2 } from '../../constants/interfaces/User';\nimport ROUTES from '../../routes/routes';\nimport { isSharedLink } from './url-helpers';\n\n/**\n * @function setAuthToken - saves user token to Storage if needed\n * @param { UserInterface } userInfo\n * @param { string } token\n * @returns { void }\n */    \nexport const setAuthToken = (\n    userInfo: UserInterface | UserV2,\n    token: string\n) => {\n    const isPractisAdmin = isPractisAdminRole(userInfo.role?.name) && !userInfo.companyId;\n    const isUser = isUserRole(userInfo.role?.name);\n    if (!isPractisAdmin && !isUser)\n        Storage.set('token', token);\n    Storage.set('userId', userInfo.id);\n}\n\n/**\n * @function redirectAfterLogin - redirects to a proper page after login\n * @param { History } history\n * @param { UrlBuilder } urlBuilder\n * @param { UserInterface } userInfo\n * @param { string } token\n * @returns { void }\n */    \nexport const redirectAfterLogin = (\n    history: History,\n    urlBuilder: UrlBuilder,\n    userInfo: UserInterface | UserV2,\n    token: string,\n    redirectTo?: Location\n) => {\n    if (isPractisAdminRole(userInfo.role?.name) && !userInfo.companyId) {\n        window.location.href = urlBuilder.buildAdminUrl(\n            {\n                absolute: true,\n                query: {\n                    t: token,\n                    id: userInfo.id,\n                    p: Storage.get('apiPlatform')\n                }\n            }\n        );\n    } else if (isUserRole(userInfo.role?.name)) {\n        if (redirectTo && isSharedLink(redirectTo.pathname)) {\n            history.push(ROUTES.BROKEN_SHARED_LINK);\n        } else {\n            history.push(\n                `/trainee-splash/${userInfo.firstName}`\n            );\n        }\n    } else {\n        history.push(redirectTo ?? ROUTES.SUBMISSIONS);\n    }\n}\n\n/**\n * @function isAuthorized - checks if user has a saved token\n * @returns { boolean }\n */    \nexport const isAuthorized = () =>\n    !!Storage.get('token') && !!Storage.get('userId');\n\n/**\n * @function getCurrentUserId\n * @returns { number? }\n */    \nexport const getCurrentUserId = () => {\n    const userId = Storage.get('userId');\n    if (!!userId)\n        return parseInt(userId);\n    return null;\n}\n\n/**\n * @function clearAuthData\n */\nexport const clearAuthData = () => {\n    Storage.remove('token');\n    Storage.remove('userId');\n}","/* eslint-disable no-useless-escape */\nexport const validEmailTLDs = [\n    '.com',\n    '.net',\n    '.org',\n    '.edu',\n    '.gov',\n    '.mil',\n    '.aero',\n    '.asia',\n    '.biz',\n    '.cat',\n    '.coop',\n    '.info',\n    '.jobs',\n    '.mobi',\n    '.museum',\n    '.name',\n    '.pro',\n    '.tel',\n    '.travel',\n    '.ac',\n    '.ad',\n    '.ae',\n    '.af',\n    '.ag',\n    '.ai',\n    '.al',\n    '.am',\n    '.an',\n    '.ao',\n    '.aq',\n    '.ar',\n    '.as',\n    '.at',\n    '.au',\n    '.aw',\n    '.ax',\n    '.az',\n    '.ba',\n    '.bb',\n    '.bd',\n    '.be',\n    '.bf',\n    '.bg',\n    '.bh',\n    '.bi',\n    '.bj',\n    '.bm',\n    '.bn',\n    '.bo',\n    '.br',\n    '.bs',\n    '.bt',\n    '.bv',\n    '.bw',\n    '.by',\n    '.bz',\n    '.ca',\n    '.cc',\n    '.cd',\n    '.cf',\n    '.cg',\n    '.ch',\n    '.ci',\n    '.ck',\n    '.cl',\n    '.cm',\n    '.cn',\n    '.co',\n    '.cr',\n    '.cu',\n    '.cv',\n    '.cx',\n    '.cy',\n    '.cz',\n    '.de',\n    '.dj',\n    '.dk',\n    '.dm',\n    '.do',\n    '.dz',\n    '.ec',\n    '.ee',\n    '.eg',\n    '.er',\n    '.es',\n    '.et',\n    '.eu',\n    '.fi',\n    '.fj',\n    '.fk',\n    '.fm',\n    '.fo',\n    '.fr',\n    '.ga',\n    '.gb',\n    '.gd',\n    '.ge',\n    '.gf',\n    '.gg',\n    '.gh',\n    '.gi',\n    '.gl',\n    '.gm',\n    '.gn',\n    '.gp',\n    '.gq',\n    '.gr',\n    '.gs',\n    '.gt',\n    '.gu',\n    '.gw',\n    '.gy',\n    '.hk',\n    '.hm',\n    '.hn',\n    '.hr',\n    '.ht',\n    '.hu',\n    '.id',\n    '.ie',\n    '.il',\n    '.im',\n    '.in',\n    '.io',\n    '.iq',\n    '.ir',\n    '.is',\n    '.it',\n    '.je',\n    '.jm',\n    '.jo',\n    '.jp',\n    '.ke',\n    '.kg',\n    '.kh',\n    '.ki',\n    '.km',\n    '.kn',\n    '.kp',\n    '.kr',\n    '.kw',\n    '.ky',\n    '.kz',\n    '.la',\n    '.lb',\n    '.lc',\n    '.li',\n    '.lk',\n    '.lr',\n    '.ls',\n    '.lt',\n    '.lu',\n    '.lv',\n    '.ly',\n    '.ma',\n    '.mc',\n    '.md',\n    '.me',\n    '.mg',\n    '.mh',\n    '.mk',\n    '.ml',\n    '.mm',\n    '.mn',\n    '.mo',\n    '.mp',\n    '.mq',\n    '.mr',\n    '.ms',\n    '.mt',\n    '.mu',\n    '.mv',\n    '.mw',\n    '.mx',\n    '.my',\n    '.mz',\n    '.na',\n    '.nc',\n    '.ne',\n    '.nf',\n    '.ng',\n    '.ni',\n    '.nl',\n    '.no',\n    '.np',\n    '.nr',\n    '.nu',\n    '.nz',\n    '.om',\n    '.pa',\n    '.pe',\n    '.pf',\n    '.pg',\n    '.ph',\n    '.pk',\n    '.pl',\n    '.pm',\n    '.pn',\n    '.pr',\n    '.ps',\n    '.pt',\n    '.pw',\n    '.py',\n    '.qa',\n    '.re',\n    '.ro',\n    '.rs',\n    '.ru',\n    '.rw',\n    '.sa',\n    '.sb',\n    '.sc',\n    '.sd',\n    '.se',\n    '.sg',\n    '.sh',\n    '.si',\n    '.sj',\n    '.sk',\n    '.uk',\n    '.us',\n];\n\nexport const validEmailRegex =\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,}))$/;\n","import { isEmpty } from 'lodash';\n\nimport { validEmailRegex, validEmailTLDs } from './constants';\n\n/**\n * @description to validate an email address and check if it has a valid domain.\n * @function validateEmail\n * @param  { string } email\n * @returns { boolean }\n */\nexport function validateEmail(email: string) {\n    if (isEmpty(email)) {\n        return true;\n    }\n\n    if (validEmailRegex.test(email)) {\n        // Check if the email domain has a valid TLD\n        const domain = email.split('@')[1];\n        if (isValidDomain(domain)) {\n            return true;\n        }\n    }\n    return false;\n}\n\n/**\n * @function isValidDomain\n * @param { string } domain\n * @returns { boolean }\n */\nexport function isValidDomain(domain: string) {\n    for (let i = 0; i < validEmailTLDs.length; i++) {\n        if (domain.endsWith(validEmailTLDs[i])) {\n            return true;\n        }\n    }\n    return false;\n}\n\n","import * as Yup from 'yup';\n\nimport { validateEmail } from '../../helpers/functions/validation';\n\nexport const INVALID_EMAIL_ERROR = 'Enter a valid Email Address.';\n\nconst RULES = {\n    fullName: Yup.string().max(100, `Name is too long, maximum 100 characters`),\n    companyName: Yup.string().max(\n        100,\n        `Company Name is too long, maximum 100 characters`\n    ),\n    companyNameRequired: Yup.string()\n        .trim()\n        .max(100, `Company Name is too long, maximum 100 characters`)\n        .required('Company name is required'),\n    companyId: Yup.number(),\n    ownerId: Yup.number(),\n    accountOwnerName: Yup.string().max(\n        100,\n        `Owner Name is too long, maximum 100 characters`\n    ),\n    firstName: Yup.string()\n        .trim()\n        .max(35, `The First Name shouldn’t be longer than 35 characters.`)\n        .required('First name is required'),\n    lastName: Yup.string()\n        .trim()\n        .max(35, `The Last Name shouldn’t be longer than 35 characters.`)\n        .required('Last name is required'),\n    username: Yup.string()\n        .max(100, 'Username is too long, maximum 100 characters')\n        .required('Username is required'),\n    password: Yup.string()\n        .min(8, 'Password must be 8 characters long.')\n        .required('The Password field is required.'),\n    loginPassword: Yup.string().required('The Password field is required.'),\n    confirmPassword: Yup.string()\n        .oneOf(\n            [Yup.ref('password'), null],\n            'Password and Confirm Password does not match.'\n        )\n        .required('Password confirm is required.'),\n    currentPassword: Yup.string()\n        .min(8, 'Current password must be at least 8 characters long.')\n        .required('Current password is required.'),\n    email: Yup.string()\n        .max(255, 'Email Address is too long, maximum 255 characters.')\n        .test('is-valid-email', INVALID_EMAIL_ERROR, value => {\n            return validateEmail(value);\n        })\n        .required('The Email Address field is required.'),\n    authEmail: Yup.string()\n        .max(255, 'Email Address is too long, maximum 255 characters.')\n        .email(INVALID_EMAIL_ERROR)\n        .required('The Email Address field is required.'),\n    phoneNumber: Yup.string().required('Make sure you enter a phone number.'),\n    timezoneId: Yup.number(),\n    invitationCode: Yup.string(),\n    organization: Yup.string().required('Organization is required'),\n    title: Yup.string(),\n    role: Yup.string().required('Role is required'),\n    iconFile: Yup.mixed()\n        .test('fileSize', 'File Size is too large', value => value.size <= 10)\n        .test('fileType', 'Unsupported File Format', value =>\n            ['jpg, png, svg, jpeg'].includes(value.type)\n        ),\n    scenario: {\n        description: Yup.string()\n            .required('Description is required')\n            .max(500, 'Maximum characters has reached'),\n        instructions: Yup.string()\n            .required('instructions is required')\n            .max(160, 'Maximum characters has reached'),\n    },\n};\n\nexport default RULES;\n","import { countParents } from '../../features/labels/config';\n\nexport const listToTree = <\n    T extends {\n        id: number;\n        children?: T[];\n        path?: string;\n        parentsCount: number;\n        parentId: number | null;\n    }\n>(\n    list?: T[]\n): T[] => {\n    if (!list) {\n        return [];\n    }\n\n    const localList: T[] = JSON.parse(JSON.stringify(list));\n    const map: Record<number, number> = {};\n    const roots = [];\n    let node: T;\n\n    for (let i = 0; i < localList.length; i += 1) {\n        map[localList[i].id] = i;\n        localList[i].children = [];\n    }\n    for (let i = 0; i < localList.length; i += 1) {\n        localList[i].parentsCount = countParents(list[i].path || '');\n        node = localList[i];\n\n        if (node.parentId && localList[map[node.parentId]]) {\n            const children = localList[map[node.parentId]].children;\n            if (children) {\n                children.push(node);\n            }\n        } else {\n            roots.push(node);\n        }\n    }\n\n    return roots;\n};\n","import { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\nimport React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { createSelectorContext, selectItemsByIds } from '../../../tools/redux';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\n\n\nexport interface LibraryPractisSetsState {\n    data?: ListResult<PractisSets>;\n    fullList?: ListResult<PractisSets>;\n    selectedPractisSets?: number[];\n    assignedPractisSets?: number[];\n    separateAssignedPractisSets?: number[];\n    searchTerm?: string;\n    totalCount?: number;\n    loading?: boolean;\n    error?: string;\n}\n\nexport type LibraryPractisSetsStateSelector = (\n    state: any\n) => LibraryPractisSetsState;\n\nexport const LibraryPractisSetsStateSelectorContext = React.createContext<\n    LibraryPractisSetsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useLibraryPractisSetState(): LibraryPractisSetsState {\n    return useSelector(useContext(LibraryPractisSetsStateSelectorContext));\n}\n\nexport function selectSelectedPractisSets(state: LibraryPractisSetsState): PractisSets[] {\n    return selectItemsByIds<PractisSets>(state?.selectedPractisSets, state?.data?.items);\n}\n\nexport interface UpdatedLibraryPractisSetsState {\n    data?: PractisSets;\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\n    loading?: boolean;\n}\n\nexport const UpdatedLibraryPractisSetsSelectorContext = createSelectorContext<\n    UpdatedLibraryPractisSetsState\n>();\n\nexport function useUpdatedLibraryPractisSetsState() {\n    return useSelector(useContext(UpdatedLibraryPractisSetsSelectorContext));\n}\n\nexport interface LibraryScenariosState {\n    data?: ListResult<Scenario>;\n    selectedScenarios?: number[];\n    totalCount?: number;\n    loading?: boolean;\n    error?: string;\n}\n\nexport type LibraryScenariosStateSelector = (\n    state: any\n) => LibraryScenariosState;\n\nexport const LibraryScenariosStateSelectorContext = React.createContext<\n    LibraryScenariosStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useLibraryScenariosState(): LibraryScenariosState {\n    return useSelector(useContext(LibraryScenariosStateSelectorContext));\n}\n\nexport function selectSelectedScenarios(state: LibraryScenariosState): Scenario[] {\n    return selectItemsByIds<Scenario>(state?.selectedScenarios, state?.data?.items);\n}\n\nexport interface UpdatedLibraryScenariosState {\n    data?: Scenario;\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\n    loading?: boolean;\n}\n\nexport const UpdatedLibraryScenariosSelectorContext = createSelectorContext<\n    UpdatedLibraryScenariosState\n>();\n\nexport function useUpdatedLibraryScenariosState() {\n    return useSelector(useContext(UpdatedLibraryScenariosSelectorContext));\n}\n\nexport interface LibraryChallengesState {\n    data?: ListResult<Challenge>;\n    selectedChallenges?: number[];\n    totalCount?: number;\n    loading?: boolean;\n    error?: string;\n}\n\nexport type LibraryChallengesStateSelector = (\n    state: any\n) => LibraryChallengesState;\n\nexport const LibraryChallengesStateSelectorContext = React.createContext<\n    LibraryChallengesStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useLibraryChallengesState(): LibraryChallengesState {\n    return useSelector(useContext(LibraryChallengesStateSelectorContext));\n}\n\nexport function selectSelectedChallenges(state: LibraryChallengesState): Challenge[] {\n    return selectItemsByIds<Challenge>(state?.selectedChallenges, state?.data?.items);\n}\n\nexport interface UpdatedLibraryChallengesState {\n    data?: Challenge;\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\n    loading?: boolean;\n}\n\nexport const UpdatedLibraryChallengesStateSelectorContext = createSelectorContext<\n    UpdatedLibraryChallengesState\n>();\n\nexport function useUpdatedLibraryChallengesState(): UpdatedLibraryChallengesState {\n    return useSelector(\n        useContext(UpdatedLibraryChallengesStateSelectorContext)\n    );\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const DownArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 512.011 512.011\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fillRule=\"evenodd\" fill=\"currentColor\">\n                    <g>\n                        <path\n                            d=\"M505.755,123.592c-8.341-8.341-21.824-8.341-30.165,0L256.005,343.176L36.421,123.592c-8.341-8.341-21.824-8.341-30.165,0\n\t\t\ts-8.341,21.824,0,30.165l234.667,234.667c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251l234.667-234.667\n\t\t\tC514.096,145.416,514.096,131.933,505.755,123.592z\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default DownArrow;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const UpArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 512.011 512.011\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fillRule=\"evenodd\" fill=\"currentColor\">\n                    <g>\n                        <path\n                            d=\"M505.755,358.256L271.088,123.589c-8.341-8.341-21.824-8.341-30.165,0L6.256,358.256c-8.341,8.341-8.341,21.824,0,30.165\n\t\t\ts21.824,8.341,30.165,0l219.584-219.584l219.584,219.584c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251\n\t\t\tC514.096,380.08,514.096,366.597,505.755,358.256z\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default UpArrow;\n","import { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport { PractisSetWithDueDate } from '../../../constants/interfaces/Draft';\nimport { Roles } from '../../../constants/interfaces/Roles';\n\nexport enum UserRoles {\n    USER = 'USER',\n    COMPANY_ADMIN = 'COMPANY_ADMIN',\n    PRACTIS_ADMIN = 'PRACTIS_ADMIN',\n}\n\nexport const InviteRoleItems = [\n    {\n        name: UserRoles.USER,\n        permissions: NEW_PERMISSIONS.INVITE_USER,\n    },\n    {\n        name: UserRoles.COMPANY_ADMIN,\n        permissions: NEW_PERMISSIONS.INVITE_COMPANY_ADMIN,\n    },\n];\n\nexport const filterInvitationRolesByPermissions = (\n    rolesList: Roles[],\n    permissions: NEW_PERMISSIONS[]\n) => {\n    return rolesList\n        .filter(role => {\n            return InviteRoleItems.find(\n                item =>\n                    item.name === role.name &&\n                    permissions.includes(item.permissions)\n            );\n        })\n        .map(role => {\n            return {\n                value: role.id,\n                name: role.title,\n            };\n        }).reverse();\n};\n\nexport const invitationRoles = (\n    rolesList: Roles[]\n) => {\n    return rolesList\n        .filter(role => {\n            return InviteRoleItems.find(\n                item =>\n                    item.name === role.name\n            );\n        })\n        .map(role => {\n            return {\n                value: role.id,\n                name: role.title,\n            };\n        }).reverse();\n};\n\nexport const getUserRoleNameById = (\n    roleId: number | null,\n    rolesList: Roles[]\n): string | undefined => {\n    if (!roleId || !rolesList.length) return undefined;\n\n    const role = rolesList.find(item => item.id === roleId);\n    if (!role) return undefined;\n\n    return role.title;\n};\n\nexport const getUserRoleIdByName = (\n    roleName: string | null,\n    rolesList: Roles[]\n): number | undefined => {\n    if (!roleName || !rolesList.length) return undefined;\n\n    const role = rolesList.find(item => item.title === roleName);\n    if (!role) return undefined;\n\n    return role.id;\n};\n\nexport enum UserFields {\n    firstName = 'firstName',\n    lastName = 'lastName',\n    email = 'email',\n    role = 'role',\n}\n\nconst UserFieldNames = {\n    [UserFields.firstName as string]: 'First Name',\n    [UserFields.lastName as string]: 'Last Name',\n    [UserFields.email as string]: 'Email',\n    [UserFields.role as string]: 'Role',\n};\n\nconst UserFieldValuesByName = {\n    [UserFieldNames.firstName as string]: UserFields.firstName,\n    [UserFieldNames.lastName as string]: UserFields.lastName,\n    [UserFieldNames.email as string]: UserFields.email,\n    [UserFieldNames.role as string]: UserFields.role,\n};\n\nexport function UserFieldValueByName(name?: string): string {\n    return (name && UserFieldValuesByName[name]) || name || '';\n}\n\nexport enum InvitationEmailErrors {\n    isEntryInvalid = 'Please edit before selecting',\n    emailExistsInSystem = 'User’s email exists in our system',\n}\n\nexport const handleToggleSelectedItems = (array: any, item: any) => {\n    let arrayItems = array ? [...array] : [];\n\n    if (arrayItems.includes(item)) {\n        arrayItems = arrayItems.filter(x => x !== item);\n    } else if (arrayItems.includes(-item)) {\n        arrayItems = arrayItems.filter(x => x !== -item);\n        arrayItems.push(item);\n    } else {\n        arrayItems.push(item);\n    }\n\n    return arrayItems;\n};\n\n/**\n * \n * @function handlepsToggleSelectedItems\n * \n * @param { PractisSetWithDueDate } currentSelectedPractisSets \n * \n * @param { number } practisSetIdToToggle \n * \n * @returns { PractisSetWithDueDate[] }\n */\nexport const handleToggleSelectedItemsForPractisSets = (currentSelectedPractisSets: PractisSetWithDueDate[], practisSetIdToToggle: number) => {\n    let filteredPractisSetsToReturn = currentSelectedPractisSets ? [...currentSelectedPractisSets] : [];\n\n    if (filteredPractisSetsToReturn.map(x => x.practisSetId).includes(practisSetIdToToggle)) {\n        filteredPractisSetsToReturn = filteredPractisSetsToReturn.filter(x => x.practisSetId !== practisSetIdToToggle);\n    } else if (filteredPractisSetsToReturn.map(x => x.practisSetId).includes(-practisSetIdToToggle)) {\n        filteredPractisSetsToReturn = filteredPractisSetsToReturn.filter(x => x.practisSetId !== -practisSetIdToToggle);\n        filteredPractisSetsToReturn.push({ practisSetId: practisSetIdToToggle, dueDate: null });\n    } else {\n        filteredPractisSetsToReturn.push({ practisSetId: practisSetIdToToggle, dueDate: null });\n    }\n\n    return filteredPractisSetsToReturn;\n};","import { UserInterface } from './User';\nimport { Script } from './Script';\nimport { Submission } from './Reviews';\n\nexport enum ChallengeStatuses {\n    DRAFT = 'DRAFT',\n    ACTIVE = 'ACTIVE',\n    ARCHIVED = 'ARCHIVED',\n    DELETED = 'DELETED',\n}\n\nexport type Status =\n    | ChallengeStatuses.DRAFT\n    | ChallengeStatuses.ACTIVE\n    | ChallengeStatuses.ARCHIVED\n    | ChallengeStatuses.DELETED;\n\nexport interface Challenge {\n    uniqueId?: string;\n    id?: number;\n    sourceScenarioId?: number | null,\n    type?: 'CHALLENGE';\n    title: string;\n    description: string;\n    instructions: string;\n    createdAt?: string;\n    updatedAt?: string;\n    companyId?: string;\n    creatorId?: number;\n    submissions?: Submission[];\n    status: Status;\n    scriptId?: number;\n    script: Script;\n    creator?: UserInterface;\n    checked?: boolean;\n    minRepsCount?: number | null;\n    labels?: any[];\n    updatedLabels?: number[];\n    tryLimit: number | null;\n}\n\nexport interface ChallengeSubmission {\n    id?: number;\n    reviewScore?: number;\n    reviewedAt?: string;\n    submissionId?: number;\n    title?: string;\n}","import { motion } from 'framer-motion';\nimport styled from 'styled-components';\nimport { Input } from '../../../../input';\nimport OutsideActionBox from '../../../../OutsideActionBox/OutsideActionBox';\n\nexport const StyledSelectForm = styled.div<{ disabled?: boolean }>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: 16px;\n    cursor: pointer;\n    background: ${props => props.theme.Colors.white};\n    color: ${props =>\n        !!props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.black};\n    font-weight: 600;\n    height: 100%;\n`;\n\nexport const Wrapper = styled.div`\n    width: 272px;\n    max-height: 432px;\n    min-height: 200px;\n    display: flex;\n    padding: 16px 8px 0 8px;\n    background: ${props => props.theme.Colors.white};\n`;\n\nexport const LabelsContainer = styled(motion.div)<{\n    displayOver?: boolean;\n    topMargin: number;\n    left?: string;\n}>`\n    padding: 24px;\n    position: absolute;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    left: ${props =>\n        props.displayOver ? '16px' : !!props.left ? props.left : '0'};\n    top: ${props => (props.displayOver ? `-${props.topMargin}px` : '8px')};\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n`;\n\nexport const Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    flex-shrink: 0;\n    margin-top: 16px;\n    width: 100%;\n    padding: 0 8px;\n`;\nexport const CancelButtonWrapper = styled.div`\n    margin-right: 16px;\n`;\n\nexport const StyledTitle = styled.div`\n    font-size: 20px;\n    font-weight: bold;\n    width: 100%;\n    color: ${props => props.theme.Colors.black};\n`;\n\nexport const StyledContent = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nexport const StyledDescription = styled.div<{ marginTop?: string }>`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n    ${props => !!props.marginTop && `margin-top: ${props.marginTop};`}\n    width: 100%;\n`;\n\nexport const StyledButtonContainer = styled.div`\n    width: 128px;\n    height: 40px;\n\n    & > button {\n        &:active {\n            background: ${props => props.theme.Colors.tomato}!important;\n        }\n    }\n`;\n\nexport const Bold = styled.span`\n    font-weight: 800;\n    color: ${props => props.theme.Colors.black};\n`;\n\nexport const StyledEmptyLabels = styled.div`\n    display: flex;\n    padding-top: 8px;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const StyledEmptyLabelsContent = styled.div`\n    max-width: 140px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const NoLabelsIcon = styled.div`\n    width: 30px;\n    height: 40px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 16px;\n`;\n\nexport const NoLabelsTitle = styled.div`\n    font-weight: bold;\n    font-size: 13px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nexport const NoLabelsDescription = styled.div`\n    font-size: 11px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    width: 100%;\n    white-space: break-spaces;\n`;\n\nexport const NudgeUserStyledDescription = styled.div`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-top: 13px;\n    margin-bottom: 4px;\n    width: 100%;\n    height: 37px;\n`;\n\nexport const NudgeWarningStyledDescription = styled.div`\n    font-size: 15px;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-top: 18px;\n    padding: 0 10px;\n    text-align: center;\n`;\n\nexport const StyledFormArea = styled.div`\n    width: 416px;\n`;\n\nexport const StyledActions = styled.div<{ marginTop: number }>`\n    width: 272px;\n    display: flex;\n    justify-content: space-between;\n    margin-top: ${props => (props.marginTop ? `${props.marginTop}px` : 0)};\n    align-self: flex-end;\n`;\n\nexport const StyledInput = styled(Input)`\n    font-family: ${props => props.theme.Fonts.manrope};\n    border-radius: 4px;\n    background-color: ${props => props.theme.Colors.whiteTwo};\n`;\n\nexport const StyledInputContainer = styled.div`\n    margin-bottom: 12px;\n`;\n\nexport const TableAssignOptionsStyledSelectForm = styled.div<{\n    height?: number;\n    error?: boolean;\n    variant: string;\n    open?: boolean;\n    disabled?: boolean;\n}>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: 4px;\n    min-width: 128px;\n    cursor: pointer;\n    height: ${props => (props.height ? `${props.height}px` : '40px')};\n    width: 100%;\n    background: ${props => props.theme.Colors.white};\n    color: ${props => props.theme.Colors.black};\n    box-shadow: inset 0 0 0 ${props => (props.error ? '2px' : '-1px')} ${props => props.theme.Colors.coral};\n        \n    -webkit-appearance: none;\n    border: ${props =>\n        props.open\n            ? `1px solid ${props.theme.Colors.cloudyBlue}`\n            : `1px solid ${props.theme.Colors.whiteFive}`};\n    &.is-disabled {\n        cursor: default;\n        color: ${props => props.theme.Colors.cloudyBlue};\n    }\n`;\n\nexport const Container = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nexport const IconHolder = styled.div<{ disabled?: boolean }>`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    position: absolute;\n    right: 15px;\n    top: 0;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n`;\n\n","import { CompanyUserStats } from '../../../constants/interfaces/CompanyUserStats';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport { CompanyVoiceSettings } from '../../../constants/interfaces/CompanyVoiceSettings';\n\nexport const COMPANY_INFO = 'FETCH_COMPANY_INFO';\nexport const COMPANY_INFO_SUCCESS = 'FETCH_COMPANY_INFO_SUCCESS';\nexport const COMPANY_INFO_FAILURE = 'FETCH_COMPANY_INFO_FAILURE';\nexport const RESET_COMPANY_INFORMATION = 'RESET_COMPANY_INFORMATION';\n\nexport enum ACTIONS {\n    LOAD_VOICE_SETTINGS_START = 'LOAD_VOICE_SETTINGS_START',\n    LOAD_VOICE_SETTINGS_SUCCESS = 'LOAD_VOICE_SETTINGS_SUCCESS',\n    LOAD_VOICE_SETTINGS_FAILURE = 'LOAD_VOICE_SETTINGS_FAILURE',\n\n    FETCH_COMPANY_ADMINS_START = 'FETCH_COMPANY_ADMINS_START',\n    FETCH_COMPANY_ADMINS_SUCCESS = 'FETCH_COMPANY_ADMINS_SUCCESS',\n    FETCH_COMPANY_ADMINS_FAILURE = 'FETCH_COMPANY_ADMINS_FAILURE',\n    CLEAR_COMPANY_ADMINS = 'CLEAR_COMPANY_ADMINS',\n\n    FETCH_COMPANY_USER_STATS_START = 'FETCH_COMPANY_USER_STATS_START',\n    FETCH_COMPANY_USER_STATS_SUCCESS = 'FETCH_COMPANY_USER_STATS_SUCCESS',\n    FETCH_COMPANY_USER_STATS_FAILURE = 'FETCH_COMPANY_USER_STATS_FAILURE',\n}\n\nexport function fetchCompanyInfo() {\n    return {\n        type: COMPANY_INFO,\n    };\n}\n\nexport function fetchCompanyInfoSuccess(data: any) {\n    return {\n        type: COMPANY_INFO_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchCompanyInfoFailure(error: any) {\n    return {\n        type: COMPANY_INFO_FAILURE,\n        error,\n    };\n}\n\nexport function loadVoiceSettingsStart() {\n    return {\n        type: ACTIONS.LOAD_VOICE_SETTINGS_START as ACTIONS.LOAD_VOICE_SETTINGS_START,\n    };\n}\n\nexport function loadVoiceSettingsSuccess(voiceSettings: CompanyVoiceSettings[]) {\n    return {\n        type: ACTIONS.LOAD_VOICE_SETTINGS_SUCCESS as ACTIONS.LOAD_VOICE_SETTINGS_SUCCESS,\n        voiceSettings,\n    };\n}\n\nexport function loadVoiceSettingsFailure(error: string) {\n    return {\n        type: ACTIONS.LOAD_VOICE_SETTINGS_FAILURE as ACTIONS.LOAD_VOICE_SETTINGS_FAILURE,\n        error,\n    };\n}\n\nexport function fetchCompanyAdminsStart() {\n    return {\n        type: ACTIONS.FETCH_COMPANY_ADMINS_START as ACTIONS.FETCH_COMPANY_ADMINS_START,\n    };\n}\n\nexport function fetchCompanyAdminsSuccess(data: UserV2[]) {\n    return {\n        type: ACTIONS.FETCH_COMPANY_ADMINS_SUCCESS as ACTIONS.FETCH_COMPANY_ADMINS_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchCompanyAdminsFailure(error: any) {\n    return {\n        type: ACTIONS.FETCH_COMPANY_ADMINS_FAILURE as ACTIONS.FETCH_COMPANY_ADMINS_FAILURE,\n        error,\n    };\n}\n\nexport function clearCompanyAdmins() {\n    return {\n        type: ACTIONS.CLEAR_COMPANY_ADMINS as ACTIONS.CLEAR_COMPANY_ADMINS,\n    };\n}\n\n\nexport function fetchCompanyUserStatsStart() {\n    return {\n        type: ACTIONS.FETCH_COMPANY_USER_STATS_START as ACTIONS.FETCH_COMPANY_USER_STATS_START,\n    };\n}\n\nexport function fetchCompanyUserStatsSuccess(data: CompanyUserStats) {\n    return {\n        type: ACTIONS.FETCH_COMPANY_USER_STATS_SUCCESS as ACTIONS.FETCH_COMPANY_USER_STATS_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchCompanyUserStatsFailure(error: string) {\n    return {\n        type: ACTIONS.FETCH_COMPANY_USER_STATS_FAILURE as ACTIONS.FETCH_COMPANY_USER_STATS_FAILURE,\n        error,\n    };\n}\n\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Pencil = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 12 12\"\n                className={className}\n                width=\"12\"\n                height=\"12\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                fill=\"none\"\n            >\n                <path \n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\" \n                    d=\"M11.364.636a2.173 2.173 0 0 0-3.072 0l-.307.307-.614.614-2.765 2.765L.614 8.313 0 11.385.613 12l3.073-.615.613-.614.615-.613 2.764-2.765.614-.614 3.072-3.072a2.172 2.172 0 0 0 0-3.071zM4.299 9.543l2.765-2.765.614-.614 2.15-2.15L7.987 2.17 5.22 4.935 2.456 7.7l1.843 1.843zM1.842 8.314l-.427.427-.46 2.305 2.303-.462.427-.427-1.843-1.843zM8.6 1.557 10.443 3.4l.307-.307a1.305 1.305 0 0 0 0-1.843 1.305 1.305 0 0 0-1.843 0l-.307.307z\" \n                    fill=\"#6D7F8C\"/>\n            </svg>\n        );\n    }\n);\n\nexport default Pencil;\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Checkbox from '../../../ui/components/Checkbox';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\nimport { handleToggleSelectedItemsForPractisSets } from '../../../pages/ActionPages/NewUser/tools';\nimport Pencil from '../../../ui/icons/Pencil';\nimport { formatDateWithTimeZone } from '../../../helpers/functions/date-convert';\nimport dayjs from 'dayjs';\nimport { PractisSetWithDueDate } from '../../../constants/interfaces/Draft';\nimport { practisSetWithDueDatesArrayToDueDatesKeyValues } from '../tools';\nimport { DueDateType } from '../../../constants/interfaces/DueDates';\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\nimport { EmptyCellDash } from '../../../ui/components/table-wrapper/table/EmptyCellDash';\nimport { DueDateCalendar } from '../../../ui/components/DueDateCalendar';\n\nconst StyledPractisSetsList = styled.div`\n    overflow: auto;\n    height: 100%;\n`;\n\nconst TopSideList = styled.span``;\n\nconst GeneralList = styled.span``;\n\nconst PractisSetsItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 10px 0;\n    flex-direction: row;\n`;\n\nconst PractisSetsItem = styled.div<{ disabled?: boolean }>`\n    color: ${props => props.theme.Colors.black};\n    cursor: pointer;\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 12px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n    width: 100%;\n`;\n\nconst Date = styled.div`\n    min-width: 56px;\n`;\n\nconst PencilWrapper = styled.div`\n    position: flex;\n    transform: translateX(-20px);\n    padding-left: 6px;\n    padding-right: 6px;\n    display: none;\n    align-items: center;\n    justify-content: center;\n\n    height: 26px;\n    width: 24px;\n\n    background: ${({ theme }) => theme.Colors.whiteFive};\n    margin-top: -4px;\n    right: 8px;\n    cursor: pointer;\n`;\n\nconst DueDateContainer = styled.div`\n    display: flex;\n    flex-direction: row;\n    min-width: 68px;\n    max-width: 68px;\n    font-size: 13px;\n    font-family: 'Manrope';\n    color: ${({ theme }) => theme.Colors.black};\n    padding: 4px 8px;\n    height: 26px;\n    margin-right: 4px;\n    background: transparent;\n\n    &:hover {\n        background: ${({theme}) => theme.Colors.whiteFive};\n\n        ${PencilWrapper} {\n            display: flex;\n        }\n    }\n\n    cursor: default;\n    border-radius: 2px;\n`\n\nconst StyledEmpty = styled.span`\n    color: ${({ theme }) => theme.Colors.cloudyBlue};\n`\n\nexport const PortablePractisSetsList: FC<{\n    practisSets?: PractisSets[];\n    selectedPractisSets: PractisSetWithDueDate[];\n    disabled?: boolean;\n    setPractisSetFilters?: (practisSetId: PractisSetWithDueDate[]) => void;\n    dueDateAssignments?: DueDateType;\n    onUpdateDueDates?: (dueDates?: DueDateType) => void;\n    hideDueDates?: boolean;\n}> = ({ practisSets, selectedPractisSets, setPractisSetFilters, hideDueDates }) => {\n    \n    const [\n        isDueDateCalendarVisible,\n        setIsDueDateCalendarVisible,\n    ] = useState<boolean>(false);\n    const [dueDateData, setDueDateData] = useState<any>();\n    const [dueDates, setDueDates] = useState<DueDateType>();\n\n    useEffect(() => {\n        setDueDates(practisSetWithDueDatesArrayToDueDatesKeyValues(selectedPractisSets));\n    }, [selectedPractisSets])\n\n    /**\n    @function getUserDueDate\n    @param { number } practisSetId\n    @returns { string | null }\n    */\n    const getUserDueDate = (practisSetId: number) => {\n        const practisSet = practisSets?.find((item) => item.id === practisSetId);\n\n        return practisSet?.id &&\n            (dueDates?.[practisSet.id])\n            ? formatDateWithTimeZone(\n                  dueDates?.[practisSet.id] as string\n              )\n            : null;\n    }\n    \n    /**\n    @function openDueDatePopup\n    @param { number } practisSetId\n    @returns { void }\n    */\n    const openDueDatePopup = async(practisSetId: number) => {\n        const dueDate = getUserDueDate(practisSetId);\n        \n        let type = dueDate ? 'SINGLE' : 'NO_DUEDATE';\n\n        const data = {\n            count: 1,\n            type,\n            dueDate\n        }\n\n        setDueDateData({...data, enrollmentIds: practisSetId});\n        setIsDueDateCalendarVisible(true);\n    };\n\n    /**\n     * @function updateDueDate\n     * \n     * @param { string | null } date \n     * \n     * @returns { void }\n     */\n    const updateDueDate = async (date: string | null) : Promise<void> => {\n        const { enrollmentIds } = dueDateData;\n        \n        if(date) {\n            const changedDueDates: DueDateType = {};\n\n            changedDueDates[enrollmentIds] = date\n            setDueDates(prevState => ({...prevState, ...changedDueDates}));\n        } else {\n            setDueDates((prevState) => {\n                if (prevState) {\n                    prevState[enrollmentIds] = null\n                }\n\n                return prevState\n            })\n        }\n\n        if (isChecked(enrollmentIds)) {\n            setPractisSetFilters?.(selectedPractisSets.map(selectedPractisSet => {\n                if (selectedPractisSet.practisSetId === enrollmentIds) {\n                    return {\n                        ...selectedPractisSet,\n                        dueDate: date\n                    }\n                } else {\n                    return selectedPractisSet;\n                }\n            }));\n        } else {\n            setPractisSetFilters?.([ ...selectedPractisSets, {\n                practisSetId: enrollmentIds,\n                dueDate: date\n            }])\n        }\n\n        setIsDueDateCalendarVisible(false);\n    };\n\n    const isChecked = useCallback(\n        (setId?: number) => {\n            return (\n                !!selectedPractisSets &&\n                !!setId &&\n                !!selectedPractisSets.filter(x => x.practisSetId === setId).length\n            );\n        },\n        [selectedPractisSets]\n    );\n\n    const isPartiallyChecked = useCallback(\n        (practisSetId?: number) => {\n            return (\n                !!selectedPractisSets &&\n                !!practisSetId &&\n                !!selectedPractisSets.filter(x => x.practisSetId === -Number(practisSetId)).length\n            );\n        },\n        [selectedPractisSets]\n    );\n\n    const changeHandler = (practisSetId?: number) => {\n        if (practisSetId && setPractisSetFilters) {\n            setPractisSetFilters(\n                handleToggleSelectedItemsForPractisSets(selectedPractisSets, practisSetId)\n            );\n        }\n    };\n\n    if (!practisSets || (practisSets && practisSets.length === 0)) return null;\n\n    const topListPractisSets = practisSets.filter(\n        practisSet =>\n            practisSet.id && selectedPractisSets.map(ps => Math.abs(ps.practisSetId)).includes(practisSet.id)\n    );\n\n    const bottomListPractisSets = practisSets.filter(\n        practisSet =>\n            practisSet.id && !selectedPractisSets.map(ps => Math.abs(ps.practisSetId)).includes(practisSet.id)\n    );\n\n    return (\n        <StyledPractisSetsList>\n            {topListPractisSets.length > 0 && (\n                <TopSideList>\n                    {topListPractisSets.map(practisSet => {\n                        return (\n                            <PractisSetsItemWrapper\n                                key={practisSet.id}\n                                data-test=\"practisset-item-container\"\n                            >\n                                <Checkbox\n                                    size={12}\n                                    checked={\n                                        isChecked(practisSet.id) ||\n                                        isPartiallyChecked(practisSet.id)\n                                    }\n                                    partial={isPartiallyChecked(practisSet.id)}\n                                    handleChange={() =>\n                                        changeHandler(practisSet.id)\n                                    }\n                                    dataTest=\"practisset-item-checkbox\"\n                                />\n                                <PractisSetsItem\n                                    onClick={() => changeHandler(practisSet.id)}\n                                    data-test=\"practisset-item-title\"\n                                >\n                                    {practisSet.name}\n                                </PractisSetsItem>\n                                {!hideDueDates && (\n                                    <DueDateContainer data-test=\"due-date-container\">\n                                        <Date data-test=\"due-date-value\">\n                                            {practisSet.id &&\n                                            dueDates?.[practisSet.id] ? (\n                                                formatDateWithTimeZone(\n                                                    dueDates[\n                                                        practisSet.id\n                                                    ] as string\n                                                )\n                                            ) : (\n                                                <EmptyCellDash />\n                                            )}\n                                        </Date>\n                                        <PencilWrapper\n                                            onClick={() =>\n                                                practisSet.id &&\n                                                openDueDatePopup(practisSet.id)\n                                            }\n                                            data-test=\"due-date-edit-button\"\n                                        >\n                                            <Pencil />\n                                        </PencilWrapper>\n                                    </DueDateContainer>\n                                )}\n                            </PractisSetsItemWrapper>\n                        );\n                    })}\n                    {topListPractisSets.length < practisSets.length && (\n                        <TableDivider width=\"98%\" />\n                    )}\n                </TopSideList>\n            )}\n            <GeneralList>\n                {bottomListPractisSets.map(practisSet => {\n                    return (\n                        <PractisSetsItemWrapper\n                            key={practisSet.id}\n                            data-test=\"practisset-item-container\"\n                        >\n                            <Checkbox\n                                size={12}\n                                checked={\n                                    isChecked(practisSet.id) ||\n                                    isPartiallyChecked(practisSet.id)\n                                }\n                                partial={isPartiallyChecked(practisSet.id)}\n                                handleChange={() =>\n                                    changeHandler(practisSet.id)\n                                }\n                                dataTest=\"practisset-item-checkbox\"\n                            />\n                            <PractisSetsItem\n                                onClick={() => changeHandler(practisSet.id)}\n                                data-test=\"practisset-item-title\"\n                            >\n                                {practisSet.name}\n                            </PractisSetsItem>\n                            {!hideDueDates && (\n                                <DueDateContainer data-test=\"due-date-container\">\n                                    <Date data-test=\"due-date-value\">\n                                        <StyledEmpty>\n                                            {practisSet.id &&\n                                            dueDates &&\n                                            dueDates[practisSet.id] ? (\n                                                dayjs(\n                                                    dueDates[\n                                                        practisSet.id\n                                                    ] as string\n                                                ).format('MM/DD/YY')\n                                            ) : (\n                                                <EmptyCellDash />\n                                            )}\n                                        </StyledEmpty>\n                                    </Date>\n                                    <PencilWrapper\n                                        onClick={() =>\n                                            practisSet.id &&\n                                            openDueDatePopup(practisSet.id)\n                                        }\n                                        data-test=\"due-date-edit-button\"\n                                    >\n                                        <Pencil />\n                                    </PencilWrapper>\n                                </DueDateContainer>\n                            )}\n                        </PractisSetsItemWrapper>\n                    );\n                })}\n            </GeneralList>\n            {isDueDateCalendarVisible && (\n                <DueDateCalendar\n                    data={{...dueDateData, isSubTitleVisible: false}}\n                    onCancel={() => setIsDueDateCalendarVisible(false)}\n                    onApply={updateDueDate}\n                />\n            )}\n        </StyledPractisSetsList>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport EmptyBox from '../../../ui/icons/EmptyBox';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\nimport NoSearchResult from '../../../ui/icons/NoSearchResult';\n\nconst StyledEmptyLabels = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst StyledEmptyLabelsContent = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst NoLabelsIcon = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoPractisSetsTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst EmptyPractisSets: FC<{ loading?: boolean; isEmpty?: boolean }> = ({\n    loading,\n    isEmpty,\n}) => {\n    if (loading) {\n        return (\n            <StyledEmptyLabels>\n                <Loading />\n            </StyledEmptyLabels>\n        );\n    }\n\n    return (\n        <StyledEmptyLabels>\n            <StyledEmptyLabelsContent>\n                <NoLabelsIcon data-test=\"practisset-searchbox-empty-result-icon\">\n                    {isEmpty ? <EmptyBox /> : <NoSearchResult />}\n                </NoLabelsIcon>\n                <NoPractisSetsTitle data-test=\"practisset-searchbox-empty-result-label\">\n                    {isEmpty ? 'No Practis Sets yet' : 'No Practis Sets found'}\n                </NoPractisSetsTitle>\n            </StyledEmptyLabelsContent>\n        </StyledEmptyLabels>\n    );\n};\n\nexport default EmptyPractisSets;\n","import { FC, useCallback, useMemo, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { PortablePractisSetsList } from './PortablePractisSetsList';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { Variables } from '../../../theme/variables';\r\nimport { compose } from 'redux';\r\nimport { sortLabels } from '../../labels/tools';\r\nimport { filterPractisSets } from '../tools';\r\nimport EmptyPractisSets from './EmptyPractisSets';\r\nimport {\r\n    PractisSets,\r\n    PractisSetStatuses,\r\n} from '../../../constants/interfaces/PractisSets';\r\nimport { PractisSetWithDueDate } from '../../../constants/interfaces/Draft';\r\nimport { TableSearchInput } from '../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\n//region Types\r\ntype Action = 'clear' | 'select';\r\n\r\nexport type PortablePractisSetsProps = {\r\n    practisSets?: ListResult<PractisSets>;\r\n    selectedList: PractisSetWithDueDate[];\r\n    onSave?: () => void;\r\n    onSelectAll?: (practisSets: PractisSets[]) => void;\r\n    onDeselectAll?: () => void;\r\n    onClearSelected?: () => void;\r\n    onSetSelected?: (practisSetIds: PractisSetWithDueDate[]) => void;\r\n    filtersTitle?: string;\r\n    disabled?: boolean;\r\n    loading?: boolean;\r\n    showSelectActions?: boolean;\r\n    showSearch?: boolean;\r\n    showSave?: boolean;\r\n    hideDueDates?: boolean;\r\n    className?: string;\r\n    selectAllWrapperClassName?: string;\r\n};\r\n//endregion\r\n\r\n//region Styles\r\nconst StyledCreatePractisSets = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst CreatePractisSetsBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst FiltersHeader = styled.div`\r\n    padding: 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    height: 24px;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst FiltersSavePanel = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst DueDatesSelectedCaption = styled(SelectedCaption)`\r\n    width: 68px;\r\n`;\r\n\r\nconst FilterTitle = styled.p`\r\n    margin: 0;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.black};\r\n    font-weight: 600;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n\r\nconst StyledPlainActionsWrapper = styled.div`\r\n    padding-right: 15px;\r\n`;\r\n//endregion\r\n\r\nconst PortablePractisSets: FC<PortablePractisSetsProps> = ({\r\n    practisSets,\r\n    selectedList,\r\n    disabled,\r\n    loading,\r\n    onSave,\r\n    onClearSelected,\r\n    onDeselectAll,\r\n    onSelectAll,\r\n    onSetSelected,\r\n    filtersTitle,\r\n    showSelectActions,\r\n    showSearch,\r\n    showSave = true,\r\n    hideDueDates,\r\n    className,\r\n    selectAllWrapperClassName,\r\n}) => {\r\n    const actionConfig: Record<\r\n        Action,\r\n        {\r\n            color: string;\r\n            colorHover: string;\r\n            colorActive: string;\r\n        }\r\n    > = {\r\n        clear: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n        select: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n    };\r\n\r\n    const clearHandler = useCallback(() => {\r\n        onClearSelected?.();\r\n    }, [onClearSelected]);\r\n\r\n    const [searchTerm, setSearchTerm] = useState('');\r\n    const searchHandler = (value: string) => setSearchTerm(value);\r\n    const [processedSelectedList, setProcessedSelectedList] = useState<\r\n        PractisSetWithDueDate[]\r\n    >([]);\r\n\r\n    const processedPractisSets = useMemo(() => {\r\n        if (practisSets) {\r\n            const result = compose<PractisSets[]>(\r\n                filterPractisSets(searchTerm, [PractisSetStatuses.ACTIVE]),\r\n                sortLabels\r\n            )(practisSets.items);\r\n\r\n            if (result.length > 0) {\r\n                const processedDataIds = result.map(item => item.id!);\r\n                setProcessedSelectedList(\r\n                    selectedList.filter(item =>\r\n                        processedDataIds.includes(Math.abs(item.practisSetId))\r\n                    )\r\n                );\r\n            }\r\n\r\n            return result;\r\n        } else {\r\n            return [];\r\n        }\r\n    }, [searchTerm, practisSets, selectedList]);\r\n\r\n    const isAllSelected = useMemo(\r\n        () => selectedList.length === processedPractisSets?.length,\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n        [selectedList.length]\r\n    );\r\n\r\n    const toggleAllHandler = useCallback(() => {\r\n        if (isAllSelected && onDeselectAll) {\r\n            onDeselectAll();\r\n        } else if (onSelectAll) {\r\n            processedPractisSets.forEach(item => {\r\n                item.dueDate =\r\n                    selectedList.find(\r\n                        ({ practisSetId }) => practisSetId === item.id\r\n                    )?.dueDate || null;\r\n            });\r\n\r\n            onSelectAll(processedPractisSets);\r\n        }\r\n    }, [\r\n        onDeselectAll,\r\n        onSelectAll,\r\n        isAllSelected,\r\n        processedPractisSets,\r\n        selectedList,\r\n    ]);\r\n\r\n    const showNoItems = !practisSets?.count;\r\n    const showEmptyState = !processedPractisSets.length || loading;\r\n    const selectedPractisSetsLength = selectedList.filter(\r\n        ps => ps.practisSetId > 0\r\n    ).length;\r\n\r\n    return (\r\n        <StyledCreatePractisSets className={className}>\r\n            <CreatePractisSetsBody>\r\n                {filtersTitle && (\r\n                    <FiltersHeader>\r\n                        <FilterTitle>{filtersTitle}</FilterTitle>\r\n                    </FiltersHeader>\r\n                )}\r\n                {showSearch && (\r\n                    <SearchWrapper data-test=\"practisset-searchbox-wrapper\">\r\n                        <TableSearchInput\r\n                            onChange={searchHandler}\r\n                            disabled={showNoItems}\r\n                            dataTest=\"practisset-searchbox-field\"\r\n                        />\r\n                    </SearchWrapper>\r\n                )}\r\n                {showSelectActions && !showNoItems && (\r\n                    <SelectActions>\r\n                        <div>\r\n                            <SelectedCaption data-test=\"practisset-selected-caption\">\r\n                                {selectedPractisSetsLength > 0\r\n                                    ? `${selectedPractisSetsLength} ${\r\n                                          selectedPractisSetsLength > 1\r\n                                              ? ' Practis Sets selected'\r\n                                              : ' Practis Set selected'\r\n                                      }`\r\n                                    : 'No Practis Sets selected'}\r\n                            </SelectedCaption>\r\n                        </div>\r\n                        <StyledPlainActionsWrapper\r\n                            className={selectAllWrapperClassName}\r\n                        >\r\n                            {isAllSelected ? (\r\n                                <PlainAction\r\n                                    disabled={\r\n                                        processedSelectedList.length === 0 ||\r\n                                        showEmptyState\r\n                                    }\r\n                                    color={actionConfig.clear.color}\r\n                                    colorActive={actionConfig.clear.colorActive}\r\n                                    colorHover={actionConfig.clear.colorHover}\r\n                                    onClick={clearHandler}\r\n                                    data-test=\"practisset-unselect-all-button\"\r\n                                >\r\n                                    Unselect All\r\n                                </PlainAction>\r\n                            ) : (\r\n                                <PlainAction\r\n                                    disabled={showEmptyState}\r\n                                    color={actionConfig.select.color}\r\n                                    colorActive={\r\n                                        actionConfig.select.colorActive\r\n                                    }\r\n                                    colorHover={actionConfig.select.colorHover}\r\n                                    onClick={toggleAllHandler}\r\n                                    data-test=\"practisset-select-all-button\"\r\n                                >\r\n                                    Select All\r\n                                </PlainAction>\r\n                            )}\r\n                        </StyledPlainActionsWrapper>\r\n                        {!hideDueDates && (\r\n                            <DueDatesSelectedCaption data-test=\"due-dates-column-title\">\r\n                                Due Dates\r\n                            </DueDatesSelectedCaption>\r\n                        )}\r\n                    </SelectActions>\r\n                )}\r\n                {showEmptyState ? (\r\n                    <EmptyPractisSets\r\n                        loading={loading}\r\n                        isEmpty={!practisSets?.count}\r\n                    />\r\n                ) : (\r\n                    <>\r\n                        <PortablePractisSetsList\r\n                            practisSets={processedPractisSets}\r\n                            selectedPractisSets={selectedList}\r\n                            disabled={disabled}\r\n                            setPractisSetFilters={onSetSelected}\r\n                            hideDueDates={hideDueDates}\r\n                        />\r\n                        {onSave && showSave && (\r\n                            <FiltersSavePanel>\r\n                                <Button\r\n                                    type={'button'}\r\n                                    label={'Save'}\r\n                                    action={() => onSave()}\r\n                                    height={'48px'}\r\n                                    width={'160px'}\r\n                                />\r\n                            </FiltersSavePanel>\r\n                        )}\r\n                    </>\r\n                )}\r\n            </CreatePractisSetsBody>\r\n        </StyledCreatePractisSets>\r\n    );\r\n};\r\n\r\nexport { PortablePractisSets };\r\n","import React, { FC, useEffect } from 'react';\r\n\r\nimport {\r\n    useClearPractisSets,\r\n    useDeselectAllPractisSets,\r\n    useResetSelectedPractisSets,\r\n    useSavePractisSets,\r\n    useSelectAllPractisSets,\r\n    useSelectMultiplePractisSets,\r\n} from '../store/hors/withPractisSets/services';\r\nimport { usePractisSetsState } from '../store/hors/withPractisSets/states';\r\nimport {\r\n    PortablePractisSets,\r\n    PortablePractisSetsProps,\r\n} from './PortablePractisSets';\r\nimport { usePortablePractisSetsState } from '../store/states';\r\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\r\n\r\ntype Props = Pick<\r\n    PortablePractisSetsProps,\r\n    | 'filtersTitle'\r\n    | 'onSetSelected'\r\n    | 'showSelectActions'\r\n    | 'showSearch'\r\n    | 'showSave'\r\n> & {\r\n    resetSelectedOnUnmount?: boolean;\r\n    hideDueDates?: boolean;\r\n    className?: string;\r\n    selectAllWrapperClassName?: string;\r\n};\r\n\r\nexport const PortablePractisSetsWithStore: FC<Props> = ({\r\n    onSetSelected,\r\n    resetSelectedOnUnmount = true,\r\n    hideDueDates,\r\n    ...rest\r\n}) => {\r\n    const { selected } = usePractisSetsState();\r\n    const { data, loading } = usePortablePractisSetsState();\r\n    const clearHandler = useClearPractisSets();\r\n    const saveHandler = useSavePractisSets();\r\n    const select = useSelectMultiplePractisSets();\r\n    const selectAll = useSelectAllPractisSets();\r\n    const deselectAll = useDeselectAllPractisSets();\r\n    const resetSelected = useResetSelectedPractisSets();\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            if (resetSelectedOnUnmount) {\r\n                resetSelected();\r\n            }\r\n        };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n    \r\n\r\n    return (\r\n        <PortablePractisSets\r\n            practisSets={data}\r\n            selectedList={selected}\r\n            loading={loading}\r\n            onClearSelected={() => {\r\n                onSetSelected && onSetSelected([]);\r\n                clearHandler();\r\n            }}\r\n            onSave={saveHandler}\r\n            onSetSelected={(team) => { \r\n                onSetSelected && onSetSelected(team);\r\n                select(team);\r\n             }}\r\n            onSelectAll={(practisSets: PractisSets[]) => {\r\n                selectAll(practisSets);\r\n                onSetSelected && onSetSelected([]);\r\n            }}\r\n            onDeselectAll={() => {\r\n                deselectAll();\r\n            }}\r\n            hideDueDates={hideDueDates}\r\n            {...rest}\r\n        />\r\n    );\r\n};\r\n","import { isEmpty, get as lodashGet, chunk } from 'lodash';\n\n/**\n * @function convertObjectToArrayOfValues\n * @param { Record<string, unknown> } object\n * @returns { unknown[] | null }\n */\nexport const convertObjectToArrayOfValues = (\n    object: Record<string, unknown>\n): unknown[] | null => {\n    if (isEmpty(object)) {\n        return null;\n    }\n    return Object.entries(object)?.map(item => item[1]);\n};\n\n/**\n * @function calculatePercentage\n * @param { number } totalItems\n * @param { number } currentIndex\n * @returns { number }\n */\nexport const calculatePercentage = (\n    totalItems: number,\n    currentIndex: number\n): number => +((currentIndex * 100) / totalItems).toFixed(0);\n\n/**\n * @description It creates chunks from input options\n * whether the input is offset it creates chunks of\n * offsets.\n * @function handleCreateChunks\n * @param { Record<string, any> } options\n * @param { string } fieldName\n * @returns { Record<string, any>[] | number[] | null }\n */\nexport const handleCreateChunks = (\n    options: Record<string, any>,\n    fieldName: string,\n    itemPerChunk: number\n) => {\n    const totalSelectedItems = lodashGet(options, fieldName, null);\n\n    if (Array.isArray(totalSelectedItems)) {\n        return chunk(totalSelectedItems, itemPerChunk);\n    } else if (typeof totalSelectedItems === 'number') {\n        const offsetListArray = [0];\n\n        for (let i = 1; i < totalSelectedItems / itemPerChunk; i++) {\n            offsetListArray.push(offsetListArray[i - 1] + itemPerChunk);\n        }\n\n        return offsetListArray;\n    }\n\n    return null;\n};\n\n","import { SET_PERCENTAGE } from './constants';\nimport { SetPercentageAction } from './types';\n\n/**\n * @function setPercentage\n * @param { number } percentage\n * @returns { SetPercentageAction }\n */\nexport function setPercentage(percentage: number): SetPercentageAction {\n    return {\n        type: SET_PERCENTAGE,\n        percentage: percentage,\n    };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { cloneDeep, flatten, isEmpty, update as lodashUpdate } from 'lodash';\n\nimport {\n    calculatePercentage,\n    convertObjectToArrayOfValues,\n    handleCreateChunks,\n} from './helpers';\nimport {\n    ActionFunctionOptions,\n    ChunkRequestActionInterface,\n    ChunkRequestsServiceReturnType,\n} from './types';\nimport { ITEM_PER_CHUNK_SIZE } from './constants';\nimport { setPercentage } from '../store/actions';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\n\n/**\n *\n * @param { ActionFunctionType } actionFunction\n * @param { Record<string, unknown> } actionFunctionOptions -- fieldName can be nested. ex: fieldName: 'teams', ex: fieldName: 'teams.addedMembers'\n * @param { Function } onSuccess\n * @param { Function } onError\n * @param { boolean } shouldStopOnError\n * @returns { ChunkRequestsServiceReturnType }\n */\nexport function useChunkRequestsService<ParametersType>(\n    actionList: ChunkRequestActionInterface<ParametersType>[],\n    onSuccess?: (responses?: Record<string, unknown>) => void,\n    onError?: (\n        error?: ErrorResult,\n        completedResponses?: Record<string, unknown>\n    ) => void,\n    shouldStopOnError = true\n): ChunkRequestsServiceReturnType {\n    const dispatch = useDispatch();\n\n    const [isStopped, setIsStopped] = useState<boolean>(true);\n\n    const isStoppedRef = useRef(true);\n    const hasErrorRef = useRef(false);\n    const responsesRef = useRef<Record<string, unknown>>({});\n    const isIterationFinished = useRef(false);\n\n    /**\n     * @function handleStartAction\n     * @returns { void }\n     */\n    const handleStartAction = (): void => {\n        isStoppedRef.current = false;\n        responsesRef.current = {};\n        isIterationFinished.current = false;\n        handleExecuteActions();\n    };\n\n    /**\n     * @function handleStopAction\n     * @returns { void }\n     */\n    const handleStopAction = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            isStoppedRef.current = true;\n\n            setTimeout(() => {\n                dispatch(setPercentage(0));\n            }, 1000);\n        });\n    }, [dispatch]);\n\n    /**\n     * @function handleCallAsyncChunks\n     * @param { ChunkRequestActionInterface<ParametersType> } chunkedActionList\n     * @param { boolean } isFromChildAction\n     * @returns { Promise<void> }\n     */\n    const handleCallAsyncChunks = async (\n        chunkedActionList: ChunkRequestActionInterface<ParametersType>[],\n        isFromChildAction = false\n    ): Promise<void> => {\n        if (chunkedActionList) {\n            const chunkedActionListLength = chunkedActionList.length;\n\n            for (let index = 0; index < chunkedActionListLength; index++) {\n                // to stop the loop if action is stopped\n                if (isStoppedRef.current) {\n                    break;\n                } else {\n                    const {\n                        actionName,\n                        actionFunction,\n                        actionFunctionOptions,\n                        childActionList = [],\n                    } = chunkedActionList[index];\n\n                    const actionFunctionParameters =\n                        convertObjectToArrayOfValues(\n                            actionFunctionOptions as any\n                        );\n\n                    if (actionFunctionParameters) {\n                        // use apply to change array to accepted parameters\n                        // of function\n                        // ex: ['954', {'id': 54, 'name': 'testUser'}] => (954, {'id': 54, 'name': 'testUser'})\n                        await actionFunction\n                            ?.apply?.(document, actionFunctionParameters)\n                            ?.then(async (response: unknown) => {\n                                // Pass chunked function responses to the\n                                // final success callback.\n                                responsesRef.current[actionName] = response;\n\n                                // In some cases we can have child actions.\n                                // Child Actions should be invoked after success of main action.\n                                // We will pass the response of main action to the child actions.\n                                if (!isEmpty(childActionList)) {\n                                    // create list of chunks for child action.\n                                    const childChunkedActionList =\n                                        handleCreateChunkedActionList(\n                                            childActionList.map(action => {\n                                                const {\n                                                    actionFunctionOptions:\n                                                        childActionFunctionOptions,\n                                                } = action; // destruct child action object parameters\n\n                                                const {\n                                                    parameters:\n                                                        childActionParameters,\n                                                    fieldName:\n                                                        childActionFieldName,\n                                                    secondaryFieldName:\n                                                        childActionSecondaryFieldName,\n                                                } = childActionFunctionOptions;\n\n                                                // if the passed value is array of arrays, create chunks by it's inner value\n                                                // otherwise create chunks by array itself.\n                                                const childActionFieldNameValue =\n                                                    Array.isArray(\n                                                        (\n                                                            childActionParameters as any\n                                                        )[\n                                                            childActionFieldName\n                                                        ][0]\n                                                    )\n                                                        ? (\n                                                              childActionParameters as any\n                                                          )[\n                                                              childActionFieldName\n                                                          ][index]\n                                                        : (\n                                                              childActionParameters as any\n                                                          )[\n                                                              childActionFieldName\n                                                          ];\n\n                                                const processedChildActionList =\n                                                    {\n                                                        ...action,\n                                                        actionFunctionOptions: {\n                                                            ...childActionFunctionOptions,\n                                                            parameters: {\n                                                                ...childActionParameters,\n                                                                [childActionFieldName]:\n                                                                    childActionFieldNameValue,\n                                                                [childActionSecondaryFieldName!]:\n                                                                    response, // Passing response to child action functions.\n                                                            },\n                                                        },\n                                                    };\n\n                                                return processedChildActionList;\n                                            })\n                                        );\n\n                                    if (childChunkedActionList) {\n                                        await handleCallAsyncChunks(\n                                            childChunkedActionList,\n                                            true\n                                        );\n                                    }\n                                }\n\n                                if (!isFromChildAction && !isStoppedRef.current) {\n                                    dispatch(\n                                        setPercentage(\n                                            calculatePercentage(\n                                                chunkedActionListLength,\n                                                index + 1\n                                            )\n                                        )\n                                    );\n                                }\n                            })\n                            ?.catch((error: ErrorResult) => {\n                                if (shouldStopOnError) {\n                                    handleStopAction();\n                                    onError?.(error, responsesRef.current);\n                                    hasErrorRef.current = true;\n                                } else {\n                                    // Do not stop on errors.\n                                    // Calculate percentage.\n                                    dispatch(\n                                        setPercentage(\n                                            calculatePercentage(\n                                                chunkedActionListLength,\n                                                index + 1\n                                            )\n                                        )\n                                    );\n\n                                    onError?.(error, responsesRef.current);\n                                }\n                            });\n                    }\n                }\n\n                // It's the last iteration of the main loop.\n                if (\n                    Math.abs(index - chunkedActionListLength) === 1 &&\n                    !isFromChildAction\n                ) {\n                    isIterationFinished.current = true;\n                }\n            }\n\n            // loop is done -- success section\n            if (\n                !hasErrorRef.current &&\n                isIterationFinished.current &&\n                !isStoppedRef.current\n            ) {\n                handleStopAction();\n                onSuccess?.(responsesRef.current);\n            }\n        }\n    };\n\n    /**\n     * @description To create chunked action list to be passes to async callable function.\n     * @function handleCreateChunkedActionList\n     * @param { ChunkRequestActionInterface<ParametersType>[] } actionList\n     * @returns { ChunkRequestActionInterface<ParametersType>[] }\n     */\n    const handleCreateChunkedActionList = (\n        actionList: ChunkRequestActionInterface<ParametersType>[]\n    ): ChunkRequestActionInterface<ParametersType>[] => {\n        const chunkedActionList = [];\n\n        for (const currentAction of actionList) {\n            const {\n                actionName = '',\n                actionFunction = () => {},\n                childActionList = [],\n                itemPerChunk = ITEM_PER_CHUNK_SIZE,\n            } = currentAction || {};\n\n            // to not mutate actionFunctionOptions -- as it's ref under the hood\n            const clonedActionFunctionOptions = cloneDeep(\n                currentAction?.actionFunctionOptions\n            );\n\n            if (!isEmpty(clonedActionFunctionOptions)) {\n                const { parameters, fieldName } =\n                    clonedActionFunctionOptions as ActionFunctionOptions<ParametersType>;\n\n                const chunkedArrayOfSelectedItems = handleCreateChunks(\n                    parameters as Object,\n                    fieldName,\n                    itemPerChunk\n                );\n\n                const newChunkedAction = chunkedArrayOfSelectedItems?.map(\n                    (chunkedItem: any) => ({\n                        ...{ actionName },\n                        ...{ actionFunction },\n                        ...{ childActionList },\n                        itemPerChunk,\n                        // modify the arguments of action function\n                        // in every loop to pass chunked argument\n                        // to the action function.\n                        actionFunctionOptions: {\n                            ...(lodashUpdate(\n                                cloneDeep(parameters) as Object, // Clone parameters for Mutability\n                                fieldName,\n                                () => chunkedItem\n                            ) as ActionFunctionOptions<ParametersType>),\n                        },\n                    })\n                );\n\n                if (newChunkedAction) {\n                    chunkedActionList.push(newChunkedAction);\n                }\n            }\n        }\n\n        return flatten(chunkedActionList);\n    };\n\n    /**\n     * @description -- handle execute multiple actions\n     * @function handleExecuteActions\n     * @returns { Promise<void>  }\n     */\n    const handleExecuteActions = async (): Promise<void> => {\n        // clear error\n        hasErrorRef.current = false;\n\n        const chunkedActionList = handleCreateChunkedActionList(actionList);\n\n        if (!isEmpty(chunkedActionList)) {\n            await handleCallAsyncChunks(chunkedActionList);\n        }\n    };\n\n    useEffect(() => {\n        if (isStopped) {\n            handleStopAction();\n        } else {\n            handleStartAction();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isStopped]);\n\n    useEffect(() => {\n        return () => {\n            handleStopAction();\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return {\n        isStopped,\n        setIsStopped,\n    };\n}","import styled from 'styled-components';\n\nimport Input from '../../../input/view';\nimport Search from '../../../../icons/Search';\n\nexport const Root = styled.div`\n    flex: 3;\n    height: 40px;\n    max-height: 100%;\n    width: 100%;\n`;\n\nexport const Container = styled.div`\n    display: flex;\n    align-items: center;\n    height: 100%;\n    overflow: hidden;\n    border-radius: 4px;\n    background: ${props => props.theme.Colors.whiteFive};\n    border: 1px solid ${props => props.theme.Colors.whiteFive};\n\n    &:focus-within {\n        border: 1px solid ${props => props.theme.Colors.cloudyBlue};\n    }\n`;\n\nexport const InputWrapper = styled.div`\n    flex: 1;\n`;\nexport const StyledInput = styled(Input)`\n    padding: 0;\n`;\nexport const Icon = styled.div`\n    width: 40px;\n    height: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    padding: 0 12px 0 16px;\n`;\nexport const SearchIcon = styled(Search)<{ disabled?: boolean }>`\n    width: 12px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n`;\n\n","import { useState, useCallback, FC, ChangeEvent, memo, useMemo } from 'react';\nimport { debounce } from 'lodash';\nimport { SEARCH_INPUT_DEBOUNCE_DELAY } from '../../../../../constants/variables/component-settings';\n\nimport {\n    Container,\n    Root,\n    Icon,\n    InputWrapper,\n    SearchIcon,\n    StyledInput,\n} from './style';\nimport { TableSearchInputProps } from './types';\n\nconst TableSearchInput: FC<TableSearchInputProps> = memo(props => {\n    const { placeholder, initialValue, onChange, disabled, dataTest, debounceDelay } = props;\n    const dataTestOrDefault = dataTest || 'table-search-input';\n\n    const [value, setValue] = useState(initialValue || '');\n\n    const onChangeDebounced = useMemo(\n        () => onChange ? debounce(onChange, debounceDelay ?? SEARCH_INPUT_DEBOUNCE_DELAY) : undefined,\n        [onChange, debounceDelay]\n    );\n\n    /**\n     * @function changeHandler\n     * @returns { void }\n     */\n    const changeHandler = useCallback(\n        (e: ChangeEvent<HTMLInputElement>) => {\n            e.persist();\n            const value = e.target.value;\n            setValue(prevState => {\n                onChangeDebounced?.(value);\n                return value;\n            });\n        },\n        [onChangeDebounced]\n    );\n\n    /**\n     * @function clearHandler\n     * @returns { void }\n     */\n    const clearHandler = () => {\n        setValue('');\n        onChange && onChange('');\n    };\n\n    return (\n        <Root data-test={dataTest}>\n            <Container>\n                <Icon data-test={`${dataTestOrDefault}-icon`}>\n                    <SearchIcon disabled={disabled} />\n                </Icon>\n                <InputWrapper>\n                    <StyledInput\n                        placeholder={placeholder}\n                        handleChange={changeHandler}\n                        value={value}\n                        fontSize=\"13px\"\n                        clearInput={clearHandler}\n                        height=\"38px\"\n                        disabled={disabled}\n                        dataTest={dataTestOrDefault}\n                    />\n                </InputWrapper>\n            </Container>\n        </Root>\n    );\n});\n\nexport default TableSearchInput;\n","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n    const { innerWidth: width, innerHeight: height } = window;\n    return {\n        width,\n        height,\n    };\n}\n\nexport default function useWindowDimensions() {\n    const [windowDimensions, setWindowDimensions] = useState(\n        getWindowDimensions()\n    );\n\n    useEffect(() => {\n        function handleResize() {\n            setWindowDimensions(getWindowDimensions());\n        }\n\n        window.addEventListener('resize', handleResize);\n        return () => window.removeEventListener('resize', handleResize);\n    }, []);\n\n    return windowDimensions;\n}\n","import styled from 'styled-components';\n\nexport const StyledFormikField = styled.div`\n    width: 100%;\n    flex: 1;\n`;\n\nexport const StyledErrorContainer = styled.div<{\n    padding?: string;\n    color?: string;\n}>`\n    color: ${props =>\n        !!props.color ? props.color : props.theme.Colors.tomato};\n    font-weight: 500;\n    font-size: 13px;\n    padding: ${props => (props.padding ? props.padding : '8px 5px 0 27px')};\n`;\n\nexport const HintContainer = styled.div<{\n    padding?: string;\n    color?: string;\n}>`\n    color: ${props => (!!props.color ? props.color : 'var(--ps-grey-4)')};\n    font-weight: 500;\n    font-size: 13px;\n    padding: ${props => (props.padding ? props.padding : '8px 5px 0 27px')};\n`;\n\n","import { useEffect, useRef } from 'react';\nimport { getIn } from 'formik';\n\nimport { Input } from '../input';\nimport InputPhone from '../input/PhoneInput/PhoneInput';\nimport { InputProps } from './types';\nimport {\n    HintContainer,\n    StyledErrorContainer,\n    StyledFormikField,\n} from './styles';\n\nconst FormikField = ({\n    form,\n    field,\n    type,\n    label,\n    height,\n    fontSize,\n    disabled,\n    labelProps,\n    autoComplete,\n    background,\n    labelLeftPosition,\n    inputPadding,\n    fontFamily,\n    errorPadding,\n    errorColor,\n    hasManualError,\n    hideError,\n    autoFocus,\n    customError,\n    hint,\n    dataTest,\n    ...props\n}: InputProps) => {\n    let errorContent;\n    const error = getIn(form.errors, field.name) || customError;\n    const touch = getIn(form.touched, field.name);\n    const inputRef = useRef<any>(null);\n\n    useEffect(() => {\n        if (autoFocus && inputRef && inputRef.current) {\n            inputRef.current.focus();\n        }\n    }, [autoFocus]);\n\n    errorContent = touch && error && (\n        <StyledErrorContainer\n            padding={errorPadding}\n            color={errorColor}\n            data-test={dataTest && `${dataTest}-error`}\n            className={'formik-field-error'}\n        >\n            {error}\n        </StyledErrorContainer>\n    );\n\n    if (type && type === 'phone') {\n        return (\n            <StyledFormikField>\n                <InputPhone\n                    {...field}\n                    field={field}\n                    type={type ? type : 'text'}\n                    label={label}\n                    disabled={disabled}\n                    error={!!errorContent}\n                    hasManualError={hasManualError}\n                    background={background}\n                    height={height}\n                    fontSize={fontSize}\n                    dataTest={dataTest}\n                    {...props}\n                />\n                {errorContent}\n            </StyledFormikField>\n        );\n    }\n\n    return (\n        <StyledFormikField>\n            <Input\n                {...field}\n                field={field}\n                ref={inputRef}\n                inputPadding={inputPadding}\n                type={type ? type : 'text'}\n                label={label}\n                labelLeftPosition={labelLeftPosition}\n                labelProps={labelProps}\n                disabled={disabled}\n                autoComplete={autoComplete}\n                error={!!errorContent}\n                background={background}\n                height={height}\n                fontSize={fontSize}\n                fontFamily={fontFamily}\n                hideError={hideError}\n                dataTest={dataTest}\n                {...props}\n            />\n            {!hideError && errorContent}\n            {hint && !errorContent && <HintContainer>{hint}</HintContainer>}\n        </StyledFormikField>\n    );\n};\n\nexport default FormikField;\n","import { useMemo } from \"react\";\nimport { EnrollmentInterface, EnrollmentStatus } from \"../../../constants/interfaces/Enrollments\";\nimport { UserProfile } from \"../../../constants/interfaces/User\";\nimport { UserInfo } from \"../../../constants/interfaces/UserInfo\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\nimport { UserStatus } from '../../users/store/costants';\n\nexport enum ProgressActions {\n    VIEW_PRACTIS_SET_REPORT,\n    VIEW_PROFILE,\n    NUDGE_USER,\n    REMIND_TO_START,\n    EXPORT_REPORT,\n    UNASSIGN_USER,\n    SET_DUEDATE\n}\n\nfunction createProgressActionsHelper(loggedInUser: UserProfile | undefined) {\n    const canViewPractisSetReport = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.VIEW_ENROLLMENT);\n    \n    const canViewProfile = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.VIEW_PROFILE);\n    \n    const canNudgeUser = (user: UserInfo) =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.SEND_NUDGE)\n        && user.status === UserStatus.ACTIVE;\n\n    const canChangeDueDate = () => \n        hasPermission(loggedInUser, NEW_PERMISSIONS.SET_DUE_DATE)\n    \n    const canRemindToStart = (trainee: EnrollmentInterface) => {\n       return trainee.status !== EnrollmentStatus.COMPLETED\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.RESEND_INVITATION)\n            && trainee.user.status === UserStatus.ACTIVE\n    };\n    \n    const canExportReport = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.EXPORT_LIST_PRACTIS_SET_USER);\n    \n    const canUnassignUser = () =>\n        hasPermission(loggedInUser, NEW_PERMISSIONS.UNASSIGN_ENROLLMENT);\n    \n    const getBulkActions = (trainees?: EnrollmentInterface[]) => {\n        const users = trainees?.map(trainee => trainee.user) ?? [];\n        return getBulkActionsAvailability(\n            trainees,\n            [\n                getBulkActionAvailabilityItem(\n                    ProgressActions.NUDGE_USER,\n                    users,\n                    canNudgeUser\n                ),\n                getBulkActionAvailabilityItem(\n                    ProgressActions.REMIND_TO_START,\n                    trainees,\n                    canRemindToStart\n                ),\n                getBulkActionAvailabilityItem(\n                    ProgressActions.EXPORT_REPORT,\n                    users,\n                    canExportReport\n                ),\n                getBulkActionAvailabilityItem(\n                    ProgressActions.UNASSIGN_USER,\n                    users,\n                    canUnassignUser\n                ),\n                getBulkActionAvailabilityItem(\n                    ProgressActions.SET_DUEDATE,\n                    users,\n                    canChangeDueDate\n                ),\n            ]\n        );\n    }\n\n    return {\n        canViewPractisSetReport,\n        canViewProfile,\n        canNudgeUser,\n        canRemindToStart,\n        canExportReport,\n        canUnassignUser,\n        canChangeDueDate,\n        getBulkActions,\n    };\n}\n\nexport type ProgressActionsHelper = ReturnType<typeof createProgressActionsHelper>;\n\nexport function useProgressActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createProgressActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}","import {\n    EnrollmentStatus,\n    EnrollmentStatusEnum,\n} from '../../../constants/interfaces/Enrollments';\nimport { SearchParams } from '../../../constants/interfaces/filters';\nimport { SearchTeamMembersParams, SearchTeamParams } from '../../../api/teams/types';\nimport { dueDateFiltersValues } from '../../../ui/components/DueDateCalendar/constants';\nimport { SearchTrainingPractisSetProgressParams } from '../../../api/teams/types';\nimport { getSearchSortingValue } from '../../../helpers/functions/search-params-helpers';\nimport { userStatusFilters } from '../../../constants/interfaces/User';\n\nconst enrollmentStatusNames = {\n    [EnrollmentStatus.ENROLLED as string]: 'Added',\n    [EnrollmentStatus.PENDING as string]: 'Pending',\n    [EnrollmentStatus.COMPLETED as string]: 'Completed',\n};\n\nconst enrollmentStatuses = {\n    [EnrollmentStatusEnum.IN_PROGRESS as string]: 'In Progress',\n    [EnrollmentStatusEnum.PENDING as string]: 'Pending',\n    [EnrollmentStatusEnum.COMPLETED as string]: 'Completed',\n};\n\nexport function enrollmentStatusName(status?: string): string {\n    return (status && enrollmentStatusNames[status]) || status || '';\n}\n\nexport function getEnrollmentStatusName(status?: string): string {\n    return (status && enrollmentStatuses[status]) || status || '';\n}\n\n/**\n * @description converts SearchParams to SearchTeamMembersParams\n * @function createSearchTeamMembersParams\n * @param { SearchParams } searchParams\n * @returns { SearchTeamMembersParams }\n */\nexport const createSearchTeamMembersParams = (searchParams: SearchParams) => {\n    const overdueFilter = searchParams.filters?.find(f => f.field === 'hasOverdue');\n    const params: SearchTeamMembersParams = {\n        userStatus: searchParams.filterByRegistrationStatus?.join(','),\n        enrollmentStatus: searchParams.filterByStatus?.join(','),\n        isOverdue: overdueFilter?.value ? true : undefined,\n        labels: searchParams.labelIDs?.join(','),\n        limit: searchParams.limit ?? 20,\n        offset: searchParams.offset ?? 0,\n        query: searchParams.searchTerm,\n        sort: getSearchSortingValue(searchParams.orderBy, 'name', true)\n    };\n    return params;    \n}\n\n\nexport const createSearchPractisSetDetailsParams = (sp: SearchParams) => {\n    const sortFields = {\n        'firstName': 'user_name',\n        'enrollment.createdAt': 'assigned',\n        'enrollment.enrolledAt': 'started',\n        'enrollment.dueDate': 'due_date',\n        'enrollment.trainingTime': 'training_time',\n        'enrollment.lastTraining': 'last_training',\n        'enrollment.progressValue': 'progress',\n        'enrollment.averageAccuracy': 'accuracy',\n    }\n    const statusValues = Object.values(userStatusFilters) as string[];\n    const params: SearchTrainingPractisSetProgressParams = {\n        dueDate: sp.filterByDueDate?.map((item) => dueDateFiltersValues[item as keyof typeof dueDateFiltersValues]).join(','),\n        userStatus: sp.filterByRegistrationStatus?.join(','),\n        enrollmentStatus: (sp.filterByStatus?.length ? sp.filterByStatus?.map((item) => userStatusFilters[item as keyof typeof userStatusFilters]): statusValues).join(','),\n        labels: sp.labelIDs?.join(','),\n        limit: sp.limit ?? 20,\n        offset: sp.offset ?? 0,\n        query: sp.searchTerm,\n        sort: sp.orderBy\n            ? `${sortFields[sp.orderBy.field as keyof typeof sortFields]}_${sp.orderBy.asc ? 'asc' : 'desc'}`\n            : 'user_name_asc',\n    };\n    \n    return params;\n}\n\n/**\n * @description converts SearchParams to SearchTeamMembersParams\n * @function createSearchTeamMembersParams\n * @param { SearchParams } searchParams\n * @returns { SearchTeamParams }\n */\n export const createSearchTeamsParams = (p: SearchParams) => {\n    const params: SearchTeamParams = {\n        labels: p.labelIDs?.join(','),\n        teams: p.teamIds?.join(','),\n        leaders: p.teamLeadIds?.join(','),\n        limit: p.limit ?? 20,\n        offset: p.offset ?? 0,\n        query: p.searchTerm,\n        sort: getSearchSortingValue(p.orderBy, 'default')\n    };\n    return params;    \n}","import { CSSProperties, FC, memo } from 'react';\nimport styled from 'styled-components';\n\nconst StyledNoResults = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst StyledNoResultsContent = styled.div`\n    max-width: 300px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst NoResultsTitle = styled.div<{ width?: string; fontSize?: number }>`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: ${props => (props.fontSize ? `${props.fontSize}px` : '15px')};\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    ${props => !!props.width && `width: ${props.width};`}\n`;\n\nconst NoResultsIcon = styled.div`\n    width: 48px;\n    height: 48px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nexport const EmptyState: FC<{\n    icon?: any;\n    iconStyle?: CSSProperties;\n    width?: string;\n    fontSize?: number;\n    dataTest?: string;\n}> = memo(({ icon: Icon, iconStyle, width, fontSize, dataTest, children }) => (\n    <StyledNoResults>\n        <StyledNoResultsContent>\n            {Icon && (\n                <NoResultsIcon\n                    data-test={dataTest && `${dataTest}-icon`}\n                    style={iconStyle}\n                >\n                    <Icon />\n                </NoResultsIcon>\n            )}\n            <NoResultsTitle\n                width={width}\n                fontSize={fontSize}\n                data-test={dataTest && `${dataTest}-label`}\n            >\n                {children}\n            </NoResultsTitle>\n        </StyledNoResultsContent>\n    </StyledNoResults>\n));","import NoSearchResult from '../../../../icons/NoSearchResult';\nimport { EmptyState } from '../EmptyState';\nimport { NoSearchResultsProps } from './types';\n\nfunction NoSearchResults(\n    { entityName, dataTest }: NoSearchResultsProps\n) {\n    return <EmptyState icon={NoSearchResult} dataTest={dataTest}>No {entityName} Found</EmptyState>;\n}\n\nexport default NoSearchResults;","import NoSearchResults from './view'\n\nexport default NoSearchResults;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoFiltersIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 43 40\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <g>\n                                <g>\n                                    <path\n                                        d=\"M22.857 0v2.98c3.26.658 5.714 3.518 5.714 6.948 0 3.43-2.454 6.29-5.714 6.949V39.71H20V16.877c-3.26-.658-5.715-3.519-5.715-6.949 0-3.43 2.455-6.291 5.715-6.948V0h2.857zM8.57 0v17.162c3.26.657 5.714 3.518 5.714 6.949 0 3.43-2.454 6.29-5.714 6.948v8.651H5.713V31.06C2.454 30.4 0 27.539 0 24.11c0-3.431 2.454-6.293 5.713-6.949V.001h2.858zM7.143 19.857c-2.367 0-4.286 1.904-4.286 4.255 0 2.348 1.919 4.253 4.286 4.253 2.366 0 4.285-1.905 4.285-4.253 0-2.35-1.919-4.255-4.285-4.255zM37.14 0v22.626h-2.856V0h2.856zM21.428 5.674c-2.367 0-4.285 1.904-4.285 4.254 0 2.35 1.918 4.254 4.285 4.254s4.286-1.904 4.286-4.254c0-2.35-1.92-4.254-4.286-4.254zM32.083 40L30 38.137 34.289 33.795 30 29.451 32.083 27.591 36.25 31.81 40.416 27.591 42.5 29.451 38.21 33.795 42.5 38.137 40.416 40 36.25 35.781z\"\n                                        transform=\"translate(-699 -583) translate(636 583) translate(63)\"\n                                    />\n                                </g>\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoFiltersIcon;\n","import NoFiltersIcon from '../../../../icons/NoFiltersIcon';\nimport { EmptyState } from '../EmptyState';\nimport { NoFilterResultsProps } from './types';\n\nfunction NoFilterResultsView({\n    icon,\n    noFilterText,\n    width = '169px',\n    dataTest\n}: NoFilterResultsProps) {\n    return (\n        <EmptyState icon={icon || NoFiltersIcon} width={width} dataTest={dataTest}>\n            {noFilterText || 'No Results Match the Filter Criteria'}\n        </EmptyState>\n    );\n}\n\nexport default NoFilterResultsView;","import NoFilterResults from './view';\n\nexport default NoFilterResults;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const EmptyCalendar = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"48\"\n                height=\"48\"\n                viewBox=\"0 0 48 48\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#ggh0pyd7xa)\">\n                    <path d=\"M42.97 5.452h-6.067v-2.81c0-.435-.18-.853-.499-1.161A1.733 1.733 0 0 0 35.201 1h-.287c-.451 0-.884.173-1.203.481-.32.308-.498.726-.498 1.161v2.81h-18.45v-2.81c0-.435-.18-.853-.499-1.161A1.733 1.733 0 0 0 13.061 1h-.287c-.451 0-.884.173-1.203.481-.32.308-.498.726-.498 1.161v2.81H6.05c-.544 0-1.065.208-1.45.58-.384.37-.6.873-.6 1.398v37.592c0 .524.216 1.028.6 1.398.385.372.906.58 1.45.58h36.9c.544 0 1.065-.208 1.45-.58.384-.37.6-.874.6-1.398V7.43c0-.521-.213-1.021-.593-1.392a2.087 2.087 0 0 0-1.436-.586zm-1.024 2.967v7.726H7.096V8.42h34.85zM7.096 44.032V19.4h34.85v24.632H7.096z\" fill=\"#B1C0CB\"/>\n                    <path fill=\"#fff\" d=\"M26 28h19v19H26z\"/>\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"m30 35 3-3 4.5 4.5L42 32l3 3-4.5 4.5L45 44l-3 3-4.5-4.5L33 47l-3-3 4.5-4.5L30 35z\" fill=\"#B1C0CB\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"ggh0pyd7xa\">\n                        <path fill=\"#fff\" transform=\"translate(4 1)\" d=\"M0 0h41v46H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default EmptyCalendar;\n","import EmptyCalendar from '../../../../icons/EmptyCalendar';\nimport { EmptyState } from '../EmptyState';\nimport { NoCalendarResultsProps } from './types';\n\nfunction NoCalendarResultsView({\n    icon,\n    noResultsText,\n    dataTest\n}: NoCalendarResultsProps) {\n    return (\n        <EmptyState icon={icon || EmptyCalendar} dataTest={dataTest}>\n            {noResultsText || 'There is no data for the selected period'}\n        </EmptyState>\n    );\n}\n\nexport default NoCalendarResultsView;","import NoCalendarResults from './view';\n\nexport default NoCalendarResults;","import styled from 'styled-components';\n\nexport const Td = styled.td<{\n    width?: number;\n    clickable?: boolean;\n    flex?: { display: string; justifyContent: string; alignItems: string };\n}>`\n    height: 55px;\n    font-size: 13px;\n    font-weight: 400;\n    padding: 4px 8px 4px 0px;\n    ${props => (props.width ? `width: ${props.width}%` : '')};\n    &:hover {\n        opacity: ${props => (props.clickable ? 0.7 : 1)};\n    }\n    ${props =>\n        props.clickable &&\n        `\n        cursor: pointer;\n    `}\n    &:nth-child(1) {\n        padding-left: 16px;\n    }\n`;\n","import { FC, memo } from 'react';\n\nimport { EmptyCellDash } from '../EmptyCellDash';\nimport { Td } from './style';\nimport { TableCellProps } from './type';\n\nconst TableCell: FC<TableCellProps> = memo(props => {\n    const {\n        width,\n        colSpan,\n        className,\n        children,\n        onClick,\n        shouldShowEmptyCell,\n        dataTest,\n    } = props;\n\n    return (\n        <Td\n            width={width}\n            clickable={!!onClick}\n            colSpan={colSpan}\n            className={className}\n            onClick={onClick}\n            data-test=\"table-cell\"\n            data-test-custom-name={dataTest}\n        >\n            {!shouldShowEmptyCell ? (\n                children\n            ) : (\n                <EmptyCellDash />\n            )}\n        </Td>\n    );\n});\n\nexport default TableCell;\n","import { KeyboardArrowUp } from '@material-ui/icons';\nimport styled from 'styled-components';\n\nexport const Th = styled.th<{\n    width?: number;\n    clickable?: boolean;\n    disabled?: boolean;\n    isMultiple?: boolean;\n}>`\n    font-size: 13px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.black};\n    font-weight: bold;\n    padding: ${props =>\n        props.isMultiple ? '12px 8px 12px 0' : '23px 8px 23px 0'};\n    text-align: left;\n    border-bottom: 1px solid ${props => props.theme.Colors.paleGrey};\n    ${props => (props.width ? `width: ${props.width}%` : '')};\n`;\n\nexport const Content = styled.div<{ clickable?: boolean }>`\n    display: flex;\n    align-items: center;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    cursor: ${props => (props.clickable ? 'pointer' : 'default')};\n    pointer-events: none;\n`;\n\nexport const Text = styled.div<{ clickable?: boolean }>`\n    display: inline-flex;\n    pointer-events: all;\n    &:hover {\n        opacity: ${props => (props.clickable ? 0.7 : 1)};\n    }\n    &:active {\n        opacity: ${props => (props.clickable ? 0.7 : 1)};\n    }\n`;\n\nexport const MultiViewText = styled.div`\n    display: flex;\n    pointer-events: all;\n\n    th {\n        display: block;\n        padding: 10px 0 0;\n        border: none;\n        text-align: center;\n    }\n`;\n\nexport const EmptyIcon = styled(KeyboardArrowUp)`\n    visibility: hidden;\n    width: 20px;\n    height: 20px;\n`;\n\nexport const IconContainer = styled.div<{ clickable?: boolean }>`\n    width: 20px;\n    height: 20px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: ${props => (!props.clickable ? 'default' : 'pointer')};\n    pointer-events: ${props => (props.clickable ? 'all' : 'none')};\n`;\n\nexport const IconWrapper = styled.div`\n    width: 8px;\n    height: 8px;\n    display: flex;\n`;\n\nexport const EmptyArea = styled.span`\n    width: 20px;\n    height: 20px;\n`;\n\nexport const QuestionIconWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n    pointer-events: all;\n`;\n\nexport const TitleContainer = styled.div<{\n    disabled?: boolean;\n    titleWidth?: number;\n}>`\n    text-align: center;\n    width: ${({ titleWidth }) => (titleWidth ? `${titleWidth}%` : '70%')};\n    margin: 0 auto;\n    border-bottom: 1px solid ${props => props.theme.Colors.paleGrey};\n    padding-bottom: 4px;\n    display: flex;\n    justify-content: center;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.black};\n`;\n","import { FC, memo } from 'react';\n\nimport { QuestionTooltip } from '../../../../Tooltip/QuestionTooltip';\nimport { MultiViewText, Th, TitleContainer } from './style';\nimport { TableHeaderCellProps } from './type';\n\nconst TableHeaderCellMultiView: FC<TableHeaderCellProps> = props => {\n    const {\n        width,\n        disabled,\n        onClick,\n        children,\n        className,\n        title,\n        withTooltip,\n        tooltipText,\n        isHtmlTooltip,\n        titleWidth,\n        dataTest\n    } = props;\n\n    return (\n        <Th\n            width={width}\n            clickable={!!onClick}\n            className={className}\n            disabled={disabled}\n            isMultiple\n            data-test={dataTest}\n        >\n            <TitleContainer titleWidth={titleWidth} disabled={disabled}>\n                {' '}\n                {title}{' '}\n                {withTooltip && tooltipText && (\n                    <div style={{ cursor: 'pointer' }}>\n                        <QuestionTooltip\n                            isHtmlContent={isHtmlTooltip}\n                            text={tooltipText}\n                        />\n                    </div>\n                )}\n            </TitleContainer>\n            <MultiViewText>{children}</MultiViewText>\n        </Th>\n    );\n};\n\nexport default memo(TableHeaderCellMultiView);\n","import { FC, memo } from 'react';\n\nimport DownArrow from '../../../../../icons/DownArrow';\nimport UpArrow from '../../../../../icons/UpArrow';\nimport { QuestionTooltip } from '../../../../Tooltip/QuestionTooltip';\nimport {\n    Content,\n    EmptyIcon,\n    IconContainer,\n    IconWrapper,\n    QuestionIconWrapper,\n    Th,\n    Text,\n} from './style';\nimport { TableHeaderCellProps } from './type';\n\nconst TableHeaderCellSingleView: FC<TableHeaderCellProps> = props => {\n    const {\n        width,\n        asc,\n        disabled,\n        onClick,\n        children,\n        className,\n        tooltipText,\n        withTooltip,\n        isHtmlTooltip,\n        dataTest\n    } = props;\n\n    /**\n     * @function renderArrow\n     * @param { boolean | undefined } asc\n     * @returns { JSX.Element }\n     */\n    const renderArrow = (asc?: boolean): JSX.Element => {\n        if (typeof asc === 'boolean') {\n            return asc ? (\n                <IconContainer clickable={true}>\n                    <IconWrapper data-test=\"table-column-sorting\">\n                        <UpArrow />\n                    </IconWrapper>\n                </IconContainer>\n            ) : (\n                <IconContainer clickable={true}>\n                    <IconWrapper data-test=\"table-column-sorting\">\n                        <DownArrow />\n                    </IconWrapper>\n                </IconContainer>\n            );\n        }\n\n        return (\n            <IconContainer clickable={false}>\n                <EmptyIcon />\n            </IconContainer>\n        );\n    };\n    return (\n        <Th\n            width={width}\n            clickable={!!onClick}\n            className={className}\n            disabled={disabled}\n            data-test={dataTest}\n        >\n            <Content\n                clickable={!!onClick && !disabled}\n                onClick={() => {\n                    if (!disabled && onClick) {\n                        onClick();\n                    }\n                }}\n            >\n                <Text clickable={!!onClick && !disabled} data-test={dataTest && `${dataTest}-text`}>{children}</Text>\n                {withTooltip && tooltipText && (\n                    <QuestionIconWrapper>\n                        <QuestionTooltip\n                            isHtmlContent={isHtmlTooltip}\n                            text={tooltipText}\n                            dataTest={dataTest && `${dataTest}-tooltip`}\n                        />\n                    </QuestionIconWrapper>\n                )}\n\n                {!!onClick && renderArrow(asc)}\n            </Content>\n        </Th>\n    );\n};\n\nexport default memo(TableHeaderCellSingleView);\n","import { FC, memo } from 'react';\n\nimport TableHeaderCellMultiView from './multi.view';\nimport TableHeaderCellSingleView from './view';\nimport { TableHeaderCellProps } from './type';\n\nconst TableHeaderCellController: FC<TableHeaderCellProps> = props => {\n    const { isMultiple, ...rest } = props;\n\n    return isMultiple ? (\n        <TableHeaderCellMultiView {...rest} />\n    ) : (\n        <TableHeaderCellSingleView {...rest} />\n    );\n};\n\nexport default memo(TableHeaderCellController);\n\n","import styled from 'styled-components';\n\nexport const ListNameWrapper = styled.div<{ minWidth?: string }>`\n    position: relative;\n    height: 100%;\n    width: 100%;\n    display: flex;\n    align-items: center;\n    margin-right: 8px;\n    min-width: ${props => props.minWidth ?? '120px'};\n`;\n\nexport const ListItemName = styled.div`\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    width: 100%;\n    position: absolute;\n    display: flex;\n    align-items: center;\n    padding: 4px 0;\n`;\n\nexport const StyledText = styled.span`\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n`;\n\nexport const StyledAdditionalInfo = styled.span`\n    font-size: 13px;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.black};\n    margin-left: 3px;\n`;\n\nexport const StyledIsNew = styled.span`\n    width: 39px;\n    height: 25px;\n    border-radius: 4px;\n    border: solid 1px ${props => props.theme.Colors.mainBlue};\n    padding: 4px 7px;\n\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: 500;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.mainBlue};\n    margin-left: 9px;\n    margin-right: 20px;\n`;\n","import { FC } from 'react';\n\nimport {\n    ListItemName,\n    ListNameWrapper,\n    StyledAdditionalInfo,\n    StyledIsNew,\n    StyledText,\n} from './styles';\nimport { TableTitleOverflowTextProps } from './types';\n\nconst TableTitleOverflowText: FC<TableTitleOverflowTextProps> = ({\n    isCurrent,\n    isNew,\n    children,\n    renderIcon,\n    dataTest,\n    minWidth\n}) => {\n    return (\n        <ListNameWrapper minWidth={minWidth}>\n            <ListItemName data-test={dataTest}>\n                <StyledText\n                    title={typeof children === 'string' ? children : ''}\n                >\n                    {children}\n                </StyledText>\n                {isCurrent && (\n                    <StyledAdditionalInfo>(You)</StyledAdditionalInfo>\n                )}\n                {renderIcon && renderIcon}\n                {isNew && <StyledIsNew>New</StyledIsNew>}\n            </ListItemName>\n        </ListNameWrapper>\n    );\n};\n\nexport default TableTitleOverflowText;\n","import { ALL_FILTER_VALUE } from '../../constants/interfaces/filters';\n\nexport const distinct = (array: any, field: string) => {\n    return array.filter(\n        (item: any, index: number, arr: any) =>\n            arr.findIndex((t: any) => t[field] === item[field]) === index\n    );\n};\n\nexport const appendAllFilterValue = (array: any) => {\n    return [{ name: 'All', value: ALL_FILTER_VALUE }, ...array];\n};\n\nexport const toggleItemInArray = (array: any, item: any) => {\n    let arrayItems = array ? [...array] : [];\n\n    if (arrayItems.includes(item)) {\n        arrayItems = arrayItems.filter(x => x !== item);\n    } else {\n        arrayItems.push(item);\n    }\n\n    return arrayItems;\n};\n\nexport const appendIfEmpty = (array: any, item: any) => {\n    let arrayItems = array ? [...array] : [];\n\n    if (!arrayItems.includes(item)) {\n        arrayItems.push(item);\n    }\n\n    return arrayItems;\n};\n\nexport const removeItemFromArray = (array: any, item: any) => {\n    let arrayItems = array ? [...array] : [];\n\n    if (arrayItems.includes(item)) {\n        arrayItems = arrayItems.filter(x => x !== item);\n    }\n\n    return arrayItems;\n};\n\nexport const combineArray = (list: any[], size: number) => {\n    const matrix: any = [];\n    let i;\n    let k;\n\n    for (i = 0, k = -1; i < list.length; i++) {\n        if (i % size === 0) {\n            k++;\n            matrix[k] = [];\n        }\n\n        matrix[k].push(list[i]);\n    }\n\n    return matrix;\n};","import styled from 'styled-components';\n\nexport const EmptyCellSpan = styled.span`\n    color: var(--ps-grey-2);\n`;","import { EMPTY_CELL } from '../../constants';\nimport { EmptyCellSpan } from './styles';\n\nconst EmptyCellDash = () =>\n    <EmptyCellSpan data-test=\"empty-dash\">{EMPTY_CELL}</EmptyCellSpan>;\n\nexport default EmptyCellDash;","import { SearchParams } from \"../../../constants/interfaces/filters\";\n\nexport enum ACTIONS {\n    SET_SEARCH_STATE = 'SET_SEARCH_STATE',\n    DELETE_SEARCH_STATE = 'DELETE_SEARCH_STATE',\n    SET_SECONDARY_SEARCH_STATE = 'SET_SECONDARY_SEARCH_STATE',\n    DELETE_SECONDARY_SEARCH_STATE = 'DELETE_SECONDARY_SEARCH_STATE',\n}\n\nexport function setSearchState(key: string, childrenKeys: string[], params?: SearchParams ) {\n    return {\n        type: ACTIONS.SET_SEARCH_STATE as ACTIONS.SET_SEARCH_STATE,\n        key,\n        params,\n        childrenKeys\n    };\n}\n\nexport function deleteSearchState() {\n    return {\n        type: ACTIONS.DELETE_SEARCH_STATE as ACTIONS.DELETE_SEARCH_STATE\n    };\n}\n\n\nexport function setSecondarySearchState(key: string, params?: SearchParams) {\n    return {\n        type: ACTIONS.SET_SECONDARY_SEARCH_STATE as ACTIONS.SET_SECONDARY_SEARCH_STATE,\n        key,\n        params\n    };\n}\n\nexport function deleteSecondarySearchState( params?: SearchParams) {\n    return {\n        type: ACTIONS.DELETE_SECONDARY_SEARCH_STATE as ACTIONS.DELETE_SECONDARY_SEARCH_STATE,\n        params\n    };\n}","export enum DueDateFilters {\n    NO_DUEDATE = 'NO_DUEDATE',\n    OVERDUE = 'OVERDUE',\n    ASSIGNED = 'ASSIGNED',\n}\n\nexport type DueDateType = {\n    [id: number]: string | null;\n};\n\nexport const DATE_FORMAT = 'YYYY-MM-DD';\n","export const NOT_AUTHORIZED_ERROR_MESSAGE =\n    'You are not authorized to perform this action.';\nexport const TOKEN_EXPIRED = 'Token Expired';\nexport const USER_NOT_FOUND = 'This user wasn’t found.';\nexport const TEAM_NAME_ALREADY_EXISTS = 'Entity \"team:name\" already exists';\nexport const PHONE_ALREADY_EXISTS = 'Entity \"phone:number\" already exists';\nexport const PRACTIS_SET_ALREADY_EXISTED_ERROR_MESSAGE =\n    'Practis Set with this name already exists!';\n\n//Map for client side error messages\nexport const CLIENT_SIDE_ERROR_MESSAGE = {\n    [TOKEN_EXPIRED]:\n        'This link has expired. Click “Forgot Password?” again to try again.',\n    [USER_NOT_FOUND]:\n        \"That account doesn't exist. Enter a different email address.\",\n    [TEAM_NAME_ALREADY_EXISTS]: 'Entered name already exists.',\n    [PHONE_ALREADY_EXISTS]:\n        'Oops. Someone else already registered with this number',\n    [PRACTIS_SET_ALREADY_EXISTED_ERROR_MESSAGE]:\n        'Practis Set with this name already exists!',\n} as Record<string, string>;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ArrowRight = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 9 14\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        stroke=\"currentColor\"\n                        strokeLinejoin=\"round\"\n                        d=\"M25 21L32 28 25 35\"\n                        transform=\"translate(-24 -21)\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default ArrowRight;\n","export function selectItemsByIds<TItem extends { id?: number }>(\n    itemIds: number[] | undefined,\n    items: TItem[] | undefined\n): TItem[] {\n    return !!items?.length && !!itemIds?.length\n        ? items.filter(i => i.id && itemIds.includes(i.id))\n        : [];\n}\n","import { createContext } from 'react';\n\nexport * from './selectors';\n\nexport function createSelectorContext<TState>() {\n    return createContext<(state: any) => TState>(() => {\n        throw new Error('Not implemented');\n    });\n}\n","import { UserProfile } from '../../../constants/interfaces/User';\n\nexport const USER_PROFILE = \"FETCH_USER_PROFILE\";\nexport const USER_PROFILE_SUCCESS = \"FETCH_USER_PROFILE_SUCCESS\";\nexport const USER_PROFILE_FAILURE = \"FETCH_USER_PROFILE_FAILURE\";\nexport const UPDATE_USER_PROFILE = \"UPDATE_USER_PROFILE\";\nexport const UPDATE_USER_PROFILE_SUCCESS = \"UPDATE_USER_PROFILE_SUCCESS\";\nexport const UPDATE_USER_PROFILE_FAILURE = \"UPDATE_USER_PROFILE_FAILURE\";\nexport const RESET_PROFILE_INFORMATION = \"RESET_PROFILE_INFORMATION\";\n\nexport function fetchUserProfile() {\n    return {\n        type: USER_PROFILE\n    }\n}\n\nexport function fetchUserProfileSuccess(data: UserProfile) {\n    return {\n        type: USER_PROFILE_SUCCESS,\n        data\n    }\n}\n\nexport function fetchUserProfileFailure(error: any) {\n    return {\n        type: USER_PROFILE_FAILURE,\n        error\n    }\n}\n\nexport function updateUserProfile() {\n    return {\n        type: UPDATE_USER_PROFILE\n    }\n}\n\nexport function updateUserProfileSuccess(data: any) {\n    return {\n        type: UPDATE_USER_PROFILE_SUCCESS,\n        data\n    }\n}\n\nexport function updateUserProfileFailure(error: any) {\n    return {\n        type: UPDATE_USER_PROFILE_FAILURE,\n        error\n    }\n}\n\nexport function resetProfileInfo() {\n    return {\n        type: RESET_PROFILE_INFORMATION,\n    }\n}","import { PractisWebMode } from '../../constants/enums';\nimport { storageKeys } from '../../constants/variables/general';\nimport Storage from '../../services/Storage';\n\n/**\n * @description To detect the portal mode: 'WEB' | 'ADMIN'\n * @function isAdminPortal\n * @returns { boolean }\n */\nexport function isAdminPortal() {\n    const practisWebMode = Storage.get(storageKeys.PRACTIS_WEB);\n    if (\n        practisWebMode &&\n        practisWebMode === String(PractisWebMode['ADMIN_PORTAL'])\n    ) {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * @description To detect user OS\n * @function getOS\n * @returns { string }\n */\nexport function getOS() {\n    const platform = window.navigator.platform;\n    const osMap = {\n        Mac: 'Mac OS',\n        Win: 'Windows',\n        Linux: 'Linux',\n    };\n    const os =\n        Object.keys(osMap).find(key => platform.includes(key)) || 'Unknown';\n    return os;\n}\n\nexport function isProductionEnvironment () {\n    return process.env.REACT_APP_DEV_ENV === 'prod';\n}","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\ntype CloseType = 'thin' | 'solid';\n\nexport const Close = forwardRef<\n    SVGSVGElement,\n    IconProps & { type?: CloseType }\n>(({ className, shadow, type = 'solid' }, ref) => {\n    const iconContent: Record<CloseType, JSX.Element> = {\n        solid: (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 492 492\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    width=\"100%\"\n                    height=\"100%\"\n                >\n                    <path\n                        d=\"M300.188,246L484.14,62.04c5.06-5.064,7.852-11.82,7.86-19.024c0-7.208-2.792-13.972-7.86-19.028L468.02,7.872\n\t\t\tc-5.068-5.076-11.824-7.856-19.036-7.856c-7.2,0-13.956,2.78-19.024,7.856L246.008,191.82L62.048,7.872\n\t\t\tc-5.06-5.076-11.82-7.856-19.028-7.856c-7.2,0-13.96,2.78-19.02,7.856L7.872,23.988c-10.496,10.496-10.496,27.568,0,38.052\n\t\t\tL191.828,246L7.872,429.952c-5.064,5.072-7.852,11.828-7.852,19.032c0,7.204,2.788,13.96,7.852,19.028l16.124,16.116\n\t\t\tc5.06,5.072,11.824,7.856,19.02,7.856c7.208,0,13.968-2.784,19.028-7.856l183.96-183.952l183.952,183.952\n\t\t\tc5.068,5.072,11.824,7.856,19.024,7.856h0.008c7.204,0,13.96-2.784,19.028-7.856l16.12-16.116\n\t\t\tc5.06-5.064,7.852-11.824,7.852-19.028c0-7.204-2.792-13.96-7.852-19.028L300.188,246z\"\n                    />\n                </g>\n            </svg>\n        ),\n        thin: (\n            <svg\n                ref={ref}\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 12 12\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        d=\"M0 0H12V12H0z\"\n                        transform=\"translate(-636 -150) translate(636 150)\"\n                    />\n                    <path\n                        fill=\"currentColor\"\n                        fillRule=\"nonzero\"\n                        d=\"M10.902 1.098c.116.115.129.295.039.424l-.039.047L6.471 6l4.431 4.431c.13.13.13.341 0 .471-.115.116-.295.129-.425.039l-.046-.039L6 6.471l-4.431 4.431c-.13.13-.341.13-.471 0-.116-.115-.129-.295-.039-.424l.039-.047L5.529 6 1.098 1.569c-.13-.13-.13-.341 0-.471.115-.116.295-.129.425-.039l.046.039L6 5.529l4.431-4.431c.13-.13.341-.13.471 0z\"\n                        transform=\"translate(-636 -150) translate(636 150)\"\n                    />\n                </g>\n            </svg>\n        ),\n    };\n\n    return iconContent[type];\n});\n\nexport default Close;\n","export interface EnvironmentConfig {\n    API_BASE_URL: string;\n    API_V2_BASE_URL: string;\n    API_CLIENT: string;\n    ADMIN_PORTAL_BASE_URL: string;\n    COMPANY_PORTAL_BASE_URL: string;\n    CHATGPT_API_KEY: String;\n    NEW_RELIC_LICENSE_KEY: string;\n    NEW_RELIC_APP_ID: string;\n    APP_VERSION: string;\n    COMMIT_ID?: string;\n    BUILD_ID?: string;\n    S3_FILES_BASE_URL?: string;\n    API_SOCKET_ENDPOINT: string;\n    googleClientId: string;\n    ELEVEN_LABS_KEY: string;\n}\n\nexport interface EnvironmentConfigs {\n    default: EnvironmentConfig;\n    local: Partial<EnvironmentConfig>;\n    dev: Partial<EnvironmentConfig>;\n    beta: Partial<EnvironmentConfig>;\n    prod: Partial<EnvironmentConfig>;\n    [index: string]: Partial<EnvironmentConfig>;\n}\n\nexport function buildConfig(configs: EnvironmentConfigs): EnvironmentConfig {\n    const envName = process.env.REACT_APP_DEV_ENV;\n    return Object.assign(\n        configs.default,\n        (envName ? configs[envName] : {}) || {},\n        {\n            COMMIT_ID: process.env.REACT_APP_COMMIT_ID,\n            BUILD_ID: process.env.REACT_APP_BUILD_ID,\n        }\n    );\n}\n//TODO: [MM]: Refactor: replace everything below with React Context API\n\nvar _config: EnvironmentConfig;\n\nexport function registerConfig(config: EnvironmentConfig) {\n    _config = config;\n}\n\nexport function getConfig(): EnvironmentConfig {\n    return _config;\n}\n","import { AppState } from '../../../../../store/reducers';\r\n\r\nexport type Scope = typeof DEFAULT_LABELS_SCOPE | string;\r\n\r\nexport const DEFAULT_LABELS_SCOPE = 'primary';\r\n\r\nexport const WithLabelsScopes: Partial<Record<keyof AppState, Scope[]>> = {\r\n    draftEdit: ['assignFilters', 'addNewUser', 'editUser'],\r\n    performance: ['assignFilters', 'addNewUser', 'editUser'],\r\n    teamEdit: [\r\n        'allUsers',\r\n        'teamMembers',\r\n        'defaultTeamMembers',\r\n        'assignTeamMembers',\r\n    ],\r\n    teams: ['applyLabels', 'assignLabels'],\r\n    teamMembers: ['assignLabels'],\r\n    practisSetsTraining: ['assignLabels'],\r\n    practisSet: ['applyLabels'],\r\n};\r\n","import lodash from 'lodash';\n\nimport { PractisSets, EnrollmentPractisSet } from '../../constants/interfaces/PractisSets';\nimport { useCallback } from 'react';\nimport { PractisSetWithDueDate } from '../../constants/interfaces/Draft';\nimport { DueDateType } from '../../constants/interfaces/DueDates';\n\nexport const filterPractisSets = (term: string, statuses?: string[]) => (\n    practisSets: PractisSets[]\n): PractisSets[] => {\n    let filteredItems = [...practisSets];\n    if (statuses && statuses.length) {\n        filteredItems = filteredItems.filter(item =>\n            statuses.includes(item.status)\n        );\n    }\n\n    if (!term) {\n        return filteredItems;\n    }\n\n    return filteredItems.filter(\n        item => item.name.toLowerCase().indexOf(term.toLowerCase()) !== -1\n    );\n};\n\ntype Entity = {\n    id: number;\n    practisSetIDs: PractisSetWithDueDate[];\n    practisSets: PractisSetWithDueDate[];\n    roleId: number;\n};\n\nexport const useCalculatePreSelectedPractisSets = () => {\n    return useCallback((selectedItems: number[], entity: Entity[]) => {\n        let countSelectedItems: Record<number, number> = {};\n        let outputArray: number[] = [];\n\n        const filteredEntities = entity.filter(entityItem => {\n            return selectedItems.includes(entityItem.id);\n        });\n        for (let entity of filteredEntities) {\n            for (let practisSetId of entity.practisSets) {\n                countSelectedItems[practisSetId.practisSetId] =\n                    countSelectedItems[practisSetId.practisSetId] + 1 || 1;\n            }\n        }\n\n        for (const practisSetId in countSelectedItems) {\n            if (countSelectedItems[practisSetId] === selectedItems.length) {\n                outputArray.push(Number(practisSetId));\n            } else {\n                outputArray.push(-Number(practisSetId));\n            }\n        }\n\n        return outputArray;\n    }, []);\n};\n\n\n/**\n * @function isAllPractisSetHaveEqualDueDates\n * @param { PractisSetWithDueDate[] } practisSets \n * @returns { boolean}\n */\nconst isAllPractisSetHaveEqualDueDates = (\n    practisSets: PractisSetWithDueDate[]\n): boolean => {\n    const firstPractisSet = practisSets[0];\n\n    return practisSets.every(item => item?.dueDate === firstPractisSet.dueDate);\n};\n\n\n/**\n * @function useFindPractisSetDueDate\n * @param { PractisSetWithDueDate[] } selectedPractisSets\n * @param { number } practisSetId\n * @returns { string | null }\n */\nexport const useFindPractisSetDueDate = <T extends Entity>() => {\n    return useCallback(\n        (\n            selectedItems: number[],\n            entity: T[],\n            practisSetId: number\n        ): string | null => {\n            const filteredEntities = entity.filter(entityItem => {\n                return selectedItems.includes(entityItem.id);\n            });\n\n            const selectedItemsPractisSets = filteredEntities.map(\n                entityItem => entityItem.practisSets\n            );\n\n            const selectedItemsArray = lodash.flatten(selectedItemsPractisSets);\n\n            const filteredSelectedItemsArray = selectedItemsArray?.filter(\n                practisSet => practisSet.practisSetId === Math.abs(practisSetId)\n            );\n\n            // more than one result without same due date\n            if (\n                filteredSelectedItemsArray?.length > 1 &&\n                !isAllPractisSetHaveEqualDueDates(filteredSelectedItemsArray)\n            ) {\n                return null;\n            } else {\n                return (\n                    filteredSelectedItemsArray.find(item => item?.dueDate)\n                        ?.dueDate ?? null\n                );\n            }\n        },\n        []\n    );\n};\n\nexport const useCalculateDeletedPractisSets = () => {\n    return useCallback((assignedPractisSets: number[], initialPractisSets: number[]) => {\n        const deletedPractisSets: number[] = [];\n\n        for (let practisSet of initialPractisSets) {\n            if (\n                !assignedPractisSets.includes(practisSet) &&\n                !assignedPractisSets.includes(-practisSet)\n            ) {\n                deletedPractisSets.push(\n                    practisSet < 0 ? -practisSet : practisSet\n                );\n            }\n        }\n\n        return deletedPractisSets;\n    }, []);\n};\n\n/**\n * useCalculateDeletedEnrollments\n * @returns Callable function\n */\nexport const useCalculateDeletedEnrollments = () => {\n    return useCallback((enrollmentsData, assignedPractisSets: number[], initialPractisSets: number[]) => {\n        const deletedPractisSets: number[] = lodash.xor(assignedPractisSets, initialPractisSets);\n        const deletedEnrollmentIds: number[] = []\n        \n        enrollmentsData.forEach((pset: PractisSets) => {\n            if (deletedPractisSets.includes(pset.id as number)) {\n                deletedEnrollmentIds.push(pset.enrollmentId as number)\n            }\n        });\n\n        return deletedEnrollmentIds;\n    }, []);\n};\n\n/**\n * Returns created and updated enrollments lists with dueDate\n * @param enrollmentsData PractisSets[]\n * @param assignedPractisSets PractisSetWithDueDate[]\n * @param initialPractisSets PractisSetWithDueDate[]\n * @returns  addedPractisSets, updatedEnrollments \n */\nexport const calculateCreatedUpdatedEnrollmentIds = (\n    enrollmentsData: EnrollmentPractisSet[], \n    assignedPractisSets: PractisSetWithDueDate[], \n    initialPractisSets: PractisSetWithDueDate[]\n) => {\n    const addedPractisSets: PractisSetWithDueDate[] = [];\n    const updatedEnrollments = [];\n    \n    for (let practisSet of assignedPractisSets) {\n        const existingItem = initialPractisSets.find(\n            item =>\n                item.practisSetId === practisSet.practisSetId\n        );\n\n        if (!existingItem) {\n            addedPractisSets.push(practisSet);\n        } else if (existingItem.dueDate !== practisSet.dueDate) {\n            const enrollmentId = enrollmentsData.find((pset) => pset.id === practisSet.practisSetId)?.enrollmentId;\n            updatedEnrollments.push({\n                enrollmentId: enrollmentId as number,\n                dueDate: practisSet.dueDate\n            })\n        }\n    }\n\n    return { addedPractisSets, updatedEnrollments };\n}\n\n/**\n *\n * @function practisSetWithDueDatesArrayToDueDatesKeyValues\n *\n * @param { PractisSetWithDueDate[] } practisSetsWithDueDates\n *\n * @returns { DueDateType }\n */\nexport const practisSetWithDueDatesArrayToDueDatesKeyValues = (\n    practisSetsWithDueDates: PractisSetWithDueDate[]\n) => {\n    const dueDates: DueDateType = {};\n\n    const keys = practisSetsWithDueDates.map(x => x.practisSetId);\n\n    keys.forEach(key => {\n        dueDates[Math.abs(key)] =\n            practisSetsWithDueDates?.filter(x => x.practisSetId === key)[0]\n                ?.dueDate ?? '';\n    });\n\n    return dueDates;\n};\n\n","import styled from 'styled-components';\n\nexport const Tr = styled.tr<{ clickable?: boolean }>`\n    ${props =>\n        props.clickable &&\n        `\n        cursor: pointer;\n    `}\n\n    &.is-default {\n        font-weight: 500;\n    }\n`;\n\n","import { FC, memo } from 'react';\n\nimport { Tr } from './style';\nimport { TableRowProps } from './type';\n\nconst TableRow: FC<TableRowProps> = memo(props => {\n    const { children, className, onClick, innerRef, dataTest, ...rest } = props;\n\n    return (\n        <Tr\n            {...rest}\n            className={className}\n            ref={innerRef}\n            onClick={onClick}\n            clickable={!!onClick}\n            data-test={dataTest || 'table-row'}\n        >\n            {children}\n        </Tr>\n    );\n});\n\nexport default TableRow;\n\n","export const ITEM_PER_CHUNK_SIZE = 20;\n","/* eslint-disable no-useless-escape */\nexport const getBrowserName = (): string => {\n    const agent = window.navigator.userAgent.toLowerCase();\n    switch (true) {\n        case agent.indexOf('edg') > -1:\n            return 'edge';\n        case agent.indexOf('opr') > -1 && !!(window as any).opr:\n            return 'opera';\n        case agent.indexOf('chrome') > -1 && !!(window as any).chrome:\n            return 'chrome';\n        case agent.indexOf('trident') > -1:\n            return 'ie';\n        case agent.indexOf('firefox') > -1:\n            return 'firefox';\n        case agent.indexOf('safari') > -1:\n            return 'safari';\n        default:\n            return 'other';\n    }\n};\n\n/**\n *\n * @function getBrowserInfo\n * @returns { string }\n */\nfunction getBrowserInfo() {\n    const userAgent = navigator.userAgent;\n    const browsers = {\n        Firefox: /Firefox\\/([\\d\\.]+)/,\n        Opera: /(?:Opera|OPR)\\/([\\d\\.]+)/,\n        IE: /Trident\\/([\\d\\.]+)/,\n        Edge: /Edge\\/([\\d\\.]+)/,\n        Chrome: /Chrome\\/([\\d\\.]+)/,\n        Safari: /Version\\/([\\d\\.]+)/,\n    };\n    for (const [browserName, regex] of Object.entries(browsers)) {\n        if (regex.test(userAgent)) {\n            const browserVersion = userAgent?.match(regex)?.[1] ?? '';\n            return `${browserName} ${browserVersion}`;\n        }\n    }\n    return 'Unknown browser';\n}\n\nexport function isFirefox() {\n    return getBrowserName() === 'firefox';\n}\n\nexport function isChrome() {\n    return getBrowserName() === 'chrome';\n}\n\nexport function isOpera() {\n    return getBrowserName() === 'opera';\n}\n\nexport function isEdge() {\n    return getBrowserName() === 'edge';\n}\n\nexport function isSafari() {\n    return getBrowserName() === 'safari';\n}\n\n/**\n * @description If the user is on a desktop, returns browser name, ele returns phone model\n * @function getDeviceInfo\n * @returns { string | undefined }\n */\nexport function getDeviceInfo() {\n    const browserInfo = getBrowserInfo();\n    if (\n        /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n            navigator.userAgent\n        )\n    ) {\n        // user is on a mobile device\n        const match = navigator.userAgent.match(\n            /(iPhone|iPod|iPad|Android)\\s([\\d_]+)/\n        );\n        if (match) {\n            const [, phoneModel, phoneModelNumber] = match;\n            return `${phoneModel} ${phoneModelNumber.replace(\n                /_/g,\n                '.'\n            )}/${browserInfo}`;\n        } else {\n            return 'Unknown mobile device';\n        }\n    } else {\n        // user is on desktop\n        return browserInfo;\n    }\n}\n\n/**\n * @function getNetworkConnectionType\n * @returns { string }\n */\nexport function getNetworkConnectionType() {\n    const connection =\n        (navigator as any)?.connection ||\n        (navigator as any)?.mozConnection ||\n        (navigator as any)?.webkitConnection;\n\n    if (connection) {\n        return connection.effectiveType || 'unknown';\n    } else {\n        return 'unknown';\n    }\n}","import { FC, useState } from 'react';\n\nimport { Button } from '../../../../Button';\nimport TextAreaPlaceholderBox from '../../../../TextAreaPlaceholderBox/TextAreaPlaceholderBox';\nimport { Variables } from '../../../../../../theme/variables';\nimport {\n    NudgeUserStyledDescription,\n    StyledActions,\n    StyledContent,\n    StyledFormArea,\n    StyledInput,\n    StyledInputContainer,\n    StyledTitle,\n} from './styles';\n\nexport const NudgeUser: FC<{\n    title?: string;\n    fromUser?: string;\n    practisSetName?: string;\n    placeholder?: string;\n    onSend?(data: any): void;\n    onClose?(): void;\n}> = ({ onSend, onClose, title, fromUser, practisSetName, placeholder }) => {\n    const [messageData, setMessageData] = useState({\n        name: fromUser,\n        text: '',\n        email: true,\n        mobile: true,\n    });\n\n    const handleMessageDataChange = (key: string, value: any) => {\n        setMessageData(prevState => ({ ...prevState, [key]: value }));\n    };\n\n    return (\n        <>\n            <StyledTitle data-test=\"nudge-title\">Nudge</StyledTitle>\n            <StyledContent>\n                <NudgeUserStyledDescription data-test=\"nudge-description\">\n                    {!!title\n                        ? title\n                        : 'Send a direct message to the selected Users'}\n                </NudgeUserStyledDescription>\n                <StyledFormArea>\n                    <StyledInputContainer>\n                        <StyledInput\n                            type=\"text\"\n                            name=\"name\"\n                            inputPadding=\"29px 24px 15px 24px\"\n                            value={messageData.name}\n                            label=\"From\"\n                            labelLeftPosition=\"24px\"\n                            labelFontWeight={500}\n                            maxLength={100}\n                            height=\"40px\"\n                            handleChange={(e: any) =>\n                                handleMessageDataChange('name', e.target.value)\n                            }\n                            dataTest=\"nudge-from\"\n                        />\n                    </StyledInputContainer>\n                    <TextAreaPlaceholderBox\n                        value={messageData.text}\n                        onChange={(e: any) =>\n                            handleMessageDataChange('text', e.target.value)\n                        }\n                        name=\"messageToTrainee\"\n                        placeholder={\n                            !!placeholder\n                                ? placeholder\n                                : practisSetName\n                                ? 'Write your message regarding…                                                                              ' +\n                                  `Practis Set: ${practisSetName || ''}`\n                                : 'Write a message to the selected user(s)'\n                        }\n                        max={200}\n                        minRows={6}\n                        fontSize=\"13px\"\n                        placeholderFontWeight={500}\n                        padding=\"23px 24px\"\n                        borderRadius=\"4px\"\n                        textAreaMinHeight=\"90px\"\n                        counterColor={Variables.Colors.cloudyBlue}\n                        dataTest=\"nudge-message\"\n                    />\n                </StyledFormArea>\n                <StyledActions marginTop={15}>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={onClose}\n                        variant=\"inverse\"\n                        dataTest=\"nudge-cancel\"\n                    >\n                        Cancel\n                    </Button>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={() => !!onSend && onSend(messageData)}\n                        disabled={\n                            !messageData.name ||\n                            !messageData.text ||\n                            (!messageData.email && !messageData.mobile)\n                        }\n                        customDisabledColor={Variables.Colors.cloudyBlue}\n                        dataTest=\"nudge-send\"\n                    >\n                        Send\n                    </Button>\n                </StyledActions>\n            </StyledContent>\n        </>\n    );\n};\n","import { useSelector } from 'react-redux';\n\nimport { useWithPractisSetsContext } from './context/useWithPractisSetsContext';\nimport { PractisSetsState } from './reducer';\nimport { DEFAULT_LABELS_SCOPE } from '../../../../portableLabels/store/hors/withLabels/scopes';\nimport { isObject } from 'lodash';\n\nexport const usePractisSetsState = (): PractisSetsState => {\n    const { reducerName, scope } = useWithPractisSetsContext();\n    const appState = useSelector(state => state);\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithPractisSetsContext.Provider props'\n        );\n    }\n\n    const labelsState: PractisSetsState | undefined =\n        // @ts-ignore\n        // TODO implement `_practisSets?: PractisSetsState` field into each reducer (create general type)\n        // interface GeneralReducer {\n        //     ...\n        //     _practisSets?: StateWithPractisSets;\n        // }\n        appState[reducerName]?._practisSets?.[scope || DEFAULT_LABELS_SCOPE];\n\n    if (labelsState) {\n        labelsState.selected = labelsState?.selected.map((item) => isObject(item) ? item : {practisSetId: item, dueDate: null}) || []\n    }\n\n    if (!labelsState) {\n        throw new Error(\n            `Wrap your reducer ${reducerName} via \"withPractisSetsReducer\" HOR`\n        );\n    }\n\n    return labelsState;\n};\n","import React, {\n    createContext,\n    FC,\n    RefObject,\n    useCallback,\n    useContext,\n    useMemo,\n    useRef,\n} from 'react';\nimport InfiniteScroll from 'react-infinite-scroller';\nimport styled from 'styled-components';\nimport { Loading } from '../LoadingCopmonent';\n\nconst Root = styled.div<{ scrollable?: boolean; height?: number }>`\n    overflow-y: ${props => (!!props.scrollable ? 'auto' : 'initial')};\n    ${props => (props.height ? `height: ${props.height}px;` : '')}\n`;\n\n\nexport interface ScrollPaginationProps {\n    itemsPerPage?: number;\n    itemCount?: number;\n    totalCount?: number;\n    scrollable?: boolean;\n    scrollableRef?: RefObject<HTMLElement>;\n    scrollableWindow?: boolean; //for storybook\n    className?: string;\n    height?: number;\n    onLimitChange?(limit: number): void;\n    onOffsetChange?(offset: number): void;\n    onLocalLimitChange?(limit: number): void;\n    hideLoading?: boolean;\n}\n\nexport const ScrollPagination: FC<ScrollPaginationProps> = ({\n    itemsPerPage,\n    itemCount,\n    totalCount,\n    scrollable,\n    scrollableRef,\n    scrollableWindow,\n    className,\n    height,\n    children,\n    onLimitChange,\n    onOffsetChange,\n    onLocalLimitChange,\n    hideLoading,\n}) => {\n    const context = useContext(ScrollPaginationContext);\n    const rootRef = useRef<any>();\n    const parentRef = useMemo(\n        () =>\n            (!!scrollable && rootRef?.current) ||\n            scrollableRef?.current ||\n            context.scrollableRef?.current ||\n            null,\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [\n            scrollable,\n            rootRef?.current,\n            scrollableRef?.current,\n            context.scrollableRef?.current,\n        ]\n    );\n    const enabled =\n        !!parentRef &&\n        typeof itemCount === 'number' &&\n        typeof totalCount === 'number' &&\n        (!!onLimitChange || !!onOffsetChange || !!onLocalLimitChange);\n\n    const getScrollParent = useCallback(() => parentRef, [parentRef]);\n\n    const handleLoadMore = useCallback(() => {\n        if (enabled && itemCount! < totalCount!) {\n            const limit = Math.min(totalCount!, itemCount! + itemsPerPage!);\n            const offset = Math.min(totalCount!, itemCount!);\n            if (onLimitChange) onLimitChange(limit);\n            if (onOffsetChange) onOffsetChange(offset);\n            if (onLocalLimitChange) onLocalLimitChange(limit);\n        }\n    }, [\n        enabled,\n        itemsPerPage,\n        itemCount,\n        totalCount,\n        onLimitChange,\n        onOffsetChange,\n        onLocalLimitChange,\n    ]);\n\n    return (\n        <Root\n            className={className}\n            ref={rootRef}\n            scrollable={scrollable}\n            height={height}\n        >\n            <InfiniteScroll\n                pageStart={0}\n                loadMore={handleLoadMore}\n                hasMore={enabled && itemCount! < totalCount!}\n                loader={hideLoading ? <></> : <Loading key=\"TableScrollPaginationLoader\" />}\n                useWindow={!!scrollableWindow}\n                getScrollParent={\n                    !!scrollableWindow ? undefined : getScrollParent\n                }\n                threshold={100}\n                className={className}\n            >\n                {children}\n            </InfiniteScroll>\n        </Root>\n    );\n};\n\nexport interface ScrollPaginationContextValue {\n    scrollableRef?: RefObject<HTMLElement>;\n}\n\nexport const ScrollPaginationContext = createContext<\n    ScrollPaginationContextValue\n>({});\n","import { EnrollmentStatus } from \"../interfaces/Enrollments\";\n\nexport const DEV_ENV_URLS: {[key: string]: {[key: string]: string}} = {\n    babylon: {'v1': 'api-dev-babylon.gopractis.com', 'v2': 'api-dev-v2-babylon.gopractis.com'},\n    rome: {'v1': 'api-dev-rome.gopractis.com', 'v2': 'api-dev-v2-rome.gopractis.com'},\n    develop: {'v1': 'api-dev.gopractis.com', 'v2': 'api-dev-v2.gopractis.com'}\n};\n\nexport const statusesMap: Record<\nEnrollmentStatus,\n{ title: string; dataTest?: string }\n> = {\n    [EnrollmentStatus.PENDING]: {\n        title: 'Not Started',\n        dataTest: 'not-started',\n    },\n    [EnrollmentStatus.ENROLLED]: {\n        title: 'In Progress',\n        dataTest: 'in-progress',\n    },\n    [EnrollmentStatus.COMPLETED]: {\n        title: 'Completed',\n        dataTest: 'completed',\n    },\n};\n\nexport const storageKeys = {\n    PRACTIS_WEB: 'PRACTIS_WEB',\n};","import {\n    resetProfileInfo,\n    updateUserProfileSuccess,\n} from '../../UserProfile/store/actions';\nimport { setTokenAction, userLogoutAction } from './actions';\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    useAuthTypeApi,\n    useLoginApi,\n    useLoginByPhoneCodeApi,\n    useTestInvitationApi,\n} from '../../../api';\nimport { LoginParams, LoginByPhoneCodeParams, AuthTypeParams } from '../../../api/auth/types';\nimport { clearAuthData } from '../../../helpers/functions/auth-helpers';\n\nexport const useTestInvitationService = () => {\n    const dispatch = useDispatch();\n    const testInvitationApi = useTestInvitationApi();\n    return useCallback(\n        (code: string, failureCallback?: (errorMessages?: string) => void) => {\n            return testInvitationApi(code)\n                .then((res: any) => {\n                    if (res.status === 'error') {\n                        throw res.message;\n                    }\n                    const updateValues = {\n                        firstName: res.firstName,\n                        lastName: res.lastName,\n                        email: res.email,\n                        invitationCode: res.code,\n                        role: res.role,\n                    };\n                    dispatch(updateUserProfileSuccess(updateValues));\n                    return updateValues;\n                })\n                .catch((error: ErrorResult) => {\n                    failureCallback?.(error?.message);\n                });\n        },\n        [dispatch, testInvitationApi]\n    );\n};\n\nexport const useUserLogout = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        clearAuthData();\n        dispatch(userLogoutAction());\n    }, [dispatch]);\n};\n\nexport const useAuthType = () => {\n    const authTypeApi = useAuthTypeApi();\n    return useCallback(\n        (params: AuthTypeParams) => {\n            return authTypeApi(params)\n                .catch((error: ErrorResult) => {\n                    throw error;\n                });\n        },\n        [authTypeApi]\n    );\n};\n\nexport const useLogin = () => {\n    const loginApi = useLoginApi();\n    return useCallback(\n        (params: LoginParams) => {\n            return loginApi(params)\n                .catch((error: ErrorResult) => {\n                    clearAuthData();\n                    throw error;\n                });\n        },\n        [loginApi]\n    );\n};\n\n/**\n * @function useLoginByPhoneCode\n * @param { LoginByPhoneCodeParams } params \n * @returns { Promise<{ user: UserV2; token: string }> }\n */\nexport const useLoginByPhoneCode = () => {\n    const loginByPhoneCodeApi = useLoginByPhoneCodeApi();\n    return useCallback(\n        (params: LoginByPhoneCodeParams) => {\n            return loginByPhoneCodeApi(params)\n                .catch((error: ErrorResult) => {\n                    clearAuthData();\n                    throw error;\n                });\n        },\n        [loginByPhoneCodeApi]\n    );\n};\n\nexport const resetProfile = () => {\n    return (dispatch: any) => {\n        dispatch(resetProfileInfo());\n    };\n};\n\nexport const useResetProfileService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetProfileInfo());\n    }, [dispatch]);\n};\n\nexport const useSetTokenService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (token: string) => {\n            dispatch(setTokenAction(token));\n        },\n        [dispatch]\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const QuestionMark = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n                <svg \n                width=\"16\" \n                height=\"17\"\n                 fill=\"none\" \n                 xmlns=\"http://www.w3.org/2000/svg\">\n                    <circle cx=\"8\" cy=\"8.5\" r=\"8\" fill=\"#F1F1F1\" />\n                    <path d=\"M6.572 8.768c0-.512.104-.88.312-1.104a.999.999 0 0 1 .288-.204c.112-.048.264-.104.456-.168.128-.04.236-.08.324-.12a.528.528 0 0 0 .204-.132.318.318 0 0 0 .072-.168 1.14 1.14 0 0 0 .024-.264v-2.46c.36.008.68.044.96.108.28.056.524.16.732.312.472.352.708.956.708 1.812 0 .648-.104 1.12-.312 1.416a1.094 1.094 0 0 1-.324.312c-.128.072-.284.14-.468.204l-.6.204c-.096.032-.164.06-.204.084a.192.192 0 0 0-.084.108.553.553 0 0 0-.036.216 4.036 4.036 0 0 0-.012.396v.228h-2.04v-.78zM5.42 4.4c.384-.08.852-.144 1.404-.192l.676-.06c.264-.023.886.004.886.004L8.5 6.056c-.04-.008-.856-.072-.944-.072h-.24c-.344 0-.764.024-1.26.072l-.636.072V4.4zm.972 6.144h2.424V12.5H6.392v-1.956z\" fill=\"#6D7F8C\" fillOpacity=\".72\" />\n                </svg>\n        );\n    }\n);\n\nexport default QuestionMark;\n","import React, {\n    FC, memo, ReactNode,\n} from 'react';\nimport styled from 'styled-components';\nimport { Tooltip } from './Tooltip';\nimport QuestionMark from '../../icons/QuestionMark';\n\nconst TooltipHeaderWrapper = styled.div`\n   display: flex;\n\n   svg{\n       max-width: 16px;\n       margin-left: 4px;\n\n       &:hover{\n           circle{\n            fill: ${props => props.theme.Colors.whiteThree};\n           }\n       }\n   }\n\n   .tooltip{\n       padding: 24px !important;\n       width: 280px;\n   }\n`;\n\nconst FlexWrapper = styled.div`\n    display: flex;\n`;\n\nexport const QuestionTooltip: FC<{\n    text: ReactNode | string,\n    isHtmlContent?: boolean,\n    dataTest?: string,\n    position?: string;\n    action?: () => void;\n}> = memo(({\n    text,\n    isHtmlContent,\n    dataTest,\n    action,\n    position\n}) => {\n        return (\n            <>\n                <TooltipHeaderWrapper onClick={(e) => {e.stopPropagation(); action?.()}}>\n                    <Tooltip\n                        label={text}\n                        preset={position === 'top' ? 'question-icon-top': 'question-icon'}\n                        className={`${position  === 'top' ? 'top' : ''} tooltip-question`}\n                        trigger={'click'}\n                        isHtmlContent={isHtmlContent}\n                        dataTest={dataTest && `${dataTest}-text`}\n                    >\n                        <FlexWrapper data-test={dataTest && `${dataTest}-icon`}>\n                            <QuestionMark />\n                        </FlexWrapper>\n                    </Tooltip>\n                </TooltipHeaderWrapper>\n            </>\n        );\n    });","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Tag = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 12\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M7 89V79c0-.552.447-1 1-1h10.5l4.5 6-4.5 6H8c-.553 0-1-.448-1-1zm11 0l3.75-5L18 79H8v10h10zm1-5c0 1.105-.895 2-2 2-1.104 0-2-.895-2-2s.896-2 2-2c1.105 0 2 .895 2 2zm-2.999 0c0 .552.447 1 1 1 .552 0 1-.448 1-1s-.448-1-1-1c-.553 0-1 .448-1 1z\"\n                                transform=\"translate(-311 -294) translate(304 216)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Tag;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TagDisabled = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 12\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M14 13V7h-1V3L8-.75 3 3v10h4v.998h6.006L13 14H3c-.552 0-1-.448-1-1V2.5L8-2l6 4.5V13zM8 6c-1.105 0-2-.895-2-2s.895-2 2-2c1.104 0 2 .895 2 2s-.896 2-2 2zm0-3c-.553 0-1 .447-1 1 0 .552.447 1 1 1 .552 0 1-.447 1-1 0-.553-.448-1-1-1zm1.836 10.996l-.832-.749 1.713-1.747-1.713-1.747.832-.749 1.663 1.697 1.664-1.697.832.749-1.713 1.747 1.713 1.747-.832.75-1.664-1.698-1.663 1.697z\"\n                                transform=\"translate(-318 -294) translate(304 288) rotate(90 12 16)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default TagDisabled;\n","import styled, { css } from 'styled-components';\n\nexport const LabelTagsContainer = styled.div<{ disabled: boolean }>`\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    margin-right: 16px;\n\n    ${props =>\n        props.disabled &&\n        css`\n            cursor: default;\n        `}\n`;\n\nexport const StyledLabelTag = styled.div<{\n    open?: boolean;\n    disabled?: boolean;\n    isLabelLess?: boolean;\n}>`\n    width: 44px;\n    height: 24px;\n    border-radius: 4px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    border: solid 1px\n        ${props =>\n            props.disabled\n                ? props.theme.Colors.paleGrey\n                : props.theme.Colors.cloudyBlue};\n    background-color: ${props => props.theme.Colors.whiteFive};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    font-size: 11px;\n    &:hover {\n        color: ${props => !props.disabled && props.theme.Colors.darkSkyBlue};\n        border: solid 1px\n            ${props => !props.disabled && props.theme.Colors.darkSkyBlue};\n    }\n    ${props =>\n        props.open &&\n        `\n    color: ${props.theme.Colors.darkSkyBlue};\n    border: solid 1px ${props.theme.Colors.darkSkyBlue}; \n    background-color: ${props.theme.Colors.darkSkyBlue15};\n`}\n    ${props =>\n        props.disabled &&\n        css`\n            pointer-events: none;\n            border: solid 1px ${props.theme.Colors.paleGrey};\n            cursor: default;\n        `}\n${props =>\n        props.isLabelLess &&\n        `\n        border: solid 1px ${props.theme.Colors.paleGrey};\n`}\n`;\n\nexport const LabelIconWrapper = styled.div<{ disabled: boolean }>`\n    width: 16px;\n    height: 12px;\n    display: flex;\n\n    ${props =>\n        props.disabled &&\n        css`\n            color: ${props => props.theme.Colors.paleGrey};\n        `}\n`;\n\nexport const LabelText = styled.div<{ disabled: boolean }>`\n    height: 12px;\n    display: flex;\n    margin-left: 4px;\n    line-height: 1.1;\n\n    ${props =>\n        props.disabled &&\n        css`\n            opacity: 0.4;\n        `}\n`;\n\n","import { FC, useEffect, useState } from 'react';\n\nimport Tag from '../../../../icons/Tag';\nimport { TreeDfsNameMapper } from '../../../../../helpers/classes/TreeDfsNameMapper';\nimport TagDisabled from '../../../../icons/TagDisabled';\nimport { usePortableLabelsState } from '../../../../../features/portableLabels/store/states';\nimport {\n    LabelIconWrapper,\n    LabelTagsContainer,\n    LabelText,\n    StyledLabelTag,\n} from './styles';\n\nexport interface TableLabelTagsProps {\n    open?: boolean;\n    selectedLabels?: number[];\n    toggleOpen?(): void;\n    isLabelLess?: boolean;\n    className?: string;\n    dataTest?: string;\n}\n\nexport const TableLabelTags: FC<TableLabelTagsProps> = ({\n    open,\n    toggleOpen,\n    selectedLabels,\n    isLabelLess,\n    className,\n    dataTest\n}) => {\n    const [assignedLabelNames, setAssignedLabelNames] = useState<any>([]);\n    const labels = usePortableLabelsState().data;\n    const disabled =\n        (!assignedLabelNames || assignedLabelNames.length < 1) && !open;\n\n    useEffect(() => {\n        if (open && assignedLabelNames.length < 1) {\n            toggleOpen?.();\n        }\n    }, [assignedLabelNames, open, toggleOpen]);\n\n    useEffect(() => {\n        const selectedItems = (selectedLabels || []).map(item =>\n            item >= 0 ? item : Math.abs(item)\n        );\n\n        if (!!labels && labels.items.length > 0 && selectedItems) {\n            const treeDfsNameMapper = new TreeDfsNameMapper(\n                labels.items,\n                selectedItems\n            );\n            const names = treeDfsNameMapper.getNames();\n            setAssignedLabelNames(names);\n        }\n    }, [labels, selectedLabels]);\n\n    return (\n        <LabelTagsContainer\n            onClick={e => {\n                e.stopPropagation();\n                if (disabled) return;\n                if (toggleOpen) {\n                    toggleOpen();\n                }\n            }}\n            disabled={disabled}\n            className={className}\n        >\n            <StyledLabelTag\n                open={open}\n                disabled={disabled}\n                isLabelLess={isLabelLess}\n                data-test={dataTest || 'table-labels'}\n            >\n                <LabelIconWrapper disabled={disabled}>\n                    {isLabelLess ? <TagDisabled /> : <Tag />}\n                </LabelIconWrapper>\n                <LabelText disabled={disabled}>\n                    {isLabelLess\n                        ? ''\n                        : assignedLabelNames\n                        ? assignedLabelNames.length\n                        : 0}\n                </LabelText>\n            </StyledLabelTag>\n        </LabelTagsContainer>\n    );\n};\n","import { createContext, useContext } from 'react';\n\nexport interface LocalStorage {\n    get(key: string): any;\n    set(key: string, data: any): string | null;\n    clear(): boolean;\n    remove(key: string): boolean;\n}\n\nexport const LocalStorageContext = createContext<LocalStorage>(undefined!);\n\nexport function useLocalStorage() {\n    return useContext(LocalStorageContext);\n}\n","export const getPageUrl = (\n    route: string,\n    params?: Record<string, string | undefined>\n) => {\n    if (!params) {\n        return route;\n    }\n\n    return Object.keys(params).reduce((acc, param) => {\n        const value = params[param];\n        if (value) {\n            return acc.replace(`:${param}`, value);\n        }\n\n        return acc;\n    }, route);\n};\n\nexport const replaceUrlQueryParam = (url: string, paramName: string, paramValue: string): string => {\n    const nUrl = new URL(url);\n    if (!paramValue) {\n        nUrl.searchParams.delete(paramName);\n    } else {\n        nUrl.searchParams.set(paramName, paramValue);\n    }\n    return nUrl.toString();\n}\n","import ROUTES from '../../routes/routes';\nimport localStorage from '../../services/Storage';\nimport { DEV_ENV_URLS } from '../../constants/variables/general';\n/**\n * @function buildRegistrationUrl - builds url of registration page by invitation code\n * @param { string } code\n * @returns { string }\n */\nexport const buildRegistrationUrl = (code: string): string =>\n    `${document.location.origin}${ROUTES.AUTH_PAGES.REGISTRATION}?token=${code}`;\n\nexport const getDevApiUrl = (version: string) => {\n    const apiPlatform = (localStorage.get('apiPlatform') || 'develop');\n\n    return DEV_ENV_URLS[apiPlatform][version];\n}\n\n/**\n * @function isSharedLink\n * @param { string } url\n * @returns { boolean }\n */\nexport const isSharedLink = (url: string) => {\n    var accuracyTestRegex = new RegExp(`${ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.ALL}/\\\\d+`);\n    var challengeRegex = new RegExp(`${ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL}/\\\\d+`);\n    return !!url.match(accuracyTestRegex)\n        || !!url.match(challengeRegex);\n}","import { AppState } from '../../../../../store/reducers';\r\n\r\nexport type Scope = typeof DEFAULT_PRACTIS_SETS_SCOPE | string;\r\n\r\nexport const DEFAULT_PRACTIS_SETS_SCOPE = 'primary';\r\n\r\nexport const WithPractisSetsScopes: Partial<Record<keyof AppState, Scope[]>> = {\r\n    draftEdit: ['assignFilters', 'addNewUser', 'editUser'],\r\n    performance: ['assignFilters', 'addNewUser', 'editUser'],\r\n};\r\n","export const plural = (count: number, text: string, pluralText?: string, withZero?: boolean) => {\n    return count === 1 || (withZero && count === 0) ? text : (pluralText ? pluralText : `${text}s`)\n}","import styled from 'styled-components';\n\nexport const Root = styled.div<{\n    width?: number;\n    marginRight?: number;\n    marginLeft?: number;\n}>`\n    display: flex;\n    justify-content: center;\n    align-content: center;\n    align-items: center;\n    ${props => props.width && `width: ${props.width}px`};\n    flex-shrink: 0;\n    ${props => !!props.marginRight && `margin-right: ${props.marginRight}px;`}\n    ${props => !!props.marginLeft && `margin-left: ${props.marginLeft}px;`}\n`;\n\n","import { FC, memo } from 'react';\n\nimport { Root } from './style';\nimport { TableToolItemProps } from './type';\n\nconst TableToolItem: FC<TableToolItemProps> = memo(props => {\n    const { width, children, className, marginRight, marginLeft } = props;\n\n    return (\n        <Root\n            width={width}\n            className={className}\n            marginRight={marginRight}\n            marginLeft={marginLeft}\n        >\n            {children}\n        </Root>\n    );\n});\n\nexport default TableToolItem;\n","import React, { memo } from 'react';\nimport styled from 'styled-components';\nimport { CircularProgress } from '@material-ui/core';\n\nconst StyledLoadingComponent = styled.div<{\n    color?: string;\n    width: string;\n    height: number;\n}>`\n    height: ${props => `${props.height}px`};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    align-self: center;\n    justify-self: center;\n    width: ${props => props.width};\n    color: ${props =>\n        props.color ? props.color : props.theme.Colors.skyBlueTwo};\n`;\n\nexport const Loading: React.FC<{\n    width?: string;\n    className?: string;\n    color?: string;\n    size?: number;\n}> = memo(({ width, color, size = 20, className }) => {\n    return (\n        <StyledLoadingComponent\n            width={width ? width : '100%'}\n            className={className}\n            color={color}\n            height={size}\n        >\n            <CircularProgress size={`${size}px`} color=\"inherit\" />\n        </StyledLoadingComponent>\n    );\n});\n\nexport default Loading;\n","\nimport React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PractisAdminPlatformLogo = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg ref={ref}\n                viewBox=\"0 0 156 40\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                data-test='practis-logo'>\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M125.161 0v3.36h-2.837V0h2.837zm-6.04 20.965v-2.801h-1.666c-1.877 0-2.936-.994-2.936-2.815V8.543h4.602V5.8h-4.602v-3.6l-2.921-.013v3.613h-2.583v2.744h2.583v6.876c0 3.39 2.216 5.546 5.547 5.546h1.976zM44.03 19.52v7.184h-2.993V5.46h2.992v1.834c1.468-1.442 3.233-2.156 5.308-2.156 1.51 0 2.88.364 4.107 1.064a7.484 7.484 0 0 1 2.894 2.913c.691 1.246 1.002 2.646 1.016 4.173.056 4.58-3.472 8.22-8.032 8.164-2.004-.028-3.853-.7-5.293-1.932zm1.398-2.462c.974.995 2.216 1.485 3.726 1.499 2.936.028 5.194-2.283 5.194-5.252 0-2.982-2.258-5.265-5.194-5.265-2.922 0-5.265 2.31-5.237 5.252.029 1.526.508 2.758 1.51 3.767zm18.528 3.902v-8.388c0-2.787 1.411-4.356 3.853-4.356h1.779V5.39h-1.581c-1.779 0-2.993.546-4.009 1.736V5.46l-2.936.014V20.96h2.894zm20.653-1.776c-1.411 1.373-3.105 2.115-5.265 2.115-1.496 0-2.879-.35-4.121-1.05-1.228-.7-2.188-1.68-2.894-2.913-.705-1.247-1.044-2.619-1.058-4.117-.07-4.538 3.557-8.137 8.088-8.08 2.117.027 3.923.728 5.377 2.142v-1.82h3.035v15.516h-3.162v-1.793zm-5.079-.756c-1.51-.028-2.752-.505-3.74-1.485-.988-1.008-1.468-2.24-1.482-3.725-.029-2.913 2.272-5.21 5.222-5.21 2.922 0 5.209 2.27 5.209 5.21 0 2.955-2.287 5.238-5.209 5.21zm27.761-2.955c-1.073 3.795-4.051 5.825-7.72 5.825-1.497 0-2.88-.35-4.122-1.05a7.556 7.556 0 0 1-2.922-2.913c-.706-1.246-1.059-2.619-1.059-4.117 0-1.498.353-2.87 1.045-4.117a7.498 7.498 0 0 1 2.936-2.913c1.242-.7 2.625-1.05 4.121-1.05 3.698 0 6.62 2.016 7.693 5.77h-2.936c-2.202-4.776-9.81-3.404-9.824 2.31-.014 2.885 2.258 5.237 5.067 5.21 2.16-.029 3.797-.953 4.729-2.955h2.992zm17.87 5.49V5.053h-2.837v15.91h2.837zm15.84-4.566c0 3.01-2.554 4.901-6.182 4.901-3.599 0-6.112-2.142-6.239-5.657h2.894c.113 1.792 1.411 2.87 3.43 2.87 2.004 0 3.176-.854 3.176-2.002 0-.504-.156-.854-.452-1.107-.409-.336-.692-.49-1.27-.63a21.426 21.426 0 0 0-1.878-.392 38.583 38.583 0 0 1-1.538-.294 13.576 13.576 0 0 1-1.496-.462 3.494 3.494 0 0 1-.65-.294c-.09-.063-.21-.154-.362-.271a58.513 58.513 0 0 0-.287-.22c-.423-.321-.649-.685-.932-1.245-.239-.49-.352-1.107-.352-1.835 0-2.815 2.498-4.621 5.9-4.621 3.43 0 5.815 2.072 5.914 5.391h-2.823c-.099-1.708-1.214-2.689-3.148-2.689-1.948 0-2.964.799-2.964 1.835 0 .462.155.77.395.952.41.294.678.448 1.242.588.126.027.246.055.358.08.178.04.337.077.475.102l.96.155c1.27.21 2.244.434 2.978.658 1.51.49 2.654 1.554 2.823 3.655l.011.178c.01.152.017.272.017.354z\" fill=\"#fff\" />\n                <path d=\"M43.873 39.337c-.507 0-.936-.095-1.287-.286a2.023 2.023 0 0 1-.8-.773 2.15 2.15 0 0 1-.266-1.06c0-.338.056-.64.169-.91.113-.273.286-.507.52-.702.234-.199.537-.361.91-.487.282-.091.611-.173.988-.247.381-.074.793-.14 1.235-.202.446-.065.912-.134 1.398-.208l-.56.319c.005-.485-.103-.843-.325-1.073-.22-.23-.593-.344-1.117-.344-.317 0-.622.074-.917.22-.295.148-.5.402-.617.761l-1.43-.448c.173-.594.502-1.07.987-1.43.49-.36 1.149-.54 1.976-.54.624 0 1.173.102 1.645.306.477.204.83.537 1.06 1 .125.248.201.501.227.761.026.256.039.536.039.839v4.31h-1.371V37.62l.227.247c-.316.507-.687.88-1.111 1.118-.42.234-.947.351-1.58.351zm.312-1.248c.355 0 .659-.062.91-.188s.45-.28.598-.462c.152-.182.254-.353.306-.513.082-.2.127-.427.136-.683.013-.26.02-.47.02-.63l.48.143c-.472.074-.877.139-1.215.195-.338.056-.628.11-.871.162a5.556 5.556 0 0 0-.643.163 1.99 1.99 0 0 0-.462.227 1.009 1.009 0 0 0-.293.3.78.78 0 0 0-.097.396c0 .173.043.327.13.461.087.13.212.234.377.312.169.078.377.117.624.117zM52.215 39.337c-.646 0-1.21-.162-1.69-.487a3.227 3.227 0 0 1-1.118-1.326c-.265-.56-.397-1.19-.397-1.892 0-.71.132-1.343.397-1.898a3.191 3.191 0 0 1 1.137-1.32c.49-.324 1.066-.487 1.73-.487.667 0 1.226.163 1.676.488.455.32.8.76 1.034 1.32.234.558.35 1.191.35 1.897 0 .698-.116 1.329-.35 1.892a2.985 2.985 0 0 1-1.047 1.326c-.463.325-1.038.487-1.722.487zm.24-1.404c.42 0 .759-.095 1.014-.286.26-.195.449-.465.566-.812.121-.347.182-.748.182-1.203 0-.459-.06-.86-.182-1.202-.117-.347-.301-.615-.553-.806-.251-.195-.576-.293-.975-.293-.42 0-.767.104-1.04.312a1.78 1.78 0 0 0-.604.832c-.13.347-.195.733-.195 1.157 0 .43.063.82.188 1.17.13.347.327.622.592.826.264.204.6.305 1.007.305zm1.762 1.21v-4.928h-.195v-4.433h1.58v9.36h-1.385zM65.854 39.142v-4.264c0-.48-.119-.855-.357-1.124-.239-.273-.561-.41-.969-.41a1.31 1.31 0 0 0-.676.176c-.2.113-.357.282-.474.507a1.674 1.674 0 0 0-.176.793l-.695-.41c-.005-.485.104-.912.325-1.28.225-.373.528-.663.91-.871a2.616 2.616 0 0 1 1.274-.312c.775 0 1.369.234 1.78.702.417.464.625 1.075.625 1.833v4.66h-1.567zm-8.443 0v-7.02h1.384V34.3h.195v4.842h-1.58zm4.231 0v-4.244c0-.49-.119-.871-.357-1.144-.239-.273-.564-.41-.975-.41-.399 0-.72.137-.962.41-.239.273-.358.628-.358 1.066l-.702-.468c0-.455.113-.865.338-1.229.226-.364.529-.65.91-.858a2.637 2.637 0 0 1 1.294-.318c.524 0 .962.113 1.313.338.355.22.62.524.793.91.177.381.266.812.266 1.293v4.654h-1.56zM69.246 31.056V29.62h1.567v1.436h-1.567zm0 8.086v-7.02h1.567v7.02h-1.567zM77.615 39.142v-3.38c0-.22-.015-.465-.045-.734a2.537 2.537 0 0 0-.215-.774 1.466 1.466 0 0 0-.494-.617c-.217-.16-.511-.24-.884-.24-.2 0-.396.032-.591.097a1.359 1.359 0 0 0-.533.338c-.156.156-.282.373-.377.65-.096.273-.143.624-.143 1.053l-.93-.397c0-.598.115-1.14.345-1.625a2.766 2.766 0 0 1 1.027-1.157c.45-.29 1.005-.435 1.664-.435.52 0 .949.087 1.287.26.338.173.606.394.806.663.199.269.346.555.442.858.095.303.156.591.182.864.03.27.045.488.045.657v3.92h-1.586zm-4.868 0v-7.02h1.397V34.3h.189v4.842h-1.586zM86.873 39.337c-.684 0-1.258-.162-1.722-.487a2.984 2.984 0 0 1-1.047-1.326c-.234-.563-.35-1.194-.35-1.892 0-.706.116-1.339.35-1.898.234-.559.577-.998 1.027-1.32.455-.324 1.016-.487 1.684-.487.663 0 1.237.163 1.722.488.49.32.87.76 1.138 1.32.269.554.403 1.187.403 1.897 0 .702-.132 1.333-.397 1.892a3.227 3.227 0 0 1-1.118 1.326c-.48.325-1.044.487-1.69.487zm-3.386 2.925v-10.14h1.384v4.927h.195v5.213h-1.58zm3.146-4.329c.407 0 .743-.101 1.007-.305.265-.204.46-.479.585-.826.13-.35.195-.74.195-1.17 0-.424-.065-.81-.195-1.157a1.78 1.78 0 0 0-.604-.832c-.273-.208-.62-.312-1.04-.312-.399 0-.724.098-.975.293-.251.19-.438.46-.56.806a3.722 3.722 0 0 0-.175 1.202c0 .455.059.856.176 1.203.121.347.31.617.565.812.26.191.6.286 1.02.286zM94.611 39.337c-.702 0-1.315-.158-1.84-.474a3.259 3.259 0 0 1-1.221-1.307c-.286-.559-.43-1.2-.43-1.924 0-.736.148-1.382.443-1.937a3.26 3.26 0 0 1 1.228-1.3c.524-.312 1.131-.468 1.82-.468.706 0 1.322.159 1.846.475.524.316.932.754 1.222 1.313.29.555.436 1.194.436 1.917 0 .728-.148 1.372-.442 1.93-.29.556-.698.991-1.222 1.307-.525.312-1.138.468-1.84.468zm0-1.469c.624 0 1.088-.208 1.391-.624.303-.416.455-.953.455-1.612 0-.68-.154-1.222-.461-1.625-.308-.407-.77-.61-1.385-.61-.42 0-.767.095-1.04.285a1.646 1.646 0 0 0-.598.787c-.13.334-.195.721-.195 1.163 0 .68.154 1.225.462 1.632.312.403.769.604 1.371.604zM99.547 39.142v-7.02h1.384v1.71l-.169-.221c.087-.234.202-.446.345-.637a1.92 1.92 0 0 1 .526-.481c.174-.117.364-.208.572-.273.213-.07.429-.11.65-.124.221-.017.436-.008.644.026v1.463a2.01 2.01 0 0 0-.722-.059 1.657 1.657 0 0 0-.728.228 1.647 1.647 0 0 0-.533.448 1.9 1.9 0 0 0-.299.624c-.065.23-.097.48-.097.748v3.568h-1.573zM108.854 39.142a6.401 6.401 0 0 1-1.365.11 3.131 3.131 0 0 1-1.19-.24 1.647 1.647 0 0 1-.799-.734 2.09 2.09 0 0 1-.254-.93 38.23 38.23 0 0 1-.013-1.072v-6.104h1.56v6.013c0 .282.002.529.007.74.008.213.054.387.136.52.156.26.405.406.748.436.342.03.732.013 1.17-.052v1.313zm-4.895-5.791v-1.229h4.895v1.229h-4.895zM112.326 39.337c-.507 0-.936-.095-1.287-.286a2.021 2.021 0 0 1-.799-.773 2.146 2.146 0 0 1-.267-1.06c0-.338.056-.64.169-.91.113-.273.286-.507.52-.702.234-.199.537-.361.91-.487.282-.091.611-.173.988-.247.381-.074.793-.14 1.235-.202.446-.065.912-.134 1.398-.208l-.559.319c.004-.485-.104-.843-.325-1.073-.221-.23-.594-.344-1.118-.344-.317 0-.622.074-.917.22-.295.148-.5.402-.617.761l-1.43-.448c.173-.594.502-1.07.988-1.43.489-.36 1.148-.54 1.976-.54.624 0 1.172.102 1.644.306.477.204.83.537 1.06 1 .125.248.201.501.227.761.026.256.039.536.039.839v4.31h-1.371V37.62l.227.247c-.316.507-.687.88-1.111 1.118-.421.234-.947.351-1.58.351zm.312-1.248c.355 0 .659-.062.91-.188s.451-.28.598-.462c.152-.182.254-.353.306-.513.082-.2.127-.427.136-.683.013-.26.02-.47.02-.63l.481.143c-.473.074-.878.139-1.216.195-.338.056-.628.11-.871.162a5.504 5.504 0 0 0-.643.163c-.182.065-.336.14-.462.227a.997.997 0 0 0-.292.3.78.78 0 0 0-.098.396.83.83 0 0 0 .13.461c.087.13.212.234.377.312.169.078.377.117.624.117zM117.983 39.142v-9.555h1.567v9.555h-1.567z\" fill=\"#B1C0CB\" />\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 16.89C0 8.668 6.537 2 14.601 2s14.601 6.667 14.601 14.89c0 8.224-6.537 14.891-14.6 14.891H7.38L0 38V16.89zm21.948-.015c0-4.238-3.33-7.674-7.44-7.674-4.109 0-7.44 3.436-7.44 7.674v7.674h7.44c4.068 0 7.374-3.368 7.44-7.547v-.127z\" fill=\"#4AA9E2\" />\n            </svg>\n        );\n    }\n);\n\nexport default PractisAdminPlatformLogo;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PractisLogo = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n                <svg\n                    ref={ref}\n                    viewBox=\"0 0 156 40\"\n                    className={className}\n                    width=\"100%\"\n                    height=\"100%\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                    data-test='practis-logo'\n                >\n                    {!!shadow && (\n                        <defs>\n                            <filter\n                                width=\"134.3%\"\n                                height=\"102.1%\"\n                                x=\"-14.3%\"\n                                y=\"-1.1%\"\n                                filterUnits=\"objectBoundingBox\"\n                            >\n                                <feOffset\n                                    dx=\"-2\"\n                                    in=\"SourceAlpha\"\n                                    result=\"shadowOffsetOuter1\"\n                                />\n                                <feGaussianBlur\n                                    in=\"shadowOffsetOuter1\"\n                                    result=\"shadowBlurOuter1\"\n                                    stdDeviation=\"1\"\n                                />\n                                <feColorMatrix\n                                    in=\"shadowBlurOuter1\"\n                                    result=\"shadowMatrixOuter1\"\n                                    values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                                />\n                                <feMerge>\n                                    <feMergeNode in=\"shadowMatrixOuter1\" />\n                                    <feMergeNode in=\"SourceGraphic\" />\n                                </feMerge>\n                            </filter>\n                        </defs>\n                    )}\n                    <g fill=\"none\" fillRule=\"evenodd\">\n                        <path\n                            fill=\"#4aa9e2\"\n                            d=\"M16.526 0C7.399 0 0 7.407 0 16.545V40l8.353-6.91h8.173c9.127 0 16.525-7.407 16.525-16.545C33.051 7.407 25.653 0 16.526 0zm-.106 8c4.651 0 8.421 3.817 8.421 8.526v.141c-.075 4.644-3.816 8.386-8.42 8.386H8v-8.527C8 11.817 11.77 8 16.42 8z\"\n                        />\n                        <path\n                            fill=\"currentColor\"\n                            d=\"M48.313 34.797V26.78c1.593 1.375 3.64 2.125 5.859 2.157 5.047.062 8.953-4 8.89-9.11-.015-1.703-.359-3.265-1.124-4.656-.766-1.39-1.844-2.469-3.204-3.25-1.359-.781-2.875-1.188-4.547-1.188-2.296 0-4.25.797-5.874 2.407v-2.047H45v23.703h3.313zm5.671-9.094c-1.672-.015-3.047-.562-4.125-1.672-1.109-1.125-1.64-2.5-1.672-4.203-.03-3.281 2.563-5.86 5.797-5.86 3.25 0 5.75 2.548 5.75 5.876 0 3.312-2.5 5.89-5.75 5.86zm16.391 2.688v-9.36c0-3.11 1.563-4.86 4.266-4.86h1.968v-3.155h-1.75c-1.968 0-3.312.609-4.437 1.937v-1.86l-3.25.016v17.282h3.203zm17.031.375c2.39 0 4.266-.828 5.828-2.36v2h3.5V11.094h-3.359v2.031c-1.61-1.578-3.61-2.36-5.953-2.39-5.016-.063-9.031 3.953-8.953 9.015.015 1.672.39 3.203 1.172 4.594.78 1.375 1.843 2.468 3.203 3.25 1.375.781 2.906 1.172 4.562 1.172zm.203-3.203c-1.671-.032-3.046-.563-4.14-1.657-1.094-1.125-1.625-2.5-1.64-4.156-.032-3.25 2.515-5.813 5.78-5.813 3.235 0 5.766 2.532 5.766 5.813 0 3.297-2.531 5.844-5.766 5.813zm22.188 3.203c4.062 0 7.36-2.266 8.547-6.5h-3.313c-1.031 2.234-2.844 3.265-5.234 3.297-3.11.03-5.625-2.594-5.61-5.813.016-6.375 8.438-7.906 10.876-2.578h3.25c-1.188-4.188-4.422-6.438-8.516-6.438-1.656 0-3.188.391-4.563 1.172-1.39.781-2.468 1.86-3.25 3.25-.765 1.39-1.156 2.922-1.156 4.594 0 1.672.39 3.203 1.172 4.594.781 1.39 1.86 2.468 3.234 3.25 1.375.781 2.907 1.172 4.563 1.172zm21.64-.375v-3.125h-1.843c-2.078 0-3.25-1.11-3.25-3.141v-7.594h5.094V11.47h-5.094V7.453l-3.235-.016v4.032h-2.859v3.062h2.86v7.672c0 3.781 2.453 6.188 6.14 6.188h2.188zm6.688-19.641V5h-3.14v3.75h3.14zm0 19.64V10.64h-3.14v17.75h3.14zm10.688.376c4.015 0 6.843-2.11 6.843-5.47 0-.124-.015-.327-.031-.593-.188-2.344-1.453-3.531-3.125-4.078-.813-.25-1.89-.5-3.297-.734l-1.062-.172c-.25-.047-.563-.125-.922-.203-.625-.157-.922-.328-1.375-.657-.266-.203-.438-.547-.438-1.062 0-1.156 1.125-2.047 3.281-2.047 2.141 0 3.375 1.094 3.485 3h3.125c-.11-3.703-2.75-6.016-6.547-6.016-3.766 0-6.531 2.016-6.531 5.157 0 .812.125 1.5.39 2.046.313.625.563 1.032 1.032 1.391.328.25.562.438.718.547.203.125.453.234.72.328.546.203.983.344 1.655.516.5.11 1.078.218 1.703.328.813.14 1.5.281 2.079.437.64.157.953.328 1.406.703.328.282.5.672.5 1.235 0 1.281-1.297 2.234-3.516 2.234-2.234 0-3.672-1.203-3.797-3.203h-3.203c.14 3.922 2.922 6.313 6.906 6.313z\"\n                        />\n                    </g>\n                </svg>\n        );\n    }\n);\n\nexport default PractisLogo;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Search = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 20 20\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    fill=\"currentColor\"\n                    d=\"M19.825 19.826c-.232.232-.609.232-.841 0l-5.573-5.572c-1.424 1.23-3.256 1.999-5.285 1.999C3.64 16.253 0 12.615 0 8.126 0 3.638 3.639 0 8.126 0c4.488 0 8.127 3.638 8.127 8.126 0 2.03-.77 3.861-2 5.286l5.572 5.572c.232.232.232.609 0 .842zm-4.823-11.7c0-3.797-3.078-6.876-6.876-6.876-3.797 0-6.876 3.08-6.876 6.876 0 3.798 3.079 6.877 6.876 6.877 3.798 0 6.876-3.078 6.876-6.877z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Search;\n","export const SIZES = {\n    MIN_WIDTH: 250,\n};\n\nexport const EMPTY_CELL = '—';\n","import { ScrollPaginationProps } from '../../ScrollPagination';\nimport {\n    TableConfigurationsType,\n    TableEmptyStateConfigurations,\n    TableStateValues,\n} from '../types';\n\nexport enum TableViewMode {\n    SIMPLE,\n    INFINITE_SCROLL,\n}\nexport interface TableProps {\n    data?: unknown[];\n    tableStates: TableStateValues;\n    tableContainerClassName?: string;\n    tableInnerClassName?: string;\n    cornered?: boolean;\n    addOverflow?: boolean;\n    tableEmptyStateConfigurations: TableEmptyStateConfigurations;\n    configuration: TableConfigurationsType;\n    viewMode?: TableViewMode;\n    scrollRef?: any;\n    scrollPaginationProps?: ScrollPaginationProps;\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const EmptyBox = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                height=\"100%\"\n                viewBox=\"0 0 32 32\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M101 12.801v17.066c0 1.177-.895 2.133-2 2.133H75c-1.105 0-2-.956-2-2.133V12.8c-1.105 0-2-.956-2-2.134V2.133C71 .955 71.895 0 73 0h28c1.105 0 2 .955 2 2.133v8.534c0 1.179-.896 2.134-2 2.134zM75 28.8c0 .59.448 1.067 1 1.067h22c.552 0 1-.478 1-1.067V13.866c0-.588-.448-1.064-1-1.064h-5v4.265c0 1.179-.895 2.133-2 2.133h-8c-1.105 0-2-.954-2-2.133v-4.265h-5c-.552 0-1 .476-1 1.064V28.8zM91 16v-3.198h-8V16c0 .588.448 1.066 1 1.066h6c.552 0 1-.478 1-1.066zm10-12.8c0-.588-.448-1.067-1-1.067H74c-.552 0-1 .478-1 1.067v6.4c0 .59.448 1.067 1 1.067h26c.552 0 1-.478 1-1.066V3.2z\"\n                                transform=\"translate(-424 -1816) translate(353 1816)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default EmptyBox;\n","import { UserV2 } from '../../../constants/interfaces/User';\nimport {\n    fetchUserProfile,\n    fetchUserProfileFailure,\n    fetchUserProfileSuccess,\n    updateUserProfile,\n    updateUserProfileFailure,\n    updateUserProfileSuccess,\n} from './actions';\nimport { useDispatch } from 'react-redux';\nimport {\n    useGetUserApi,\n    useUpdateUserInfo,\n    useUpdateUserPhoneNumber,\n} from '../../../api';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    useShowMessage,\n} from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useRedirectToPhoneVerification } from '../../../helpers/hooks/useRedirectToPhoneVerification';\nimport { MobileNumberVerificationStep } from '../../Auth/AddMobileNumber/types';\nimport {\n    updateUserFailure,\n    updateUserSuccess,\n} from '../../../features/users/store/actions';\nimport {\n    CLIENT_SIDE_ERROR_MESSAGE,\n    PHONE_ALREADY_EXISTS\n} from '../../../ui/components/ErrorMessages/constants';\nimport { getCurrentUserId, isAuthorized } from '../../../helpers/functions/auth-helpers';\nimport {\n    useGetUserPermissionsApi,\n    useGetUserSettingsApi,\n    useSetUserPhotoApi\n} from '../../../api';\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport { useUploadMediaService } from '../../../services/MediaService';\n\n/**\n * @function useGetProfileService\n * @description gets user data, permissions and settings by user id\n * and combine them in user profile\n * @returns { Promise }\n */\nexport const useGetProfileService = () => {\n    const dispatch = useDispatch();\n    const getUserApi = useGetUserApi();\n    const getUserPermissionsApi = useGetUserPermissionsApi();\n    const getUserSettingsApi = useGetUserSettingsApi();\n    const showMessage = useShowMessage();\n    return useCallback(() => {\n        if (!isAuthorized())\n            return showMessage('User is not authorized to perform this action', 'error');\n        const userId = getCurrentUserId()!;\n        const requests: Promise<unknown>[] = [\n            getUserApi(userId),\n            getUserPermissionsApi(userId),\n            getUserSettingsApi(userId)\n        ];\n        dispatch(fetchUserProfile());\n        return Promise.all(requests)\n            .then((data) => {\n                const user = data[0] as UserV2;\n                const permissions = data[1] as NEW_PERMISSIONS[];\n                const labelFilters = data[2] as number[];\n                const userProfile: UserProfile = {\n                    ...user,\n                    permissions,\n                    labelFilters\n                };\n                dispatch(fetchUserProfileSuccess(userProfile));\n                return userProfile;\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(fetchUserProfileFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, getUserApi, getUserPermissionsApi, getUserSettingsApi, showMessage]);\n};\n\n/**\n * @description handle update user profile service.\n * if user phone number should be changed it add\n * phone number changes request to the action list.\n * @function useUpdateProfileService\n * @returns { CallableFunction }\n */\nexport const useUpdateProfileService = () => {\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n\n    const updateUserInfo = useUpdateUserInfo();\n    const updateUserPhoneNumber = useUpdateUserPhoneNumber();\n    const redirectToPhoneVerification = useRedirectToPhoneVerification();\n\n    /**\n     * @function callback\n     * @param { UserV2 } data\n     * @param { number } userId\n     * @param { number } roleId\n     * @param { boolean } self\n     * @param { boolean } shouldShowMessage\n     * @param { Function } successCallback\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        (\n            data: UserV2,\n            userId: number,\n            self: boolean,\n            shouldShowMessage = true\n        ) => {\n            dispatch(updateUserProfile());\n            const updateUserInfoActionList = [];\n\n            updateUserInfoActionList.push(\n                updateUserInfo(userId ?? data?.id, {\n                    firstName: data?.firstName ?? '',\n                    lastName: data?.lastName ?? '',\n                })\n            );\n\n            if (data?.phoneNumber) {\n                updateUserInfoActionList.push(\n                    updateUserPhoneNumber(\n                        userId ?? data?.id ?? 0,\n                        data.phoneNumber\n                    ).then(() => {\n                        redirectToPhoneVerification({\n                            user: { ...data, id: userId },\n                            verificationStep:\n                                MobileNumberVerificationStep.VERIFY,\n                        });\n                    })\n                );\n            }\n\n            return Promise.all(updateUserInfoActionList)\n                .then(() => {\n                    self\n                        ? dispatch(updateUserProfileSuccess({ id: userId }))\n                        : dispatch(updateUserSuccess({ id: userId }));\n                    shouldShowMessage &&\n                        showMessage('Profile Updated!', 'success');\n                })\n                .catch((error: ErrorResult) => {\n                    self\n                        ? dispatch(updateUserProfileFailure(error))\n                        : dispatch(updateUserFailure(error));\n\n                    shouldShowMessage &&\n                        showMessage(\n                            error.errorCode === 409 ? CLIENT_SIDE_ERROR_MESSAGE[PHONE_ALREADY_EXISTS] : error.message,\n                            'error'\n                        );\n                });\n        },\n        [\n            dispatch,\n            redirectToPhoneVerification,\n            showMessage,\n            updateUserInfo,\n            updateUserPhoneNumber,\n        ]\n    );\n};\n\n/**\n * @description uploads user photo and sets its media id to user\n * @function useUploadPhotoService\n * @returns { CallableFunction }\n */\nexport const useUploadPhotoService = () => {\n    const uploadMedia = useUploadMediaService();\n    const setUserPhotoApi = useSetUserPhotoApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @param { number } userId\n     * @param { File } file\n     * @returns { Promise<void> }\n     */\n     return useCallback(\n        (userId: number, file: File) => {\n            return uploadMedia(file)\n                .then((mediaId) => {\n                    return setUserPhotoApi(userId, mediaId);\n                })\n                .catch((error) => {\n                    showMessage(error.message, 'error');\n                    return Promise.reject(error);\n                });\n        },\n        [uploadMedia, setUserPhotoApi, showMessage]\n    );\n};\n\n\n","import axios from 'axios';\n\nexport function fileDownload(response: any, defaultFileName?: string) {\n    const octetStreamMime = 'application/octet-stream';\n    let fileName = defaultFileName || 'report.csv';\n    let contentType = octetStreamMime;\n    if (response.headers) {\n        const cd = response.headers['content-disposition'];\n\n        const regex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n        const match: any = regex.exec(cd);\n\n        contentType = response.headers['content-type'];\n        fileName = match[1];\n    }\n\n    fileName = fileName.replace(/\"/g, '');\n\n    try {\n        const blob = new Blob([response.data || response], {\n            type: contentType,\n        });\n\n        if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) {\n            (window.navigator as any).msSaveOrOpenBlob(blob, fileName);\n        } else {\n            const elem = window.document.createElement('a');\n            elem.href = window.URL.createObjectURL(blob);\n            elem.download = fileName;\n            document.body.appendChild(elem);\n            elem.click();\n            document.body.removeChild(elem);\n        }\n\n        return true;\n    } catch (exc) {\n        return false;\n    }\n}\n\n/**\n * @function handleDownloadVideoFile\n * @param { string } url\n * @param  { string } fileName\n * @returns { Promise<void> }\n */\nexport async function handleDownloadVideoFile(\n    url: string,\n    fileName: string\n): Promise<void> {\n    await axios\n        .get(url, {\n            headers: {\n                'Content-Type': 'video/mp4',\n            },\n            responseType: 'blob',\n        })\n        .then(response => {\n            if (response.data) {\n                const href = window.URL.createObjectURL(response.data);\n                const link = document.createElement('a');\n                link.href = href;\n                link.setAttribute(\n                    'download',\n                    `${fileName.substring(0, 10)}.mp4`\n                );\n                // Append to html link element page\n                document.body.appendChild(link);\n\n                // Start download\n                link.click();\n\n                // Clean up and remove the link\n                URL.revokeObjectURL(href);\n                link.remove();\n            }\n        });\n}","import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n    height: 100%;\n`;\n\nexport const TableContainer = styled.div`\n    width: 100%;\n`;\n\nexport const TableExtendContainer = styled.div`\n    border-radius: 16px;\n    display: block;\n    background: ${props => props.theme.Colors.white};\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Label = styled.div<{ color?: string }>`\n    position: absolute;\n    top: 0px;\n    left: 16px;\n    pointer-events: none;\n    font-size: 13px;\n    -webkit-transition: all 0.18s ease;\n    transition: all 0.18s ease;\n    display: flex;\n    align-items: center;\n    height: 100%;\n    color: ${props =>\n        props.color ? props.color : props.theme.Colors.steelGrey};\n    font-weight: normal;\n    cursor: pointer;\n`;\n\nexport const SelectLabel: FC<{\n    label: string;\n    children?: string;\n    color?: string;\n    dataTest?: string;\n}> = ({ children, label, color, dataTest }) => {\n    return <Label color={color} data-test={dataTest}>{children || label}</Label>;\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Tooltip } from '../Tooltip';\n\nconst MenuItem = styled.div<{\n    selected?: boolean;\n    disabled?: boolean;\n    destructive?: boolean;\n}>`\n    min-height: 40px;\n    color: ${props =>\n        !!props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : !!props.destructive\n            ? props.theme.Colors.tomato\n            : props.theme.Colors.black};\n    border-radius: 4px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 8px 15px;\n    display: flex;\n    align-items: center;\n    word-break: break-word;\n    background: ${props =>\n        props.selected\n            ? props.theme.Colors.whiteTwo\n            : props.theme.Colors.white};\n    cursor: ${props => (props.disabled ? `default` : `pointer`)};\n    &:hover {\n        ${props =>\n            !props.disabled && `background: ${props.theme.Colors.whiteTwo};`}\n    }\n    &:active {\n        ${props => !props.disabled && `opacity: 0.7;`}\n    }\n`;\n\nexport const SelectMenuItem: FC<{\n    forwardedRef?: any;\n    name?: string;\n    value: string | number;\n    children: string;\n    onClick: any;\n    hideAction: () => void;\n    selected?: boolean;\n    multiSelect?: boolean;\n    disabled?: boolean;\n    destructive?: boolean;\n    hint?: string;\n    dataTest?: string;\n}> = ({\n    children,\n    onClick,\n    value,\n    name,\n    hideAction,\n    selected,\n    forwardedRef,\n    multiSelect,\n    disabled,\n    destructive,\n    hint,\n    dataTest,\n}) => {\n    const handleSelectItem = () => {\n        if (disabled) return;\n        onClick({ target: { value: value, name: name } });\n        if (!multiSelect) hideAction();\n    };\n\n    return !!hint ? (\n        <Tooltip label={hint} preset=\"button-icon\">\n            <MenuItem disabled={disabled} destructive={destructive} data-test={dataTest}>\n                {children}\n            </MenuItem>\n        </Tooltip>\n    ) : (\n        <MenuItem\n            onClick={handleSelectItem}\n            selected={selected}\n            disabled={disabled}\n            destructive={destructive}\n            ref={forwardedRef}\n            data-test={dataTest}\n        >\n            {children}\n        </MenuItem>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { motion } from 'framer-motion';\n\nconst MenuItem = styled(motion.div)<{\n    menuPosition: 'left' | 'right';\n    width?: string;\n}>`\n    min-width: ${props => (props.width ? props.width : '192px')};\n    position: absolute;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    ${props => props.menuPosition}: 0;\n    top: 8px;\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n`;\n\nconst ContentArea = styled.div`\n    max-height: 300px;\n    overflow-y: auto;\n    padding: 16px;\n`;\n\nconst ANIMATION_SCALE = 5;\n\nexport const SelectMenu: FC<{\n    menuPosition?: 'left' | 'right';\n    width?: string;\n}> = ({ children, menuPosition, width }) => {\n    return (\n        <MenuItem\n            initial={{ scale: 1 / ANIMATION_SCALE }}\n            animate={{ scale: 1 }}\n            exit={{ scale: 0 }}\n            menuPosition={menuPosition ? menuPosition : 'right'}\n            width={width}\n        >\n            <ContentArea>{children}</ContentArea>\n        </MenuItem>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst StyledSelect = styled.div<{\n    height?: number;\n    padding?: string;\n    fontSize?: string;\n}>`\n    width: 100%;\n    height: 100%;\n    padding: 0 16px;\n    box-sizing: border-box;\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '13px')};\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    display: flex;\n    align-items: center;\n`;\n\nconst StyledSelectValue = styled.div`\n    overflow: hidden;\n    text-overflow: ellipsis;\n    padding-right: 4px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const SelectInput: FC<{\n    children?: any;\n    items?: any;\n    value?: string | number;\n    height?: number;\n    padding?: string;\n    toggleSelect?: (e?: any) => void;\n    fontSize?: string;\n    dataTest?: string;\n}> = ({ value, toggleSelect, height, padding, fontSize, dataTest }) => {\n    return (\n        <StyledSelect\n            height={height}\n            onClick={toggleSelect}\n            padding={padding}\n            fontSize={fontSize}\n            data-test={dataTest}\n        >\n            <StyledSelectValue>{value}</StyledSelectValue>\n        </StyledSelect>\n    );\n};\n","import React, { FC, useRef, useState } from 'react';\nimport { SelectLabel, SelectInput, SelectMenuItem, SelectMenu } from './index';\nimport styled from 'styled-components';\nimport OutsideActionBox from '../OutsideActionBox/OutsideActionBox';\nimport { Variables } from '../../../theme/variables';\nimport UpArrow from '../../icons/UpArrow';\nimport DownArrow from '../../icons/DownArrow';\nimport {\n    ALL_FILTER_NAME,\n    ALL_FILTER_VALUE,\n} from '../../../constants/interfaces/filters';\n\nconst COLORS: any = {\n    light: {\n        background: Variables.Colors.whiteFive,\n        color: Variables.Colors.steelGrey,\n    },\n    dark: {\n        background: Variables.Colors.darkTwo,\n        color: Variables.Colors.whiteTwo,\n    },\n    gray: {\n        background: Variables.Colors.whiteTwo,\n        color: Variables.Colors.black,\n    },\n    transparent: {\n        background: Variables.Colors.transparent,\n        color: Variables.Colors.steelGrey,\n    },\n};\n\nconst StyledSelectForm = styled.div<{\n    height?: number;\n    error?: boolean;\n    variant: string;\n    border?: boolean;\n}>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: 4px;\n    min-width: 128px;\n    cursor: pointer;\n    height: ${props => (props.height ? `${props.height}px` : '40px')};\n    width: 100%;\n    background: ${props => COLORS[props.variant].background};\n    color: ${props => COLORS[props.variant].color};\n    box-shadow: inset 0 0 0 ${props => (props.error ? '2px' : '-1px')} ${props => props.theme.Colors.coral};\n    -webkit-appearance: none;\n    \n    border: ${props => (props.border ? 1 : 0)}px solid\n        ${props => props.theme.Colors.cloudyBlue};\n    &.is-disabled {\n        color: ${props => props.theme.Colors.cloudyBlue};\n        cursor: default;\n    }\n`;\n\nconst Container = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst IconHolder = styled.div`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    position: absolute;\n    right: 15px;\n    top: 0;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const SelectDropdown: FC<{\n    label?: string;\n    labelColor?: string;\n    id?: string;\n    items?: Array<any>;\n    children?: Array<any>;\n    value?: string | number | string[] | number[] | null;\n    name?: string;\n    defaultValue?: string | number;\n    colorTheme?: 'light' | 'dark' | 'gray' | 'transparent';\n    onChange?: any;\n    disabled?: boolean;\n    error?: boolean;\n    menuPosition?: 'left' | 'right';\n    height?: number;\n    fontSize?: string;\n    className?: string;\n    restrictShowAllName?: boolean;\n    openMenuWidth?: string;\n}> = ({\n    label,\n    labelColor,\n    items,\n    value,\n    onChange,\n    name,\n    colorTheme,\n    menuPosition,\n    height,\n    fontSize,\n    disabled,\n    className,\n    error,\n    restrictShowAllName,\n    openMenuWidth,\n}) => {\n    const [open, setOpen] = useState(false);\n    const selectedRef = useRef(null);\n    const multiSelect = Array.isArray(value);\n    const findNameByValue = () => {\n        if (items) {\n            let selectedItems = items.filter(item =>\n                Array.isArray(value)\n                    ? value.includes(item.value as never)\n                    : item.value === value\n            );\n\n            if (selectedItems.length < 2) {\n                return selectedItems[0] && selectedItems[0].name;\n            } else {\n                return (\n                    selectedItems &&\n                    selectedItems\n                        .map(item => {\n                            return item.name;\n                        })\n                        .join(', ')\n                );\n            }\n        }\n    };\n\n    const selectedName = findNameByValue();\n\n    return (\n        <StyledSelectForm\n            variant={colorTheme ? colorTheme : 'light'}\n            error={error}\n            height={height}\n            className={[className, disabled ? 'is-disabled' : undefined].join(\n                ' '\n            )}\n            border={open || (!!value && value !== ALL_FILTER_VALUE)}\n        >\n            {(label && !value) ||\n                (restrictShowAllName &&\n                    label &&\n                    !!value &&\n                    value === ALL_FILTER_VALUE && (\n                        <SelectLabel label={label} color={labelColor} />\n                    ))}\n            <IconHolder>{open ? <UpArrow /> : <DownArrow />}</IconHolder>\n            <SelectInput\n                value={\n                    restrictShowAllName\n                        ? selectedName === ALL_FILTER_NAME\n                            ? ''\n                            : selectedName\n                        : selectedName\n                }\n                toggleSelect={() => !disabled && setOpen(!open)}\n                height={height}\n                fontSize={fontSize}\n            />\n\n            <Container open={open} toggleOpen={setOpen}>\n                <SelectMenu menuPosition={menuPosition} width={openMenuWidth}>\n                    {items &&\n                        items.map((item: { value: string; name: string }) => (\n                            <SelectMenuItem\n                                forwardedRef={\n                                    (\n                                        Array.isArray(value)\n                                            ? value.includes(\n                                                  item.value as never\n                                              )\n                                            : item.value === value\n                                    )\n                                        ? selectedRef\n                                        : null\n                                }\n                                key={item.value}\n                                value={item.value}\n                                name={name}\n                                hideAction={() => setOpen(false)}\n                                onClick={onChange}\n                                selected={\n                                    Array.isArray(value)\n                                        ? value.includes(item.value as never)\n                                        : item.value === value\n                                }\n                                multiSelect={multiSelect}\n                            >\n                                {item.name}\n                            </SelectMenuItem>\n                        ))}\n                </SelectMenu>\n            </Container>\n        </StyledSelectForm>\n    );\n};\n\nexport default SelectDropdown;\n","import { ModalDialogInterface } from './types';\n\nexport const SHOW_MODAL = 'SHOW_MODAL';\nexport const HIDE_MODAL = 'HIDE_MODAL';\nexport const UPDATE_LOADING_STATUS = 'UPDATE_LOADING_STATUS';\n\nexport const initialState: ModalDialogInterface = {\n    isLoading: true,\n    modalType: null,\n    modalProps: null,\n};","export const dfsUpdate = (\n    tree: any[],\n    id: number,\n    field: string,\n    value: any\n) => {\n    for (let i = 0; i < tree.length; i++) {\n        let node = tree[i];\n\n        if (!!node && node.id === id) {\n            tree[i] = {\n                ...node,\n                [field]: value,\n            };\n\n            return i;\n        }\n\n        const len = node.children.length;\n\n        for (let j = 0; j < len; j++) {\n            const foundNodeIndex: any = dfsUpdate(\n                node.children,\n                id,\n                field,\n                value\n            );\n            let foundNode = node.children[foundNodeIndex];\n\n            if (!!foundNode) {\n                node.children[foundNodeIndex] = {\n                    ...foundNode,\n                    [field]: value,\n                };\n            }\n        }\n    }\n    return null;\n};\n\nexport const findAllChildIds = (\n    tree: any[],\n    rootId: any,\n    answer: any[]\n): any => {\n    let children = tree.filter(item => item.parentId === rootId);\n\n    if (!!children && !!children.length) {\n        answer.push(...children);\n        for (let i = 0; i < children.length; i++) {\n            findAllChildIds(tree, children[i].id, answer);\n        }\n    }\n};\n","const existsInArray = (list: any[], id: number) => {\n    return list.filter(existing => existing && existing.id === id).length > 0;\n};\n\nconst buildFlatArrayParents = (\n    item: any,\n    combined: any[],\n    wholeArray: any[]\n) => {\n    if (item.parent) {\n        if (!existsInArray(wholeArray, item.parent.id)) {\n            combined.push(item.parent);\n        }\n        buildFlatArrayParents(item.parent, combined, wholeArray);\n    }\n    return combined;\n};\n\nexport const treeToList = (list?: any[]) => {\n    if (!list) return [];\n    let flatArray: any = [];\n    for (let item of list) {\n        if (!existsInArray(flatArray, item.id)) {\n            flatArray.push(item);\n        }\n\n        if (item.parent) {\n            flatArray = [\n                ...flatArray,\n                ...buildFlatArrayParents(item, [], flatArray),\n            ];\n        }\n        if (item.children) {\n            for (let child of item.children) {\n                if (!existsInArray(flatArray, child.id)) {\n                    flatArray.push(child);\n                }\n            }\n        }\n    }\n\n    return flatArray;\n};\n\n// Alternative realization of ^^^ treeToList are missing nodes on 2+ level\nexport const treeToArray = (tree: any[], array: any[] = []): any[] => {\n    if (!tree?.length) return [];\n    for (let node of tree) {\n        if (!existsInArray(array, node.id)) {\n            array.push(node);\n            if (node.parent) {\n                array = treeToArray([node.parent], array);\n            }\n            if (node.children?.length) {\n                array = treeToArray(node.children, array);\n            }\n        }\n    }\n    return array;\n};\n","import styled from 'styled-components';\n\nimport { ArrowRight } from '../../../icons/ArrowRight';\n\nexport const Container = styled.div`\n    width: webkit-fill-available;\n    background-color: ${props => props.theme.Colors.white};\n    display: flex;\n    align-items: center;\n    margin: 16px 8px;\n    border-radius: 16px 16px 0 0;\n    height: 32px;\n`;\n\nexport const StyledLabel = styled.div`\n    font-size: 11px;\n    color: ${props => props.theme.Colors.black};\n    margin-right: 12px;\n    width: 64px;\n    white-space: nowrap;\n`;\n\nexport const FilteredByWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n    overflow: auto;\n`;\n\nexport const ScrollIconContainer = styled.div`\n    display: flex;\n    width: 5px;\n    height: 9px;\n`;\n\nexport const ArrowLeft = styled(ArrowRight)`\n    transform: scaleX(-1);\n`;\n\nexport const ScrollWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 35px;\n    height: 100%;\n    cursor: pointer;\n    &:hover {\n        opacity: 0.9;\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const StyledFilteredByContainer = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n    overflow-y: hidden;\n    overflow-x: auto;\n    ::-webkit-scrollbar {\n        height: 0;\n    }\n`;\n\nexport const StyledFilteredByItem = styled.div`\n    border-radius: 4px;\n    background-color: ${props => props.theme.Colors.darkSkyBlue15};\n    font-size: 11px;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    border: 1px solid ${props => props.theme.Colors.darkSkyBlue};\n    text-align: center;\n    padding: 0 12px;\n    display: flex;\n    height: 32px;\n    line-height: 32px;\n    text-wrap: nowrap;\n    margin: 2px 4px;\n`;\n\nexport const IconHolderForClose = styled.div<{ scaleX?: number }>`\n    width: 8px;\n    display: flex;\n    cursor: pointer;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    flex-shrink: 0;\n    margin-left: 8px;\n`;\n\n","import { FC } from 'react';\n\nimport ArrowRight from '../../../icons/ArrowRight';\nimport { scrollLeft, scrollRight } from './helper';\nimport Close from '../../../icons/Close';\n\nimport { TableDivider } from '../table-divider';\nimport {\n    ArrowLeft,\n    Container,\n    FilteredByWrapper,\n    IconHolderForClose,\n    ScrollIconContainer,\n    ScrollWrapper,\n    StyledFilteredByContainer,\n    StyledFilteredByItem,\n    StyledLabel,\n} from './style';\nimport { TableHeaderFilterViewProps } from './type';\n\nconst TableHeaderFilterView: FC<TableHeaderFilterViewProps> = props => {\n    const {\n        onLabelRemove,\n        showLeftArrow,\n        showRightArrow,\n        wrapperRef,\n        handleScroll,\n        filteredByNames,\n    } = props;\n\n    return (\n        <>\n            <Container>\n                <StyledLabel>Filtered by:</StyledLabel>\n                {showLeftArrow && (\n                    <ScrollWrapper\n                        onClick={() => {\n                            scrollRight(wrapperRef?.current);\n                        }}\n                    >\n                        <ScrollIconContainer>\n                            <ArrowLeft />\n                        </ScrollIconContainer>\n                    </ScrollWrapper>\n                )}\n                <FilteredByWrapper>\n                    <StyledFilteredByContainer\n                        ref={wrapperRef}\n                        onScroll={e => handleScroll(e)}\n                    >\n                        {filteredByNames?.map((item: any) => (\n                            <StyledFilteredByItem key={item.id}>\n                                {item.title}\n                                <IconHolderForClose\n                                    onClick={(e: any) => {\n                                        e.stopPropagation();\n                                        onLabelRemove && onLabelRemove(item);\n                                    }}\n                                >\n                                    <Close />\n                                </IconHolderForClose>\n                            </StyledFilteredByItem>\n                        ))}\n                    </StyledFilteredByContainer>\n                </FilteredByWrapper>\n                {showRightArrow && (\n                    <ScrollWrapper\n                        onClick={() => {\n                            scrollLeft(wrapperRef && wrapperRef.current);\n                        }}\n                    >\n                        <ScrollIconContainer>\n                            <ArrowRight />\n                        </ScrollIconContainer>\n                    </ScrollWrapper>\n                )}\n            </Container>\n            <TableDivider />\n        </>\n    );\n};\n\nexport default TableHeaderFilterView;\n","const SCROLL_BY = 100;\n\nexport const scrollLeft = (element?: any) => {\n    if (element) {\n        element.scrollLeft += SCROLL_BY;\n    }\n};\n\nexport const scrollRight = (element?: any) => {\n    if (element) {\n        element.scrollLeft -= SCROLL_BY;\n    }\n};\n","import { FC, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { listToTree } from '../../../../helpers/functions/list-to-tree';\nimport {\n    useSaveUserFiltersService,\n    useSetLabelFilterActionService,\n} from '../../../../features/labels/store/services';\nimport { useHandleSelectLabels } from '../../../../features/labels/tools';\nimport { usePermissionsState } from '../../../../features/permissions/store/state';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\n\nimport { usePortableLabelsState } from '../../../../features/portableLabels/store/states';\nimport { TreeDfsNameMapper } from '../../../../helpers/classes/TreeDfsNameMapper';\nimport { FilteredByNameType, TableHeaderFilterControllerProps } from './type';\nimport { Label } from '../../../../constants/interfaces/Label';\nimport TableHeaderFilterView from './view';\n\nconst TableHeaderFilterController: FC<TableHeaderFilterControllerProps> = props => {\n    const { selectedLabels, onRemoveLabel } = props;\n\n    const labelsList = usePortableLabelsState().data;\n    const setLabelFilters = useSetLabelFilterActionService();\n    const handleSelectLabels = useHandleSelectLabels();\n    const permissions = usePermissionsState();\n    const saveUserFilters = useSaveUserFiltersService();\n    const [savingLabels, setSavingLabels] = useState(false);\n    const [filteredByNames, setFilteredByNames] = useState<\n        FilteredByNameType[]\n    >([]);\n    const [showLeftArrow, setShowLeftArrow] = useState(false);\n    const [showRightArrow, setShowRightArrow] = useState(false);\n\n    const wrapperRef = useRef<any>(null);\n\n    /**\n     * @function handleLabelSelection\n     * @param { Label } label\n     * @returns { void }\n     */\n    const handleLabelSelection = (label: Label): void => {\n        if (selectedLabels) {\n            const labelsTree = listToTree(labelsList?.items);\n            setLabelFilters(\n                handleSelectLabels(label, selectedLabels, labelsTree)\n            );\n            setSavingLabels(true);\n        }\n    };\n\n    /**\n     * @function setShowNavArrows\n     * @returns { void }\n     */\n    const setShowNavArrows = useCallback(() => {\n        const element = wrapperRef?.current;\n        if (!element) return;\n        const isLeftArrowVisible = element.scrollLeft > 0;\n        const isRightArrowVisible = element.scrollWidth > element.clientWidth\n            && element.scrollLeft + element.clientWidth <= element.scrollWidth;\n        setShowLeftArrow(isLeftArrowVisible);\n        setShowRightArrow(isRightArrowVisible);\n    }, []);\n\n    useEffect(() => {\n        const selectedItems = (selectedLabels || []).map(item =>\n            item >= 0 ? item : Math.abs(item)\n        );\n\n        if (!!labelsList && labelsList.items.length > 0 && selectedItems) {\n            const treeDfsNameMapper = new TreeDfsNameMapper(\n                labelsList.items,\n                selectedItems\n            );\n\n            const names = treeDfsNameMapper.getNames();\n            setFilteredByNames(names);\n        }\n        setTimeout(setShowNavArrows, 0);\n    }, [labelsList, selectedLabels, setShowNavArrows]);\n\n    useEffect(() => {\n        setShowNavArrows();\n        window.addEventListener('resize', setShowNavArrows);\n        return () => {\n            window.removeEventListener('resize', setShowNavArrows);\n        };\n    }, [setShowNavArrows]);\n\n    useEffect(() => {\n        if (\n            savingLabels &&\n            selectedLabels &&\n            permissions.includes(NEW_PERMISSIONS.SAVE_SEARCH_FILTER)\n        ) {\n            saveUserFilters(selectedLabels);\n            setSavingLabels(false);\n        }\n    }, [\n        selectedLabels,\n        savingLabels,\n        setSavingLabels,\n        saveUserFilters,\n        permissions,\n    ]);\n\n    if (!selectedLabels || selectedLabels.length < 1) {\n        return <></>;\n    }\n\n    return (\n        <TableHeaderFilterView\n            onLabelRemove={onRemoveLabel ? onRemoveLabel : handleLabelSelection}\n            showLeftArrow={showLeftArrow}\n            showRightArrow={showRightArrow}\n            wrapperRef={wrapperRef}\n            handleScroll={setShowNavArrows}\n            filteredByNames={filteredByNames}\n        />\n    );\n};\n\nexport default TableHeaderFilterController;\n","export enum MobileNumberVerificationStep {\n    ENTER = 'enter',\n    VERIFY = 'verify'\n}\n\nexport interface AddMobileNumberViewProps {\n    userId?: number;\n    mobileNumber: string;\n    canSkip: boolean;\n    currentStep: MobileNumberVerificationStep;\n    onMobileNumberChange: (mobileNumber: string) => void;\n    onSendCode: () => void;\n    onSkip: () => void;\n    onVerify: () => void;\n    onBackFromVerify: () => void;\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Trash = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 15 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"0.3\"\n                    d=\"M14.5 3H14v12c0 .552-.448 1-1 1H2c-.552 0-1-.448-1-1V3H.5C.224 3 0 2.776 0 2.5S.224 2 .5 2H5V.5c0-.276.224-.5.5-.5h4c.276 0 .5.224.5.5V2h4.5c.276 0 .5.224.5.5s-.224.5-.5.5zM9 1H6v1h3V1zm4 2H2v11.5c0 .276.224.5.5.5h10c.276 0 .5-.224.5-.5V4v.001V3zm-3 3.5h1v6h-1v-6zm-3-1h1v7H7v-7zm-3 1h1v6H4v-6z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Trash;\n","export default __webpack_public_path__ + \"static/media/auth-background.d40723f0.png\";","export default __webpack_public_path__ + \"static/media/auth-background2x.4327ca9e.png\";","export default __webpack_public_path__ + \"static/media/auth-background3x.64a9bf46.png\";","import { useCallback } from 'react';\nimport { useHistory } from 'react-router';\nimport { useGetUserFeaturesService } from '../../features/users/store/services';\nimport { UserInterface, UserV2 } from '../../constants/interfaces/User';\nimport { MobileNumberVerificationStep } from '../../pages/Auth/AddMobileNumber/types';\nimport ROUTES from '../../routes/routes';\n\nexport interface PhoneVerificationParams {\n    user: UserInterface | UserV2;\n    isNewUser?: boolean;\n    verificationStep?: MobileNumberVerificationStep;\n    from?: Location\n}\n\nexport const useRedirectToPhoneVerification = () => {\n    const history = useHistory();\n    const getUserFeatures = useGetUserFeaturesService();\n    return useCallback((params: PhoneVerificationParams, cancelIfCanSkip: boolean = false) => {\n        getUserFeatures(params.user.id)\n            .then((data) => {\n                if (cancelIfCanSkip && !!data && !!data.phoneSkip?.allow)\n                    return;\n                history.push(ROUTES.AUTH_PAGES.ADD_MOBILE_NUMBER, params)\n            });\n    }, [history, getUserFeatures]);\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TriangleDown = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 8 5\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M3.6 4.8l-3-4C.434.58.48.266.7.1.787.035.892 0 1 0h6c.276 0 .5.224.5.5 0 .108-.035.213-.1.3l-3 4c-.166.22-.48.266-.7.1-.038-.028-.072-.062-.1-.1z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default TriangleDown;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TriangleRight = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 5 8\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M4.8 4.067l-4 3c-.22.165-.534.12-.7-.1-.065-.087-.1-.192-.1-.3v-6c0-.276.224-.5.5-.5.108 0 .213.035.3.1l4 3c.22.165.266.479.1.7-.028.038-.062.071-.1.1z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default TriangleRight;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoLabels = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 24 32\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\">\n                        <g>\n                            <g>\n                                <g>\n                                    <path\n                                        fillRule=\"nonzero\"\n                                        d=\"M24 30.001V17.998h-2V10L12 2.5 2 10v20h8v1.997h12.013l-.012.003H2C.895 32 0 31.105 0 30V9l12-9 12 9v21.001zM12 15.998c-2.209 0-4-1.791-4-4 0-2.21 1.791-4 4-4 2.21 0 4 1.79 4 4 0 2.209-1.79 4-4 4zm0-6.001c-1.105 0-2 .895-2 2 0 1.106.895 2 2 2 1.104 0 2-.894 2-2 0-1.105-.896-2-2-2z\"\n                                        transform=\"translate(-1104 -380) translate(0 184) translate(1029 196) translate(75)\"\n                                    />\n                                    <path\n                                        d=\"M8 32v-2h14V17h2v13c0 1.054-.816 1.918-1.85 1.995L22 32H8z\"\n                                        transform=\"translate(-1104 -380) translate(0 184) translate(1029 196) translate(75)\"\n                                    />\n                                </g>\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoLabels;\n","import { Action } from 'redux';\n\nexport const encapsulateAction = <T extends Action>(\n    encapsulateTerm: string,\n    action: T\n): T => ({ ...action, type: `${encapsulateTerm}${action.type}` });\n","import React, { FC, memo } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n    width: 100%;\n    height: 100%;\n    flex: 1;\n    text-align: center;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nexport const EmptyStateContainer: FC = memo(({ children }) => (\n    <Container>{children}</Container>\n));\n","import React, { ChangeEventHandler, FocusEventHandler, FC, ReactElement } from 'react';\nimport styled from 'styled-components';\nimport { Textarea } from '../Textarea/Textarea';\nimport { Variables } from '../../../theme/variables';\n\nconst StyledFormikField = styled.div<{ minHeight?: string }>`\n    min-height: ${props => (!!props.minHeight ? props.minHeight : '176px')};\n`;\n\nconst StledTextareaContainer = styled.div<{\n    height?: string;\n    disabled?: boolean;\n    color: string;\n    background?: string;\n    padding?: string;\n    borderRadius?: string;\n}>`\n    position: relative;\n    border-radius: ${props =>\n        !!props.borderRadius ? props.borderRadius : '16px'};\n    padding: ${props => (!!props.padding ? props.padding : '23px 32px')};\n    background: ${props => props.background ?? Variables.Colors.whiteTwo};\n`;\n\nconst StyledTextarea = styled(Textarea)<{\n    fontSize?: string;\n    fontWeight?: number;\n    minHeight?: string;\n}>`\n    ${props => (!!props.fontSize ? `font-size: ${props.fontSize};` : '')}\n    ${props =>\n        !!props.minHeight\n            ? `min-height: ${props.minHeight};`\n            : ''}\n    &::placeholder {\n        font-size: ${props => (!!props.fontSize ? props.fontSize : '15px')};\n        font-weight: ${props =>\n            !!props.fontWeight ? props.fontWeight : '600'};\n        font-weight: normal;\n        font-stretch: normal;\n        font-style: normal;\n        line-height: normal;\n        letter-spacing: normal;\n    }\n`;\n\nconst StyledCounter = styled.div<{ color?: string, counterPosition?: string }>`\n    font-size: 13px;\n    text-align: ${props => props.counterPosition ? props.counterPosition :  'right'};\n    color: ${props =>\n        !!props.color ? props.color : props.theme.Colors.coolGray};\n`;\n\nexport const TextAreaPlaceholderBox: FC<{\n    value?: string;\n    field?: any;\n    form?: { touched: any; errors: any };\n    name?: string;\n    onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n    onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n    onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n    max?: number;\n    width?: string;\n    background?: string;\n    color?: string;\n    disabled?: boolean;\n    placeholder?: string;\n    autoFocus?: boolean;\n    readOnly?: boolean;\n    padding?: string;\n    fontSize?: string;\n    minRows?: number;\n    maxRows?: number;\n    borderRadius?: string;\n    placeholderFontWeight?: number;\n    minHeight?: string;\n    counterColor?: string;\n    textAreaMinHeight?: string;\n    dataTest?: string;\n    className?: string;\n    counterPosition?: string;\n    counterWarningText?: ReactElement\n}> = ({\n    field,\n    value,\n    disabled,\n    max,\n    background,\n    autoFocus,\n    color,\n    onChange,\n    onFocus,\n    onBlur,\n    placeholder,\n    readOnly,\n    fontSize,\n    minRows,\n    maxRows,\n    padding,\n    borderRadius,\n    placeholderFontWeight,\n    minHeight,\n    counterColor,\n    textAreaMinHeight,\n    dataTest,\n    className,\n    counterPosition,\n    counterWarningText\n}) => {\n    const TextAreaStyles = {\n        flex: 1,\n        lineHeight: 1.13,\n        letterSpacing: '0.4px',\n    };\n\n    return (\n        <StyledFormikField minHeight={minHeight}>\n            <StledTextareaContainer\n                disabled={disabled}\n                color={color ? color : Variables.Colors.white}\n                background={background}\n                padding={padding}\n                borderRadius={borderRadius}\n                className={className}\n            >\n                <StyledTextarea\n                    value={value}\n                    styles={TextAreaStyles}\n                    {...field}\n                    placeholder={placeholder}\n                    max={max}\n                    onChange={onChange}\n                    onFocus={onFocus}\n                    onBlur={onBlur}\n                    disabled={disabled}\n                    autoFocus={autoFocus}\n                    readOnly={readOnly}\n                    fontSize={fontSize}\n                    minRows={minRows}\n                    maxRows={maxRows}\n                    fontWeight={placeholderFontWeight}\n                    minHeight={textAreaMinHeight}\n                    dataTest={dataTest}\n                />\n                {max && (\n                    <StyledCounter color={counterColor} data-test={dataTest && `${dataTest}-counter`} counterPosition={counterPosition}>\n                        {value ? value.length : '0'}/{max} <span data-test={dataTest && `${dataTest}-error-text`}>{counterWarningText}</span>\n                    </StyledCounter>\n                )}\n            </StledTextareaContainer>\n        </StyledFormikField>\n    );\n};\n\nexport default TextAreaPlaceholderBox;\n","import { useSelector } from 'react-redux';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\n\ntype PortablePractisSetsBaseState = {\n    data: ListResult<PractisSets>;\n    loading: boolean;\n};\n\nexport type PortablePractisSetsState = PortablePractisSetsBaseState;\n\nexport const initialState = {\n    data: {\n        items: [],\n        limit: 0,\n        offset: 0,\n        count: 0,\n        lastUpdated: undefined,\n    },\n    loading: false,\n};\n\nexport const usePortablePractisSetsState = (): PortablePractisSetsBaseState => {\n    const appState = useSelector(state => state);\n    return appState.portablePractisSets;\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    position: relative;\n`;\n\nexport const Wrapper = styled.div<{ top?: number; fontSize?: number }>`\n    position: absolute;\n    display: flex;\n    align-items: center;\n    right: 0;\n    top: ${({ top }) => (top ? `${top}px` : '-26px')};\n    text-align: right;\n    font-size: ${({ fontSize }) => (fontSize ? `${fontSize}px` : '13px')};\n    font-weight: normal;\n    color: ${props => props.theme.Colors.steelGrey};\n    display: flex;\n    align-items: center;\n    line-height: 18px;\n    height: 18px;\n`;\n\nexport const ButtonIcon = styled.div<{ disabled?: boolean }>`\n    width: 16px;\n    height: 16px;\n`;\n\nexport const LabelButton = styled.button`\n    background: none;\n    display: flex;\n    outline: none;\n    border: none;\n    font-size: 13px;\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-weight: normal;\n    color: ${({ theme, disabled }) =>\n        disabled ? theme.Colors.cloudyBlue : theme.Colors.darkSkyBlue};\n    cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n\n    &:hover {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.windowBlue};\n    }\n\n    &:hover ${ButtonIcon} {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.lightBlue};\n    }\n    &:active ${ButtonIcon} {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.windowBlue};\n    }\n\n    padding: 0;\n`;\n\nexport const Divider = styled.span`\n    width: 1px;\n    height: 18px;\n    background-color: ${({ theme }) => theme.Colors.paleGrey};\n    margin-left: 4px;\n    margin-right: 4px;\n`;\n\nexport const ButtonText = styled.span`\n    margin-left: 4px;\n    line-height: 18px;\n`;\n\nexport const StyledSpan = styled.span`\n    padding-left: 4px;\n    padding-right: 4px;\n`;\n","import { FC, memo } from 'react';\n\nimport { CheckPermission } from '../../../../../features/permissions';\nimport {\n    LabelButton,\n    StyledSpan,\n    ButtonIcon,\n    ButtonText,\n    Divider,\n} from '../styles';\nimport { TableRefreshButtonProps } from './type';\n\nconst TableRefreshButton: FC<TableRefreshButtonProps> = memo(props => {\n    const { permissions, onPress, disabled, icon, name, dataTest } = props;\n\n    return (\n        <CheckPermission permissions={permissions}>\n            <StyledSpan>\n                <LabelButton\n                    onClick={onPress}\n                    disabled={disabled}\n                    data-test={dataTest && `${dataTest}-button`}\n                >\n                    <ButtonIcon data-test={dataTest && `${dataTest}-icon`}>{icon}</ButtonIcon>\n                    <ButtonText data-test={dataTest && `${dataTest}-text`}>{name}</ButtonText>\n                </LabelButton>\n            </StyledSpan>\n            <Divider />\n        </CheckPermission>\n    );\n});\n\nexport default TableRefreshButton;\n\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TableRefreshIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                fill=\"none\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M8 2.5a5.487 5.487 0 0 0-4.131 1.869l1.204 1.204A.25.25 0 0 1 4.896 6H1.25A.25.25 0 0 1 1 5.75V2.104a.25.25 0 0 1 .427-.177l1.38 1.38A7.001 7.001 0 0 1 14.929 7h-1.52A5.502 5.502 0 0 0 8 2.5zM1.07 9a7.001 7.001 0 0 0 12.123 3.693l1.38 1.38a.25.25 0 0 0 .427-.177V10.25a.25.25 0 0 0-.25-.25h-3.646a.25.25 0 0 0-.177.427l1.204 1.204A5.502 5.502 0 0 1 2.591 9H1.07z\"\n                    fill=\"currentColor\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default TableRefreshIcon;\n","import { FC, memo } from 'react';\n\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport {\n    ButtonIcon,\n    Container,\n    LabelButton,\n    StyledSpan,\n    Wrapper,\n} from './styles';\nimport { TableRefreshProps } from './types';\nimport { TableRefreshButton } from './table-refresh-button';\nimport TableRefreshIcon from '../../../icons/TableRefresh';\n\nconst TableRefresh: FC<TableRefreshProps> = memo(props => {\n    const { lastRefreshed, refreshData, buttons, top, fontSize, dataTest = 'table-timestamp' } =\n        props;\n\n    return (\n        <Container>\n            <Wrapper top={top} fontSize={fontSize}>\n                {buttons?.map(button => (\n                    <TableRefreshButton {...button} />\n                ))}\n                <StyledSpan data-test={dataTest && `${dataTest}-label`}>\n                    {`Updated`}\n                    {formatDate(lastRefreshed)}\n                </StyledSpan>\n                <span>\n                    <LabelButton\n                        onClick={refreshData}\n                        data-test={dataTest && `${dataTest}-refresh`}\n                    >\n                        <ButtonIcon>\n                            <TableRefreshIcon />\n                        </ButtonIcon>\n                    </LabelButton>\n                </span>\n            </Wrapper>\n        </Container>\n    );\n});\n\nexport default TableRefresh;\n","import styled from 'styled-components';\nimport { motion } from 'framer-motion';\nimport Calendar from 'react-calendar';\nimport { Button } from '../Button';\n\nexport const IconHolder = styled.div<{ scaleX?: number; disabled?: boolean }>`\n    width: 7px;\n    height: 14px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.blackThree\n            : props.theme.Colors?.skyBlueTwo};\n    transform: scaleX(${props => props.scaleX || 1});\n\n    &:hover {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.windowBlue};\n    }\n`;\n\nexport const Header = styled.div`\n    width: 100%;\n    height: 103px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    background-color: ${props => props.theme.Colors?.darkSkyBlueThree};\n    border-radius: 8px 8px 0px 0px;\n`;\n\nexport const Footer = styled.div`\n    display: flex;\n    justify-content: space-between;\n    padding: 24px;\n`;\n\nexport const Title = styled.div`\n    font-size: 24px;\n    font-weight: 800;\n    color: ${props => props.theme.Colors?.white};\n`;\n\nexport const Subtitle = styled.div`\n    font-size: 13px;\n    color: ${props => props.theme.Colors?.white};\n`;\n\nexport const RemoveDateTitle = styled.div<{ disabled?: boolean }>`\n    font-size: 13px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.skyBlueTwo};\n    display: flex;\n    align-items: center;\n    font-weight: 500;\n    cursor: pointer;\n    pointer-events: ${({ disabled }) => (disabled ? 'none' : 'default')};\n\n    &:hover {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.windowBlue};\n    }\n`;\n\nexport const IconContainer = styled.div`\n    margin-right: 4px;\n    font-size: 5px;\n`;\n\nexport const StyledCalendar = styled(Calendar)`\n    width: calc(100% - 30px);\n    min-height: 302px;\n    margin: 0 auto;\n    .react-calendar__navigation {\n        height: 32px;\n        margin: 22px 0px;\n        justify-content: center;\n\n        .react-calendar__navigation__label {\n            font-size: 18px;\n            font-weight: bold;\n            background: ${props => props.theme.Colors.white};\n            color: ${props => props.theme.Colors.blackThree};\n            border: none;\n            flex-grow: 0 !important;\n            font-family: 'Manrope';\n            pointer-events: none;\n            margin: 0px 3px;\n        }\n\n        .react-calendar__navigation__arrow {\n            background: ${props => props.theme.Colors.white};\n            border: none;\n            cursor: pointer;\n\n            &[disabled] {\n                pointer-events: none;\n                opacity: 0.4;\n            }\n        }\n    }\n\n    .react-calendar__month-view__weekdays {\n        margin-bottom: 12px;\n\n        .react-calendar__month-view__weekdays__weekday {\n            background: ${props => props.theme.Colors.white};\n            color: ${props => props.theme.Colors.blackThree};\n            border: none;\n            width: 25px;\n            height: 20px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 16px;\n            font-weight: bold;\n            font-family: 'Manrope';\n            abbr[title] {\n                text-decoration: none;\n            }\n        }\n    }\n\n    .react-calendar__month-view__days {\n        .react-calendar__month-view__days__day {\n            background: ${props => props.theme.Colors.white};\n            border: none;\n            width: 36px;\n            height: 36px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 16px;\n            font-weight: 500;\n            font-family: 'Manrope';\n            padding: 0;\n            abbr {\n                text-decoration: none;\n                color: ${props => props.theme.Colors.black};\n                width: 100%;\n                height: 100%;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                cursor: pointer;\n            }\n            &:hover {\n                background: ${props => props.theme.Colors.whiteFive};\n                border-radius: 2px;\n            }\n            flex-basis: unset !important;\n            margin: 0px 7px;\n            &:disabled {\n                cursor: default;\n                pointer-events: none;\n                abbr {\n                    color: ${props => props.theme.Colors.cloudyBlue};\n                }\n            }\n        }\n    }\n\n    .react-calendar__tile.react-calendar__month-view__days__day.react-calendar__month-view__days__day--neighboringMonth {\n        abbr {\n            color: #6f7f8a;\n        }\n    }\n\n    .react-calendar__tile.react-calendar__month-view__days__day.react-calendar__month-view__days__day--neighboringMonth:disabled {\n        abbr {\n            color: white;\n            pointer-events: none;\n        }\n    }\n\n    .react-calendar__tile.react-calendar__tile--now.react-calendar__month-view__days__day {\n        abbr {\n            color: ${props => props.theme.Colors.black};\n            border-bottom: 2px solid ${props => props.theme.Colors.black};\n            width: 24px;\n            height: 20px;\n        }\n    }\n\n    .react-calendar__month-view__days {\n        justify-content: space-between;\n    }\n\n    .react-calendar__tile.react-calendar__tile--active {\n        border-radius: 2px;\n        background: ${props => props.theme.Colors.skyBlueTwo};\n        abbr {\n            color: ${props => props.theme.Colors.white};\n        }\n        &:hover {\n            background: ${props => props.theme.Colors.skyBlueTwo};\n            cursor: auto;\n        }\n        &.react-calendar__tile--now abbr {\n            color: var(--ps-white-1);\n            border-bottom: 2px solid var(--ps-white-1);\n        }\n    }\n`;\n\nexport const StyledDialogBlacker = styled(motion.div)`\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1200;\n    background: rgba(35, 46, 58, 0.8);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nexport const StyledDialog = styled(motion.div)<{\n    width?: number;\n    padding?: string;\n}>`\n    width: ${props => props.width || '390'}px;\n    border-radius: 2px;\n    box-shadow: 0 5px 20px -5px rgba(166, 174, 190, 0.5);\n    background-color: ${props => props.theme.Colors.white};\n    border-radius: 8px;\n`;\n\nexport const CancelButton = styled(Button)`\n    background: #fff;\n    color: #4aa9e2;\n    box-shadow: inset 0 0 0 1px #4aa9e2;\n\n    &:hover {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${({ theme, disabled }) =>\n            disabled ? theme.Colors.cloudyBlue : theme.Colors.windowBlue};\n    }\n`;\n","import React, { FC, useState } from 'react';\nimport { OnChangeDateCallback } from 'react-calendar';\nimport dayjs from 'dayjs';\n\nimport TrashBinIcon from '../../icons/TrashBin';\nimport ArrowRightIcon from '../../icons/ArrowRight';\nimport { Button } from '../Button';\nimport { formatDate, getDateWithTZOffset } from '../../../helpers/functions/date-convert';\nimport {\n    IconHolder,\n    Header,\n    Footer,\n    Title,\n    Subtitle,\n    RemoveDateTitle,\n    IconContainer,\n    StyledCalendar,\n    StyledDialogBlacker,\n    StyledDialog,\n    CancelButton,\n} from './styles';\nimport { dueDateTitleTypes } from './constants';\nimport { DATE_FORMAT } from '../../../constants/interfaces/DueDates';\nimport { DueDateCalendarProps } from './type';\n\nconst DueDateCalendar: FC<DueDateCalendarProps> = ({\n    data,\n    onCancel,\n    onApply,\n}) => {\n    const { count, type, dueDate, isSubTitleVisible } = data || {};\n    const [actionsDisabled, setActionsDisabled] = useState(true);\n    const [currentDueDate, setCurrentDueDate] = useState<string | null>(\n        dueDate ? dayjs(dueDate as Date).format(DATE_FORMAT) : null\n    );\n    const [currentType, setCurrentType] = useState<string>(type);\n    const [activeStartDate, setActiveStartDate] = useState<Date>(new Date());\n\n    /**\n     * @function handleDueDateChange\n     * @param { Date | Date[] } date\n     * @returns { void }\n     */\n    const handleDueDateChange: OnChangeDateCallback = date => {\n        setCurrentDueDate(\n            date ? dayjs(date as Date).format(DATE_FORMAT) : null\n        );\n        setCurrentType('SINGLE');\n        setActionsDisabled(false);\n    };\n\n    /**\n     * @function handleClose\n     * @param { React.MouseEvent } e\n     * @returns { void }\n     */\n    const handleClose = (e: React.MouseEvent): void => {\n        e.currentTarget === e.target && onCancel();\n    };\n\n    /**\n     * @function onActiveStartDateChange\n     * @param { Date } date\n     * @returns { void }\n     */\n    const onActiveStartDateChange = (date: Date): void => {\n        date && setActiveStartDate(date);\n    };\n\n    const isRemoveDateTitleDisabled =\n        !currentDueDate && currentType !== 'MULTIPLE';\n\n    const isPrevArrowDisabled =\n        activeStartDate.getMonth() === new Date().getMonth();\n\n    /**\n     * @function getExactDate\n     * @param { string } currentDueDate\n     * @returns { Date } \n     */\n    const getExactDate = (currentDueDate: string) => {\n        let date = new Date(currentDueDate);\n        let userTimezoneOffset = date.getTimezoneOffset() * 60000;\n        return new Date(date.getTime() + userTimezoneOffset);\n    }\n    return (\n        <StyledDialogBlacker onClick={handleClose}>\n            <StyledDialog initial={{ scale: 0.8 }} animate={{ scale: 1 }}>\n                <Header>\n                    <Title>\n                        {\n                            dueDateTitleTypes[\n                                (currentType ||\n                                    type) as keyof typeof dueDateTitleTypes\n                            ]\n                        }\n                        {currentDueDate\n                            ? formatDate(currentDueDate, false, false)\n                            : null}\n                    </Title>\n                    {isSubTitleVisible && (\n                        <Subtitle>\n                            {`${count} user${\n                                count > 1 ? 's' : ''\n                            } will be affected and notified.`}\n                        </Subtitle>\n                    )}\n                </Header>\n                <StyledCalendar\n                    value={currentDueDate ? getExactDate(currentDueDate) : null} // use it in controlled way\n                    calendarType={'US'}\n                    locale=\"en\" // always use US locale\n                    formatShortWeekday={(_, date) =>\n                        ['S', 'M', 'T', 'W', 'T', 'F', 'S'][date.getDay()]\n                    }\n                    prev2Label={null}\n                    next2Label={null}\n                    nextLabel={\n                        <IconHolder>\n                            <ArrowRightIcon />\n                        </IconHolder>\n                    }\n                    prevLabel={\n                        <IconHolder scaleX={-1} disabled={isPrevArrowDisabled}>\n                            <ArrowRightIcon />\n                        </IconHolder>\n                    }\n                    onChange={handleDueDateChange}\n                    showNeighboringMonth={true}\n                    onActiveStartDateChange={date =>\n                        onActiveStartDateChange(date?.activeStartDate)\n                    }\n                    minDate={dayjs().add(1, 'day').startOf('day').toDate()}\n                />\n                <Footer>\n                    <RemoveDateTitle\n                        disabled={isRemoveDateTitleDisabled}\n                        onClick={() => {\n                            setCurrentType('NO_DUEDATE');\n                            setCurrentDueDate(null);\n                            setActionsDisabled(false);\n                        }}\n                    >\n                        <IconContainer>\n                            <TrashBinIcon />\n                        </IconContainer>\n                        Remove Due Date\n                    </RemoveDateTitle>\n                    <CancelButton\n                        label={'Cancel'}\n                        height={'40px'}\n                        width={'86px'}\n                        style={{ marginLeft: '27px' }}\n                        action={onCancel}\n                    />\n                    <Button\n                        label={'Apply'}\n                        height={'40px'}\n                        width={'86px'}\n                        disabled={actionsDisabled}\n                        action={() => onApply(getDateWithTZOffset(currentDueDate))}\n                    />\n                </Footer>\n            </StyledDialog>\n        </StyledDialogBlacker>\n    );\n};\n\nexport default DueDateCalendar;\n","import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n    position: absolute;\n    width: calc(100% - 48px);\n    height: 72px;\n    margin-top: -16px;\n    z-index: 9;\n    display: flex;\n    align-items: center;\n    padding: 16px;\n    color: ${props => props.theme.Colors.steelGrey};\n    background: red;\n    border-radius: 4px;\n    border: solid 1px #eef0f0;\n    background: #eef0f0;\n    border-radius: 4px;\n`;\n\nexport const SelectedWrapper = styled.div`\n    margin-left: 16px;\n    color: black;\n    font-size: 13px;\n    line-height: 19px;\n\n    span {\n        font-weight: 800;\n    }\n`;\n\nexport const SelectAllWrapper = styled.button`\n    color: ${props => props.theme.Colors.mainBlue};\n    background: none;\n    border: none;\n    cursor: pointer;\n    padding: 0;\n    margin-left: 4px;\n    font-size: 13px;\n\n    span {\n        font-weight: 800;\n    }\n\n    &:hover {\n        color: ${props => props.theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.windowsBlue};\n    }\n`;\n\nexport const ClearWrapper = styled.button`\n    color: ${props => props.theme.Colors.mainBlue};\n    border: none;\n    border-left: 1px solid #cacfcf;\n    padding: 1px 0 0 8px;\n    margin-left: 8px;\n    line-height: 18px;\n    font-size: 13px;\n    cursor: pointer;\n    background: transparent;\n\n    &:hover {\n        color: ${props => props.theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.windowsBlue};\n    }\n`;\n","import { plural } from '../../../../helpers/functions/plural';\n\nimport {\n    Wrapper,\n    ClearWrapper,\n    SelectAllWrapper,\n    SelectedWrapper,\n} from './styles';\nimport { PopupProps } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const SelectAll = <T extends HTMLElement = HTMLElement>({\n    totalCount,\n    selectedLength,\n    itemsPerPage,\n    onClearSelecion,\n    onSelectAll,\n    isSelectAll,\n    children,\n    style,\n    hasAllMembers,\n    dataTest\n}: PopupProps) => {\n    if (!selectedLength) {\n        return null;\n    }\n\n    const roundToTotal = (count: any) => {\n        if (count > totalCount!) {\n            return totalCount;\n        } else {\n            return count;\n        }\n    };\n\n    return (\n        <Wrapper style={style}>\n            {children}\n            <SelectedWrapper>\n                {(isSelectAll || selectedLength === totalCount) &&\n                    totalCount! > 1 &&\n                    'All'}\n                &nbsp;\n                <span data-test={dataTest && `${dataTest}-selected-counter`}>\n                    {roundToTotal(\n                        isSelectAll\n                            ? totalCount! < itemsPerPage\n                                ? !hasAllMembers\n                                    ? totalCount\n                                    : totalCount! - 1\n                                : selectedLength < itemsPerPage\n                                ? totalCount\n                                : totalCount! - itemsPerPage + selectedLength\n                            : selectedLength\n                    )}\n                    &nbsp;\n                    {isSelectAll\n                        ? totalCount && plural(totalCount, 'Item', 'Items')\n                        : plural(selectedLength, 'Item', 'Items')}\n                </span>{' '}\n                selected.\n            </SelectedWrapper>\n            {!isSelectAll && selectedLength !== totalCount && (\n                <SelectAllWrapper onClick={onSelectAll} data-test={dataTest && `${dataTest}-select-all`}>\n                    Select all{' '}\n                    <span data-test={dataTest && `${dataTest}-select-all-counter`}>\n                        {!hasAllMembers ? totalCount : totalCount! - 1}{' '}\n                        {totalCount && plural(totalCount, 'Item', 'Items')}\n                    </span>\n                </SelectAllWrapper>\n            )}\n            <ClearWrapper onClick={onClearSelecion} data-test={dataTest && `${dataTest}-clear-selection`}>\n                Clear Selection\n            </ClearWrapper>\n        </Wrapper>\n    );\n};\n","export const USER_LOGIN = 'USER_LOGIN';\nexport const USER_LOGOUT = 'USER_LOGOUT';\nexport const SET_TOKEN = 'SET_TOKEN';\n\nexport function userLoginAction() {\n    return {\n        type: USER_LOGIN,\n    };\n}\n\nexport function userLogoutAction() {\n    return {\n        type: USER_LOGOUT,\n    };\n}\n\nexport function setTokenAction(token: string) {\n    return {\n        type: SET_TOKEN,\n        token,\n    };\n}\n","import { isEmpty } from \"lodash\";\n\nexport const copyTextToClipboard = (text: string) => {\n    if(isEmpty(text)) {\n        return false\n    }\n\n    const textArea: any = document.createElement('textarea');\n    let successful: 'silent' | boolean = false;\n\n    textArea.style.position = 'fixed';\n    textArea.style.top = 0;\n    textArea.style.left = 0;\n\n    textArea.style.width = '2em';\n    textArea.style.height = '2em';\n\n    textArea.style.padding = 0;\n\n    textArea.style.border = 'none';\n    textArea.style.outline = 'none';\n    textArea.style.boxShadow = 'none';\n\n    textArea.style.background = 'transparent';\n\n    textArea.value = text;\n\n    document.body.appendChild(textArea);\n    textArea.focus();\n    textArea.select();\n\n    try {\n        successful = document.execCommand('copy');\n    } catch (err) {\n        successful = false;\n    }\n\n    document.body.removeChild(textArea);\n    if (!successful) {\n        const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n        const copyHotkey = isMac ? '⌘C' : 'CTRL+C';\n        prompt(`Press ${copyHotkey}`, text);\n        successful = 'silent';\n    }\n\n    return successful;\n};\n","import { EnrollmentInterface } from \"../../../constants/interfaces/Enrollments\";\nimport { SearchParams } from \"../../../constants/interfaces/filters\";\nimport { ListResult } from \"../../../constants/interfaces/PaginationResult\";\nimport { EnrollmentPractisSet } from \"../../../constants/interfaces/PractisSets\";\nimport { userStatusFilters } from \"../../../constants/interfaces/User\";\nimport { getSearchSortingValue } from \"../../../helpers/functions/search-params-helpers\";\nimport { dueDateFiltersValues } from \"../../../ui/components/DueDateCalendar/constants\";\n\nexport const transformEnrollmentsToPractisSets = (data: ListResult<EnrollmentInterface>): ListResult<EnrollmentPractisSet> => {\n    const practisSets = data.items?.map((item) => {\n        return {...item.practisSet, dueDate: item.dueDate, enrollmentId: item.id}\n    });\n\n    return { ...data, items: practisSets };\n}\n\nexport const getSearchUserPractisSetsParams = (searchParams: SearchParams) => {\n    return {\n        status: searchParams.filterByStatus?.map((item) => userStatusFilters[item as keyof typeof userStatusFilters]).join(','),\n        dueDate: searchParams.filterByDueDate?.map((item) => dueDateFiltersValues[item as keyof typeof dueDateFiltersValues]).join(','),\n        limit: searchParams.limit ?? 20,\n        offset: searchParams.offset ?? 0,\n        query: searchParams.searchTerm,\n        sort: getSearchSortingValue(searchParams.orderBy, 'assigned', false)\n    };\n}","import styled from 'styled-components';\n\nimport Checkbox from '../../../Checkbox';\n\nexport const CheckboxContainer = styled.div`\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: initial;\n    flex-shrink: 0;\n    margin-right: 16px;\n`;\n\nexport const StyledCheckbox = styled(Checkbox)`\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0;\n`;\n","import { FC } from 'react';\n\nimport { Variables } from '../../../../../theme/variables';\nimport { CheckboxContainer, StyledCheckbox } from './style';\nimport { TableCheckboxProps } from './type';\n\nconst TableCheckbox: FC<TableCheckboxProps> = props => {\n    const { checked, partial, disabled, handleCheck, size, dataTest } = props;\n\n    return (\n        <CheckboxContainer\n            onClick={e => {\n                e.stopPropagation();\n            }}\n        >\n            <StyledCheckbox\n                size={size ? size : 16}\n                checked={checked}\n                partial={partial}\n                disabled={disabled}\n                background={Variables.Colors.white}\n                handleChange={handleCheck}\n                border={Variables.Colors.cloudyBlue}\n                dataTest={dataTest}\n            />\n        </CheckboxContainer>\n    );\n};\n\nexport default TableCheckbox;\n","import { ErrorMessagesInterface } from '../ErrorMessages';\nimport { Action } from 'redux';\n\nexport const ADD_MESSAGE = 'ADD_MESSAGE';\nexport const REMOVE_MESSAGE = 'REMOVE_MESSAGE';\n\nexport type DisplayMessageAction = Action<typeof ADD_MESSAGE> & {\n    error: ErrorMessagesInterface;\n};\nexport function displayMessage(\n    error: ErrorMessagesInterface\n): DisplayMessageAction {\n    return {\n        type: ADD_MESSAGE,\n        error,\n    };\n}\n\nexport type HideMessageAction = Action<typeof REMOVE_MESSAGE>;\nexport function hideMessage(): HideMessageAction {\n    return {\n        type: REMOVE_MESSAGE,\n    };\n}\n\nexport type ErrorMessagesActions = DisplayMessageAction | HideMessageAction;\n","import { UserInterface } from \"./User\";\n\nexport interface CompanyInterface {\n    id?: number;\n    name?: string;\n    owner?: UserInterface;\n    isSSOEnabled?: boolean;\n    isScrimmageEnabled?: boolean;\n    ssoConnection?: string;\n    ssoDomains?: string[];\n    logoUrl?: string;\n    logo?: string;\n    createdAt?: string;\n    updatedAt?: string;\n    activatedAt?: string;\n    creator?: UserInterface;\n    minTrainingScore?: number;\n    status?: string;\n    usersLimit?: number | null;\n    usersCount?: number | null;\n    subdomain?: string;\n}\n\nexport enum CompanyStatus {\n    ACTIVE = 'ACTIVE',\n    DELETED = 'DELETED',\n}\n\nexport const CompanyStatusNames = {\n    [CompanyStatus.ACTIVE as string]: 'Active',\n    [CompanyStatus.DELETED as string]: 'Inactive',\n};","export const dueDateTitleTypes = {\n    MULTIPLE: 'Select Due Date',\n    SINGLE: 'Due Date: ',\n    NO_DUEDATE: 'No Due Date',\n};\n\nexport const dueDateFiltersValues =  {\n    'NO_DUEDATE': 'not_assigned',\n    'OVERDUE': 'overdue',\n    'ASSIGNED': 'assigned'\n}","export const ENROLLMENT_REMIND_TO_START = 'enrollment_remind_to_start';","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TrashBin = forwardRef<SVGSVGElement, IconProps>(() => {\n    return (\n        <svg\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 16 16\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n        >\n            <path\n                fill-rule=\"evenodd\"\n                clip-rule=\"evenodd\"\n                d=\"M6.5 1.75a.25.25 0 0 1 .25-.25h2.5a.25.25 0 0 1 .25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 1 0-1.492.15l.66 6.6A1.75 1.75 0 0 0 5.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 0 0-1.492-.149l-.66 6.6a.25.25 0 0 1-.249.225h-5.19a.25.25 0 0 1-.249-.225l-.66-6.6z\"\n                fill=\"currentColor\"\n            />\n        </svg>\n    );\n});\n\nexport default TrashBin;\n","export const SEARCH_INPUT_DEBOUNCE_DELAY = 200;","export type TreeDfsItem = {\n    id: number;\n    title: string;\n};\n\ninterface VisitedBranches {\n    [key: number]: boolean | null | undefined;\n}\n\nexport class TreeDfsNameMapper<\n    T extends {\n        id: number;\n        parentId: number | null;\n        name: string;\n        children?: T[];\n    }\n> {\n    readonly treeData: T[] = [];\n    readonly selectedLabels: number[] = [];\n    private visited: VisitedBranches = {};\n    private visitedSubTreeVertexes: VisitedBranches = [];\n    private answer: TreeDfsItem[] = [];\n    private mp: number[] = [];\n    private currentAnswer: TreeDfsItem[] = [];\n    private subTreeChecker = true;\n\n    constructor(public data: T[], public selectedItems: number[]) {\n        this.treeData = data;\n        this.selectedLabels = selectedItems;\n    }\n\n    checkSubTreeSelection(id: number) {\n        this.visitedSubTreeVertexes[id] = true;\n        const itemId = this.treeData.findIndex(item => item.id === id);\n        const children = this.treeData[itemId].children || [];\n\n        for (let i = 0; i < children.length; i++) {\n            let childId = children[i].id;\n\n            if (\n                this.visited[childId] === null ||\n                typeof this.visited[childId] === 'undefined' ||\n                !this.visited[childId]\n            ) {\n                if (!this.selectedLabels.includes(childId)) {\n                    this.subTreeChecker = false;\n                    return;\n                } else {\n                    this.checkSubTreeSelection(childId);\n                }\n            }\n        }\n\n        return;\n    }\n\n    dfs(id: number, name = '') {\n        const children: T[] = [];\n        this.visited[id] = true;\n        const itemId = this.treeData.findIndex(item => item.id === id);\n        this.visitedSubTreeVertexes = [];\n        this.subTreeChecker = true;\n        const treeChildren = this.treeData[itemId].children || [];\n\n        if (treeChildren.length <= 0 && !this.selectedLabels.includes(id))\n            return;\n        this.checkSubTreeSelection(id);\n\n        if (\n            this.subTreeChecker ||\n            (treeChildren.length <= 0 && this.selectedLabels.includes(id))\n        ) {\n            let pathId = this.mp[id];\n            let toReverseAnswer = [];\n            if (this.selectedLabels.includes(id)) {\n                name = this.treeData[itemId].name;\n                toReverseAnswer.push(name);\n            }\n\n            while (pathId !== null && typeof pathId !== 'undefined') {\n                // eslint-disable-next-line no-loop-func\n                let findIndex = this.treeData.findIndex(el => el.id === pathId);\n                name = this.treeData[findIndex].name;\n                toReverseAnswer.push(name);\n                pathId = this.mp[pathId];\n            }\n\n            let localAnswer = '';\n            for (let i = toReverseAnswer.length - 1; i >= 0; i--) {\n                localAnswer += toReverseAnswer[i] + (i === 0 ? '' : '/');\n                if (i === 0) {\n                    this.currentAnswer.push({\n                        id: id,\n                        title: localAnswer,\n                    });\n                }\n            }\n\n            return;\n        }\n\n        if (treeChildren) {\n            for (let j = 0; j < treeChildren.length; j++) {\n                children.push(treeChildren[j]);\n            }\n        }\n\n        for (let j = 0; j < children.length; j++) {\n            this.mp[children[j].id] = id;\n            if (!this.visited[children[j].id]) {\n                this.dfs(children[j].id, name);\n            }\n        }\n        return;\n    }\n\n    getNames() {\n        for (let i = 0; i < this.selectedItems.length; i++) {\n            if (\n                this.visited[this.selectedLabels[i]] === undefined ||\n                !this.visited[this.selectedLabels[i]]\n            ) {\n                this.currentAnswer = [];\n\n                let curObj = this.treeData.find(\n                    item => item.id === this.selectedLabels[i]\n                );\n                if (!curObj) {\n                    return this.answer;\n                }\n                let curObjParId = curObj.parentId;\n                while (\n                    curObjParId !== null &&\n                    // eslint-disable-next-line no-loop-func\n                    this.selectedLabels.find(x => x === curObjParId) !== null\n                ) {\n                    curObj = this.treeData.find(\n                        // eslint-disable-next-line no-loop-func\n                        item => item.id === curObjParId\n                    );\n                    curObjParId = curObj?.parentId || null;\n                }\n                if (curObj && !this.visited[curObj.id]) {\n                    this.visited[curObj.id] = true;\n                    this.dfs(curObj.id, curObj.name);\n                    if (this.currentAnswer.length <= 0) {\n                        this.currentAnswer.push({\n                            id: curObj.id,\n                            title: curObj.name,\n                        });\n                    }\n                    this.currentAnswer.map(ans => this.answer.push(ans));\n                }\n            }\n        }\n        return this.answer;\n    }\n}\n","import React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { kebabCase } from 'lodash';\n\nimport { TreeDfsNameMapper } from '../../../../../helpers/classes/TreeDfsNameMapper';\nimport { CheckPermission } from '../../../../../features/permissions';\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\nimport Close from '../../../../icons/Close';\nimport { usePortableLabelsState } from '../../../../../features/portableLabels/store/states';\n\nconst Container = styled.div`\n    width: 100%;\n    background-color: ${props => props.theme.Colors.white};\n    display: flex;\n    align-items: center;\n    padding-left: 43px;\n    min-height: 32px;\n`;\n\nconst FilteredByWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n    overflow: auto;\n`;\n\nconst StyledFilteredByContainer = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n    overflow: auto;\n    flex-wrap: wrap;\n    ::-webkit-scrollbar {\n        height: 0;\n    }\n`;\n\nconst StyledFilteredByItem = styled.div`\n    border-radius: 4px;\n    background-color: ${props => props.theme.Colors.darkSkyBlue15};\n    font-size: 11px;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    border: 1px solid ${props => props.theme.Colors.darkSkyBlue};\n    text-align: center;\n    padding: 2px 12px;\n    display: flex;\n    min-height: 32px;\n    line-height: 20px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    margin: 2px 8px 2px 0;\n    align-items: center;\n`;\n\nconst IconHolderForClose = styled.div<{ scaleX?: number }>`\n    width: 8px;\n    display: flex;\n    cursor: pointer;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    margin-left: 24px;\n`;\n\nconst AssignedLabelList: FC<{\n    selectedLabels?: number[];\n    onDeleteLabel?(id: number): void;\n    hideDeleteButton?: boolean;\n    padding?: string;\n    deletePermissions?: NEW_PERMISSIONS[];\n    colSpan?: number;\n    className?: string;\n}> = ({\n    selectedLabels,\n    onDeleteLabel,\n    hideDeleteButton,\n    deletePermissions,\n    className,\n}) => {\n    const [assignedLabelNames, setAssignedLabelNames] = useState<any>([]);\n    const labels = usePortableLabelsState().data;\n    useEffect(() => {\n        const selectedItems = (selectedLabels || []).map(item =>\n            item >= 0 ? item : Math.abs(item)\n        );\n\n        if (!!labels && labels.items.length > 0 && selectedItems) {\n            const treeDfsNameMapper = new TreeDfsNameMapper(\n                labels.items,\n                selectedItems\n            );\n            const names = treeDfsNameMapper.getNames();\n            setAssignedLabelNames(names);\n        }\n    }, [labels, selectedLabels]);\n\n    return (\n        <Container className={className} data-test='table-labels-list'>\n            <FilteredByWrapper>\n                <StyledFilteredByContainer>\n                    {assignedLabelNames &&\n                        assignedLabelNames.map((item: any, index: number) => (\n                            <StyledFilteredByItem key={index} data-test={`table-labels-item-${kebabCase(item.title)}`}>\n                                {item.title}\n                                {!hideDeleteButton && onDeleteLabel && (\n                                    <CheckPermission\n                                        permissions={deletePermissions}\n                                    >\n                                        <IconHolderForClose\n                                            onClick={(e: any) => {\n                                                e.stopPropagation();\n                                                onDeleteLabel &&\n                                                    onDeleteLabel(item.id);\n                                            }}\n                                        >\n                                            <Close />\n                                        </IconHolderForClose>\n                                    </CheckPermission>\n                                )}\n                            </StyledFilteredByItem>\n                        ))}\n                </StyledFilteredByContainer>\n            </FilteredByWrapper>\n        </Container>\n    );\n};\n\nexport default AssignedLabelList;\n","export const DEFAULT_CHALLENGE_TRY_LIMIT = 3;","import React, {\n    ChangeEventHandler,\n    MouseEventHandler,\n    CSSProperties,\n    FocusEventHandler,\n    KeyboardEvent,\n} from 'react';\nimport styled from 'styled-components';\nimport TextareaAutosize from 'react-textarea-autosize';\nimport { Variables } from '../../../theme/variables';\n\nexport interface TextareaProps {\n    label?: string;\n    value?: string;\n    defaultValue?: string;\n    name?: string;\n    field?: any;\n    autoComplete?: string;\n    disabled?: boolean;\n    disableUnderline?: boolean;\n    placeholder?: string;\n    max?: number;\n    styles?: CSSProperties;\n    onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n    onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n    onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n    onKeyDown?: (e: KeyboardEvent<HTMLTextAreaElement>) => void;\n    autoFocus?: boolean;\n    className?: string;\n    readOnly?: boolean;\n    onMouseUp?: MouseEventHandler<HTMLTextAreaElement>;\n    minRows?: number;\n    maxRows?: number;\n    fontSize?: string;\n    dataTest?: string;\n}\n\nconst StyledInput = styled(TextareaAutosize)<{\n    color?: string;\n    fontSize?: string;\n}>`\n    width: 100%;\n    resize: none;\n    border: none;\n    background: transparent;\n    color: ${props => props.theme.Colors.black};\n    &::placeholder {\n        color: ${props => props.theme.Colors.steelGrey};\n        font-size: ${props => (!!props.fontSize ? props.fontSize : '13px')};\n    }\n    :focus {\n        outline: none;\n    }\n    :disabled {\n        background: ${Variables.Colors.backgroundGray};\n    }\n`;\n\nexport const Textarea = ({\n    field,\n    styles,\n    disabled,\n    autoFocus,\n    autoComplete,\n    label,\n    value,\n    defaultValue,\n    placeholder,\n    max,\n    onFocus,\n    onBlur,\n    onChange,\n    className,\n    readOnly,\n    onMouseUp,\n    minRows,\n    maxRows,\n    fontSize,\n    onKeyDown,\n    dataTest\n}: TextareaProps) => {\n    return (\n        <StyledInput\n            minRows={minRows ?? 1}\n            maxRows={maxRows ?? 150}\n            style={styles}\n            {...field}\n            disabled={disabled}\n            autoFocus={autoFocus}\n            autoComplete={autoComplete}\n            label={label}\n            defaultValue={defaultValue ? defaultValue : undefined}\n            value={value || value === '' ? value : undefined}\n            placeholder={placeholder}\n            onChange={onChange}\n            className={[className, readOnly ? '-view-only' : ''].join(' ')}\n            margin=\"normal\"\n            maxLength={max}\n            onFocus={onFocus}\n            onBlur={onBlur}\n            readOnly={readOnly}\n            onMouseUp={onMouseUp}\n            fontSize={fontSize}\n            data-test={dataTest}\n            onKeyDown={onKeyDown}\n        />\n    );\n};\n\nexport default Textarea;\n","import styled from 'styled-components';\nimport { makeStyles } from '@material-ui/core';\nimport { motion } from 'framer-motion';\n\nexport const useStyles = makeStyles(theme => ({\n    portablePractisSetContainer: {\n        height: '350px !important',\n        width: '450px !important',\n    },\n\n    selectAllWrapper: {\n        paddingRight: '170px !important',\n    },\n}));\n\nexport const HeaderTitle = styled.div`\n    width: 336px;\n    height: 27px;\n    margin: 14px 0;\n    font-size: 20px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: left;\n    color: ${props => props.theme.Colors.black};\n`;\n\nexport const Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nexport const ButtonContainer = styled.div`\n    margin-right: 16px;\n`;\n\nexport const Divider = styled.hr<{ margin?: string }>`\n    width: 100%;\n    height: 1px;\n    border: none;\n    flex-shrink: 0;\n    background-color: ${props => props.theme.Colors.paleGrey};\n    margin: ${props => (!!props.margin ? props.margin : '5px 0')};\n`;\n\nexport const PractisSetsContainer = styled(motion.div)<{\n    displayOver?: boolean;\n    topMargin: number;\n    left?: string;\n}>`\n    padding: 15px 30px;\n    position: absolute;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    left: ${props =>\n        props.displayOver ? '16px' : !!props.left ? props.left : '0'};\n    top: ${props => (props.displayOver ? `-${props.topMargin}px` : '8px')};\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n`;\n","import { ReactElement } from 'react';\n\nimport {\n    PortablePractisSetsWithStore,\n    WithPractisSetsContext,\n} from '../portablePractisSets';\nimport { AssignPractisSetsViewProps } from './type';\nimport {\n    Actions,\n    ButtonContainer,\n    HeaderTitle,\n    Divider,\n    useStyles,\n} from './styles';\nimport { PopupComponent } from '../../ui/components/Popup';\nimport { Button } from '../../ui/components/Button';\n\nconst AssignPractisSetsView = (\n    props: AssignPractisSetsViewProps\n): ReactElement => {\n    const {\n        triggerRef,\n        horizontalOffset,\n        verticalOffset,\n        isOpen,\n        isSaving,\n        isApplyButtonDisabled,\n        onClose,\n        handleApplyPractisSets,\n    } = props;\n\n    const classes = useStyles();\n\n    return (\n        <WithPractisSetsContext.Provider\n            value={{\n                reducerName: 'performance',\n            }}\n        >\n            <PopupComponent\n                triggerRef={triggerRef}\n                open={isOpen}\n                onDismiss={onClose}\n                padding=\"10px 24px 24px 24px\"\n                horizontalOffset={horizontalOffset}\n                verticalOffset={verticalOffset}\n            >\n                <HeaderTitle data-test=\"assign-practis-sets-header\">Assign Practis Sets and Due Dates</HeaderTitle>\n                <PortablePractisSetsWithStore\n                    showSave={false}\n                    showSelectActions={true}\n                    showSearch={true}\n                    resetSelectedOnUnmount={true}\n                    className={classes.portablePractisSetContainer}\n                    selectAllWrapperClassName={classes.selectAllWrapper}\n                />\n                <Divider />\n                <Actions>\n                    <ButtonContainer>\n                        <Button\n                            label={'Cancel'}\n                            variant={'inverse'}\n                            action={onClose}\n                            width={'112px'}\n                            disabled={isSaving}\n                            dataTest='cancel-button'\n                        />\n                    </ButtonContainer>\n                    <Button\n                        label={'Apply'}\n                        action={handleApplyPractisSets}\n                        width={'112px'}\n                        loading={isSaving}\n                        disabled={isApplyButtonDisabled}\n                        dataTest='apply-button'\n                    />\n                </Actions>\n            </PopupComponent>\n        </WithPractisSetsContext.Provider>\n    );\n};\n\nexport default AssignPractisSetsView;\n","import { ReactElement } from 'react';\nimport { ClickAwayListener } from '@material-ui/core';\n\nimport {\n    PortablePractisSetsWithStore,\n    WithPractisSetsContext,\n} from '../portablePractisSets';\nimport { AssignPractisSetsViewProps } from './type';\nimport {\n    Actions,\n    ButtonContainer,\n    HeaderTitle,\n    Divider,\n    useStyles,\n    PractisSetsContainer,\n} from './styles';\nimport { Button } from '../../ui/components/Button';\n\nconst AssignPractisSetsMultipleUsersView = (\n    props: AssignPractisSetsViewProps\n): ReactElement => {\n    const {\n        isOpen,\n        isSaving,\n        isApplyButtonDisabled,\n        onClose,\n        handleApplyPractisSets,\n    } = props;\n\n    const classes = useStyles();\n\n    if (!isOpen) return <></>;\n\n    return (\n        <WithPractisSetsContext.Provider\n            value={{\n                reducerName: 'performance',\n            }}\n        >\n            <ClickAwayListener onClickAway={onClose}>\n                <PractisSetsContainer\n                    initial={{ scale: 1 / 5 }}\n                    animate={{ scale: 1 }}\n                    exit={{ scale: 0 }}\n                    topMargin={5}\n                >\n                    <HeaderTitle data-test=\"assign-practis-sets-header\">Assign Practis Sets and Due Dates</HeaderTitle>\n                    <PortablePractisSetsWithStore\n                        showSave={false}\n                        showSelectActions={true}\n                        showSearch={true}\n                        resetSelectedOnUnmount={true}\n                        className={classes.portablePractisSetContainer}\n                        selectAllWrapperClassName={classes.selectAllWrapper}\n                    />\n\n                    <Divider />\n                    <Actions>\n                        <ButtonContainer>\n                            <Button\n                                label={'Cancel'}\n                                variant={'inverse'}\n                                action={onClose}\n                                width={'112px'}\n                                disabled={isSaving}\n                                dataTest='cancel-button'\n                            />\n                        </ButtonContainer>\n                        <Button\n                            label={'Apply'}\n                            action={handleApplyPractisSets}\n                            width={'112px'}\n                            loading={isSaving}\n                            disabled={isApplyButtonDisabled}\n                            dataTest='apply-button'\n                        />\n                    </Actions>\n                </PractisSetsContainer>\n            </ClickAwayListener>\n        </WithPractisSetsContext.Provider>\n    );\n};\n\nexport default AssignPractisSetsMultipleUsersView;\n","export const SEARCH_USERS_ACTION = 'SEARCH_USERS_ACTION'\nexport const FETCH_USER_ENROLLMENT_ACTION = 'FETCH_USER_ENROLLMENT_ACTION';\nexport const ENROLL_UNENROLL_ACTION = 'ENROLL_UNENROLL_ACTION';\nexport const UPDATE_ENROLLMENT_ACTION = 'UPDATE_ENROLLMENT_ACTION'","import { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport { isEmpty } from 'lodash';\n\nimport {\n    useCreateUpdateEnrollmentDueDate,\n    useEnrollPractisSetsToUserApi,\n    useGetEnrollments,\n    useSearchTeamMembersApi,\n    useSearchUsersApi,\n} from '../../../../api';\nimport { EnrollUnenrollParams, UserEnrollmentType } from './types';\nimport {\n    EnrollmentsDueDateType,\n    EnrollmentType,\n} from '../../../../api/enrollments/types';\nimport { getSearchSortingValue } from '../../../../helpers/functions/search-params-helpers';\nimport { createSearchTeamMembersParams } from '../../../teams/tools';\nimport { PractisSetWithDueDate } from '../../../../constants/interfaces/Draft';\nimport { UserStatus } from '../../../users/store/costants';\nimport { SearchUsersParams } from '../../../../api/users/types';\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\nimport { EnrollmentStatus } from '../../../../constants/interfaces/Enrollments';\nimport { ChunkRequestActionInterface } from '../../../../services/ChunkRequestService/hooks/types';\nimport {\n    ENROLL_UNENROLL_ACTION,\n    FETCH_USER_ENROLLMENT_ACTION,\n    SEARCH_USERS_ACTION,\n    UPDATE_ENROLLMENT_ACTION,\n} from './constants';\nimport { SearchTeamMembersParams } from '../../../../api/teams/types';\n\n/**\n * @function useFetchUserEnrollmentsService\n * @returns { CallableFunction }\n */\nconst useFetchUserEnrollmentsService = () => {\n    const getEnrollments = useGetEnrollments();\n\n    /**\n     * @param { PractisSetWithDueDate[] } selectedPractisSets\n     * @param { number[] } userIds\n     */\n    return useCallback(\n        async (\n            selectedPractisSets: PractisSetWithDueDate[],\n            userIds: number[]\n        ) => {\n            if (!isEmpty(userIds)) {\n                const getEnrollmentSearchParams = {\n                    users: userIds?.join(','),\n                    enrollmentStatus: Object.keys(EnrollmentStatus).join(','),\n                    sort: getSearchSortingValue(null, 'pset_name', true),\n                    limit: 10000,\n                };\n\n                const usersEnrollmentsData = await getEnrollments(\n                    getEnrollmentSearchParams as any\n                );\n\n                if (!isEmpty(usersEnrollmentsData)) {\n                    const userEnrollmentResult = selectedPractisSets.reduce(\n                        (result: UserEnrollmentType[], selectedPractisSet) => {\n                            const {\n                                isAlreadyExist,\n                                isDueDateUpdated,\n                                enrollmentId,\n                            } = usersEnrollmentsData.items.reduce(\n                                (result, item) => {\n                                    if (\n                                        !result.isAlreadyExist &&\n                                        item.practisSet.id ===\n                                            selectedPractisSet.practisSetId\n                                    ) {\n                                        result.isAlreadyExist = true;\n                                        result.enrollmentId = null;\n                                    }\n\n                                    if (\n                                        !result.isDueDateUpdated &&\n                                        item.practisSet.id ===\n                                            selectedPractisSet.practisSetId &&\n                                        item.dueDate !==\n                                            selectedPractisSet.dueDate\n                                    ) {\n                                        result.isDueDateUpdated = true;\n                                        result.enrollmentId = item.id;\n                                    }\n\n                                    return result;\n                                },\n                                {\n                                    isAlreadyExist: false,\n                                    isDueDateUpdated: false,\n                                    enrollmentId: null as number | null,\n                                }\n                            );\n\n                            if (!isAlreadyExist) {\n                                result.push({\n                                    ...selectedPractisSet,\n                                    userId: userIds[0],\n                                    isDueDateUpdated: false,\n                                });\n                            }\n\n                            if (isDueDateUpdated && enrollmentId) {\n                                result.push({\n                                    enrollmentId,\n                                    dueDate: selectedPractisSet.dueDate,\n                                    isDueDateUpdated: true,\n                                });\n                            }\n\n                            return result;\n                        },\n                        []\n                    );\n\n                    return userEnrollmentResult;\n                }\n            }\n        },\n        [getEnrollments]\n    );\n};\n\n/**\n * @function useHandleEnrollmentService\n * @returns { CallableFunction }\n */\nconst useHandleEnrollmentService = () => {\n    const enrollPractisSets = useEnrollPractisSetsToUserApi();\n\n    /**\n     * @param { UserEnrollmentType[] } userEnrollments\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (userEnrollments: UserEnrollmentType[]) => {\n            const assignedPractisSets = userEnrollments.reduce(\n                (\n                    result: EnrollmentType[],\n                    { userId, practisSetId, dueDate, isDueDateUpdated }\n                ) => {\n                    if (!isDueDateUpdated) {\n                        result.push({\n                            userId: userId!,\n                            practisSetId: practisSetId!,\n                            dueDate,\n                        });\n                    }\n                    return result;\n                },\n                []\n            );\n\n            if (!isEmpty(assignedPractisSets)) {\n                await enrollPractisSets(assignedPractisSets);\n            }\n        },\n        [enrollPractisSets]\n    );\n};\n\n/**\n * @function useHandleUpdateEnrollmentService\n * @returns { CallableFunction }\n */\nconst useHandleUpdateEnrollmentService = () => {\n    const updateEnrollmentsDueDate = useCreateUpdateEnrollmentDueDate();\n\n    /**\n     * @param { UserEnrollmentType[] } userEnrollments\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (userEnrollments: UserEnrollmentType[]) => {\n            const updatedEnrollments = userEnrollments.reduce(\n                (\n                    result: EnrollmentsDueDateType[],\n                    { enrollmentId, dueDate, isDueDateUpdated }\n                ) => {\n                    if (isDueDateUpdated) {\n                        result.push({\n                            enrollmentId: enrollmentId!,\n                            dueDate,\n                        });\n                    }\n                    return result;\n                },\n                []\n            );\n\n            if (!isEmpty(updatedEnrollments)) {\n                await updateEnrollmentsDueDate(updatedEnrollments);\n            }\n        },\n        [updateEnrollmentsDueDate]\n    );\n};\n\n/**\n * @function useGenerateAllUsersEnrollmentActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateAllUsersEnrollmentActionList() {\n    const searchUsersWithTeamApi = useSearchTeamMembersApi();\n    const searchUsersApi = useSearchUsersApi();\n    const company = useSelector(getCompanyState);\n    const handleFetchUserEnrollmentsService = useFetchUserEnrollmentsService();\n    const handleEnrollmentService = useHandleEnrollmentService();\n    const handleUpdateEnrollmentService = useHandleUpdateEnrollmentService();\n\n    /**\n     * @function handleSearchUserWithTeamService\n     * @param { number } teamId\n     * @param { SearchTeamMembersParams } searchParams\n     * @param { PractisSetWithDueDate[] } selectedPractisSets\n     * @returns { Promise<UserEnrollmentType[] }\n     */\n    const handleSearchUserWithTeamService = useCallback(\n        async (\n            teamId: number,\n            searchParams: SearchTeamMembersParams,\n            selectedPractisSets: PractisSetWithDueDate[]\n        ) => {\n            if (teamId) {\n                const teamMembers = await searchUsersWithTeamApi(\n                    teamId,\n                    searchParams\n                );\n\n                if (!isEmpty(teamMembers)) {\n                    const userIds = teamMembers.items?.map(\n                        ({ user }) => user.id\n                    );\n\n                    if (!isEmpty(userIds)) {\n                        return await handleFetchUserEnrollmentsService(\n                            selectedPractisSets,\n                            userIds\n                        );\n                    }\n                }\n            }\n        },\n        [handleFetchUserEnrollmentsService, searchUsersWithTeamApi]\n    );\n\n    /**\n     * @function handleSearchRegisteredUsersService\n     * @param { SearchUsersParams } searchParams\n     * @param { PractisSetWithDueDate[] } selectedPractisSet\n     * @returns { Promise<UserEnrollmentType[] }\n     */\n    const handleSearchRegisteredUsersService = useCallback(\n        async (\n            searchParams: SearchUsersParams,\n            selectedPractisSets: PractisSetWithDueDate[]\n        ) => {\n            if (!isEmpty(searchParams)) {\n                const registeredUsers = await searchUsersApi(searchParams);\n\n                if (!isEmpty(registeredUsers)) {\n                    const userIds = registeredUsers.items?.map(user => user.id);\n\n                    if (!isEmpty(userIds)) {\n                        return await handleFetchUserEnrollmentsService(\n                            selectedPractisSets,\n                            userIds\n                        );\n                    }\n                }\n            }\n        },\n        [handleFetchUserEnrollmentsService, searchUsersApi]\n    );\n\n    /**\n     * @param { EnrollUnenrollParams } EnrollUnenrollParams\n     */\n    return useCallback(\n        ({\n            teamId,\n            searchParams,\n            selectedPractisSets,\n            totalUsers,\n        }: EnrollUnenrollParams) => {\n            let searchUsersActionFunction = null;\n            let searchUsersActionParameters = null;\n\n            if (teamId) {\n                searchUsersActionFunction = handleSearchUserWithTeamService;\n                const searchTeamMembersParams = createSearchTeamMembersParams({\n                    ...searchParams,\n                    limit: 1,\n                    offset: totalUsers || 0,\n                });\n\n                searchUsersActionParameters = {\n                    teamId,\n                    searchParams: searchTeamMembersParams,\n                    selectedPractisSets,\n                };\n            } else {\n                const searchRegisteredUsersParams: SearchUsersParams = {\n                    status: UserStatus.ACTIVE,\n                    labels: searchParams?.labelIDs?.join(','),\n                    roles: searchParams?.roleIDs?.join(','),\n                    teams: searchParams?.teamIds?.join(','),\n                    companies: company.id?.toString(),\n                    limit: 1,\n                    offset: totalUsers || 0,\n                    query: searchParams?.searchTerm,\n                    sort: getSearchSortingValue(\n                        searchParams?.orderBy,\n                        'name',\n                        true\n                    ),\n                };\n\n                searchUsersActionFunction = handleSearchRegisteredUsersService;\n                searchUsersActionParameters = {\n                    searchParams: searchRegisteredUsersParams,\n                    selectedPractisSets,\n                };\n            }\n\n            let actionList: ChunkRequestActionInterface<any> = {\n                actionName: SEARCH_USERS_ACTION,\n                actionFunction: searchUsersActionFunction,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: searchUsersActionParameters,\n                    fieldName: 'searchParams.offset',\n                },\n                childActionList: [\n                    {\n                        actionName: ENROLL_UNENROLL_ACTION,\n                        actionFunction: handleEnrollmentService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                data: [],\n                            },\n                            fieldName: 'data',\n                            secondaryFieldName: 'data',\n                        },\n                    },\n                    {\n                        actionName: UPDATE_ENROLLMENT_ACTION,\n                        actionFunction: handleUpdateEnrollmentService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                data: [],\n                            },\n                            fieldName: 'data',\n                            secondaryFieldName: 'data',\n                        },\n                    },\n                ],\n            };\n\n            return actionList;\n        },\n        [\n            company.id,\n            handleEnrollmentService,\n            handleSearchRegisteredUsersService,\n            handleSearchUserWithTeamService,\n            handleUpdateEnrollmentService,\n        ]\n    );\n}\n\n/**\n * @function useGenerateMultipleUsersEnrollmentActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateMultipleUsersEnrollmentActionList() {\n    const handleFetchUserEnrollmentsService = useFetchUserEnrollmentsService();\n    const handleEnrollmentService = useHandleEnrollmentService();\n    const handleUpdateEnrollmentService = useHandleUpdateEnrollmentService();\n\n    /**\n     * @param { number[] } selectedUserIds\n     * @param { PractisSetWithDueDate[] } selectedPractisSets\n     */\n    return useCallback(\n        (\n            selectedUserIds: number[],\n            selectedPractisSets: PractisSetWithDueDate[]\n        ) => {\n            let actionList: ChunkRequestActionInterface<any> = {\n                actionName: FETCH_USER_ENROLLMENT_ACTION,\n                actionFunction: handleFetchUserEnrollmentsService,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        selectedPractisSets,\n                        userIds: selectedUserIds,\n                    },\n                    fieldName: 'userIds',\n                },\n                childActionList: [\n                    {\n                        actionName: ENROLL_UNENROLL_ACTION,\n                        actionFunction: handleEnrollmentService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                data: [],\n                            },\n                            fieldName: 'data',\n                            secondaryFieldName: 'data',\n                        },\n                    },\n                    {\n                        actionName: UPDATE_ENROLLMENT_ACTION,\n                        actionFunction: handleUpdateEnrollmentService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                data: [],\n                            },\n                            fieldName: 'data',\n                            secondaryFieldName: 'data',\n                        },\n                    },\n                ],\n            };\n\n            return actionList;\n        },\n        [\n            handleEnrollmentService,\n            handleFetchUserEnrollmentsService,\n            handleUpdateEnrollmentService,\n        ]\n    );\n}","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { PractisSetWithDueDate } from '../../../../constants/interfaces/Draft';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\n\nimport { useChunkRequestsService } from '../../../../services/ChunkRequestService/hooks';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../ui/components/ModalDialogs/store/actions';\nimport { GeneralBulkActionModalInterface } from '../../../../ui/components/ModalDialogs/types';\nimport {\n    useGenerateAllUsersEnrollmentActionList,\n    useGenerateMultipleUsersEnrollmentActionList,\n} from './helpers';\nimport { EnrollUnenrollParams } from './types';\n\n/**\n *\n * @description Custom hook to create , update, delete enrollments with chunk service\n * @function useEnrollUnenrollAllUsersBulkActionService\n * @param { EnrollUnenrollParams } EnrollUnenrollParams\n * @param { Number } totalUsersCount\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { Void }\n */\nexport function useEnrollUnenrollAllUsersBulkActionService(\n    enrollUnenrollParams: EnrollUnenrollParams,\n    totalUsersCount?: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const totalCompletedEnrollments = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const generateEnrollmentActionList =\n        useGenerateAllUsersEnrollmentActionList();\n\n    const actionList = generateEnrollmentActionList({\n        ...enrollUnenrollParams,\n        totalUsers: totalUsersCount,\n    });\n\n    /**\n     * @function clearTotalCompletedEnrollments\n     * @returns { void }\n     */\n    const clearTotalCompletedEnrollments = () =>\n        (totalCompletedEnrollments.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedEnrollments();\n\n            showMessage('Changes have been saved', 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(\n        (error?: ErrorResult) => {\n            if (!error?.message.includes('already exists')) {\n                Promise.resolve().then(() => {\n                    dispatch(\n                        showModalDialog({\n                            modalType: 'BULK_ACTION_FAILED_MODAL',\n                            modalProps: {\n                                modalTitle: 'Assign Practis Sets and Due Dates',\n                                onClose: hideModalDialog,\n                            } as GeneralBulkActionModalInterface,\n                        })\n                    );\n\n                    clearTotalCompletedEnrollments();\n\n                    isRunning && setIsRunning(false);\n\n                    onErrorCallback?.();\n                });\n            }\n        },\n        [dispatch, hideModalDialog, isRunning, onErrorCallback]\n    );\n\n    const { setIsStopped } = useChunkRequestsService(\n        [actionList],\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback,\n        false // should not stop on error\n    );\n\n    /**\n     * @function handleStopEnrollUnenrollsBulkActionService\n     * @returns { void }\n     */\n    const handleStopEnrollUnenrollsBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(`Changes have been saved`, 'success');\n\n            clearTotalCompletedEnrollments();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartEnrollUnenrollBulkActionService\n     * @returns { void }\n     */\n    const handleStartEnrollUnenrollBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'Assign Practis Sets and Due Dates',\n                        onStopBulkActionService:\n                            handleStopEnrollUnenrollsBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopEnrollUnenrollsBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartEnrollUnenrollBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n}\n\nexport function useEnrollUnrollMultipleUsersBulkActionService(\n    selectedUserIds: number[],\n    selectedPractisSets: PractisSetWithDueDate[],\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const totalCompletedEnrollments = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const generateMultipleUsersActionList =\n        useGenerateMultipleUsersEnrollmentActionList();\n\n    const actionList = generateMultipleUsersActionList(\n        selectedUserIds,\n        selectedPractisSets\n    );\n\n    /**\n     * @function clearTotalCompletedEnrollments\n     * @returns { void }\n     */\n    const clearTotalCompletedEnrollments = () =>\n        (totalCompletedEnrollments.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedEnrollments();\n\n            showMessage('Changes have been saved', 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(\n        (error?: ErrorResult) => {\n            if (!error?.message.includes('already exists')) {\n                Promise.resolve().then(() => {\n                    dispatch(\n                        showModalDialog({\n                            modalType: 'BULK_ACTION_FAILED_MODAL',\n                            modalProps: {\n                                modalTitle: 'Assign Practis Sets and Due Dates',\n                                onClose: hideModalDialog,\n                            } as GeneralBulkActionModalInterface,\n                        })\n                    );\n\n                    clearTotalCompletedEnrollments();\n\n                    isRunning && setIsRunning(false);\n\n                    onErrorCallback?.();\n                });\n            }\n        },\n        [dispatch, hideModalDialog, isRunning, onErrorCallback]\n    );\n\n    const { setIsStopped } = useChunkRequestsService(\n        [actionList],\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback,\n        false // should not stop on error\n    );\n\n    /**\n     * @function handleStopEnrollUnenrollsBulkActionService\n     * @returns { void }\n     */\n    const handleStopEnrollUnenrollsBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(`Changes have been saved`, 'success');\n\n            clearTotalCompletedEnrollments();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartEnrollUnenrollBulkActionService\n     * @returns { void }\n     */\n    const handleStartEnrollUnenrollBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'Assign Practis Sets and Due Dates',\n                        onStopBulkActionService:\n                            handleStopEnrollUnenrollsBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopEnrollUnenrollsBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartEnrollUnenrollBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n}","import { FC, memo, useEffect, useState } from 'react';\nimport { isEmpty, isEqual } from 'lodash';\nimport dayjs from 'dayjs';\nimport { PractisSetWithDueDate } from '../../constants/interfaces/Draft';\nimport { usePractisSetsState } from '../portablePractisSets/store/hors/withPractisSets/states';\nimport {\n    calculateCreatedUpdatedEnrollmentIds,\n    useCalculateDeletedEnrollments,\n} from '../portablePractisSets/tools';\nimport { useUserPerformanceState } from '../users/store/states';\nimport AssignPractisSetsView from './single-users.view';\nimport { AssignPractisSetsControllerProps } from './type';\nimport { DATE_FORMAT } from '../../constants/interfaces/DueDates';\nimport { useSelectMultiplePractisSets } from '../portablePractisSets/store/hors/withPractisSets/services';\nimport AssignPractisSetsMultipleUsersView from './multiple-users.view';\nimport {\n    useCreateUpdateEnrollmentDueDate,\n    useDeleteEnrollmentsApi,\n    useEnrollPractisSetsToUserApi,\n} from '../../api';\nimport { EnrollmentType } from '../../api/enrollments/types';\nimport { useShowMessage } from '../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    useEnrollUnenrollAllUsersBulkActionService,\n    useEnrollUnrollMultipleUsersBulkActionService,\n} from './services/EnrollmentBulkService';\nimport { SearchParams } from '../../constants/interfaces/filters';\n\nconst AssignPractisSetsController: FC<\n    AssignPractisSetsControllerProps\n> = props => {\n    const {\n        isFromBulkAction,\n        triggerRef,\n        horizontalOffset,\n        verticalOffset,\n        isOpen,\n        onClose,\n        users,\n        searchQuery,\n        isSelectAll,\n        successApplyPractisSetsCallback,\n        totalCount,\n    } = props;\n\n    const performanceState = useUserPerformanceState();\n    const { selected: selectedPractisSetsState } = usePractisSetsState();\n    const setPractisSets = useSelectMultiplePractisSets();\n    const enrollPractisSets = useEnrollPractisSetsToUserApi();\n    const updateEnrollmentsDueDate = useCreateUpdateEnrollmentDueDate();\n    const unEnrollPractisSets = useDeleteEnrollmentsApi();\n    const getDeletedEnrollmentIds = useCalculateDeletedEnrollments();\n    const showMessage = useShowMessage();\n\n    const selectedPractisSets: any[] =\n        (performanceState?.portablePractisSets as any)?.map(\n            (practisSet: {\n                id: any;\n                dueDate: dayjs.ConfigType | undefined;\n            }): any => {\n                return {\n                    practisSetId: practisSet.id ?? 0,\n                    dueDate: practisSet?.dueDate\n                        ? dayjs(practisSet?.dueDate).format(DATE_FORMAT)\n                        : null,\n                };\n            }\n        ) ?? [];\n\n    const [initialPractisSets, setInitialPractisSets] =\n        useState<PractisSetWithDueDate[]>(selectedPractisSets);\n\n    const [isSaving, setIsSaving] = useState<boolean>(false);\n    const [isApplyButtonDisabled, setIsApplyButtonDisabled] = useState(true);\n\n    const isMultipleUsersSelected =\n        (isFromBulkAction && users?.length !== 1) || users?.length !== 1;\n\n    const successCallback = () => {\n        successApplyPractisSetsCallback?.();\n        onClose();\n        setIsSaving(false);\n    };\n\n    const handleEnrollUnenrollAllUsersBulkActionService =\n        useEnrollUnenrollAllUsersBulkActionService(\n            {\n                searchParams: searchQuery as SearchParams,\n                teamId: searchQuery?.teamId || null,\n                selectedPractisSets: selectedPractisSetsState,\n                users: isSelectAll ? [] : (users as number[]),\n            },\n            totalCount,\n            successCallback\n        );\n\n    const handleEnrollUnenrollMultipleUsersBulkActionService =\n        useEnrollUnrollMultipleUsersBulkActionService(\n            users ?? [],\n            selectedPractisSetsState,\n            successCallback\n        );\n\n    /**\n     * @function handleApplyPractisSets\n     * @returns { void }\n     */\n    const handleApplyPractisSets = (): void => {\n        if (!isMultipleUsersSelected) {\n            const enrollUnEnrollPromiseChainArray = [];\n            const deletedEnrollmentIds = getDeletedEnrollmentIds(\n                performanceState.portablePractisSets,\n                selectedPractisSetsState.map(\n                    practisSetWithDueDate => practisSetWithDueDate.practisSetId\n                ),\n                initialPractisSets.map(\n                    practisSetWithDueDate => practisSetWithDueDate.practisSetId\n                )\n            );\n\n            const { addedPractisSets, updatedEnrollments } =\n                calculateCreatedUpdatedEnrollmentIds(\n                    performanceState.portablePractisSets!,\n                    selectedPractisSetsState,\n                    initialPractisSets\n                );\n\n            const assignedPractisSets = addedPractisSets.map(item => ({\n                practisSetId: item.practisSetId,\n                dueDate: item?.dueDate\n                    ? dayjs(item.dueDate).format(DATE_FORMAT)\n                    : null,\n                userId: users?.[0],\n            })) as EnrollmentType[];\n\n            if (!isEmpty(assignedPractisSets)) {\n                enrollUnEnrollPromiseChainArray.push(\n                    enrollPractisSets(assignedPractisSets)\n                );\n            }\n\n            if (!isEmpty(deletedEnrollmentIds)) {\n                enrollUnEnrollPromiseChainArray.push(\n                    unEnrollPractisSets(deletedEnrollmentIds)\n                );\n            }\n\n            if (!isEmpty(updatedEnrollments)) {\n                enrollUnEnrollPromiseChainArray.push(\n                    updateEnrollmentsDueDate(updatedEnrollments)\n                );\n            }\n\n            setIsSaving(true);\n\n            Promise.all(enrollUnEnrollPromiseChainArray)\n                .then(() => {\n                    showMessage(`Changes have been saved`, 'success');\n                    successApplyPractisSetsCallback?.();\n                })\n                .catch(error => {\n                    showMessage(error, 'error');\n                });\n\n            onClose();\n            setIsSaving(false);\n        } else if (\n            isFromBulkAction &&\n            isSelectAll &&\n            users?.length !== totalCount\n        ) {\n            handleEnrollUnenrollAllUsersBulkActionService();\n        } else {\n            handleEnrollUnenrollMultipleUsersBulkActionService();\n        }\n    };\n\n    useEffect(() => {\n        if (!isMultipleUsersSelected) {\n            let practisSetsToSet = selectedPractisSets ?? [];\n            setInitialPractisSets(practisSetsToSet);\n            setPractisSets(practisSetsToSet);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        if (!isEqual(selectedPractisSetsState, initialPractisSets)) {\n            setIsApplyButtonDisabled(false);\n        } else {\n            setIsApplyButtonDisabled(true);\n        }\n    }, [initialPractisSets, selectedPractisSetsState]);\n\n    useEffect(() => {\n        return () => {\n            setInitialPractisSets([]);\n            setPractisSets([]);\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return isFromBulkAction ? (\n        <AssignPractisSetsMultipleUsersView\n            users={users}\n            triggerRef={triggerRef}\n            isOpen={isOpen}\n            isSaving={isSaving}\n            isApplyButtonDisabled={isApplyButtonDisabled}\n            onClose={onClose}\n            handleApplyPractisSets={handleApplyPractisSets}\n        />\n    ) : (\n        <AssignPractisSetsView\n            users={users}\n            triggerRef={triggerRef}\n            horizontalOffset={horizontalOffset}\n            verticalOffset={verticalOffset}\n            isOpen={isOpen}\n            isSaving={isSaving}\n            isApplyButtonDisabled={isApplyButtonDisabled}\n            onClose={onClose}\n            handleApplyPractisSets={handleApplyPractisSets}\n        />\n    );\n};\n\nexport default memo(AssignPractisSetsController);","export const en: any = {\n    ext: 'ext.',\n    country: 'Phone number country',\n    phone: 'Phone',\n    AC: 'Ascension Island',\n    AD: 'Andorra',\n    AE: 'United Arab Emirates',\n    AF: 'Afghanistan',\n    AG: 'Antigua and Barbuda',\n    AI: 'Anguilla',\n    AL: 'Albania',\n    AM: 'Armenia',\n    AO: 'Angola',\n    AQ: 'Antarctica',\n    AR: 'Argentina',\n    AS: 'American Samoa',\n    AT: 'Austria',\n    AU: 'Australia',\n    AW: 'Aruba',\n    AX: 'Åland Islands',\n    AZ: 'Azerbaijan',\n    BA: 'Bosnia and Herzegovina',\n    BB: 'Barbados',\n    BD: 'Bangladesh',\n    BE: 'Belgium',\n    BF: 'Burkina Faso',\n    BG: 'Bulgaria',\n    BH: 'Bahrain',\n    BI: 'Burundi',\n    BJ: 'Benin',\n    BL: 'Saint Barthélemy',\n    BM: 'Bermuda',\n    BN: 'Brunei Darussalam',\n    BO: 'Bolivia',\n    BQ: 'Bonaire, Sint Eustatius and Saba',\n    BR: 'Brazil',\n    BS: 'Bahamas',\n    BT: 'Bhutan',\n    BV: 'Bouvet Island',\n    BW: 'Botswana',\n    BY: 'Belarus',\n    BZ: 'Belize',\n    CA: 'Canada',\n    CC: 'Cocos (Keeling) Islands',\n    CD: 'Congo, Democratic Republic of the',\n    CF: 'Central African Republic',\n    CG: 'Congo',\n    CH: 'Switzerland',\n    CI: \"Cote d'Ivoire\",\n    CK: 'Cook Islands',\n    CL: 'Chile',\n    CM: 'Cameroon',\n    CN: 'China',\n    CO: 'Colombia',\n    CR: 'Costa Rica',\n    CU: 'Cuba',\n    CV: 'Cape Verde',\n    CW: 'Curaçao',\n    CX: 'Christmas Island',\n    CY: 'Cyprus',\n    CZ: 'Czech Republic',\n    DE: 'Germany',\n    DJ: 'Djibouti',\n    DK: 'Denmark',\n    DM: 'Dominica',\n    DO: 'Dominican Republic',\n    DZ: 'Algeria',\n    EC: 'Ecuador',\n    EE: 'Estonia',\n    EG: 'Egypt',\n    EH: 'Western Sahara',\n    ER: 'Eritrea',\n    ES: 'Spain',\n    ET: 'Ethiopia',\n    FI: 'Finland',\n    FJ: 'Fiji',\n    FK: 'Falkland Islands',\n    FM: 'Federated States of Micronesia',\n    FO: 'Faroe Islands',\n    FR: 'France',\n    GA: 'Gabon',\n    GB: 'United Kingdom',\n    GD: 'Grenada',\n    GE: 'Georgia',\n    GF: 'French Guiana',\n    GG: 'Guernsey',\n    GH: 'Ghana',\n    GI: 'Gibraltar',\n    GL: 'Greenland',\n    GM: 'Gambia',\n    GN: 'Guinea',\n    GP: 'Guadeloupe',\n    GQ: 'Equatorial Guinea',\n    GR: 'Greece',\n    GS: 'South Georgia and the South Sandwich Islands',\n    GT: 'Guatemala',\n    GU: 'Guam',\n    GW: 'Guinea-Bissau',\n    GY: 'Guyana',\n    HK: 'Hong Kong',\n    HM: 'Heard Island and McDonald Islands',\n    HN: 'Honduras',\n    HR: 'Croatia',\n    HT: 'Haiti',\n    HU: 'Hungary',\n    ID: 'Indonesia',\n    IE: 'Ireland',\n    IL: 'Israel',\n    IM: 'Isle of Man',\n    IN: 'India',\n    IO: 'British Indian Ocean Territory',\n    IQ: 'Iraq',\n    IR: 'Iran',\n    IS: 'Iceland',\n    IT: 'Italy',\n    JE: 'Jersey',\n    JM: 'Jamaica',\n    JO: 'Jordan',\n    JP: 'Japan',\n    KE: 'Kenya',\n    KG: 'Kyrgyzstan',\n    KH: 'Cambodia',\n    KI: 'Kiribati',\n    KM: 'Comoros',\n    KN: 'Saint Kitts and Nevis',\n    KP: 'North Korea',\n    KR: 'South Korea',\n    KW: 'Kuwait',\n    KY: 'Cayman Islands',\n    KZ: 'Kazakhstan',\n    LA: 'Laos',\n    LB: 'Lebanon',\n    LC: 'Saint Lucia',\n    LI: 'Liechtenstein',\n    LK: 'Sri Lanka',\n    LR: 'Liberia',\n    LS: 'Lesotho',\n    LT: 'Lithuania',\n    LU: 'Luxembourg',\n    LV: 'Latvia',\n    LY: 'Libya',\n    MA: 'Morocco',\n    MC: 'Monaco',\n    MD: 'Moldova',\n    ME: 'Montenegro',\n    MF: 'Saint Martin (French Part)',\n    MG: 'Madagascar',\n    MH: 'Marshall Islands',\n    MK: 'North Macedonia',\n    ML: 'Mali',\n    MM: 'Burma',\n    MN: 'Mongolia',\n    MO: 'Macao',\n    MP: 'Northern Mariana Islands',\n    MQ: 'Martinique',\n    MR: 'Mauritania',\n    MS: 'Montserrat',\n    MT: 'Malta',\n    MU: 'Mauritius',\n    MV: 'Maldives',\n    MW: 'Malawi',\n    MX: 'Mexico',\n    MY: 'Malaysia',\n    MZ: 'Mozambique',\n    NA: 'Namibia',\n    NC: 'New Caledonia',\n    NE: 'Niger',\n    NF: 'Norfolk Island',\n    NG: 'Nigeria',\n    NI: 'Nicaragua',\n    NL: 'Netherlands',\n    NO: 'Norway',\n    NP: 'Nepal',\n    NR: 'Nauru',\n    NU: 'Niue',\n    NZ: 'New Zealand',\n    OM: 'Oman',\n    PA: 'Panama',\n    PE: 'Peru',\n    PF: 'French Polynesia',\n    PG: 'Papua New Guinea',\n    PH: 'Philippines',\n    PK: 'Pakistan',\n    PL: 'Poland',\n    PM: 'Saint Pierre and Miquelon',\n    PN: 'Pitcairn',\n    PR: 'Puerto Rico',\n    PS: 'Palestine',\n    PT: 'Portugal',\n    PW: 'Palau',\n    PY: 'Paraguay',\n    QA: 'Qatar',\n    RE: 'Reunion',\n    RO: 'Romania',\n    RS: 'Serbia',\n    RU: 'Russia',\n    RW: 'Rwanda',\n    SA: 'Saudi Arabia',\n    SB: 'Solomon Islands',\n    SC: 'Seychelles',\n    SD: 'Sudan',\n    SE: 'Sweden',\n    SG: 'Singapore',\n    SH: 'Saint Helena',\n    SI: 'Slovenia',\n    SJ: 'Svalbard and Jan Mayen',\n    SK: 'Slovakia',\n    SL: 'Sierra Leone',\n    SM: 'San Marino',\n    SN: 'Senegal',\n    SO: 'Somalia',\n    SR: 'Suriname',\n    SS: 'South Sudan',\n    ST: 'Sao Tome and Principe',\n    SV: 'El Salvador',\n    SX: 'Sint Maarten',\n    SY: 'Syria',\n    SZ: 'Swaziland',\n    TA: 'Tristan da Cunha',\n    TC: 'Turks and Caicos Islands',\n    TD: 'Chad',\n    TF: 'French Southern Territories',\n    TG: 'Togo',\n    TH: 'Thailand',\n    TJ: 'Tajikistan',\n    TK: 'Tokelau',\n    TL: 'Timor-Leste',\n    TM: 'Turkmenistan',\n    TN: 'Tunisia',\n    TO: 'Tonga',\n    TR: 'Turkey',\n    TT: 'Trinidad and Tobago',\n    TV: 'Tuvalu',\n    TW: 'Taiwan',\n    TZ: 'Tanzania',\n    UA: 'Ukraine',\n    UG: 'Uganda',\n    UM: 'United States Minor Outlying Islands',\n    US: 'United States',\n    UY: 'Uruguay',\n    UZ: 'Uzbekistan',\n    VA: 'Holy See (Vatican City State)',\n    VC: 'Saint Vincent and the Grenadines',\n    VE: 'Venezuela',\n    VG: 'Virgin Islands, British',\n    VI: 'Virgin Islands, U.S.',\n    VN: 'Vietnam',\n    VU: 'Vanuatu',\n    WF: 'Wallis and Futuna',\n    WS: 'Samoa',\n    XK: 'Kosovo',\n    YE: 'Yemen',\n    YT: 'Mayotte',\n    ZA: 'South Africa',\n    ZM: 'Zambia',\n    ZW: 'Zimbabwe',\n    ZZ: 'International',\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { motion } from 'framer-motion';\nimport OutsideActionBox from '../../OutsideActionBox/OutsideActionBox';\n\nconst Container = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst DropDownComponent = styled(motion.div)`\n    background: ${props => props.theme.Colors.white};\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    width: 256px;\n    height: 192px;\n    position: absolute;\n    border-radius: 8px;\n    top: 16px;\n    left: -32px;\n    z-index: 1000;\n    overflow: hidden;\n`;\n\nconst ContentArea = styled.div`\n    padding: 16px 8px;\n    flex: 1;\n    overflow: hidden;\n    height: 100%;\n    box-sizing: border-box;\n`;\n\nconst ScrollableArea = styled.div`\n    overflow-y: auto;\n    max-height: 295px;\n    padding: 0 8px;\n    height: 100%;\n    ::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.whiteFive};\n        border-radius: 8px;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n        background: ${props => props.theme.Colors.whiteThree};\n    }\n`;\n\nexport const CountryList: React.FC<{\n    open: boolean;\n    toggleOpen: (open: boolean) => void;\n    className?: string;\n}> = ({ children, open, toggleOpen, className }) => {\n    return (\n        <Container\n            open={open}\n            toggleOpen={toggleOpen}\n            styles={{ position: 'relative' }}\n        >\n            <DropDownComponent\n                className={className}\n                initial={{ scale: 0.5 }}\n                animate={{ scale: 1 }}\n            >\n                <ContentArea>\n                    <ScrollableArea>{children}</ScrollableArea>\n                </ContentArea>\n            </DropDownComponent>\n        </Container>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport {\n    getCountries,\n    getCountryCallingCode,\n    // @ts-ignore\n} from 'react-phone-number-input/input';\nimport { en } from './locales';\nimport { Variables } from '../../../../theme/variables';\nimport DownArrow from '../../../icons/DownArrow';\nimport UpArrow from '../../../icons/UpArrow';\nimport { CountryList } from './CountryList';\n\nconst Container = styled.div<{ disabled?: boolean }>`\n    ${props =>\n        props.disabled &&\n        `\n        pointer-events: none;\n    `}\n`;\n\nconst StyledDropDownList = styled(CountryList)``;\n\nconst ListItem = styled.div`\n    height: 32px;\n    width: 100%;\n    font-size: 13px;\n    font-weight: 500;\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n    padding: 8px 16px;\n    border-radius: 4px;\n    box-sizing: border-box;\n    &:active {\n        opacity: 0.7;\n    }\n    &:hover {\n        background: ${props => props.theme.Colors.whiteFive};\n    }\n    &.--active {\n        background: ${props => props.theme.Colors.whiteFive};\n    }\n`;\n\nconst ListCountryFlag = styled.div`\n    width: 16px;\n    height: 16px;\n    flex-shrink: 0;\n`;\n\nconst Flag = styled.img`\n    width: 100%;\n`;\n\nconst ListCountryNameContainer = styled.div`\n    position: relative;\n    margin-left: 8px;\n    min-width: 90px;\n    flex: 1;\n    display: flex;\n    align-items: center;\n`;\n\nconst ListCountryName = styled.div`\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    width: 100%;\n    position: absolute;\n    font-size: 13px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.black};\n    display: flex;\n    align-items: center;\n`;\n\nconst ListCountryCode = styled.div`\n    width: 32px;\n    margin-left: 8px;\n    flex-shrink: 0;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst CountrySelectorWrapper = styled.div`\n    height: 100%;\n    margin-right: 8px;\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst FlagContainer = styled.div`\n    height: 16px;\n    width: 16px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n`;\n\nconst CountryCode = styled.div<{ fontColor: string; fontSize: string }>`\n    height: 16px;\n    margin-left: 4px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: ${props => props.fontColor};\n    font-size: ${props => props.fontSize};\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n`;\n\nconst ArrowsContainer = styled.div`\n    height: 100%;\n    margin-left: 4px;\n`;\n\nconst ArrowIcon = styled.div<{ disabled?: boolean }>`\n    height: 6px;\n    width: 6px;\n    display: flex;\n    align-items: center;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n`;\n\nconst StyledDownArrow = styled(DownArrow)``;\n\nconst StyledUpArrow = styled(UpArrow)``;\n\nconst countries = getCountries().filter((country: string) => country !== 'US');\ncountries.unshift('US');\n\nconst CountrySelector: FC<{\n    open: boolean;\n    disabled?: boolean;\n    setOpen(open: boolean): void;\n    selectedCountry: keyof typeof en;\n    setSelectedCountry(country: string): void;\n    fontColor?: string;\n    fontSize?: string;\n}> = ({\n    open,\n    disabled,\n    setOpen,\n    selectedCountry,\n    setSelectedCountry,\n    fontColor,\n    fontSize,\n}) => {\n    return (\n        <Container disabled={disabled}>\n            <CountrySelectorWrapper onClick={() => setOpen(true)}>\n                <FlagContainer>\n                    <Flag\n                        alt=\"United States\"\n                        src={`http://purecatamphetamine.github.io/country-flag-icons/3x2/${selectedCountry.toString()}.svg`}\n                    />\n                </FlagContainer>\n                <CountryCode\n                    fontSize={fontSize ? fontSize : '13px'}\n                    fontColor={\n                        disabled\n                            ? Variables.Colors.cloudyBlue\n                            : fontColor\n                            ? fontColor\n                            : Variables.Colors.white\n                    }\n                >\n                    +{getCountryCallingCode(selectedCountry as any)}\n                </CountryCode>\n                <ArrowsContainer>\n                    <ArrowIcon disabled={disabled}>\n                        {open ? <StyledUpArrow /> : <StyledDownArrow />}\n                    </ArrowIcon>\n                </ArrowsContainer>\n            </CountrySelectorWrapper>\n            <StyledDropDownList open={open} toggleOpen={setOpen}>\n                {countries.map((country: string) => (\n                    <ListItem\n                        key={country}\n                        onClick={() => {\n                            setSelectedCountry(country);\n                            setOpen(false);\n                        }}\n                        className={\n                            country === selectedCountry ? '--active' : undefined\n                        }\n                    >\n                        <ListCountryFlag>\n                            <Flag\n                                alt={country}\n                                src={`http://purecatamphetamine.github.io/country-flag-icons/3x2/${country.toString()}.svg`}\n                            />\n                        </ListCountryFlag>\n                        <ListCountryNameContainer>\n                            <ListCountryName>{en[country]}</ListCountryName>\n                        </ListCountryNameContainer>\n                        <ListCountryCode>\n                            +{getCountryCallingCode(country as any)}\n                        </ListCountryCode>\n                    </ListItem>\n                ))}\n            </StyledDropDownList>\n        </Container>\n    );\n};\n\nexport default CountrySelector;\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div<{\n    height: string;\n    width: string;\n    background: string;\n    fontSize: string;\n    error?: boolean;\n    hasManualError?: boolean;\n}>`\n    font-family: 'Manrope';\n    position: relative;\n    height: ${props => props.height};\n    width: ${props => props.width};\n    background: ${props => props.background};\n    font-size: ${props => props.fontSize};\n    border-radius: 4px;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n    box-shadow: inset 0 0 0 ${props => (props.error || props.hasManualError ? '2px' : '-1px')} var(--ps-red-main);    \n    \n    &.grey-border-on-focus {\n        border: solid 1px transparent;\n        box-shadow: none;\n\n        ${props =>\n            (props.error || props.hasManualError) &&\n            css`border: solid 1px var(--ps-red-main);`\n        }\n\n        &:focus-within {\n            border: solid 1px var(${props => (props.error || props.hasManualError) ? '--ps-red-main' : '--ps-grey-1'});\n        }\n    }\n`;\n\nexport const InputWrapper = styled.div<{\n    color: string;\n    disabled?: boolean;\n    fontSize: string;\n    useTopPadding: boolean;\n}>`\n    padding: ${props => props.useTopPadding ? '10px' : '0px'} 24px 0px 24px;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    & > .PhoneInput > input {\n        font-family: 'Manrope';\n        font-weight: normal;\n        font-stretch: normal;\n        font-style: normal;\n        line-height: normal;\n        letter-spacing: normal;\n        height: 100%;\n        width: 100%;\n        box-sizing: border-box;\n        border: none;\n        background: transparent;\n        color: ${props => props.color};\n        font-size: ${props => props.fontSize};\n        -webkit-appearance: none;\n        &:disabled {\n            color: ${props => props.theme.Colors.cloudyBlue} !important;\n        }\n        &::placeholder {\n            font-size: ${props => props.fontSize};\n            color: ${props =>\n                props.disabled\n                    ? props.theme.Colors.cloudyBlue\n                    : props.theme.Colors.steelGrey};\n        }\n    }\n`;\n\nexport const Label = styled.div<{ color: string }>`\n    font-size: 11px;\n    color: ${props => props.color};\n    margin-bottom: 4px;\n    position: absolute;\n    padding: 10px 0px 0 24px;\n`;\n\nexport const TrashIconContainer = styled.div`\n    color: var(--ps-red-main);\n    position: absolute;\n    width: 22px;\n    height: 24px;\n    top: 16px;\n    right: 16px;\n    cursor: pointer;\n`;\n","import { FC, useState } from 'react';\nimport 'react-phone-number-input/style.css';\nimport Input from 'react-phone-number-input';\nimport { Variables } from '../../../../theme/variables';\nimport CountrySelector from './CountrySelector';\nimport { en } from './locales';\nimport Trash from '../../../../ui/icons/Trash';\nimport { Container, Label, TrashIconContainer, InputWrapper } from './styles';\n\nconst InputPhone: FC<{\n    value: number | string;\n    onChange(value?: number | string): void;\n    label: string;\n    placeholder?: string;\n    width?: string;\n    height?: string;\n    background?: string;\n    fontColor?: string;\n    labelColor?: string;\n    disabledLabelColor?: string;\n    fontSize?: string;\n    className?: string;\n    field?: any;\n    error?: boolean;\n    disabled?: boolean;\n    autoFocus?: boolean;\n    hasManualError?: boolean;\n    dataTest?: string;\n    onDeleteNumber?: () => void;\n    showDeleteNumberBtn?: boolean;\n}> = ({\n    value,\n    onChange,\n    label,\n    placeholder,\n    width,\n    height,\n    background,\n    fontColor,\n    labelColor,\n    disabledLabelColor,\n    className,\n    fontSize,\n    field,\n    error,\n    disabled,\n    autoFocus,\n    hasManualError,\n    dataTest,\n    onDeleteNumber,\n    showDeleteNumberBtn\n}) => {\n    const [open, setOpen] = useState(false);\n    const [selectedCountry, setSelectedCountry] = useState<keyof typeof en>(\n        'US'\n    );\n\n    const handleCountryChange = (value?: string) => {\n        if (value) {\n            setSelectedCountry(value);\n            onChange();\n        }\n    };\n\n    return (\n        <Container\n            width={width ? width : '100%'}\n            height={height ? height : '56px'}\n            background={background ? background : Variables.Colors.darkTwo}\n            fontSize={fontSize ? fontSize : '13px'}\n            className={className}\n            error={error}\n            hasManualError={hasManualError}\n            data-test={dataTest}\n        >\n            <Label\n                color={\n                    disabled\n                        ? disabledLabelColor ?? Variables.Colors.cloudyBlue\n                        : labelColor ?? Variables.Colors.cloudyBlue\n                }\n            >\n                {label}\n            </Label>\n            <InputWrapper\n                fontSize={fontSize ? fontSize : '13px'}\n                color={fontColor ? fontColor : Variables.Colors.white}\n                disabled={disabled}\n                useTopPadding={!!label}\n            >\n                <Input\n                    {...field}\n                    autoFocus={autoFocus}\n                    country={selectedCountry}\n                    countryCallingCodeEditable={false}\n                    defaultCountry={selectedCountry}\n                    initialValueFormat=\"national\"\n                    countrySelectComponent={({ value }) => {\n                        if (value) {\n                            setSelectedCountry(value);\n                        }\n                        return (\n                            <CountrySelector\n                                open={open}\n                                disabled={disabled}\n                                setOpen={setOpen}\n                                fontColor={fontColor}\n                                fontSize={fontSize ? fontSize : '13px'}\n                                selectedCountry={selectedCountry}\n                                setSelectedCountry={handleCountryChange}\n                            />\n                        );\n                    }}\n                    maxLength={50}\n                    placeholder={placeholder}\n                    value={value}\n                    disabled={disabled}\n                    onChange={onChange}\n                />\n            </InputWrapper>\n            {showDeleteNumberBtn && \n                <TrashIconContainer onClick={e => {\n                    e.stopPropagation();\n                    onDeleteNumber && onDeleteNumber()}}\n                    data-test={dataTest && `${dataTest}-delete`}\n                >\n                    <Trash/>\n                </TrashIconContainer>\n            }\n        </Container>\n    );\n};\n\nexport default InputPhone;\n","import styled from 'styled-components';\n\nexport const TBody = styled.tbody`\n    color: ${props => props.theme.Colors.black};\n    & > tr {\n        &:hover {\n            background: ${props => props.theme.Colors.whiteTwo};\n            & > td {\n                &:first-child {\n                    border-top-left-radius: 4px;\n                    border-bottom-left-radius: 4px;\n                }\n                &:last-child {\n                    border-top-right-radius: 4px;\n                    border-bottom-right-radius: 4px;\n                }\n            }\n        }\n    }\n    &:before {\n        content: '.';\n        display: block;\n        line-height: 8px;\n        color: transparent;\n    }\n`;\n\n\n","import { FC, memo } from 'react';\n\nimport { TBody } from './style';\nimport { TableBodyProps } from './type';\n\nconst TableBody: FC<TableBodyProps> = memo(props => {\n    const { children, className, innerRef, ...rest } = props;\n    return (\n        <TBody className={className} ref={innerRef} {...rest}>\n            {children}\n        </TBody>\n    );\n});\n\nexport default TableBody;\n\n","export const escapeRegExp = (value: String): String => {\n    return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n","import { useCallback } from 'react';\nimport { useLocalStorage } from '../../tools/localStorage/LocalStorage';\n\nexport const countParents = (path: string) => {\n    return path\n        ? path\n              .trim()\n              .split('/')\n              .filter(x => x).length\n        : 0;\n};\n\nexport enum LABELS_CONFIGS {\n    LABELS_STATE = 'labels-state',\n    SIDE_PANEL = 'side-panel',\n    EXPANDED_LABELS = 'expanded-labels',\n}\n\nexport const useGenerateLabelsConfiguration = () => {\n    const localStorage = useLocalStorage();\n\n    return useCallback(\n        (sidePanel: boolean, selectedLabels: number[]) => {\n            let savedLabelsState: any = localStorage.get(\n                LABELS_CONFIGS.LABELS_STATE\n            );\n\n            if (savedLabelsState && savedLabelsState) {\n                savedLabelsState[LABELS_CONFIGS.SIDE_PANEL] = sidePanel;\n                savedLabelsState[\n                    LABELS_CONFIGS.EXPANDED_LABELS\n                ] = selectedLabels;\n            } else {\n                savedLabelsState = {};\n                savedLabelsState = {\n                    [LABELS_CONFIGS.SIDE_PANEL]: sidePanel,\n                    [LABELS_CONFIGS.EXPANDED_LABELS]: selectedLabels,\n                };\n            }\n\n            localStorage.set(LABELS_CONFIGS.LABELS_STATE, savedLabelsState);\n        },\n        [localStorage]\n    );\n};\n\nexport const useGetSavedLabelPanelState = () => {\n    const localStorage = useLocalStorage();\n\n    return useCallback(() => {\n        let savedLabelsState: any = localStorage.get(\n            LABELS_CONFIGS.LABELS_STATE\n        );\n\n        if (savedLabelsState) {\n            return savedLabelsState[LABELS_CONFIGS.SIDE_PANEL];\n        } else {\n            return false;\n        }\n    }, [localStorage]);\n};\n\nexport const useGetSavedLabelExpandedState = () => {\n    const localStorage = useLocalStorage();\n\n    return useCallback(() => {\n        let savedLabelsState: any = localStorage.get(\n            LABELS_CONFIGS.LABELS_STATE\n        );\n\n        if (savedLabelsState) {\n            return savedLabelsState[LABELS_CONFIGS.EXPANDED_LABELS];\n        } else {\n            return false;\n        }\n    }, [localStorage]);\n};\n","import { CompanyInterface } from './Company';\r\nimport { Enrollments } from './Enrollments';\r\nimport { Label } from './Label';\r\nimport { Roles } from './Roles';\r\nimport { NEW_PERMISSIONS } from '../enums/permissions';\r\nimport { UserInfo } from './UserInfo';\r\n\r\nexport interface UserInterface extends UserWithRole {\r\n    id: number;\r\n    email?: string;\r\n    password?: string;\r\n    firstName?: string;\r\n    phoneNumber?: string;\r\n    phoneNumberVerified?: boolean;\r\n    lastName?: string;\r\n    picture?: string;\r\n    companyId?: number;\r\n    isTeamLead?: boolean;\r\n    invitationCode?: string;\r\n    acceptedEnrollmentCount?: number;\r\n    searchFilter?: number[];\r\n    totalEnrollmentCount?: number;\r\n    pendingEnrollmentCount?: number;\r\n    inProgressEnrollmentCount?: number;\r\n    completedEnrollmentCount?: number;\r\n    lastTrainingAt?: string;\r\n    updatedAt?: string;\r\n    company?: CompanyInterface;\r\n    creator?: UserInterface;\r\n    createdAt?: string;\r\n    enrollment?: Enrollments;\r\n    labels?: Label[];\r\n    permissions?: NEW_PERMISSIONS[];\r\n    weeklyActiveDays?: number;\r\n    monthlyActiveDays?: number;\r\n    teamsCount?: number;\r\n    averageAccuracy?: number;\r\n    status?: string;\r\n    registeredAt?: string;\r\n    lastActivity?: any;\r\n    dueDate?: Date;\r\n    roleId?: number;\r\n    imageUrl?: string;\r\n}\r\n\r\nexport interface UserWithRole {\r\n    role?: Roles;\r\n}\r\n\r\nexport type LeaderDataType = {\r\n    isViewed: boolean;\r\n    id: number;\r\n    isTeamLead: boolean;\r\n    user: {\r\n        id: number;\r\n        firstName: string;\r\n        lastName: string;\r\n        imageUrl: string\r\n    }\r\n}\r\n\r\nexport interface UserV2 extends UserInfo {\r\n    companyId: number;\r\n    roleId: number;\r\n    createdAt: string;\r\n    updatedAt: string;\r\n    role?: {\r\n        id: number;\r\n        name: string;\r\n        title: string;\r\n    };\r\n    countEnrollments: number;\r\n    countTeams: number;\r\n    lastActivity?: string;\r\n    labels: number[];\r\n    teams?: number[];\r\n    registeredAt?: string;\r\n    invitedBy?: UserInfo;\r\n    invitationCode?: string;\r\n    phoneNumber?: string;\r\n    phoneNumberVerified: boolean;\r\n}\r\n\r\nexport interface UserProfile extends UserV2 {\r\n    permissions?: NEW_PERMISSIONS[];\r\n    labelFilters?: number[];\r\n}\r\n\r\nexport const userStatusFilters = {\r\n    'PENDING': 'PENDING', \r\n    'IN_PROGRESS': 'ENROLLED',\r\n    'COMPLETED': 'COMPLETED'\r\n}\r\n\r\nexport interface AdminDataType {\r\n    email: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    roleId: number;\r\n}\r\n","import { ChunkServiceInterface } from './types';\n\nexport const SET_PERCENTAGE = 'SET_PERCENTAGE';\n\nexport const initialState: ChunkServiceInterface = {\n    percentage: 0,\n};\n","export const DATE_FORMAT = 'MM/DD/YYYY';\nexport const DATE_TIME_FORMAT = 'MM/DD/YYYY h:mm:ss A';","import React, {\n    useRef,\n    cloneElement,\n    ReactElement,\n    RefObject,\n    useEffect,\n    forwardRef,\n    PropsWithChildren,\n    CSSProperties,\n    ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport styled from 'styled-components';\n\nimport {\n    PopupOffset,\n    PopupPosition,\n    PopupTrigger,\n    usePopup,\n} from '../../../helpers/hooks/usePopup';\nimport { getPortalElement } from '../Popup/helpers/getPortalElement';\n\n//region Types\ntype Preset = 'button-icon' | 'dropdown' | 'checkbox-icon' | 'table-item' | 'question-icon' | 'question-icon-top' | 'pending-user';\n\ntype Props<T> = {\n    label: ReactNode | string;\n    disabled?: boolean;\n    className?: string;\n    position?: PopupPosition;\n    offset?: PopupOffset;\n    preset?: Preset;\n    children: ReactElement | { (ref: RefObject<T>): ReactElement };\n    trigger?: PopupTrigger;\n    isHtmlContent?: boolean;\n    dataTest?: string;\n    style?: CSSProperties;\n};\n//endregion\n\n//region Styles\nconst TooltipLabel = styled.div`\n    font-size: 13px;\n    display: flex;\n    align-items: center;\n    padding: 8px 16px;\n    min-height: 40px;\n    flex-wrap: wrap;\n    white-space: nowrap;\n    user-select: none;\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    color: ${props => props.theme.Colors.black};\n    background: ${props => props.theme.Colors.white};\n`;\n//endregion\n\nconst TooltipContent = forwardRef<\n    HTMLDivElement,\n    {\n        label: ReactNode | string;\n        style: CSSProperties;\n        className?: string;\n        portalElement: HTMLElement;\n        isHtmlContent?: boolean;\n        dataTest?: string;\n    }\n>(({ className, style, label, portalElement, isHtmlContent, dataTest }, ref) => {\n    if(isHtmlContent){\n        return createPortal(\n            <TooltipLabel ref={ref} className={className} style={style} data-test={dataTest}>\n             <div style={{width: 264}}>{label}</div>\n            </TooltipLabel>,\n            portalElement\n        );\n    } else {\n        return createPortal(\n            <TooltipLabel ref={ref} className={className} style={style} data-test={dataTest}>\n                {label}\n            </TooltipLabel>,\n            portalElement\n        );\n    }\n});\n\n/**\n * Can be only one child. Make for sure that child component is forwarded by forwardRef or it's just JSX markup.\n * Ref object can be obtained using render props from Children Prop\n * T - Ref object\n */\nexport const Tooltip = <T extends HTMLElement = HTMLElement>({\n    label,\n    position = 'right-start',\n    offset,\n    className,\n    children,\n    disabled,\n    preset,\n    trigger,\n    isHtmlContent,\n    dataTest,\n    style: propStyle\n}: PropsWithChildren<Props<T>>): ReactElement => {\n    const presetsConfig: Record<\n        Preset,\n        {\n            position: PopupPosition;\n            offset: PopupOffset;\n            \n        }\n    > = {\n        'button-icon': {\n            position: 'center-right--bottom',\n            offset: {\n                x: '0px',\n                y: '10px',\n            },\n        },\n        dropdown: {\n            position: 'center-right--bottom',\n            offset: {\n                x: '0px',\n                y: '4px',\n            },\n        },\n        'checkbox-icon': {\n            position: 'center-right--bottom',\n            offset: {\n                x: '-8px',\n                y: '12px',\n            },\n        },\n        'table-item': {\n            position: 'center-left--bottom',\n            offset: {\n                x: '9%',\n                y: '12px',\n            },\n        },\n        'question-icon': {\n            position: 'center-left--bottom',\n            offset: {\n                x: '140px',\n                y: '22px',\n            }\n        },\n        'question-icon-top': {\n            position: 'center-left--bottom',\n            offset: {\n                x: '140px',\n                y: '-205px',\n            }\n        },\n        'pending-user': {\n            position: 'center-left--bottom',\n            offset: {\n                x: '160px',\n                y: '0px',\n            }\n        }\n    };\n\n    const triggerRef = useRef<T>(null);\n    const contentRef = useRef<HTMLDivElement>(null);\n    const portalElement = getPortalElement(triggerRef.current, 'tooltip');\n    const { style, shown, enable, disable, enabled } = usePopup(\n        triggerRef,\n        contentRef,\n        portalElement,\n        {\n            offset: preset ? presetsConfig[preset].offset : offset,\n            position: preset ? presetsConfig[preset].position : position,\n            trigger: trigger || 'hover',\n        }\n    );\n\n    useEffect(() => {\n        if (disabled) {\n            disable();\n        } else {\n            enable();\n        }\n    }, [disable, disabled, enable]);\n\n    const getChildren = () => {\n        if (typeof children === 'function') {\n            return children(triggerRef);\n        }\n        if (children) {\n            // @ts-ignore\n            return cloneElement(children, {\n                ref: triggerRef,\n            });\n        }\n\n        return null;\n    };\n\n    return (\n        <>\n            {getChildren()}\n            {shown && enabled && (\n                <TooltipContent\n                    ref={contentRef}\n                    className={className}\n                    style={{...style, ...propStyle}}\n                    label={label}\n                    portalElement={portalElement}\n                    isHtmlContent={isHtmlContent}\n                    dataTest={dataTest}\n                />\n            )}\n        </>\n    );\n};\n","import { createContext } from 'react';\n\nimport { AppState } from '../../../../../../store/reducers';\nimport { DEFAULT_LABELS_SCOPE, Scope } from '../scopes';\n\nexport type WithLabelsContextProps<T = keyof AppState, K = Scope> = {\n    reducerName?: T;\n    scope?: K;\n};\n\nexport const WithLabelsContext = createContext<WithLabelsContextProps>({\n    reducerName: 'portableLabels',\n    scope: DEFAULT_LABELS_SCOPE,\n});\n","import { createContext } from 'react';\n\nimport { AppState } from '../../../../../../store/reducers';\nimport { DEFAULT_PRACTIS_SETS_SCOPE, Scope } from '../scopes';\n\nexport type WithPractisSetsContextProps<T = keyof AppState, K = Scope> = {\n    reducerName?: T;\n    scope?: K;\n};\n\nexport const WithPractisSetsContext = createContext<WithPractisSetsContextProps>(\n    {\n        reducerName: 'portablePractisSets',\n        scope: DEFAULT_PRACTIS_SETS_SCOPE,\n    }\n);\n","import { ColorTheme } from './type';\nimport { Variables } from '../../../theme/variables';\n\nexport const Themes: Record<\n    ColorTheme,\n    {\n        background: string;\n        color: string;\n        labelColor?: string;\n        disabledLabelColor?: string;\n    }\n> = {\n    light: {\n        background: Variables.Colors.whiteFive,\n        color: Variables.Colors.black,\n    },\n    lightTwo: {\n        background: Variables.Colors.white,\n        color: Variables.Colors.black,\n        labelColor: Variables.Colors.cloudyBlue,\n        disabledLabelColor: Variables.Colors.cloudyBlue,\n    },\n    dark: {\n        background: Variables.Colors.darkTwo,\n        color: Variables.Colors.whiteTwo,\n    },\n    darkTwo: {\n        background: Variables.Colors.dark,\n        color: Variables.Colors.white,\n    },\n    darkThree: {\n        background: Variables.Colors.darkTwo,\n        color: Variables.Colors.whiteTwo,\n        labelColor: Variables.Colors.cloudyBlue,\n    },\n    transparent: {\n        background: Variables.Colors.transparent,\n        color: Variables.Colors.black,\n    },\n};\n\n","export default __webpack_public_path__ + \"static/media/eye.5e81066f.svg\";","export default __webpack_public_path__ + \"static/media/eye-open.73b1590c.svg\";","import styled, { css } from 'styled-components';\n\nimport { Themes } from './constants';\nimport { ColorTheme } from './type';\nimport ShowIcon from '../../../assets/images/eye.svg';\nimport HideIcon from '../../../assets/images/eye-open.svg';\nimport { isSafari } from '../../../helpers/functions/detect-browsers';\n\nexport const Container = styled.div<{\n    height: string;\n    colorTheme: ColorTheme;\n    width?: string;\n    hideError?: boolean;\n    error?: boolean;\n}>`\n    position: relative;\n\n    display: flex;\n    align-items: center;\n    height: ${props => props.height};\n    ${props => !!props.width && `width: ${props.width};`}\n\n    border-radius: 4px;\n    overflow: hidden;\n    background-color: ${({ colorTheme }) => Themes[colorTheme].background};\n\n    ${props =>\n        !props.hideError &&\n        css`\n            box-shadow: inset 0 0 0 ${props.error ? '2px' : '-1px'}\n                ${props.theme.Colors.tomato};\n        `};\n    -webkit-appearance: none;\n\n    .custom-border-container {\n        ${props =>\n            !props.hideError &&\n            css`\n                box-shadow: inset 0 0 0 ${props.error ? '1px' : '-1px'}\n                    ${props.theme.Colors.tomato};\n            `};\n\n        border-radius: 4px;\n    }\n\n    &.login-input-container {\n        box-sizing: border-box;\n        border: solid 1px transparent;\n        box-shadow: none;\n\n        ${props =>\n            !props.hideError && !!props.error &&\n            css`border: solid 1px var(--ps-red-main);`\n        }\n\n        &:focus-within {\n            border: solid 1px var(${props => !props.hideError && !!props.error ? '--ps-red-main' : '--ps-grey-1'});\n        }\n    }\n\n    &.login-input-container + div {\n        padding: 4px 0 0 0;  \n    }\n`;\n\nexport const StyledInput = styled.input<{\n    height: string;\n    colorTheme: ColorTheme;\n    error: boolean;\n    padding?: string;\n    fontSize?: string;\n    fontFamily?: string;\n    hideError?: boolean;\n}>`\n    font-family: ${props => props.fontFamily || props.theme.Fonts.manrope};\n    font-size: ${props => (props.fontSize ? props.fontSize : '13px')};\n\n    height: ${props => props.height};\n    width: 100%;\n    flex-grow: 1;\n    padding: ${props =>\n        !!props.padding ? props.padding : '29px 24px 15px 24px'};\n\n    background-color: transparent;\n    border: none;\n    box-sizing: border-box;\n    color: ${props => Themes[props.colorTheme].color};\n\n    // hack for built-in-browser autofill\n    &:-webkit-autofill,\n    &:-webkit-autofill:hover,\n    &:-webkit-autofill:focus {\n        -webkit-text-fill-color: ${props => Themes[props.colorTheme].color};\n        -webkit-box-shadow: 0 0 0px 1000px\n            ${props => Themes[props.colorTheme].background} inset;\n        transition: background-color 5000s ease-in-out 0s;\n        caret-color: ${props => Themes[props.colorTheme].color};\n    }\n    &:disabled {\n        color: ${() => isSafari() ? 'var(--ps-grey-1)' : 'var(--ps-grey-14)'};\n\n        &::placeholder {\n            font-size: ${props => (props.fontSize ? props.fontSize : '13px')};\n            color: ${props => props.theme.Colors.cloudyBlue};\n        }\n    }\n    &::placeholder {\n        font-size: ${props => (props.fontSize ? props.fontSize : '13px')};\n        color: ${props => props.theme.Colors.steelGrey};\n    }\n`;\n\nexport const Label = styled.label<{\n    filled: boolean;\n    top?: string;\n    left?: string;\n    fontWeight?: number;\n    disabled?: boolean;\n    fontSize?: string;\n    colorTheme: ColorTheme;\n    decreaseLabelFontSize?: boolean;\n}>`\n    position: absolute;\n    top: ${props => (props.filled ? (props.top ? props.top : '-8px') : '0')};\n    left: ${props => props.left || '24px'};\n\n    font-size: ${({ fontSize }) => fontSize || '12px'};\n    font-weight: ${({ fontWeight, colorTheme }) => {\n        if (fontWeight) {\n            return fontWeight;\n        }\n        if (colorTheme === 'lightTwo') {\n            return 600;\n        }\n\n        return 400;\n    }};\n\n    display: flex;\n    align-items: center;\n    height: 100%;\n\n    transition: all 0.18s ease;\n    transform-origin: top left;\n    pointer-events: none;\n    color: ${props =>\n        !!Themes[props.colorTheme].labelColor\n            ? Themes[props.colorTheme].labelColor\n            : props.theme.Colors.steelGrey};\n    ${({ filled }) =>\n        filled &&\n        css`\n            transform: scale(0.9);\n        `}\n\n    ${StyledInput}:focus ~ & {\n        transform: scale(0.9);\n        top: -8px;\n        ${props =>\n            !!props.decreaseLabelFontSize && `font-size: 11px; top: -6px;`}\n    }\n    &.is-disabled {\n        color: ${props =>\n            !!Themes[props.colorTheme].disabledLabelColor\n                ? Themes[props.colorTheme].disabledLabelColor\n                : props.theme.Colors.cloudyBlue};\n    }\n\n    &.login-input-label {\n        font-size: ${props => props.filled ? '11px' : props.fontSize};\n        top: ${props => (props.filled ? '-12px' : '0')};\n        transform: none;\n    }\n    ${StyledInput}.login-input:-webkit-autofill ~ & {\n        font-size: 11px;\n        top: -12px;\n    }\n    ${StyledInput}.login-input:focus ~ & {\n        transform: none;\n        font-size: 11px;\n        top: -12px;\n    }\n`;\n\nexport const ShowPassword = styled.div<{ fontSize?: string }>`\n    font-size: ${props => (props.fontSize ? props.fontSize : '11px')};\n    font-weight: 600;\n\n    display: flex;\n    flex-shrink: 0;\n    align-items: center;\n    height: 100%;\n    padding: 0 24px 0 12px;\n\n    cursor: pointer;\n    user-select: none;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n\n    &:hover {\n        color: ${props => props.theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.windowsBlue};\n    }\n`;\n\nexport const ClearInput = styled.div<{\n    colorTheme: ColorTheme;\n    shown: boolean;\n    top?: string;\n}>`\n    display: ${({ shown }) => (shown ? 'flex' : 'none')};\n    flex-basis: 12px;\n    flex-shrink: 0;\n    align-items: center;\n    height: 100%;\n    padding: 0 16px 0 12px;\n    cursor: pointer;\n    box-sizing: content-box;\n    color: ${({ colorTheme }) => Themes[colorTheme].color};\n\n    &:focus {\n        opacity: 0.7;\n    }\n`;\n\nexport const PasswordEye = styled.div<{ shouldShowPassword: boolean }>`\n    flex-shrink: 0;\n    height: 100%;\n    width: 48px;\n    cursor: pointer;\n    user-select: none;\n    background-image: ${({ shouldShowPassword }) =>\n        shouldShowPassword ? `url(${HideIcon})` : `url(${ShowIcon})`};\n    background-repeat: no-repeat;\n    background-position: center left;\n`;\n\nexport const EmailPencilWrapper = styled.div`\n  cursor: pointer;\n  height: 100%;\n  width: 48px;\n  svg {\n    height: 100%;\n    width: 20px;\n    user-select: none;\n    top: 10px;\n  }\n`;\n","import { FC, useState, forwardRef } from 'react';\n\nimport Close from '../../icons/Close';\nimport {\n    ClearInput,\n    Container, EmailPencilWrapper,\n    Label,\n    PasswordEye,\n    ShowPassword,\n    StyledInput,\n} from './style';\nimport { InputProps } from './type';\nimport PencilIcon from '../../icons/PencilIcon';\nimport ROUTES from '../../../routes/routes';\nimport { History } from 'history';\nimport { useHistory } from '../../../tools/router';\n\nconst Input: FC<InputProps> = forwardRef(\n    (\n        {\n            type,\n            field,\n            disabled,\n            autoComplete,\n            autoFocus,\n            height,\n            fontSize,\n            label,\n            value,\n            handleChange,\n            onBlur,\n            maxLength,\n            placeholder,\n            className,\n            colorTheme,\n            error,\n            readOnly,\n            clearInput,\n            onKeyPress,\n            onKeyDown,\n            onFocus,\n            labelTopPosition,\n            labelLeftPosition,\n            inputPadding,\n            containerWidth,\n            labelFontWeight,\n            clearTopPosition,\n            labelFontSize,\n            fontFamily,\n            hideError,\n            decreaseLabelFontSize,\n            dataTest,\n            containerStyle,\n            hint,\n        },\n        ref\n    ) => {\n        const [showPassword, setShowPassword] = useState(false);\n        const history: History<any> = useHistory();\n        const clearShown = !!(\n            clearInput &&\n            value &&\n            value.toString().length > 0\n        );\n        const selectedColorTheme = colorTheme || 'light';\n        const inputType = showPassword\n            ? true\n            : type === 'password-with-eye'\n                ? 'password'\n                : type;\n\n        return (\n            <Container\n                colorTheme={selectedColorTheme}\n                height={height ? height : '56px'}\n                width={containerWidth}\n                hideError={hideError}\n                error={error}\n                className={className ? `${className}-container` : ''}\n                style={containerStyle}\n            >\n                <StyledInput\n                    data-test={dataTest}\n                    ref={ref}\n                    {...field}\n                    fontFamily={fontFamily}\n                    type={inputType}\n                    height={height ? height : '56px'}\n                    fontSize={fontSize}\n                    disabled={disabled}\n                    autoComplete={autoComplete}\n                    className={className && (!!error && !hideError ? `${className} ${className}-with-error` : className)}\n                    value={value}\n                    maxLength={maxLength}\n                    onKeyPress={(e: KeyboardEvent) =>\n                        onKeyPress && onKeyPress(e)\n                    }\n                    onKeyDown={(e: KeyboardEvent) =>\n                        onKeyDown && onKeyDown(e)\n                    }\n                    onChange={\n                        handleChange\n                            ? handleChange\n                            : field\n                            ? field.onChange\n                            : undefined\n                    }\n                    hideError={hideError}\n                    autoFocus={autoFocus}\n                    onBlur={onBlur}\n                    onFocus={onFocus}\n                    colorTheme={selectedColorTheme}\n                    error={error}\n                    placeholder={placeholder}\n                    readOnly={readOnly}\n                    padding={inputPadding}\n                    title={hint}\n                />\n                <Label\n                    filled={!!value}\n                    top={\n                        value && decreaseLabelFontSize\n                            ? '-6px'\n                            : labelTopPosition\n                    }\n                    left={labelLeftPosition}\n                    htmlFor=\"input\"\n                    fontWeight={labelFontWeight}\n                    disabled={disabled}\n                    fontSize={\n                        value && decreaseLabelFontSize ? '11px' : labelFontSize\n                    }\n                    decreaseLabelFontSize={decreaseLabelFontSize}\n                    colorTheme={selectedColorTheme}\n                    className={(className ? `${className}-label ` : '') + (disabled ? 'is-disabled' : '')}\n                >\n                    {label}\n                </Label>\n                <ClearInput\n                    colorTheme={selectedColorTheme}\n                    shown={clearShown}\n                    top={clearTopPosition}\n                    onClick={e => {\n                        e.stopPropagation();\n                        clearInput && clearInput();\n                    }}\n                    data-test={dataTest && `${dataTest}-clear`}\n                >\n                    <Close type=\"thin\" />\n                </ClearInput>\n                {type === 'password' && (\n                    <ShowPassword\n                        onClick={() => setShowPassword(!showPassword)}\n                        fontSize={fontSize}\n                        data-test={dataTest ? `${dataTest}-${showPassword ? 'hide' : 'show'}` : null}\n                    >\n                        {showPassword ? 'Hide' : 'Show'}\n                    </ShowPassword>\n                )}\n                {type === 'password-with-eye' && (\n                    <PasswordEye\n                        onClick={() => setShowPassword(!showPassword)}\n                        shouldShowPassword={showPassword}\n                        data-test={dataTest ? `${dataTest}-eye` : null}\n                    />\n                )}\n                {type === 'email-with-edit-link' && (\n                    <EmailPencilWrapper onClick={() => {\n                        history.push(ROUTES.AUTH_PAGES.LOGIN);\n                    }}>\n                        <PencilIcon/>\n                    </EmailPencilWrapper>\n                )}\n            </Container>\n        );\n    }\n);\n\nexport default Input;\n","import { ADD_MESSAGE, ErrorMessagesActions, REMOVE_MESSAGE } from './actions';\nimport { ErrorMessagesInterface } from '../ErrorMessages';\nimport { AppState } from '../../../../store/reducers';\nimport { Reducer } from 'redux';\n\nconst initialState: ErrorMessagesInterface = {\n    status: null,\n    message: '',\n};\n\nconst messageReducer: Reducer<ErrorMessagesInterface, ErrorMessagesActions> = (\n    state = initialState,\n    action\n): ErrorMessagesInterface => {\n    switch (action.type) {\n        case ADD_MESSAGE:\n            return {\n                status: action.error.status,\n                message: action.error.message,\n            };\n        case REMOVE_MESSAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nexport const getErrorMessages = (state: AppState) => state.messages;\n\nexport default messageReducer;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PencilIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.085a1.75 1.75 0 0 1 0 2.475l-8.61 8.61c-.21.21-.47.363-.756.445l-3.251.929a.75.75 0 0 1-.927-.927l.929-3.251a1.75 1.75 0 0 1 .445-.757l8.61-8.61zm1.414 1.06a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354l-1.086-1.086zM11.189 6.25 9.75 4.81l-6.286 6.287a.25.25 0 0 0-.064.108l-.558 1.953 1.953-.558a.249.249 0 0 0 .108-.064l6.286-6.286z\" fill=\"#B1C0CB\"/>\n</svg>\n        );\n    }\n);\n\nexport default PencilIcon;\n","export { default as ImageUploader } from './controller';\nexport * from './types';\n","const ContentContainerId = 'MainScrollableContainer';\n\nexport const getPortalElement = (\n    triggerElement: HTMLElement | null,\n    type: 'tooltip' | 'popup'\n): HTMLElement => {\n    let portal = document.querySelector('body') as HTMLElement;\n\n    if (type === 'tooltip') {\n        return portal;\n    }\n\n    const contentContainer = document.getElementById(ContentContainerId);\n\n    if (contentContainer && triggerElement?.closest(`#${ContentContainerId}`)) {\n        portal = contentContainer;\n    }\n    return portal;\n};\n","import React, { FC } from 'react';\nimport AvatarPlaceholder from '../../../../../components/AvatarPlaceholder/AvatarPlaceholder';\nimport { UserProfile, UserInterface } from '../../../../../../constants/interfaces/User';\nimport styled from 'styled-components';\n\nconst StyledUserArea = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 56px;\n    flex-shrink: 0;\n`;\n\nconst UserProfilePictureSection = styled.div<{ open?: boolean }>`\n    height: 38px;\n    width: 38px;\n    padding: 6px;\n    overflow: hidden;\n    border-radius: 8px;\n    ${props => props.open && `background: var(--ps-graphite-2)`};\n`;\n\nconst MinimizedUserProfileArea: FC<{\n    profile: Partial<UserProfile | UserInterface>;\n    open?: boolean;\n    dataTest?: string;\n}> = ({ profile, open, dataTest }) => {\n    return (\n        <StyledUserArea>\n            <UserProfilePictureSection open={open}>\n                <AvatarPlaceholder profile={profile} size={'sm'} dataTest={dataTest} />\n            </UserProfilePictureSection>\n        </StyledUserArea>\n    );\n};\n\nexport default MinimizedUserProfileArea;\n","import { useContext } from 'react';\n\nimport { WithLabelsContextProps, WithLabelsContext } from './context';\n\nexport const useWithLabelsContext = (): WithLabelsContextProps => {\n    const context = useContext(WithLabelsContext);\n\n    if (!context) {\n        throw new Error(\n            'Cannot find WithLabels context provider. Please make a sure that you are located on the children of WithLabelsProvider'\n        );\n    }\n    return context;\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Star = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, viewBox }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox={!!viewBox ? viewBox : '-1 -1 10 10'}\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M4 6L1.649 7.236 2.098 4.618 0.196 2.764 2.824 2.382 4 0 5.176 2.382 7.804 2.764 5.902 4.618 6.351 7.236z\"\n                    transform=\"translate(-276 -296) translate(276 296)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Star;\n","import { useContext } from 'react';\n\nimport { WithPractisSetsContextProps, WithPractisSetsContext } from './context';\n\nexport const useWithPractisSetsContext = (): WithPractisSetsContextProps => {\n    const context = useContext(WithPractisSetsContext);\n\n    if (!context) {\n        throw new Error(\n            'Cannot find WithPractisSets context provider. Please make a sure that you are located on the children of WithPractisSetsProvider'\n        );\n    }\n    return context;\n};\n","export { default as Subheader } from './view';\nexport * from './types';\n","import Calendar from 'react-calendar';\nimport styled from 'styled-components';\n\nexport const StyledCalendar = styled(Calendar)`\n    width: 100%;\n    .react-calendar__navigation {\n        height: 32px;\n        margin-bottom: 22px;\n        justify-content: center;\n\n        .react-calendar__navigation__label {\n            font-size: 20px;\n            font-weight: bold;\n            background: ${props => props.theme.Colors.white};\n            border: none;\n            width: 200px;\n            flex-grow: 0 !important;\n            font-family: 'Manrope';\n            pointer-events: none;\n        }\n        .react-calendar__navigation__arrow {\n            background: ${props => props.theme.Colors.white};\n            border: none;\n            cursor: pointer;\n\n            &[disabled] {\n                pointer-events: none;\n                opacity: 0.4;\n            }\n        }\n    }\n\n    .react-calendar__month-view__weekdays {\n        margin-bottom: 12px;\n\n        .react-calendar__month-view__weekdays__weekday {\n            background: ${props => props.theme.Colors.white};\n            color: ${props => props.theme.Colors.blackThree};\n            border: none;\n            width: 25px;\n            height: 20px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 16px;\n            font-weight: 500;\n            font-family: 'Manrope';\n            abbr[title] {\n                text-decoration: none;\n            }\n        }\n    }\n\n    .react-calendar__month-view__days {\n        .react-calendar__month-view__days__day {\n            background: ${props => props.theme.Colors.white};\n            border: none;\n            width: 32px;\n            height: 32px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin-bottom: 4px;\n            font-size: 16px;\n            font-weight: 500;\n            font-family: 'Manrope';\n            padding: 0;\n            abbr {\n                text-decoration: none;\n                color: ${props => props.theme.Colors.cloudyBlue};\n                width: 100%;\n                height: 100%;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                cursor: pointer;\n            }\n            &:disabled {\n                background: ${props => props.theme.Colors.lighterGray};\n                cursor: default;\n                pointer-events: none;\n            }\n        }\n        .react-calendar__tile--active {\n            abbr {\n                border-radius: 2px;\n                background: ${props => props.theme.Colors.softBlue};\n                color: ${props => props.theme.Colors.white};\n            }\n        }\n        .react-calendar__tile--range {\n            background: ${props => props.theme.Colors.softerBlue};\n            abbr {\n                border-radius: 2px;\n                background: ${props => props.theme.Colors.softerBlue};\n                color: ${props => props.theme.Colors.white};\n            }\n        }\n        .react-calendar__tile--rangeStart {\n            background: ${props => props.theme.Colors.white};\n            abbr {\n                border-radius: 2px;\n                background: ${props => props.theme.Colors.darkSkyBlue};\n                color: ${props => props.theme.Colors.white};\n            }\n        }\n        .react-calendar__tile--rangeEnd {\n            background: ${props => props.theme.Colors.white};\n            abbr {\n                border-radius: 2px;\n                background: ${props => props.theme.Colors.darkSkyBlue};\n                color: ${props => props.theme.Colors.white};\n            }\n        }\n\n        .react-calendar__month-view__days__day--neighboringMonth {\n            visibility: hidden;\n            pointer-events: none;\n        }\n    }\n`;\n\nexport const IconHolder = styled.div<{ scaleX?: number }>`\n    width: 7px;\n    height: 14px;\n    color: ${props => props.theme.Colors.blackThree};\n    transform: scaleX(${props => props.scaleX || 1});\n`;","import { PropsWithChildren, ReactElement } from 'react';\nimport { OnChangeDateCallback } from 'react-calendar';\nimport dayjs from 'dayjs';\n\nimport ArrowRightIcon from '../../icons/ArrowRight';\nimport { IconHolder, StyledCalendar } from './styles';\n\nexport type CalendarValue<T extends boolean = false> = T extends true\n    ? { start: Date | null; end: Date | null }\n    : Date | null | undefined;\n\ntype Props<T extends boolean> = {\n    value: CalendarValue<T>;\n    handleChange(date: CalendarValue<T>): void;\n    selectRange: T;\n    restrictPast?: boolean;\n    restrictFuture?: boolean;\n};\n\nexport const CustomCalendar = <T extends boolean = false>({\n    value,\n    handleChange,\n    selectRange,\n    restrictPast = false,\n    restrictFuture = false,\n}: PropsWithChildren<Props<T>>): ReactElement => {\n    const getLibraryValue = (): Date | Date[] | null | undefined => {\n        if (selectRange) {\n            const _value = value as CalendarValue<true>;\n            // react-calendar cannot receive an empty array\n            const outArray = [_value.start, _value.end]\n                .filter(item => item !== null)\n                .map(item => dayjs(item as Date | string).toDate());\n\n            return outArray.length > 0 ? outArray : null;\n        }\n\n        const _value = value as CalendarValue<false>;\n\n        return _value ? dayjs(_value).toDate() : null;\n    };\n\n    const transformLibraryToComponentValue = (\n        date: Date | Date[]\n    ): CalendarValue<true | false> => {\n        if (Array.isArray(date) && selectRange) {\n            return {\n                start: date[0] || null,\n                end: date[1] || null,\n            };\n        }\n        return date as CalendarValue<false>;\n    };\n\n    const changeHandler: OnChangeDateCallback = date => {\n        // @ts-ignore\n        handleChange(transformLibraryToComponentValue(date));\n    };\n\n    return (\n        <StyledCalendar\n            calendarType={'US'}\n            formatShortWeekday={(locale, date) =>\n                ['S', 'M', 'T', 'W', 'T', 'F', 'S'][date.getDay()]\n            }\n            prev2Label={null}\n            next2Label={null}\n            nextLabel={\n                <IconHolder data-test='calendar-next-button'>\n                    <ArrowRightIcon />\n                </IconHolder>\n            }\n            prevLabel={\n                <IconHolder scaleX={-1} data-test='calendar-prev-button'>\n                    <ArrowRightIcon />\n                </IconHolder>\n            }\n            value={getLibraryValue() as any}\n            onChange={changeHandler}\n            selectRange={selectRange}\n            minDate={restrictPast ? new Date() : undefined}\n            maxDate={restrictFuture ? new Date() : undefined}\n            allowPartialRange={false}\n        />\n    );\n};\n\nexport default CustomCalendar;\n","import React, {\n    cloneElement,\n    PropsWithChildren,\n    ReactElement,\n    RefObject,\n    useEffect,\n    useRef,\n    useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\nimport dayjs from 'dayjs';\nimport { createPortal } from 'react-dom';\n\nimport { CalendarValue, CustomCalendar } from './Calendar';\nimport { Button } from '../Button';\nimport { usePopup } from '../../../helpers/hooks/usePopup';\nimport { getPortalElement } from '../Popup/helpers/getPortalElement';\nimport { DATE_FORMAT } from './constants';\n\n\n//region Types\ntype ApiProps<T extends boolean> = {\n    defaultApplyContent: ReactElement;\n    defaultClearContent: ReactElement;\n    setClearOnApply: (state: boolean) => void;\n    clear: () => void;\n    apply: (skipRestriction?: boolean) => void;\n    tempValue: CalendarValue<T>;\n    resetComponentValue: () => void;\n    value: CalendarValue<T>;\n    clearState: boolean;\n    disabled: boolean;\n    shown: boolean;\n    hide: () => void;\n    show: () => void;\n};\n\nexport type CalendarPopUpProps<T extends boolean = false> = {\n    value: CalendarValue<T>;\n    onChange: (value: CalendarValue<T>) => void;\n    selectRange: T;\n    disabled?: boolean;\n    className?: string;\n    restrictPast?: boolean;\n    restrictFuture?: boolean;\n    renderActions?: (props: ApiProps<T>) => ReactElement;\n    beforeApply?: (props: ApiProps<T>) => boolean;\n    children?:\n        | ReactElement\n        | {\n              (\n                  ref: RefObject<HTMLDivElement>,\n                  props: ApiProps<T>\n              ): ReactElement;\n          };\n    dataTest?: string;\n};\n//endregion\n\n//region Styles\nconst StyledCalendarContainer = styled.div`\n    display: flex;\n    align-items: center;\n    flex-direction: column;\n\n    width: 432px;\n    min-height: 392px;\n    padding: 32px;\n\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    background: ${props => props.theme.Colors.white};\n`;\n\nconst StyledCalendarSection = styled.div`\n    width: 100%;\n    padding: 0 28px 0 28px;\n    margin-bottom: 24px;\n`;\n\nconst StyledActionsSection = styled.div`\n    display: flex;\n    justify-content: flex-end;\n    width: 100%;\n\n    & > *:not(:last-child) {\n        margin-right: 16px;\n    }\n`;\n\nconst Control = styled.div<{ disabled?: boolean; shown: boolean, hasValue?: boolean }>`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    min-width: 216px;\n    height: 40px;\n    padding: 8px 16px;\n\n    color: ${props => props.hasValue ? props.theme.Colors.black : props.theme.Colors.steelGrey};\n    border-radius: 4px;\n    background-color: ${props => props.theme.Colors.whiteFive};\n\n    user-select: none;\n    cursor: pointer;\n\n    ${({ shown, theme, disabled }) => {\n        if (shown && !disabled) {\n            return css`\n                border: 1px solid ${theme.Colors.cloudyBlue};\n            `;\n        }\n    }}\n\n    ${({ disabled }) => {\n        if (disabled) {\n            return css`\n                cursor: default;\n                color: ${props => props.theme.Colors.cloudyBlue};\n            `;\n        }\n    }}\n`;\n\nconst DashSeparator = styled.div`\n    padding: 0 7.5px;\n`;\n\nconst StyledValue = styled.div`\n    font-size: 13px;\n    margin: 0;\n`;\n//endregion\n\nexport const CalendarPopup = <T extends boolean = false>({\n    value,\n    onChange,\n    disabled,\n    className,\n    selectRange,\n    restrictPast = false,\n    restrictFuture = false,\n    renderActions,\n    beforeApply,\n    children,\n    dataTest\n}: PropsWithChildren<CalendarPopUpProps<T>>) => {\n    const bodyDOM = document.querySelector('body');\n    const contentRef = useRef<HTMLDivElement>(null);\n    const triggerRef = useRef<HTMLDivElement>(null);\n\n    const [clearOnApply, setClearOnApply] = useState(false);\n    const [tempValue, setTempValue] = useState<CalendarValue<T>>(value);\n    const portalElement = getPortalElement(triggerRef.current, 'popup');\n\n    const { shown, hide, show, style, enabled, disable, enable } = usePopup(\n        triggerRef,\n        contentRef,\n        portalElement,\n        {\n            interactive: true,\n            trigger: 'click',\n            position: 'bottom-start',\n            offset: {\n                y: '8px',\n                x: '0px',\n            },\n        }\n    );\n\n    useEffect(() => {\n        setTempValue(value);\n    }, [value]);\n\n    useEffect(() => {\n        if (disabled) {\n            disable();\n        } else {\n            enable();\n        }\n    }, [disable, disabled, enable]);\n\n    const clearHandler = () => {\n        if (selectRange) {\n            // @ts-ignore\n            setTempValue({ start: null, end: null });\n        } else {\n            // @ts-ignore\n            setTempValue(null);\n        }\n    };\n\n    const saveHandler = (skipRestriction: boolean = false) => {\n        if (beforeApply) {\n            const res = beforeApply(getApiProps());\n            if (!res && !skipRestriction) {\n                return;\n            }\n        }\n\n        // @ts-ignore\n        onChange(clearOnApply ? null : tempValue);\n        setClearOnApply(false);\n        hide();\n    };\n\n    const isClearDisabled = (): boolean => {\n        if (\n            selectRange &&\n            (tempValue as CalendarValue<true>).start === null &&\n            (tempValue as CalendarValue<true>).end === null\n        ) {\n            return true;\n        }\n        if (\n            (!selectRange && (tempValue as CalendarValue<true>) === null) ||\n            (tempValue as CalendarValue<true>) === undefined\n        ) {\n            return true;\n        }\n\n        return false;\n    };\n\n    const applyContent: ReactElement = (\n        <Button\n            label={'Apply'}\n            height={'48px'}\n            width={'128px'}\n            action={() => saveHandler()}\n            dataTest='apply-button'\n        />\n    );\n    const clearContent: ReactElement = (\n        <Button\n            label={'Clear'}\n            height={'48px'}\n            width={'128px'}\n            action={clearHandler}\n            variant={'inverse'}\n            disabled={isClearDisabled()}\n            dataTest='clear-button'\n        />\n    );\n\n    const getApiProps = (): ApiProps<T> => ({\n        clear: clearHandler,\n        apply: saveHandler,\n        setClearOnApply: state => {\n            setClearOnApply(state);\n        },\n        tempValue,\n        resetComponentValue: () => setTempValue(value),\n        value,\n        clearState: clearOnApply,\n        defaultApplyContent: applyContent,\n        defaultClearContent: clearContent,\n        disabled: !!disabled,\n        hide,\n        show,\n        shown,\n    });\n\n    const renderActionsContent = (): ReactElement => {\n        if (renderActions) {\n            return renderActions(getApiProps());\n        }\n\n        return (\n            <StyledActionsSection data-test=\"calendar-actions-container\">\n                {clearContent}\n                {applyContent}\n            </StyledActionsSection>\n        );\n    };\n\n    const renderContent = () => {\n        return (\n            <StyledCalendarContainer\n                ref={contentRef}\n                style={style}\n                className={className}\n            >\n                <StyledCalendarSection>\n                    <CustomCalendar\n                        value={tempValue}\n                        handleChange={date => {\n                            setTempValue(date);\n                        }}\n                        selectRange={selectRange}\n                        restrictPast={restrictPast}\n                        restrictFuture={restrictFuture}\n                    />\n                </StyledCalendarSection>\n                {renderActionsContent()}\n            </StyledCalendarContainer>\n        );\n    };\n\n    const formatDate = (date: Date | string): string =>\n        dayjs(date).format('MM/DD/YY');\n\n    const renderCustomControl = () => {\n        if (typeof children === 'function') {\n            return children(triggerRef, getApiProps());\n        }\n        if (children) {\n            // @ts-ignore\n            return cloneElement(children, {\n                ref: triggerRef,\n            });\n        }\n    };\n\n    const renderControl = () => {\n        let startCaption = DATE_FORMAT;\n        let endCaption = DATE_FORMAT;\n\n        if (selectRange && value) {\n            const _value = value as CalendarValue<true>;\n            if (_value.start) {\n                startCaption = formatDate(_value.start);\n            }\n            if (_value.end) {\n                endCaption = formatDate(_value.end);\n            }\n\n            return (\n                <>\n                    <StyledValue data-test=\"start-date-value\">\n                        {startCaption}\n                    </StyledValue>\n                    <DashSeparator data-test='date-separator'>—</DashSeparator>\n                    <StyledValue data-test=\"end-date-value\">\n                        {endCaption}\n                    </StyledValue>\n                </>\n            );\n        }\n\n        const _value = value as CalendarValue<false>;\n        if (_value) {\n            startCaption = endCaption = formatDate(_value);\n        }\n\n        return (\n            <>\n                <StyledValue data-test=\"start-date-value\">\n                    {startCaption}\n                </StyledValue>\n            </>\n        );\n    };\n\n    if (!bodyDOM) {\n        return null;\n    }\n\n    const hasNoValue = (!!value && !(value as any)?.start) || !value;\n\n    return (\n        <>\n            {children ? (\n                renderCustomControl()\n            ) : (\n                <Control\n                    disabled={disabled}\n                    ref={triggerRef}\n                    shown={shown}\n                    hasValue={!hasNoValue}\n                    data-test={dataTest ?? \"calendar-selector\"}\n                >\n                    {renderControl()}\n                </Control>\n            )}\n            {shown && enabled && createPortal(renderContent(), bodyDOM)}\n        </>\n    );\n};\n","import { useCallback } from 'react';\nimport Axios from 'axios';\nimport { useCreateMediaApi, useVerifyMediaApi } from '../../api';\nimport { MediaInfo } from '../../constants/interfaces/MediaInfo';\nimport { MAX_FILE_SIZE } from './constants';\n\n/**\n * @description creates media record, uploads file to AWS\n * performs file verification and returns media id\n * @function useUploadMediaService\n * @returns { CallableFunction }\n */\nexport const useUploadMediaService = () => {\n    const createMediaApi = useCreateMediaApi();\n    const verifyMediaApi = useVerifyMediaApi();\n\n    /**\n     * @function callback\n     * @param { File } file\n     * @returns { Promise<number> }\n     */\n    return useCallback(\n        (file: File) => {\n            if (file.size > MAX_FILE_SIZE)\n                return Promise.reject({ message: 'File size can not exceed 10Mb' });\n\n            let mediaId: number;\n            return createMediaApi(file.type)\n                .then((media: MediaInfo) => {\n                    mediaId = media.id;\n                    return Axios.put(media.url, file, { headers: { 'Content-Type': file.type } });\n                })\n                .then(() => {\n                    return verifyMediaApi(mediaId);\n                })\n                .then((verificationResult: MediaInfo) => {\n                    if (verificationResult.status === 'ACTIVE') {\n                        return Promise.resolve(mediaId);\n                    } else {\n                        return Promise.reject({ message: 'Verification of uploaded media failed' });\n                    }\n                });\n        },\n        [createMediaApi, verifyMediaApi]\n    );\n};","export const MAX_FILE_SIZE = 10485760;","import {\n    useState,\n    RefObject,\n    useEffect,\n    useLayoutEffect,\n    useRef,\n    CSSProperties,\n    useMemo,\n} from 'react';\n\nimport useWindowDimensions from './useWindowDimensions';\nimport { useOutsideClick } from './useOutsideClick';\n\n//region Types\nexport type PopupPosition =\n    | 'center-right--bottom'\n    | 'center-left--bottom'\n    | 'center-right--top'\n    | 'center-left--top'\n    | 'bottom-start'\n    | 'bottom-end'\n    | 'right-start'\n    | 'left-start'\n    | 'top-start'\n    | 'top-end';\n\nexport type PopupTrigger = 'hover' | 'click';\n\nexport type PopupOffset = { x?: string; y?: string };\n\nexport type PopupConfig = {\n    position?: PopupPosition;\n    offset?: PopupOffset;\n    trigger?: PopupTrigger;\n    interactive?: boolean;\n    autoBind?: boolean;\n    hideOnOutsideClick?: boolean;\n};\n\nexport type PopupProps = {\n    enabled: boolean;\n    enable: () => void;\n    disable: () => void;\n    style: CSSProperties;\n    show: () => void;\n    hide: () => void;\n    toggleShown: () => void;\n    shown: boolean;\n    position: PopupPosition;\n};\n//endregion\n\n//region Config\nconst positionsConfig: Record<\n    PopupPosition,\n    {\n        overflowHorizontal?: PopupPosition;\n        overflowVertical?: PopupPosition;\n        defaultOffset: PopupOffset;\n    }\n> = {\n    'bottom-end': {\n        overflowVertical: 'top-end',\n        overflowHorizontal: 'bottom-start',\n        defaultOffset: {\n            x: '0px',\n            y: '5px',\n        },\n    },\n    'bottom-start': {\n        overflowVertical: 'top-start',\n        overflowHorizontal: 'bottom-end',\n        defaultOffset: {\n            x: '0px',\n            y: '5px',\n        },\n    },\n    'top-start': {\n        overflowVertical: 'bottom-start',\n        overflowHorizontal: 'top-end',\n        defaultOffset: {\n            x: '0px',\n            y: '-5px',\n        },\n    },\n    'top-end': {\n        overflowVertical: 'bottom-end',\n        overflowHorizontal: 'top-start',\n        defaultOffset: {\n            x: '0px',\n            y: '-5px',\n        },\n    },\n    'left-start': {\n        overflowHorizontal: 'right-start',\n        defaultOffset: {\n            x: '-5px',\n            y: '0px',\n        },\n    },\n    'right-start': {\n        overflowHorizontal: 'left-start',\n        defaultOffset: {\n            x: '5px',\n            y: '0px',\n        },\n    },\n    'center-right--bottom': {\n        overflowHorizontal: 'center-left--bottom',\n        overflowVertical: 'center-right--top',\n        defaultOffset: {\n            x: '0px',\n            y: '0px',\n        },\n    },\n    'center-left--bottom': {\n        overflowHorizontal: 'center-right--bottom',\n        overflowVertical: 'center-left--top',\n        defaultOffset: {\n            x: '0px',\n            y: '0px',\n        },\n    },\n    'center-right--top': {\n        overflowHorizontal: 'center-left--top',\n        overflowVertical: 'center-right--bottom',\n        defaultOffset: {\n            x: '0px',\n            y: '0px',\n        },\n    },\n    'center-left--top': {\n        overflowHorizontal: 'center-right--bottom',\n        overflowVertical: 'center-left--bottom',\n        defaultOffset: {\n            x: '0px',\n            y: '0px',\n        },\n    },\n};\n//endregion\n\n/**\n * Hook for absolute positioning blocks\n * @param triggerRef Element which will be trigger events\n * @param contentRef Element with exiting content\n * @param containerElement\n * @param config \"autoBind\" add event listeners for triggerRef. \"interactive\" - content can be react to user actions\n */\nexport const usePopup = (\n    triggerRef: RefObject<HTMLElement>,\n    contentRef: RefObject<HTMLElement>,\n    containerElement: HTMLElement,\n    config?: PopupConfig\n): PopupProps => {\n    const targetConfig: Required<PopupConfig> = {\n        offset: { x: '0px', y: '0px' },\n        position: 'bottom-start',\n        trigger: 'hover',\n        interactive: false,\n        autoBind: true,\n        hideOnOutsideClick: true,\n        ...config,\n    };\n\n    const window = useWindowDimensions();\n    const containerElementPositionChange = containerElement.getBoundingClientRect();\n\n    const bounds = useMemo(() => {\n        const containerRects = containerElement.getBoundingClientRect();\n        const triggerRects = triggerRef.current?.getBoundingClientRect();\n        return {\n            top: (triggerRects?.top || 0) - containerRects.top,\n            left: (triggerRects ? triggerRects.left : 0) - containerRects.left,\n            right:\n                (triggerRects ? triggerRects.right : 0) - containerRects.right,\n            bottom: (triggerRects?.bottom || 0) - containerRects.bottom,\n            height: triggerRects?.height || 0,\n            width: triggerRects?.width || 0,\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        containerElement,\n        containerElementPositionChange,\n        triggerRef,\n        triggerRef.current,\n        window,\n    ]);\n\n    // Set Handlers\n    useEffect(() => {\n       const currentTriggerRef = triggerRef?.current;\n\n        if (currentTriggerRef && targetConfig.autoBind) {\n            switch (targetConfig.trigger) {\n                case 'hover':\n                    currentTriggerRef.addEventListener('mouseenter', show);\n                    currentTriggerRef.addEventListener('mouseleave', hide);\n                    break;\n                case 'click':\n                    currentTriggerRef.addEventListener('click', toggleShown);\n                    break;\n            }\n        }\n\n        return () => {\n            if (currentTriggerRef && targetConfig.autoBind) {\n                switch (targetConfig.trigger) {\n                    case 'hover':\n                        currentTriggerRef.removeEventListener(\n                            'mouseenter',\n                            show\n                        );\n                        currentTriggerRef.removeEventListener(\n                            'mouseleave',\n                            hide\n                        );\n                        break;\n                    case 'click':\n                        currentTriggerRef.removeEventListener(\n                            'click',\n                            toggleShown\n                        );\n                        break;\n                }\n            }\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    // Positioning\n    const [position, setPosition] = useState<PopupPosition>(\n        targetConfig.position\n    );\n\n    const [shown, _setShown] = useState(false);\n    // addEventListener doesn't updating on re-rendering\n    const shownRef = useRef(shown);\n    const setShown = (value: boolean) => {\n        shownRef.current = value;\n        _setShown(value);\n    };\n    const show = () => {\n        setShown(true);\n    };\n    const hide = () => {\n        setShown(false);\n    };\n    const toggleShown = () => {\n        if (shownRef.current) {\n            hide();\n        } else {\n            show();\n        }\n    };\n\n    useOutsideClick(\n        [contentRef, triggerRef],\n        hide,\n        targetConfig.hideOnOutsideClick\n    );\n\n    // Detecting when content is out of viewport\n    useLayoutEffect(() => {\n        if (shown && contentRef.current) {\n            const contentRects = contentRef.current.getBoundingClientRect();\n            const isOutOfHorizontal =\n                contentRects.right > window.width || contentRects.left < 0;\n\n            if (\n                isOutOfHorizontal &&\n                positionsConfig[position].overflowHorizontal\n            ) {\n                setPosition(\n                    positionsConfig[position]\n                        .overflowHorizontal as PopupPosition\n                );\n            }\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [shown]);\n\n    const [enabled, setEnabled] = useState(true);\n    const enable = () => {\n        setEnabled(true);\n    };\n    const disable = () => {\n        hide();\n        setEnabled(false);\n    };\n\n    if (triggerRef.current === null) {\n        return {\n            style: {\n                left: '0px',\n                top: '0px',\n            },\n            shown,\n            hide,\n            show,\n            enabled,\n            enable,\n            disable,\n            toggleShown,\n            position,\n        };\n    }\n\n    const getOffset = (): PopupOffset => {\n        if (config && config.offset) {\n            return {\n                x: config.offset.x || positionsConfig[position].defaultOffset.x,\n                y: config.offset.y || positionsConfig[position].defaultOffset.y,\n            };\n        }\n\n        return positionsConfig[position].defaultOffset;\n    };\n\n    const getPositionStyles = (): CSSProperties => {\n        const offset = getOffset();\n        switch (position) {\n            case 'bottom-start':\n                return {\n                    top: `calc(${(bounds.top + bounds.height).toString()}px + ${\n                        offset.y\n                    })`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                };\n            case 'bottom-end':\n                return {\n                    top: `calc(${(bounds.top + bounds.height).toString()}px + ${\n                        offset.y\n                    })`,\n                    left: `calc(${bounds.left.toString()}px + ${\n                        bounds.width\n                    }px + ${offset.x})`,\n                    transform: 'translateX(-100%)',\n                };\n            case 'right-start':\n                return {\n                    top: `calc(${bounds.top.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${\n                        bounds.width\n                    }px + ${offset.x})`,\n                };\n            case 'left-start':\n                return {\n                    top: `calc(${bounds.top.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                    transform: 'translateX(-100%)',\n                };\n            case 'top-start':\n                return {\n                    top: `calc(${bounds.top.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                    transform: 'translateY(-100%)',\n                };\n            case 'top-end':\n                return {\n                    top: `calc(${bounds.top.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${\n                        bounds.width\n                    }px + ${offset.x})`,\n                    transform: 'translateY(-100%) translateX(-100%)',\n                };\n            case 'center-right--bottom':\n                return {\n                    top: `calc(${bounds.top.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                    transform: `translateY(${bounds.height / 2}px) translateX(${\n                        bounds.width / 2\n                    }px)`,\n                };\n            case 'center-left--bottom':\n                return {\n                    top: `calc(${bounds.top.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                    transform: `translateY(${\n                        bounds.height / 2\n                    }px) translateX(calc(-100% + ${bounds.width / 2}px))`,\n                };\n            case 'center-right--top':\n                return {\n                    top: `calc(${bounds.bottom.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                    transform: `translateY(calc(-100% - ${\n                        bounds.height / 2\n                    }px + ${offset.y})) translateX(${bounds.width / 2}px)`,\n                };\n            case 'center-left--top':\n                return {\n                    top: `calc(${bounds.bottom.toString()}px + ${offset.y})`,\n                    left: `calc(${bounds.left.toString()}px + ${offset.x})`,\n                    transform: `translateY(calc(-100% - ${\n                        bounds.height / 2\n                    }px + ${offset.y})) translateX(calc(-100% + ${\n                        bounds.width / 2\n                    }px))`,\n                };\n        }\n    };\n\n    const getAdditionalStyles = (): CSSProperties => {\n        const styles: CSSProperties = {\n            position: 'absolute',\n            zIndex: 1500,\n        };\n\n        if (!targetConfig.interactive) {\n            styles.pointerEvents = 'none';\n        }\n\n        return styles;\n    };\n\n    return {\n        style: { ...getPositionStyles(), ...getAdditionalStyles() },\n        shown,\n        hide,\n        show,\n        enabled,\n        enable,\n        disable,\n        toggleShown,\n        position,\n    };\n};\n","import { RefObject, useCallback, useEffect, useRef } from 'react';\n\nexport const useOutsideClick = <T extends HTMLElement = HTMLElement>(\n    ref: RefObject<T> | RefObject<T>[],\n    handler: (e: MouseEvent) => void,\n    enabled = true\n) => {\n    const savedHandler = useRef(handler);\n\n    const clickHandler = useCallback(\n        (e: MouseEvent) => {\n            if (!enabled) {\n                return;\n            }\n\n            const refs = Array.isArray(ref) ? ref : [ref];\n            const contains = !!refs.find(\n                item =>\n                    item.current !== null &&\n                    item.current.contains(e.target as HTMLElement)\n            );\n\n            if (!contains) {\n                savedHandler.current(e);\n            }\n        },\n        [enabled, ref]\n    );\n\n    useEffect(() => {\n        savedHandler.current = handler;\n    });\n\n    useEffect(() => {\n        const body = document.querySelector('body');\n\n        if (body) {\n            body.addEventListener('click', clickHandler);\n        }\n\n        return () => {\n            if (body) {\n                body.removeEventListener('click', clickHandler);\n            }\n        };\n    }, [ref, handler, clickHandler]);\n};\n","export enum TableAssignOptionTypes {\n    ASSIGN_LABELS = 'ASSIGN_LABELS',\n    ASSIGN_PRACTIS_SETS = 'ASSIGN_PRACTIS_SETS',\n    ASSIGN_PRACTIS_SETS_AND_DUE_DATE= 'ASSIGN_PRACTIS_SETS_AND_DUE_DATE',\n    NUDGE = 'Nudge',\n    EXPORT = 'EXPORT',\n    ARCHIVE = 'ARCHIVE',\n    RESTORE = 'RESTORE',\n    REMIND = 'REMIND',\n    RESEND_INVITES = 'RESEND_INVITES',\n    REVOKE = 'REVEOKE',\n    REMOVE_PRACTIS_SET = 'REMOVE_PRACTIS_SET',\n    DUPLICATE = 'DUPLICATE',\n    REMOVE_ITEMS = 'REMOVE_ITEMS',\n    DUE_DATES = 'DUE_DATES'\n}\n","import styled from 'styled-components';\nimport { SIZES } from '../constants';\n\nexport const ScrollContainer = styled.div<{ addOverflow?: boolean }>`\n    ${props => props.addOverflow && `overflow-y: hidden;`}\n    ${props => props.addOverflow && `overflow-x: auto;`}\n    transform: rotateZ(180deg);\n    direction: rtl;\n    display: flex;\n\n    ::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.whiteTwo};\n        border-radius: 8px;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n        background: ${props => props.theme.Colors.whiteThree};\n    }\n`;\n\nexport const TableInner = styled.table`\n    border-collapse: separate;\n    border-spacing: 0;\n    width: 100%;\n    display: inline-table;\n    transform: rotateZ(180deg);\n    direction: ltr;\n    min-width: ${SIZES.MIN_WIDTH}px;\n\n    ::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.whiteTwo};\n        border-radius: 8px;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n        background: ${props => props.theme.Colors.whiteThree};\n    }\n`;\n\nexport const TableCont = styled.div`\n    display: block;\n    border-radius: 8px;\n    background: ${props => props.theme.Colors.white};\n    position: relative;\n`;\n\nexport const InfiniteTableBodyContainer = styled.div`\n    overflow: auto;\n    min-height: 100%;\n`;\n\nexport const StyledTable = styled.table`\n    width: 100%;\n    border-collapse: collapse;\n    border-spacing: 0;\n`;\n","import styled from 'styled-components';\nimport { TableCell } from '../table-cell';\n\nexport const TableCheckboxHeaderCell = styled(TableCell)`\n    padding: 0;\n    border-bottom: 1px solid ${props => props.theme.Colors.paleGrey};\n`;\n\nexport const StyledCellWrapper = styled.div<{\n    width?: number;\n}>`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: ${({ width }) => (width ? `${width}%` : '70%')};\n    margin: 0 auto;\n\n    th {\n        display: flex;\n        justify-content: center;\n    }\n`;\n","import { FC } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport { TableCheckbox } from '../table-checkbox';\nimport { TableRow } from '../table-row';\nimport { StyledCellWrapper, TableCheckboxHeaderCell } from './style';\nimport { TableHeaderCell } from './table-header-cell';\nimport { TableHeaderProps } from './type';\n\nconst TableHeader: FC<TableHeaderProps> = props => {\n    const { headerConfiguration } = props;\n\n    const { masterCheckBoxConfig, columns } = headerConfiguration!;\n\n    return (\n        <thead>\n            <TableRow>\n                {masterCheckBoxConfig && (\n                    <TableCheckboxHeaderCell width={0.1} dataTest={masterCheckBoxConfig.dataTest && `${masterCheckBoxConfig.dataTest}-column`}>\n                        <TableCheckbox\n                            checked={masterCheckBoxConfig.checked}\n                            disabled={masterCheckBoxConfig.disabled}\n                            partial={masterCheckBoxConfig.partial}\n                            handleCheck={masterCheckBoxConfig.handleCheck}\n                            size={masterCheckBoxConfig.size}\n                            dataTest={masterCheckBoxConfig.dataTest && `${masterCheckBoxConfig.dataTest}-input`}\n                        />\n                    </TableCheckboxHeaderCell>\n                )}\n                {!isEmpty(columns) &&\n                    columns.map(column => {\n                        const { title, children, subColumns = undefined } = column;\n\n                        return isEmpty(subColumns) ? (\n                            <TableHeaderCell key={title} {...column}>\n                                {children ?? title ?? ''}\n                            </TableHeaderCell>\n                        ) : (\n                            <TableHeaderCell key={title} {...column} isMultiple>\n                                <StyledCellWrapper\n                                    width={column?.titleWidth}\n                                    className={\n                                        column?.multiHeaderContainerClassName\n                                    }\n                                >\n                                    {subColumns?.map(subColumn => {\n                                        const { title, ...rest } = subColumn;\n                                        return (\n                                            <TableHeaderCell\n                                                {...rest}\n                                                key={title}\n                                            >\n                                                {title ?? ''}\n                                            </TableHeaderCell>\n                                        );\n                                    })}\n                                </StyledCellWrapper>\n                            </TableHeaderCell>\n                        );\n                    })}\n            </TableRow>\n        </thead>\n    );\n};\n\nexport default TableHeader;\n","import styled from 'styled-components';\n\nimport { TableCell } from '../table-cell';\n\nexport const TableCheckboxCell = styled(TableCell)`\n    padding: 0;\n`;\n\nexport const DefaultTeamIconHolderWrapper = styled.div`\n    width: 16px;\n    display: flex;\n    justify-content: center;\n    border-radius: 2px;\n    background-color: ${props => props.theme.Colors.macaroniAndCheese};\n`;\n\nexport const DefaultTeamIconHolder = styled.div`\n    width: 10px;\n    height: 16px;\n    display: block;\n    color: ${props => props.theme.Colors.white};\n`;\n","import styled from 'styled-components';\n\nimport AvatarPlaceholder from '../../../../../AvatarPlaceholder/AvatarPlaceholder';\n\nexport const StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    min-width: 200px;\n`;\n\nexport const Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 8px;\n    border-radius: 4px;\n    flex-shrink: 0;\n`;\n\nexport const AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n`;\n\nexport const FlexWrapper = styled.div<{ hasMargin: boolean }>`\n    display: flex;\n    align-items: center;\n    margin-left: ${props => (props.hasMargin ? -12 : 0)}px;\n`;\n","import { FC } from 'react';\n\nimport TableTitleOverflowText from '../../../TableTitleOverflowText/TableTitleOverflowText';\nimport { Avatar, AvatarTile, StyledFirstTableContent } from './styles';\nimport { AvatarFieldProps } from './types';\n\nconst AvatarField: FC<AvatarFieldProps> = props => {\n    const { row, renderTitle, getAvatarProps, className, dataTest } = props;\n\n    return (\n        <StyledFirstTableContent className={className}>\n            <AvatarTile>\n                <Avatar dataTest={dataTest && `${dataTest}-avatar`} {...getAvatarProps?.(row)} />\n                <TableTitleOverflowText dataTest={dataTest && `${dataTest}-title`}>\n                    {renderTitle?.(row)}\n                </TableTitleOverflowText>\n            </AvatarTile>\n        </StyledFirstTableContent>\n    );\n};\n\nexport default AvatarField;\n\n","import { FC } from 'react';\nimport { UserProfile } from '../../../../../../../constants/interfaces/User';\n\nimport MinimizedUserProfileArea from '../../../../../../layout/Sidebar/components/ProfileSection/components/MinimizedUserProfileArea';\nimport { FlexWrapper } from './styles';\nimport { AvatarFieldProps } from './types';\n\nconst MinimizedAvatarField: FC<AvatarFieldProps> = props => {\n    const { row, renderTitle, getAvatarProps, hasMargin, className, dataTest } = props;\n\n    return (\n        <FlexWrapper\n            hasMargin={hasMargin?.(row) ?? false}\n            className={className}\n        >\n            <MinimizedUserProfileArea\n                profile={getAvatarProps?.(row)?.profile ?? {} as Partial<UserProfile>}\n                dataTest={getAvatarProps?.(row)?.dataTest ?? (dataTest ? `${dataTest}-avatar` : undefined)}\n            />\n            <span data-test={dataTest && `${dataTest}-title`}>{renderTitle?.(row)}</span>\n        </FlexWrapper>\n    );\n};\n\nexport default MinimizedAvatarField;\n\n","import { FC } from 'react';\n\nimport AvatarField from './avatar-field.view';\nimport MinimizedAvatarField from './minimized-avatar-field.view';\nimport { AvatarFieldProps } from './types';\n\nconst AvatarFieldController: FC<AvatarFieldProps> = props => {\n    const { isMinimized, ...rest } = props;\n\n    return isMinimized ? (\n        <MinimizedAvatarField {...rest} />\n    ) : (\n        <AvatarField {...rest} />\n    );\n};\n\nexport default AvatarFieldController;\n\n","import styled from 'styled-components';\n\nexport const STATUS_COLORS: any = {\n    ACTIVE: {\n        text: 'var(--ps-green-1)',\n        background: 'var(--ps-green-2)',\n    },\n    DELETED: {\n        text: 'var(--ps-black-main)',\n        background: 'var(--ps-grey-4)',\n    },\n    PENDING: {\n        text: 'var(--ps-orange-1)',\n        background: 'var(--ps-orange-2)',\n    },\n    DRAFT: {\n        text: 'var(--ps-blue-1)',\n        background: 'var(--ps-white-6)',\n    },\n    ARCHIVED: {\n        text: '#3a3a3a',\n        background: '#ebebeb',\n    },\n};\n\nexport const Td = styled.td<{\n    width?: number;\n    clickable?: boolean;\n    flex?: { display: string; justifyContent: string; alignItems: string };\n}>`\n    height: 55px;\n    font-size: 13px;\n    font-weight: 400;\n    padding: 4px 8px 4px 0px;\n    ${props => (props.width ? `width: ${props.width}%` : '')};\n    &:hover {\n        opacity: ${props => (props.clickable ? 0.7 : 1)};\n    }\n    ${props =>\n        props.clickable &&\n        `\n        cursor: pointer;\n    `}\n    &:nth-child(1) {\n        padding-left: 16px;\n    }\n`;\n\nexport const Text = styled.div<{\n    status?: any;\n}>`\n    display: inline-block;\n    padding: 4px 12px;\n    background: ${props =>\n        props.status\n            ? STATUS_COLORS[props.status.toUpperCase()].background\n            : STATUS_COLORS['ARCHIVED'].background};\n    color: ${props =>\n        props.status\n            ? STATUS_COLORS[props.status.toUpperCase()].text\n            : STATUS_COLORS['ARCHIVED'].text};\n    font-size: 13px;\n    border-radius: 100px;\n`;","import { FC, memo } from 'react';\n\nimport { Td, Text } from './styles';\nimport { TableStatusCellProps } from './types';\n\nconst TableStatusCell: FC<TableStatusCellProps> = ({\n    width,\n    colSpan,\n    className,\n    children,\n    status,\n    onClick,\n    dataTest\n}) => (\n    <Td\n        width={width}\n        clickable={!!onClick}\n        colSpan={colSpan}\n        className={className}\n        onClick={onClick}\n    >\n        <Text status={status} data-test={dataTest}> {children}</Text>\n    </Td>\n);\n\nexport default memo(TableStatusCell);\n\nexport const TableCellRoot = Td;\n\n","import { FC, memo } from 'react';\n\nimport { TableStatusCell } from './table-status-cell';\nimport { BadgeFieldProps } from './types';\n\nconst BadgeField: FC<BadgeFieldProps> = props => {\n    const { row, renderTitle, getBadgeFieldProps } = props;\n    return getBadgeFieldProps ? (\n        <TableStatusCell {...getBadgeFieldProps(row)}>\n            {renderTitle?.(row)}\n        </TableStatusCell>\n    ) : (\n        <></>\n    );\n};\n\nexport default memo(BadgeField);\n\n","export const TEXT_FIELD = 'TEXT_FIELD';\nexport const AVATAR_FIELD = 'AVATAR_FIELD';\nexport const BADGE_FIELD = 'BADGE_FIELD';\nexport const CUSTOM_FIELD = 'CUSTOM_FIELD';\nexport const LABEL_TAGS = 'LABEL_TAGS';\nexport const LIST_ACTIONS = 'LIST_ACTIONS';\n\nexport const fieldTypes = {\n    TEXT_FIELD,\n    AVATAR_FIELD,\n    BADGE_FIELD,\n    CUSTOM_FIELD,\n    LABEL_TAGS,\n    LIST_ACTIONS,\n};\n","import { FC } from 'react';\n\nimport { TableLabelTags } from '../../../TableLabelTags';\nimport { LabelTagsProps } from './types';\n\nconst LabelTags: FC<LabelTagsProps> = props => {\n    const { row, getLabelTagsProps, className } = props;\n\n    return (\n        <TableLabelTags {...getLabelTagsProps?.(row)} className={className} />\n    );\n};\n\nexport default LabelTags;\n","import { FC } from 'react';\n\nimport { ListActionsFieldProps } from './types';\n\nconst ListActionsField: FC<ListActionsFieldProps> = props => {\n    const { row, getListActionsComponent } = props;\n\n    return <>{getListActionsComponent?.(row)}</> ?? <></>;\n};\n\nexport default ListActionsField;\n\n","import styled from 'styled-components';\n\nexport const StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    min-width: 120px;\n`;\n","import { FC } from 'react';\n\nimport TableTitleOverflowText from '../../../TableTitleOverflowText/TableTitleOverflowText';\nimport { StyledFirstTableContent } from './styles';\nimport { OverflowTextFieldProps } from './types';\n\nconst OverFlowTextField: FC<OverflowTextFieldProps> = props => {\n    const { row, renderTitle, getTextFieldProps, className, dataTest } = props;\n\n    return (\n        <StyledFirstTableContent className={className}>\n            <TableTitleOverflowText {...getTextFieldProps?.(row)} dataTest={dataTest}>\n                {renderTitle?.(row)}\n            </TableTitleOverflowText>\n        </StyledFirstTableContent>\n    );\n};\n\nexport default OverFlowTextField;\n\n","import { FC } from 'react';\n\nimport { TextFieldProps } from './types';\n\nconst TextField: FC<TextFieldProps> = props => {\n    const { row, renderTitle, dataTest } = props;\n\n    return <span data-test={dataTest}>{renderTitle?.(row)}</span>;\n};\n\nexport default TextField;\n\n","import { FC } from 'react';\n\nimport OverFlowTextField from './overflow-text-field.view';\nimport TextField from './text-field.view';\nimport { TextFieldProps } from './types';\n\nconst TextFieldController: FC<TextFieldProps> = props => {\n    const { isOverFlowText, ...rest } = props;\n\n    return isOverFlowText ? (\n        <OverFlowTextField {...rest} />\n    ) : (\n        <TextField {...rest} />\n    );\n};\n\nexport default TextFieldController;\n\n","import { FC } from 'react';\n\nimport { AvatarField } from './avatar-field';\nimport { BadgeField } from './badge-field';\nimport { fieldTypes } from './constants';\nimport { LabelTags } from './label-tags';\nimport { ListActionsField } from './list-actions-field';\nimport { TextField } from './text-field';\nimport { DynamicTableFieldProps } from './types';\n\nconst DynamicTableField: FC<DynamicTableFieldProps> = props => {\n    const {\n        fieldType,\n        fieldProps,\n        currentRowData,\n        getCustomFieldComponent,\n    } = props;\n\n    let component = <div />;\n\n    switch (fieldType) {\n        case fieldTypes.TEXT_FIELD:\n            component = <TextField {...fieldProps} row={currentRowData} />;\n            break;\n\n        case fieldTypes.AVATAR_FIELD:\n            component = <AvatarField {...fieldProps} row={currentRowData} />;\n            break;\n        case fieldTypes.BADGE_FIELD:\n            component = <BadgeField {...fieldProps} row={currentRowData} />;\n            break;\n        case fieldTypes.CUSTOM_FIELD:\n            component = getCustomFieldComponent?.(currentRowData) ?? <div />;\n            break;\n        case fieldTypes.LABEL_TAGS:\n            component = <LabelTags {...fieldProps} row={currentRowData} />;\n            break;\n\n        case fieldTypes.LIST_ACTIONS:\n            component = (\n                <ListActionsField {...fieldProps} row={currentRowData} />\n            );\n            break;\n\n        default:\n            break;\n    }\n\n    return component;\n};\n\nexport default DynamicTableField;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\nimport AssignedLabelList from './AssignedLabelList';\n\nconst Tr = styled.tr`\n    background: unset !important;\n`;\n\nexport interface TableAssignedLabelTagsProps {\n    selectedLabels?: number[];\n    onDeleteLabel?(id: number): void;\n    hideDeleteButton?: boolean;\n    padding?: string;\n    deletePermissions?: NEW_PERMISSIONS[];\n    colSpan?: number;\n}\n\nconst TableAssignedLabelTags: FC<TableAssignedLabelTagsProps> = ({\n    selectedLabels,\n    colSpan = 100,\n    onDeleteLabel,\n    hideDeleteButton,\n    deletePermissions,\n}) => {\n    return (\n        <Tr>\n            <td colSpan={colSpan}>\n                <AssignedLabelList\n                    selectedLabels={selectedLabels}\n                    hideDeleteButton={hideDeleteButton}\n                    deletePermissions={deletePermissions}\n                    onDeleteLabel={onDeleteLabel}\n                />\n            </td>\n        </Tr>\n    );\n};\n\nexport default TableAssignedLabelTags;\n","import { FC, Fragment } from 'react';\n\nimport { Tooltip } from '../../../Tooltip';\n\nimport { TableBodyWrapperProps } from './types';\nimport { TableBody } from './table-body';\nimport { TableRow } from '../table-row';\nimport { TableCheckbox } from '../table-checkbox';\nimport {\n    DefaultTeamIconHolder,\n    DefaultTeamIconHolderWrapper,\n    TableCheckboxCell,\n} from './styles';\nimport Star from '../../../../icons/Star';\nimport { TableCell } from '../table-cell';\nimport { DynamicTableField } from './dynamic-field';\nimport TableAssignedLabelTags from '../TableLabelTags/TableAssignedLabelTags';\n\nconst TableBodyWrapper: FC<TableBodyWrapperProps> = props => {\n    const { data, rowConfig } = props;\n\n    const {\n        cells,\n        onRowClick,\n        isRowChecked,\n        onRowCheckHandler,\n        isLabelTagsOpen,\n        getLabelTagsProps,\n        getClassName,\n        getDataTest,\n        dataTest,\n        size = undefined,\n        shouldShowAllMembers = false,\n    } = rowConfig;\n\n    return (\n        <TableBody>\n            {data?.map((row: any) => {\n                const dataTestValue = getDataTest?.(row) ?? dataTest;\n                return (\n                    <Fragment key={row?.id}>\n                        <TableRow\n                            key={row?.id}\n                            onClick={\n                                onRowClick ? () => onRowClick?.(row) : undefined\n                            }\n                            className={getClassName?.(row)}\n                            dataTest={dataTestValue}\n                        >\n                            {onRowCheckHandler && isRowChecked && (\n                                <TableCheckboxCell>\n                                    {shouldShowAllMembers &&\n                                    shouldShowAllMembers?.(row) ? (\n                                        <Tooltip\n                                            label=\"This team cannot be modified\"\n                                            preset=\"checkbox-icon\"\n                                        >\n                                            <DefaultTeamIconHolderWrapper>\n                                                <DefaultTeamIconHolder data-test={dataTestValue && `${dataTestValue}-checkbox-star`}>\n                                                    <Star />\n                                                </DefaultTeamIconHolder>\n                                            </DefaultTeamIconHolderWrapper>\n                                        </Tooltip>\n                                    ) : (\n                                        <TableCheckbox\n                                            checked={\n                                                isRowChecked?.(row) ?? false\n                                            }\n                                            handleCheck={e =>\n                                                onRowCheckHandler?.(e, row)\n                                            }\n                                            size={size}\n                                            dataTest={dataTestValue && `${dataTestValue}-checkbox`}\n                                        />\n                                    )}\n                                </TableCheckboxCell>\n                            )}\n                            {cells?.map(cell => (\n                                <TableCell\n                                    className={cell?.cellClassName}\n                                    shouldShowEmptyCell={cell?.shouldShowEmptyCell?.(\n                                        row\n                                    )}\n                                    width={cell?.width}\n                                >\n                                    <DynamicTableField\n                                        {...cell}\n                                        currentRowData={row}\n                                    />\n                                </TableCell>\n                            ))}\n                        </TableRow>\n\n                        {isLabelTagsOpen?.(row) && (\n                            <TableAssignedLabelTags\n                                {...getLabelTagsProps?.(row)}\n                            />\n                        )}\n                    </Fragment>\n                );\n            })}\n        </TableBody>\n    );\n};\n\nexport default TableBodyWrapper;\n","import { FC, memo } from 'react';\nimport { EmptyStateContainer } from './EmptyStateContainer';\nimport styled from 'styled-components';\n\nconst TableBody = styled.tbody``;\nconst TableEmptyTd = styled.td`\n    height: 50vh;\n`;\n\nconst EmptyStateTableWrapper: FC = memo(({ children }) => {\n    return (\n        <TableBody>\n            <tr>\n                <TableEmptyTd colSpan={100}>\n                    <EmptyStateContainer>{children}</EmptyStateContainer>\n                </TableEmptyTd>\n            </tr>\n        </TableBody>\n    );\n});\n\nexport default EmptyStateTableWrapper;\n","import { FC } from 'react';\n\nimport {\n    EmptyState,\n    NoFilterResults,\n    NoSearchResults,\n    NoCalendarResults\n} from '../../../EmptyStates';\nimport { EmptyStateContainer } from '../../../EmptyStates/components/EmptyStateContainer';\nimport EmptyStateTableWrapper from '../../../EmptyStates/components/EmptyStateTableWrapper';\nimport { EmptyStateWrapperProps } from './type';\n\nconst EmptyStateWrapper: FC<EmptyStateWrapperProps> = props => {\n    const {\n        tableStates,\n        noEntriesOptions,\n        noSearchResultsOptions,\n        noFilterResultsOptions,\n        noCalendarResultsOptions,\n    } = props;\n\n    return (\n        <EmptyStateTableWrapper>\n            <EmptyStateContainer>\n                {tableStates.showNoEntriesState && (\n                    <EmptyState icon={noEntriesOptions?.icon} width={noEntriesOptions?.width} dataTest={noEntriesOptions?.dataTest}>\n                        {noEntriesOptions?.text}\n                    </EmptyState>\n                )}\n                {tableStates.showNoSearchResultsState && (\n                    <NoSearchResults {...noSearchResultsOptions} />\n                )}\n                {tableStates.showNoFilterResultsState && (\n                    <NoFilterResults {...noFilterResultsOptions} />\n                )}\n                {tableStates.showNoCalendarResultsState && (\n                    <NoCalendarResults {...noCalendarResultsOptions} />\n                )}\n            </EmptyStateContainer>\n        </EmptyStateTableWrapper>\n    );\n};\n\nexport default EmptyStateWrapper;\n","import { FC, memo } from 'react';\n\nimport { TableProps } from './type';\nimport { TableCont, ScrollContainer, TableInner } from './style';\nimport { TableHeader } from './table-header';\nimport { TableBodyWrapper } from './table-body-wrapper';\nimport { EmptyStateWrapper } from './empty-state';\n\nconst TableSimpleView: FC<TableProps> = props => {\n    const {\n        data,\n        tableStates,\n        addOverflow,\n        tableContainerClassName,\n        tableInnerClassName,\n        tableEmptyStateConfigurations,\n        configuration,\n    } = props;\n\n    const { rowConfig } = configuration;\n\n    const {\n        shouldShowEmptyState,\n        noEntriesOptions,\n        noSearchResultsOptions,\n        noFilterResultsOptions,\n        noCalendarResultsOptions,\n    } = tableEmptyStateConfigurations || {};\n\n    return (\n        <TableCont className={tableContainerClassName}>\n            <ScrollContainer addOverflow={addOverflow}>\n                <TableInner className={tableInnerClassName}>\n                    <TableHeader headerConfiguration={configuration} />\n\n                    {!tableStates.showEmptyState && (\n                        <TableBodyWrapper data={data} rowConfig={rowConfig} />\n                    )}\n\n                    {shouldShowEmptyState && tableStates.showEmptyState && (\n                        <EmptyStateWrapper\n                            tableStates={tableStates}\n                            noEntriesOptions={noEntriesOptions}\n                            noSearchResultsOptions={noSearchResultsOptions}\n                            noFilterResultsOptions={noFilterResultsOptions}\n                            noCalendarResultsOptions={noCalendarResultsOptions}\n                        />\n                    )}\n                </TableInner>\n            </ScrollContainer>\n        </TableCont>\n    );\n};\n\nexport default memo(TableSimpleView);\n","import { FC, memo } from 'react';\n\nimport { TableProps } from './type';\nimport { InfiniteTableBodyContainer, StyledTable } from './style';\nimport { TableHeader } from './table-header';\nimport { TableBodyWrapper } from './table-body-wrapper';\nimport { TableDivider } from '../table-divider';\nimport { ScrollPagination } from '../../ScrollPagination';\nimport { EmptyStateWrapper } from './empty-state';\n\nconst TableInfiniteScrollView: FC<TableProps> = props => {\n    const {\n        data,\n        tableStates,\n        tableContainerClassName,\n        scrollPaginationProps,\n        scrollRef,\n        tableEmptyStateConfigurations,\n        configuration,\n    } = props;\n\n    const { rowConfig } = configuration;\n\n    const {\n        shouldShowEmptyState,\n        noEntriesOptions,\n        noSearchResultsOptions,\n        noFilterResultsOptions,\n        noCalendarResultsOptions,\n    } = tableEmptyStateConfigurations || {};\n\n    return (\n        <>\n            <TableHeader headerConfiguration={configuration} />\n            <InfiniteTableBodyContainer\n                ref={scrollRef}\n                className={tableContainerClassName}\n            >\n                <ScrollPagination {...scrollPaginationProps}>\n                    <StyledTable>\n                        {!tableStates.showEmptyState && (\n                            <TableBodyWrapper\n                                data={data}\n                                rowConfig={rowConfig}\n                            />\n                        )}\n                        {shouldShowEmptyState && tableStates.showEmptyState && (\n                            <EmptyStateWrapper\n                                tableStates={tableStates}\n                                noEntriesOptions={noEntriesOptions}\n                                noSearchResultsOptions={noSearchResultsOptions}\n                                noFilterResultsOptions={noFilterResultsOptions}\n                                noCalendarResultsOptions={noCalendarResultsOptions}\n                            />\n                        )}\n                    </StyledTable>\n                </ScrollPagination>\n            </InfiniteTableBodyContainer>\n            <TableDivider />\n        </>\n    );\n};\n\nexport default memo(TableInfiniteScrollView);\n","import { FC } from 'react';\n\nimport { TableProps, TableViewMode } from './type';\nimport TableSimpleView from './simple.view';\nimport TableInfiniteScrollView from './infinite-scroll.view';\n\nconst TableController: FC<TableProps> = props => {\n    const { viewMode, ...rest } = props;\n\n    return viewMode === TableViewMode.SIMPLE ? (\n        <TableSimpleView {...rest} />\n    ) : (\n        <TableInfiniteScrollView {...rest} />\n    );\n};\n\nexport default TableController;\n\n","import styled, { css } from 'styled-components';\n\nexport const PagerCount = styled.div`\n    display: flex;\n    align-items: center;\n    color: var(--ps-grey-1);\n    margin-right: 8px;\n    font-size: 13px;\n`;\n\nexport const Button = styled.button<{ disabled: boolean }>`\n    width: 40px;\n    height: 40px;\n    margin: 0 0 0 16px;\n    border-radius: 4px;\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    cursor: ${props => (props.disabled ? 'normal' : 'pointer')};\n    flex-shrink: 0;\n    background: #fff;\n    margin-left: 8px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    opacity: ${props => (props.disabled ? '0.6' : '1')};\n\n    ${({ disabled }) =>\n        !disabled &&\n        css`\n            &:hover {\n                border: solid 1px ${props => props.theme.Colors.cloudyBlue};\n            }\n\n            &:active {\n                border: solid 1px ${props => props.theme.Colors.steelGrey};\n            }\n        `}\n`;\n\nexport const IconContainer = styled.div`\n    width: 6px;\n    height: 12px;\n\n    path {\n        stroke: ${props => props.theme.Colors.steelGrey};\n    }\n\n    .rotate {\n        transform: rotate(180deg);\n    }\n`;","import { useState, useEffect } from 'react';\nimport { useHistory, useLocation } from 'react-router';\nimport { onListenEvent, onRemoveEvent } from '../../../../helpers/functions/Events';\nimport { CLEAR_PAGING, EventNameList } from '../../../../helpers/functions/Events/types';\n\nimport ArrowRight from '../../../icons/ArrowRight';\nimport { Button, IconContainer, PagerCount } from './styles';\n\nconst qs = require('query-string');\n\nexport type PagingProps = {\n    totalCount: number | undefined;\n    itemsPerPage: number;\n    onPageChange: (limit: number, offset: number) => void;\n    searchOrFiltersApplied: number | boolean | undefined;\n    noUrlChange?: boolean;\n    dataTest?: string;\n};\n\nexport const Paging = ({\n    totalCount,\n    itemsPerPage,\n    onPageChange,\n    searchOrFiltersApplied,\n    noUrlChange,\n    dataTest = 'table-paging'\n}: PagingProps) => {\n    const location = useLocation();\n    const history = useHistory();\n    const pageFromUrl = qs.parse(location.search).page;\n    let [pageNumber, setPageNumber] = useState<number>(\n        parseInt(pageFromUrl) || 1\n    );\n    const [initialized, setInitialized] = useState<boolean>(false);\n    const maxValue = Math.ceil(totalCount! / itemsPerPage);\n    const pathString = location.pathname.toString();\n\n    useEffect(() => {\n        if (pageNumber > maxValue && !initialized) {\n            if (maxValue > 0) {\n                history.push(`${pathString}?page=${maxValue}`);\n                setPageNumber(maxValue);\n            }\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [maxValue]);\n\n    useEffect(() => {\n        if (initialized || pageNumber > 1) {\n            const offset =\n                pageNumber === 1 ? 0 : (pageNumber - 1) * itemsPerPage;\n            const limit =\n                pageNumber === 1 ? itemsPerPage : pageNumber * itemsPerPage;\n            !noUrlChange && history.push(`${pathString}?page=${pageNumber}`);\n\n            onPageChange(limit, offset);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [initialized, pageNumber]);\n\n    useEffect(() => {\n        if (searchOrFiltersApplied) {\n            setPageNumber(1);\n            if (pageFromUrl) {\n                history.push(`${pathString}?page=1`);\n            }\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [totalCount]);\n\n    useEffect(() => {\n        if (\n            totalCount &&\n            itemsPerPage &&\n            totalCount! % itemsPerPage === 0 &&\n            pageNumber > 1\n        ) {\n            history.push(`${pathString}?page=${pageNumber - 1}`);\n            setPageNumber(pageNumber - 1);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [totalCount, itemsPerPage]);\n\n\n\n    useEffect(() => {\n        onListenEvent(EventNameList[CLEAR_PAGING], () => setPageNumber(1));\n        return () => {\n            onRemoveEvent(EventNameList[CLEAR_PAGING], () => setPageNumber(1));\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n    \n\n    const handlePageChange = (direction: string) => {\n        setInitialized(true);\n        if (direction === 'next') {\n            pageNumber < maxValue\n                ? setPageNumber(pageNumber + 1)\n                : setPageNumber(maxValue);\n        } else if (direction === 'prev') {\n            pageNumber < 1\n                ? setPageNumber(1)\n                : setPageNumber(pageNumber - 1);\n        }\n    };\n\n    const renderCount = () => {\n        if (!totalCount && !searchOrFiltersApplied) {\n            return null;\n        } else if (!totalCount && searchOrFiltersApplied) {\n            return <PagerCount data-test={dataTest && `${dataTest}-counter`}>0 Items</PagerCount>;\n        }\n\n        return (\n            <PagerCount data-test={dataTest && `${dataTest}-counter`}>\n                {(pageNumber - 1) * itemsPerPage < 1\n                    ? 1\n                    : (pageNumber - 1) * itemsPerPage + 1}\n                -\n                {pageNumber * itemsPerPage < totalCount!\n                    ? pageNumber * itemsPerPage\n                    : totalCount}{' '}\n                of {totalCount} Items\n            </PagerCount>\n        );\n    };\n\n    return (\n        <>\n            {renderCount()}\n            <Button\n                onClick={() => handlePageChange('prev')}\n                disabled={pageNumber <= 1 || !totalCount}\n                data-test={dataTest && `${dataTest}-prev`}\n            >\n                <IconContainer>\n                    <ArrowRight className=\"rotate\" />\n                </IconContainer>\n            </Button>\n            <Button\n                onClick={() => handlePageChange('next')}\n                disabled={pageNumber >= maxValue || !totalCount}\n                data-test={dataTest && `${dataTest}-next`}\n            >\n                <IconContainer>\n                    <ArrowRight height={12} width={6} />\n                </IconContainer>\n            </Button>\n        </>\n    );\n};","import styled from 'styled-components';\n\nimport { Variables } from '../../../../theme/variables';\nimport { SIZES } from '../constants';\n\nexport const Root = styled.div`\n    min-width: ${SIZES.MIN_WIDTH}px;\n    display: flex;\n    justify-content: stretch;\n    align-items: stretch;\n    padding: 16px 0;\n`;\n\nexport const Wrapper = styled.div`\n    display: flex;\n    flex: 1;\n    justify-content: space-between;\n    @media (max-width: ${Variables.BreakPoints.responsiveSmPlus}px) {\n        flex-direction: column;\n    }\n`;\n\nexport const TableToolsLeft = styled.div`\n    display: flex;\n`;\n\nexport const TableToolsRight = styled.div`\n    flex: 1;\n    display: flex;\n    justify-content: flex-end;\n    @media (max-width: ${Variables.BreakPoints.responsiveSmPlus}px) {\n        margin-top: 8px;\n        justify-content: flex-start;\n        flex-wrap: wrap;\n    }\n`;\n\nexport const ItemCount = styled.p`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 13px;\n    padding: 0;\n    margin: 0;\n`;\n","import { Dispatch, FC, SetStateAction, useCallback, useState } from 'react';\r\nimport { ClickAwayListener } from '@material-ui/core';\r\n\r\nimport { PortableLabels } from '../../../../../../features/portableLabels';\r\nimport { useToggleCollapseAssignLabelFieldService } from '../../../../../../features/labels/store/services';\r\nimport { useLabelsState } from '../../../../../../features/labels/store/states';\r\nimport { Fieldset } from '../../../../Fieldset';\r\nimport { Button } from '../../../../Button';\r\nimport { usePortableLabelsState } from '../../../../../../features/portableLabels/store/states';\r\nimport { useToggleCollapseAllLabels } from '../../../../../../features/portableLabels/store/hors/withLabels/services';\r\nimport {\r\n    Actions,\r\n    CancelButtonWrapper,\r\n    LabelsContainer,\r\n    StyledSelectForm,\r\n    Wrapper,\r\n} from './styles';\r\n\r\nconst ANIMATION_SCALE = 5;\r\n\r\nexport const AssignLabelOptions: FC<{\r\n    disabled?: boolean;\r\n    onAssignLabelsSubmit?(): void;\r\n    setAssignLabelsAction?(labelIds: number[]): void;\r\n    className?: string;\r\n    containerLeftPosition?: string;\r\n    setShowOptions: Dispatch<SetStateAction<boolean>>;\r\n}> = ({\r\n    disabled,\r\n    onAssignLabelsSubmit,\r\n    setAssignLabelsAction,\r\n    className,\r\n    containerLeftPosition,\r\n    setShowOptions,\r\n}) => {\r\n    const [show, setShow] = useState(true);\r\n    const onToggleCollapse = useToggleCollapseAssignLabelFieldService();\r\n    const onToggleCollapseAll = useToggleCollapseAllLabels();\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState().data;\r\n    const [applyDisabled, setApplyDisabled] = useState(true);\r\n\r\n    const handleSelectAll = () => {\r\n        if (labelsList && setAssignLabelsAction) {\r\n            setAssignLabelsAction(labelsList.items.map(label => label.id));\r\n        }\r\n        setApplyDisabled(false);\r\n    };\r\n\r\n    const handleClear = () => {\r\n        if (labelsList && setAssignLabelsAction) {\r\n            setAssignLabelsAction([]);\r\n        }\r\n        setApplyDisabled(false);\r\n    };\r\n\r\n    /**\r\n     * @function onCloseHandler\r\n     * @returns { void }\r\n     */\r\n    const onCloseHandler = useCallback((): void => {\r\n        Promise.resolve().then(() => {\r\n            setShow(false);\r\n            setShowOptions(false);\r\n        });\r\n    }, [setShowOptions]);\r\n\r\n    const onApplyHandler = useCallback(() => {\r\n        onAssignLabelsSubmit && onAssignLabelsSubmit();\r\n        onCloseHandler();\r\n    }, [onAssignLabelsSubmit, onCloseHandler]);\r\n\r\n    if (!show) return <span />;\r\n\r\n    const setAssignLabelsAndEnableApply = (labelIds: number[]) => {\r\n        if (labelsList && setAssignLabelsAction) {\r\n            setAssignLabelsAction(labelIds);\r\n            setApplyDisabled(false);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <ClickAwayListener onClickAway={onCloseHandler}>\r\n            <StyledSelectForm disabled={disabled} className={className}>\r\n                <LabelsContainer\r\n                    initial={{ scale: 1 / ANIMATION_SCALE }}\r\n                    animate={{ scale: 1 }}\r\n                    exit={{ scale: 0 }}\r\n                    topMargin={5}\r\n                    left={containerLeftPosition}\r\n                >\r\n                    <Wrapper>\r\n                        <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\r\n                            <PortableLabels\r\n                                labels={labelsList}\r\n                                collapsedList={labels.collapseAssignLabels}\r\n                                selectedList={labels.assignedLabels}\r\n                                onToggleCollapse={onToggleCollapse}\r\n                                onToggleCollapseAll={onToggleCollapseAll}\r\n                                onSetSelected={setAssignLabelsAndEnableApply}\r\n                                onSelectAll={handleSelectAll}\r\n                                onClearSelected={handleClear}\r\n                                onSave={onApplyHandler}\r\n                                showSave={false}\r\n                                showSearch\r\n                                showSelectActions\r\n                                noResultType={'min'}\r\n                            />\r\n                        </Fieldset>\r\n                    </Wrapper>\r\n                    <Actions>\r\n                        <CancelButtonWrapper>\r\n                            <Button\r\n                                width={'120px'}\r\n                                action={onCloseHandler}\r\n                                variant={'inverse'}\r\n                                dataTest=\"cancel-button\"\r\n                            >\r\n                                Cancel\r\n                            </Button>\r\n                        </CancelButtonWrapper>\r\n                        <Button\r\n                            width={'120px'}\r\n                            action={() => onApplyHandler()}\r\n                            disabled={applyDisabled}\r\n                            dataTest=\"apply-button\"\r\n                        >\r\n                            Apply\r\n                        </Button>\r\n                    </Actions>\r\n                </LabelsContainer>\r\n            </StyledSelectForm>\r\n        </ClickAwayListener>\r\n    );\r\n};\r\n","import { FC, useState } from 'react';\nimport {\n    SelectLabel,\n    SelectInput,\n    SelectMenuItem,\n    SelectMenu,\n} from '../../../../SelectDropdown';\n\nimport UpArrow from '../../../../../icons/UpArrow';\nimport DownArrow from '../../../../../icons/DownArrow';\nimport { TableAssignOptionsMenuItem } from '../interfaces/TableAssignOptionsMenuItem';\nimport { Variables } from '../../../../../../theme/variables';\nimport { Tooltip } from '../../../../Tooltip';\nimport { CheckPermission } from '../../../../../../features/permissions';\nimport {\n    Container,\n    IconHolder,\n    TableAssignOptionsStyledSelectForm,\n} from './styles';\n\nexport const TableAssignOptionsSelectDropdown: FC<{\n    items?: Array<any>;\n    showUpArrow?: boolean;\n    onChange?: any;\n    disabled?: boolean;\n    disabledLabel?: string;\n    hideHint?: boolean;\n}> = ({\n    items,\n    showUpArrow,\n    disabled,\n    disabledLabel = 'Select one or more items below first',\n    hideHint,\n    onChange,\n}) => {\n    const [show, setShow] = useState(false);\n    const selectToggleHandler = () => {\n        if (!disabled) {\n            setShow(!show);\n        }\n    };\n\n    const render = () => {\n        return (\n            <TableAssignOptionsStyledSelectForm\n                variant=\"light\"\n                open={show}\n                className={disabled ? 'is-disabled' : undefined}\n                disabled={disabled}\n            >\n                <SelectLabel\n                    label=\"Action\"\n                    color={disabled ? Variables.Colors.cloudyBlue : undefined}\n                    dataTest=\"assign-table-action-label\"\n                />\n                <IconHolder disabled={disabled}>\n                    {show || showUpArrow ? <UpArrow /> : <DownArrow />}\n                </IconHolder>\n                <SelectInput toggleSelect={() => selectToggleHandler()} />\n\n                <Container open={show} toggleOpen={setShow}>\n                    <SelectMenu menuPosition=\"left\" width=\"200px\">\n                        {items &&\n                            items.map((item: TableAssignOptionsMenuItem) => {\n                                return (\n                                    item.show && (\n                                        <CheckPermission\n                                            key={item.name}\n                                            permissions={item.permissions}\n                                        >\n                                            <SelectMenuItem\n                                                key={item.value}\n                                                value={item.value}\n                                                hideAction={() =>\n                                                    setShow(false)\n                                                }\n                                                onClick={onChange}\n                                                disabled={item.disabled}\n                                                destructive={item.destructive}\n                                                hint={item.hint}\n                                                dataTest={item.dataTest}\n                                            >\n                                                {item.name}\n                                            </SelectMenuItem>\n                                        </CheckPermission>\n                                    )\n                                );\n                            })}\n                    </SelectMenu>\n                </Container>\n            </TableAssignOptionsStyledSelectForm>\n        );\n    };\n\n    if (disabled) {\n        return !hideHint ? (\n            <Tooltip label={disabledLabel} preset={'dropdown'}>\n                {render()}\n            </Tooltip>\n        ) : (\n            render()\n        );\n    }\n\n    return render();\n};\n","import {\n    Dispatch,\n    FC,\n    SetStateAction,\n    useCallback,\n    useEffect,\n    useRef,\n    useState,\n} from 'react';\nimport styled from 'styled-components';\nimport { ListResult } from '../../../../../../constants/interfaces/PaginationResult';\nimport {\n    PractisSets,\n    PractisSetStatuses,\n} from '../../../../../../constants/interfaces/PractisSets';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../../../constants/interfaces/filters';\nimport { ClickAwayListener } from '@material-ui/core';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useLibraryPractisSetState } from '../../../../../../features/library/store/states';\nimport {\n    useGetFullPractisSetsService,\n    useSetSearchTermForLibraryPractisSetService,\n    useUpdateAssignedLibraryPractisSetService,\n} from '../../../../../../features/library/store/services';\nimport OutsideActionBox from '../../../../OutsideActionBox/OutsideActionBox';\nimport Checkbox from '../../../../Checkbox';\nimport { Variables } from '../../../../../../theme/variables';\nimport { Button } from '../../../../Button';\nimport { Input } from '../../../../input';\nimport { scrollDown, scrollUp } from '../../../../Select/tools';\nimport { useShowMessage } from '../../../../ErrorMessages/ErrorMessages';\nimport { useSearchDebounced } from '../../../../../../helpers/hooks/useSearch';\nimport UpArrow from '../../../../../icons/UpArrow';\nimport Search from '../../../../../icons/Search';\nimport DownArrow from '../../../../../icons/DownArrow';\n\nconst StyledSelectForm = styled.div<{ disabled?: boolean; minWidth?: string }>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: 16px;\n    ${props => !!props.minWidth && `min-width: ${props.minWidth};`}\n    cursor: pointer;\n    background: ${props => props.theme.Colors.white};\n    color: ${props =>\n        !!props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.black};\n    font-weight: 600;\n    height: 100%;\n`;\n\nconst SelectContainer = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst PractisSetsContainer = styled(motion.div)<{\n    displayOver?: boolean;\n    topMargin: number;\n    left?: string;\n}>`\n    padding: 18px;\n    min-width: 312px;\n    position: absolute;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    left: ${props =>\n        props.displayOver ? '16px' : !!props.left ? props.left : '0'};\n    right: ${props => (props.displayOver ? '16px' : '0')};\n    top: ${props => (props.displayOver ? `-${props.topMargin}px` : '8px')};\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n`;\n\nconst StyledPractisSetsList = styled.div``;\n\nconst ScrollablePractisSetsContainer = styled.div`\n    max-height: 312px;\n    overflow: auto;\n    overflow-y: scroll;\n`;\n\nconst PractisSetItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 8px 0;\n`;\n\nconst PractisSetItem = styled.div<{ disabled?: boolean }>`\n    color: ${props => props.theme.Colors.black};\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 6px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst StyledButtonContainer = styled.div`\n    margin: 21px auto 13px auto;\n    width: 264px;\n`;\n\nconst TitleContainer = styled.div`\n    margin: 8px 0 15px 7px;\n    font-size: 13px;\n    font-weight: bold;\n`;\n\nconst SearchInputContainer = styled.div`\n    display: flex;\n    position: relative;\n    align-items: center;\n`;\n\nconst SearchInput = styled(Input)`\n    height: 48px;\n    border-radius: 8px;\n    padding: 0 52px;\n    font-size: 13px;\n    font-weight: 600;\n    background-color: ${props => props.theme.Colors.whiteTwo};\n\n    &::placeholder {\n        color: ${props => props.theme.Colors.cloudyBlue};\n    }\n`;\n\nconst Icon = styled.div`\n    width: 64px;\n    height: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 999;\n`;\nconst SearchIcon = styled(Search)`\n    width: 16px;\n    color: ${props => props.theme.Colors.battleshipGrey};\n`;\n\nconst ScrollBar = styled.div<{ disabled?: boolean }>`\n    height: 25px;\n    color: ${props => props.theme.Colors.black};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 8px 0;\n    user-select: none;\n    &:hover {\n        background: ${props => !props.disabled && props.theme.Colors.whiteTwo};\n    }\n    &:active {\n        background: ${props =>\n            !props.disabled && props.theme.Colors.whiteThree};\n    }\n`;\n\nconst ScrollBarTop = styled(ScrollBar)`\n    border-top-left-radius: 8px;\n    border-top-right-radius: 8px;\n`;\n\nconst ScrollBarBottom = styled(ScrollBar)`\n    border-bottom-left-radius: 8px;\n    border-bottom-right-radius: 8px;\n`;\n\nconst ScrollBarIcon = styled(motion.div)`\n    display: flex;\n    width: 12px;\n    align-items: center;\n`;\n\nconst ANIMATION_SCALE = 5;\n\nexport const AssignPractisSetOptions: FC<{\n    practisSets?: ListResult<PractisSets>;\n    assignedPractisSets?: number[];\n    searchTerm?: string;\n    disabled?: boolean;\n    title?: string;\n    minWidth?: string;\n    titlePadding?: string;\n    iconRightPosition?: string;\n    searchPractisSets(sp?: SearchParams): void;\n    setSearchTermForLibraryPractisSetService(value: string): void;\n    setAssignPractisSetsAction?(practisSetIds: number[]): void;\n    onAssignPractisSetsSubmit?(): void;\n    previouslyCheckedPractisSets?: number[];\n    className?: string;\n    showMessage: any;\n    textAlignedLeft?: boolean;\n    allowWithoutPreviousData?: boolean;\n    containerLeftPosition?: string;\n    setShowOptions: Dispatch<SetStateAction<boolean>>;\n}> = ({\n    practisSets,\n    searchPractisSets,\n    searchTerm,\n    disabled,\n    minWidth,\n    assignedPractisSets,\n    setAssignPractisSetsAction,\n    setSearchTermForLibraryPractisSetService,\n    className,\n    onAssignPractisSetsSubmit,\n    previouslyCheckedPractisSets,\n    showMessage,\n    allowWithoutPreviousData,\n    containerLeftPosition,\n    setShowOptions,\n}) => {\n    const initialSearchParams: SearchParams = {\n        searchTerm: searchTerm || '',\n        filters: [],\n        orderBy: {},\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n    const { searchParams, setSearchTerm } =\n        useSearchParamsState(initialSearchParams);\n    const [show, setShow] = useState(true);\n    const scrollRef = useRef<any>(null);\n    const [showScrollUp, setShowScrollUp] = useState(false);\n    const [showScrollDown, setShowScrollDown] = useState(true);\n\n    useEffect(() => {\n        setSearchTerm('');\n        setSearchTermForLibraryPractisSetService('');\n    }, [setSearchTerm, setSearchTermForLibraryPractisSetService]);\n\n    useEffect(() => {\n        setSearchTerm(searchTerm || '');\n    }, [searchTerm, setSearchTerm]);\n\n    useEffect(() => {\n        searchPractisSets(searchParams);\n    }, [searchPractisSets, searchParams]);\n\n    const handleScroll = (e: any) => {\n        handleScrollUp(e.target.scrollTop);\n        handleScrollDown(e.target);\n    };\n\n    const handleScrollUp = (top: number) => {\n        if (top > 25 && !showScrollUp) {\n            setShowScrollUp(true);\n        } else if (top <= 25 && showScrollUp) {\n            setShowScrollUp(false);\n        }\n    };\n\n    const handleScrollDown = (element: any) => {\n        const condition =\n            element.scrollTop === element.scrollHeight - element.offsetHeight;\n\n        if (condition && showScrollDown) {\n            setShowScrollDown(false);\n        } else if (!condition && !showScrollDown) {\n            setShowScrollDown(true);\n        }\n    };\n\n    const onAssignPractisSets = useCallback(\n        (id: any) => {\n            let updatedAssignedPractisSets = [];\n            if (assignedPractisSets && assignedPractisSets.includes(id)) {\n                updatedAssignedPractisSets = assignedPractisSets.filter(\n                    item => item !== id\n                );\n            } else {\n                updatedAssignedPractisSets = [\n                    ...(assignedPractisSets || []),\n                    id,\n                ];\n            }\n\n            setAssignPractisSetsAction &&\n                setAssignPractisSetsAction(updatedAssignedPractisSets);\n        },\n        [assignedPractisSets, setAssignPractisSetsAction]\n    );\n\n    const handleAssignPractisSets = useCallback(() => {\n        const length = allowWithoutPreviousData\n            ? (assignedPractisSets || []).length\n            : previouslyCheckedPractisSets &&\n              previouslyCheckedPractisSets.length &&\n              assignedPractisSets &&\n              assignedPractisSets.length\n            ? assignedPractisSets.length - previouslyCheckedPractisSets.length\n            : assignedPractisSets && assignedPractisSets.length\n            ? assignedPractisSets.length\n            : 0;\n\n        if (!!setAssignPractisSetsAction) {\n            setAssignPractisSetsAction(assignedPractisSets || []);\n            if (showMessage && assignedPractisSets && !!length) {\n                showMessage(\n                    `${\n                        length > 1\n                            ? `${length} Practis Sets have been assigned`\n                            : '1 Practis Set has been assigned'\n                    }`,\n                    'success'\n                );\n            }\n        }\n\n        if (!!onAssignPractisSetsSubmit) {\n            onAssignPractisSetsSubmit();\n        }\n    }, [\n        assignedPractisSets,\n        setAssignPractisSetsAction,\n        previouslyCheckedPractisSets,\n        showMessage,\n        onAssignPractisSetsSubmit,\n        allowWithoutPreviousData,\n    ]);\n\n    const isChecked = useCallback(\n        (setId: any) => {\n            return (\n                (!!assignedPractisSets &&\n                    !!setId &&\n                    assignedPractisSets.includes(setId)) ||\n                (!allowWithoutPreviousData &&\n                    !!previouslyCheckedPractisSets &&\n                    !!setId &&\n                    previouslyCheckedPractisSets.includes(setId))\n            );\n        },\n        [\n            assignedPractisSets,\n            previouslyCheckedPractisSets,\n            allowWithoutPreviousData,\n        ]\n    );\n\n    const isPreviouslyChecked = useCallback(\n        (setId: any) => {\n            return (\n                !allowWithoutPreviousData &&\n                !!previouslyCheckedPractisSets &&\n                !!setId &&\n                previouslyCheckedPractisSets.includes(setId)\n            );\n        },\n        [previouslyCheckedPractisSets, allowWithoutPreviousData]\n    );\n\n    /**\n     * @function onCloseHandler\n     * @returns { void }\n     */\n    const onCloseHandler = (): void => {\n        Promise.resolve().then(() => {\n            setShow(false);\n            setShowOptions(false);\n        });\n    };\n\n    return (\n        <ClickAwayListener onClickAway={onCloseHandler}>\n            <StyledSelectForm\n                disabled={disabled}\n                minWidth={minWidth}\n                className={className}\n            >\n                <SelectContainer open={show && !disabled}>\n                    <PractisSetsContainer\n                        initial={{ scale: 1 / ANIMATION_SCALE }}\n                        animate={{ scale: 1 }}\n                        exit={{ scale: 0 }}\n                        topMargin={5}\n                        left={containerLeftPosition}\n                    >\n                        <StyledPractisSetsList>\n                            <TitleContainer>Assign Practis Sets</TitleContainer>\n                            <SearchInputContainer>\n                                <Icon>\n                                    <SearchIcon />\n                                </Icon>\n                                <SearchInput\n                                    placeholder={\n                                        !practisSets ||\n                                        (!!practisSets &&\n                                            !practisSets.items.length)\n                                            ? 'No Practis Sets to Search'\n                                            : 'Search Practics Sets…'\n                                    }\n                                    height={'48px'}\n                                    containerWidth=\"100%\"\n                                    clearTopPosition=\"20px\"\n                                    value={searchTerm}\n                                    handleChange={(e: any) => {\n                                        setSearchTermForLibraryPractisSetService(\n                                            e.target.value\n                                        );\n                                    }}\n                                    disabled={disabled}\n                                    clearInput={() => {\n                                        setSearchTermForLibraryPractisSetService(\n                                            ''\n                                        );\n                                    }}\n                                />\n                            </SearchInputContainer>\n                            {showScrollUp && (\n                                <ScrollBarTop\n                                    onClick={() => scrollUp(scrollRef.current)}\n                                    disabled={!showScrollUp}\n                                >\n                                    <AnimatePresence>\n                                        {showScrollUp && (\n                                            <ScrollBarIcon\n                                                initial={{ scale: 0 }}\n                                                animate={{ scale: 1 }}\n                                                exit={{ scale: 0 }}\n                                            >\n                                                <UpArrow />\n                                            </ScrollBarIcon>\n                                        )}\n                                    </AnimatePresence>\n                                </ScrollBarTop>\n                            )}\n                            <ScrollablePractisSetsContainer\n                                ref={scrollRef}\n                                onScroll={handleScroll}\n                            >\n                                {practisSets &&\n                                    (practisSets || []).items\n                                        .filter(\n                                            item =>\n                                                item.status ===\n                                                PractisSetStatuses.ACTIVE\n                                        )\n                                        .map(set => (\n                                            <PractisSetItemWrapper key={set.id}>\n                                                <Checkbox\n                                                    size={12}\n                                                    checked={isChecked(set.id)}\n                                                    disabled={isPreviouslyChecked(\n                                                        set.id\n                                                    )}\n                                                    checkedBackground={\n                                                        isPreviouslyChecked(\n                                                            set.id\n                                                        )\n                                                            ? Variables.Colors\n                                                                  .cloudyBlue\n                                                            : isChecked(set.id)\n                                                            ? Variables.Colors\n                                                                  .softBlue\n                                                            : Variables.Colors\n                                                                  .white\n                                                    }\n                                                    border={\n                                                        isPreviouslyChecked(\n                                                            set.id\n                                                        )\n                                                            ? Variables.Colors\n                                                                  .steelGrey\n                                                            : Variables.Colors\n                                                                  .cloudyBlue\n                                                    }\n                                                    handleChange={(e: any) =>\n                                                        onAssignPractisSets(\n                                                            set.id\n                                                        )\n                                                    }\n                                                />\n                                                <PractisSetItem\n                                                    disabled={isPreviouslyChecked(\n                                                        set.id\n                                                    )}\n                                                    onClick={() =>\n                                                        onAssignPractisSets(\n                                                            set.id\n                                                        )\n                                                    }\n                                                >\n                                                    {set.name}\n                                                </PractisSetItem>\n                                            </PractisSetItemWrapper>\n                                        ))}\n                            </ScrollablePractisSetsContainer>\n                            <ScrollBarBottom\n                                onClick={() => scrollDown(scrollRef.current)}\n                                disabled={!showScrollDown}\n                            >\n                                <AnimatePresence>\n                                    {showScrollDown && (\n                                        <ScrollBarIcon\n                                            initial={{ scale: 0 }}\n                                            animate={{ scale: 1 }}\n                                            exit={{ scale: 0 }}\n                                        >\n                                            <DownArrow />\n                                        </ScrollBarIcon>\n                                    )}\n                                </AnimatePresence>\n                            </ScrollBarBottom>\n                            <StyledButtonContainer>\n                                <Button\n                                    width=\"264px\"\n                                    height=\"48px\"\n                                    action={() => {\n                                        onCloseHandler();\n                                        handleAssignPractisSets();\n                                    }}\n                                    dataTest='save-button'\n                                >\n                                    Save\n                                </Button>\n                            </StyledButtonContainer>\n                        </StyledPractisSetsList>\n                    </PractisSetsContainer>\n                </SelectContainer>\n            </StyledSelectForm>\n        </ClickAwayListener>\n    );\n};\n\nconst AssignPractisSetOptionsContainer: FC<{\n    title?: string;\n    minWidth?: string;\n    titlePadding?: string;\n    disabled?: boolean;\n    iconRightPosition?: string;\n    onAssignPractisSetsSubmit?(): void;\n    previouslyCheckedPractisSets?: number[];\n    className?: string;\n    textAlignedLeft?: boolean;\n    allowWithoutPreviousData?: boolean;\n    containerLeftPosition?: string;\n    setShowOptions: Dispatch<SetStateAction<boolean>>;\n}> = ({\n    title,\n    minWidth,\n    titlePadding,\n    disabled,\n    iconRightPosition,\n    onAssignPractisSetsSubmit,\n    previouslyCheckedPractisSets,\n    className,\n    textAlignedLeft,\n    allowWithoutPreviousData,\n    containerLeftPosition,\n    setShowOptions,\n}) => {\n    const state = useLibraryPractisSetState();\n\n    const setAssignPractisSetsAction =\n        useUpdateAssignedLibraryPractisSetService();\n    const setSearchTermForLibraryPractisSetService =\n        useSetSearchTermForLibraryPractisSetService();\n\n    const searchPractisSets = useGetFullPractisSetsService();\n    const searchPractisSetsDebounced = useSearchDebounced(searchPractisSets);\n\n    const showMessage = useShowMessage();\n\n    return (\n        <AssignPractisSetOptions\n            practisSets={state.fullList}\n            assignedPractisSets={state.assignedPractisSets}\n            searchTerm={state.searchTerm}\n            disabled={disabled}\n            title={title}\n            minWidth={minWidth}\n            titlePadding={titlePadding}\n            searchPractisSets={searchPractisSetsDebounced}\n            setAssignPractisSetsAction={setAssignPractisSetsAction}\n            setSearchTermForLibraryPractisSetService={\n                setSearchTermForLibraryPractisSetService\n            }\n            iconRightPosition={iconRightPosition}\n            onAssignPractisSetsSubmit={onAssignPractisSetsSubmit}\n            previouslyCheckedPractisSets={previouslyCheckedPractisSets}\n            showMessage={showMessage}\n            className={className}\n            textAlignedLeft={textAlignedLeft}\n            allowWithoutPreviousData={allowWithoutPreviousData}\n            containerLeftPosition={containerLeftPosition}\n            setShowOptions={setShowOptions}\n        />\n    );\n};\n\nexport default AssignPractisSetOptionsContainer;\n","const SCROLL_BY = 100;\n\nexport const scrollUp = (element: any) => {\n    if (element) {\n        element.scrollTop -= SCROLL_BY;\n    }\n};\n\nexport const scrollDown = (element: any) => {\n    if (element) {\n        element.scrollTop += SCROLL_BY;\n    }\n};\n","import { FC } from 'react';\n\nimport { Button } from '../../../../Button';\nimport {\n    NudgeWarningStyledDescription,\n    StyledActions,\n    StyledContent,\n    StyledTitle,\n} from './styles';\n\nexport const NudgeWarning: FC<{\n    onProceed?(): void;\n    onClose?(): void;\n}> = ({ onProceed, onClose }) => {\n    return (\n        <>\n            <StyledTitle>Reminder</StyledTitle>\n            <StyledContent>\n                <NudgeWarningStyledDescription>\n                    Nudge messages will only be sent to selected trainees.\n                    Selected trainers and admins will not be notified.\n                </NudgeWarningStyledDescription>\n                <StyledActions marginTop={30}>\n                    <Button\n                        width=\"128px\"\n                        height=\"48px\"\n                        action={onClose}\n                        variant=\"inverse\"\n                    >\n                        Go Back\n                    </Button>\n                    <Button\n                        width=\"128px\"\n                        height=\"48px\"\n                        action={() => !!onProceed && onProceed()}\n                    >\n                        Proceed\n                    </Button>\n                </StyledActions>\n            </StyledContent>\n        </>\n    );\n};\n","import { FC } from 'react';\n\nimport { Button } from '../../../../Button';\nimport DialogWrapper from '../../../../DialogWrapper/DialogWrapper';\nimport { Variables } from '../../../../../../theme/variables';\nimport {\n    Bold,\n    StyledActions,\n    StyledButtonContainer,\n    StyledContent,\n    StyledDescription,\n    StyledTitle,\n} from './styles';\n\nexport const BulkActionConfirmation: FC<{\n    onProceed?(): void;\n    onClose?(): void;\n    itemsCount: number;\n}> = ({ onProceed, onClose, itemsCount }) => {\n    return (\n        <DialogWrapper\n            customization={{ width: 400, padding: '30px 32px 40px 40px' }}\n        >\n            <StyledTitle data-test=\"confirmation-modal-title\">Confirm bulk action</StyledTitle>\n            <StyledContent>\n                <StyledDescription marginTop=\"9px\" data-test=\"confirmation-modal-description\">\n                    This action will affect all <Bold>{itemsCount} Items</Bold>.\n                    Are you sure you want to continue?\n                </StyledDescription>\n                <StyledActions marginTop={23}>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={onClose}\n                        color=\"warning\"\n                        variant=\"inverse\"\n                        dataTest=\"confirmation-modal-cancel\"\n                    >\n                        Cancel\n                    </Button>\n                    <StyledButtonContainer>\n                        <Button\n                            width=\"128px\"\n                            height=\"40px\"\n                            color=\"warning\"\n                            customColor={Variables.Colors.tomato}\n                            action={() => !!onProceed && onProceed()}\n                            dataTest=\"confirmation-modal-confirm\"\n                        >\n                            Proceed\n                        </Button>\n                    </StyledButtonContainer>\n                </StyledActions>\n            </StyledContent>\n        </DialogWrapper>\n    );\n};\n","import {\n    Dispatch,\n    FC,\n    SetStateAction,\n    useEffect,\n    useRef,\n    useState,\n} from 'react';\n\nimport { SearchQueryParams } from '../../../../../../api/types';\nimport { AssignPractisSets } from '../../../../../../features/assign-practisSets';\nimport { usePractisSetsEnrollmentsService } from '../../../../../../features/users/store/services';\n\nconst AssignPractisSetsAndDueDateOptions: FC<{\n    users?: number[];\n    searchQuery?: SearchQueryParams;\n    isSelectAll?: boolean;\n    successApplyPractisSetsCallback?: () => void;\n    setShowOptions: Dispatch<SetStateAction<boolean>>;\n    totalCount?: number;\n}> = ({\n    users,\n    searchQuery,\n    isSelectAll,\n    successApplyPractisSetsCallback,\n    setShowOptions,\n    totalCount\n}) => {\n    const [\n        isAssignPractisSetPopupOpen,\n        setIsAssignPractisSetPopupOpen,\n    ] = useState(false);\n\n    const getUserPractisSets = usePractisSetsEnrollmentsService(\n        (users?.[0] as number).toString()\n    );\n\n    const triggerRef = useRef(null);\n\n    /**\n     * @function handleCloseAssignPractisSetPopup\n     * @returns { void }\n     */\n    const handleCloseAssignPractisSetPopup = (): void => {\n        Promise.resolve().then(() => {\n            setIsAssignPractisSetPopupOpen(false);\n            setShowOptions(false);\n        });\n    };\n\n    /**\n     * @function getUserPractisSetsSuccessCallback\n     * @returns { void }\n     */\n    const getUserPractisSetsSuccessCallback = (): void => {\n        setIsAssignPractisSetPopupOpen(true);\n    };\n\n    useEffect(() => {\n        if (users?.length === 1) {\n            getUserPractisSets(getUserPractisSetsSuccessCallback);\n        } else {\n            setIsAssignPractisSetPopupOpen(true);\n        }\n    }, [getUserPractisSets, users]);\n\n    if (!isAssignPractisSetPopupOpen) {\n        return <></>;\n    }\n\n    return (\n        <AssignPractisSets\n            users={users ?? []}\n            searchQuery={searchQuery}\n            isSelectAll={isSelectAll}\n            successApplyPractisSetsCallback={successApplyPractisSetsCallback}\n            triggerRef={triggerRef}\n            isOpen={isAssignPractisSetPopupOpen}\n            onClose={handleCloseAssignPractisSetPopup}\n            isFromBulkAction\n            totalCount={totalCount}\n        />\n    );\n};\n\nexport default AssignPractisSetsAndDueDateOptions;\n","import React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport {\n    useLabelsConfigState,\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../../../../features/labels/store/states';\nimport { useSetAssignLabelsActionService } from '../../../../../features/labels/store/services';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../../constants/interfaces/filters';\nimport { AssignLabelOptions } from './components/AssignLabelOptions';\nimport { useSelector } from 'react-redux';\nimport { getCompanyState } from '../../../../../pages/CompanySettings/store/reducers';\nimport { getProfileState } from '../../../../../pages/UserProfile/store/reducers';\nimport { TableAssignOptionTypes } from './enums/TableAssignOptionTypes';\nimport OutsideActionBox from '../../../OutsideActionBox/OutsideActionBox';\nimport { TableAssignOptionsSelectDropdown } from './components/TableAssignOptionsSelectDropdown';\nimport { TableAssignOptionsMenuItem } from './interfaces/TableAssignOptionsMenuItem';\nimport { TableAssignOptionsInterface } from './interfaces/TableAssignOptionsInterface';\nimport { TableAssignOptionsContainerInterface } from './interfaces/TableAssignOptionsContainerInterface';\nimport AssignPractisSetOptions from './components/AssignPractisSetOptions';\nimport DialogWrapper from '../../../DialogWrapper/DialogWrapper';\nimport { NudgeUser } from './components/NudgeUser';\nimport { NudgeWarning } from './components/NudgeWarning';\nimport { useLibraryPractisSetState } from '../../../../../features/library/store/states';\nimport { usePortableLabelsState } from '../../../../../features/portableLabels/store/states';\nimport { BulkActionConfirmation } from './components/BulkActionConfirmation';\nimport AssignPractisSetsAndDueDateOptions from './components/AssignPractisSetsAndDueDateOptions';\n\nconst Container = styled.div`\n    width: 100%;\n    height: 40px;\n    border-radius: 8px;\n    background-color: ${props => props.theme.Colors.white};\n    display: flex;\n    justify-content: space-around;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst OptionContainer = styled(OutsideActionBox)`\n    position: relative;\n    width: 100%;\n`;\n\nconst ContentArea = styled.div`\n    max-height: 300px;\n`;\n\nconst TableAssignOptionsMenu: FC<TableAssignOptionsInterface> = ({\n    labels,\n    practisSets,\n    disabled,\n    searchTerm,\n    updatedLabels,\n    company,\n    onAssignLabelsSubmit,\n    onNudgeSendButtonClicked,\n    assignLabelsTitle,\n    nudgeFromUser,\n    onOpenAssignLabelAction,\n    setAssignLabelsAction,\n    disabledPractisSets,\n    onExportClicked,\n    exportButtonDisabled,\n    practisSetName,\n    showNudgeWarning,\n    nudgeButtonDisabled,\n    onArchiveSubmissionsSubmit,\n    onResendInvitesSubmit,\n    onRevokeSubmit,\n    onRestoreSubmissionsSubmit,\n    onDuplicateSubmit,\n    assignLabelsPermissions,\n    sendNudgePermissions,\n    showExportPermissions,\n    assignPractisSetsAndDueDatePermissions,\n    assignPractisSetPermissions,\n    archivePermissions,\n    onUpdateDueDatesSubmit,\n    isDueDatesDisabled,\n    dueDatesPermissions,\n    resendInvitesPermissions,\n    revokePermissions,\n    removePractisSetPermission,\n    onRemovePractisSetSubmit,\n    onRemindSubmit,\n    showRemindPermission,\n    nudgeTitle,\n    remindDisabled,\n    removeItemsDisabled,\n    restorePermissions,\n    removeItemTitle,\n    duplicateItemTitle,\n    duplicateItemPermissions,\n    removeItemPermissions,\n    onRemoveItemsSubmit,\n    disabledLabel,\n    hideHint,\n    removeItemTooltip,\n    isAssignLabelsDisabled,\n    isArchiveDisabled,\n    isRestoreDisabled,\n    isRevokeDisabled,\n    isResendDisabled,\n    isDuplicateDisabled,\n    isSelectAll,\n    totalCount,\n    selectedItems,\n    searchQuery,\n    successApplyPractisSetsCallback,\n}) => {\n    const initialSearchParams: SearchParams = {\n        searchTerm: searchTerm,\n        filters: [],\n        orderBy: {},\n        offset: 0,\n        count: 0,\n        numberOfPages: 0,\n    };\n    const { refreshSearchParams } = useSearchParamsState(initialSearchParams);\n\n    const [showNudgeDialog, setShowNudgeDialog] = useState(false);\n    const [showNudgeWarningDialog, setShowNudgeWarningDialog] = useState(false);\n    const [showOptions, setShowOptions] = useState(false);\n    const [\n        showOptionType,\n        setShowOptionType,\n    ] = useState<TableAssignOptionTypes>();\n\n    const nudgeCloseButtonClicked = () => {\n        setShowNudgeDialog(false);\n    };\n\n    const nudgeOpenButtonClicked = () => {\n        if (!disabled && !nudgeButtonDisabled) {\n            if (!!showNudgeWarning) {\n                setShowNudgeWarningDialog(true);\n            } else {\n                setShowNudgeDialog(true);\n            }\n        }\n    };\n\n    const onNudgeSendClicked = (data: any) => {\n        if (onNudgeSendButtonClicked) {\n            onNudgeSendButtonClicked(data);\n            setShowNudgeDialog(false);\n        }\n    };\n\n    const onNudgeWarningProceed = () => {\n        setShowNudgeWarningDialog(false);\n        setShowNudgeDialog(true);\n    };\n\n    useEffect(() => {\n        if (updatedLabels) refreshSearchParams();\n    }, [updatedLabels, refreshSearchParams, company]);\n\n    const TableAssignOptionMenu: Array<TableAssignOptionsMenuItem> = [\n        {\n            name: 'Due Date',\n            value: TableAssignOptionTypes.DUE_DATES,\n            permissions: dueDatesPermissions || [],\n            show: !!dueDatesPermissions && !!onUpdateDueDatesSubmit,\n            disabled: !!disabled || !!isDueDatesDisabled,\n            destructive: false,\n            dataTest: 'due-date-table-action',\n        },\n        {\n            name: 'Assign Practis Sets',\n            value: TableAssignOptionTypes.ASSIGN_PRACTIS_SETS_AND_DUE_DATE,\n            permissions: assignPractisSetsAndDueDatePermissions || [],\n            show: !!assignPractisSetsAndDueDatePermissions,\n            disabled: !!disabled,\n            dataTest: 'assign-practis-sets-table-action',\n        },\n        {\n            name: assignLabelsTitle || 'Assign Labels',\n            value: TableAssignOptionTypes.ASSIGN_LABELS,\n            permissions: assignLabelsPermissions || [],\n            show: !!assignLabelsPermissions,\n            disabled:\n                !!disabled ||\n                !labels ||\n                (!!labels && !!labels.items && !labels.items.length) ||\n                !!isAssignLabelsDisabled,\n            dataTest: 'assign-labels-table-action',\n        },\n        {\n            name: 'Practis Set',\n            value: TableAssignOptionTypes.ASSIGN_PRACTIS_SETS,\n            permissions: assignPractisSetPermissions || [],\n            show: !!assignPractisSetPermissions,\n            disabled:\n                !!disabled ||\n                !practisSets ||\n                (!!practisSets &&\n                    !!practisSets.items &&\n                    !practisSets.items.length),\n            dataTest: 'practis-set-table-action',\n        },\n        {\n            name: nudgeTitle || 'Nudge Users',\n            value: TableAssignOptionTypes.NUDGE,\n            permissions: sendNudgePermissions || [],\n            show: !!sendNudgePermissions,\n            disabled: !!nudgeButtonDisabled || !!disabled,\n            dataTest: 'nudge-users-table-action',\n        },\n        {\n            name: 'Remind to Start',\n            value: TableAssignOptionTypes.REMIND,\n            permissions: showRemindPermission || [],\n            show: !!showRemindPermission,\n            disabled: !!disabled || !!remindDisabled,\n            dataTest: 'remind-to-start-table-action',\n        },\n        {\n            name: 'Export Report',\n            value: TableAssignOptionTypes.EXPORT,\n            permissions: showExportPermissions || [],\n            show: !!showExportPermissions,\n            disabled: !!exportButtonDisabled || !!disabled,\n            dataTest: 'export-report-table-action',\n        },\n        {\n            name: 'Resend Invites',\n            value: TableAssignOptionTypes.RESEND_INVITES,\n            permissions: resendInvitesPermissions || [],\n            show: !!resendInvitesPermissions,\n            disabled: !!disabled || !!isResendDisabled,\n            dataTest: 'resend-invites-table-action',\n        },\n        {\n            name: 'Revoke',\n            value: TableAssignOptionTypes.REVOKE,\n            permissions: revokePermissions || [],\n            show: !!revokePermissions,\n            disabled: !!disabled || !!isRevokeDisabled,\n            destructive: true,\n            hint:\n                !!disabled || !!isRevokeDisabled\n                    ? \"You can't revoke the admins' invitations\"\n                    : undefined,\n            dataTest: 'revoke-table-action',\n        },\n        {\n            name: 'Unassign Practis Sets',\n            value: TableAssignOptionTypes.REMOVE_PRACTIS_SET,\n            permissions: removePractisSetPermission || [],\n            show: !!removePractisSetPermission,\n            disabled: !!disabled,\n            destructive: true,\n            dataTest: 'unassign-practis-sets-table-action',\n        },\n        {\n            name: duplicateItemTitle ? duplicateItemTitle : 'Duplicate',\n            value: TableAssignOptionTypes.DUPLICATE,\n            permissions: duplicateItemPermissions || [],\n            show: !!duplicateItemPermissions,\n            disabled: !!disabled || !!isDuplicateDisabled,\n            dataTest: 'duplicate-table-action',\n        },\n        {\n            name: 'Restore',\n            value: TableAssignOptionTypes.RESTORE,\n            permissions: restorePermissions || [],\n            show: !!restorePermissions && !!onRestoreSubmissionsSubmit,\n            disabled: !!disabled || !!isRestoreDisabled,\n            dataTest: 'restore-table-action',\n        },\n        {\n            name: removeItemTitle ? removeItemTitle : 'Delete Items',\n            value: TableAssignOptionTypes.REMOVE_ITEMS,\n            permissions: removeItemPermissions || [],\n            show: !!removeItemPermissions,\n            disabled: !!removeItemsDisabled || !!disabled,\n            hint: !!removeItemsDisabled ? removeItemTooltip : '',\n            destructive: true,\n            dataTest: 'delete-table-action',\n        },\n        {\n            name: 'Archive',\n            value: TableAssignOptionTypes.ARCHIVE,\n            permissions: archivePermissions || [],\n            show: !!archivePermissions && !!onArchiveSubmissionsSubmit,\n            disabled: !!disabled || !!isArchiveDisabled,\n            destructive: true,\n            dataTest: 'archive-table-action',\n        },\n    ];\n\n    const performSwitch = (value: string) => {\n        switch (value) {\n            case TableAssignOptionTypes.ASSIGN_LABELS:\n                onAssignLabelsSubmit && onAssignLabelsSubmit();\n                break;\n            case TableAssignOptionTypes.ASSIGN_PRACTIS_SETS:\n                break;\n            case TableAssignOptionTypes.NUDGE:\n                onNudgeSendClicked && onNudgeSendClicked(payload);\n                break;\n            case TableAssignOptionTypes.REMIND:\n                !!onRemindSubmit && onRemindSubmit();\n                break;\n            case TableAssignOptionTypes.ARCHIVE:\n                !!onArchiveSubmissionsSubmit && onArchiveSubmissionsSubmit();\n                break;\n            case TableAssignOptionTypes.RESTORE:\n                !!onRestoreSubmissionsSubmit && onRestoreSubmissionsSubmit();\n                break;\n            case TableAssignOptionTypes.RESEND_INVITES:\n                !!onResendInvitesSubmit && onResendInvitesSubmit();\n                break;\n            case TableAssignOptionTypes.REVOKE:\n                !!onRevokeSubmit && onRevokeSubmit();\n                break;\n            case TableAssignOptionTypes.REMOVE_PRACTIS_SET:\n                !!onRemovePractisSetSubmit && onRemovePractisSetSubmit();\n                break;\n            case TableAssignOptionTypes.DUPLICATE:\n                !!onDuplicateSubmit && onDuplicateSubmit();\n                break;\n            case TableAssignOptionTypes.REMOVE_ITEMS:\n                !!onRemoveItemsSubmit && onRemoveItemsSubmit();\n                break;\n            case TableAssignOptionTypes.DUE_DATES:\n                !!onUpdateDueDatesSubmit && onUpdateDueDatesSubmit();\n                break;\n            default:\n                setShowOptions(false);\n                setPayload(null);\n        }\n    };\n\n    const handleMenuChange = (event: any) => {\n        const value =\n            event && event.target && event.target.value\n                ? event.target.value\n                : '';\n        if (!value) return;\n\n        switch (value) {\n            case TableAssignOptionTypes.ASSIGN_LABELS:\n                if (labels && labels.items && labels.items.length) {\n                    onOpenAssignLabelAction?.();\n                    setShowOptions(true);\n                    setShowOptionType(value);\n                }\n                break;\n            case TableAssignOptionTypes.ASSIGN_PRACTIS_SETS:\n                if (\n                    practisSets &&\n                    practisSets.items &&\n                    practisSets.items.length\n                ) {\n                    setShowOptions(true);\n                    setShowOptionType(value);\n                }\n                break;\n            case TableAssignOptionTypes.ASSIGN_PRACTIS_SETS_AND_DUE_DATE:\n                setShowOptions(true);\n                setShowOptionType(value);\n\n                break;\n            case TableAssignOptionTypes.NUDGE:\n                nudgeOpenButtonClicked();\n                break;\n            case TableAssignOptionTypes.EXPORT:\n                !!onExportClicked && onExportClicked();\n                break;\n            case TableAssignOptionTypes.DUE_DATES:\n                !!onUpdateDueDatesSubmit && onUpdateDueDatesSubmit();\n                break;\n            default:\n                if (isSelectAll) {\n                    setAction(value);\n                } else {\n                    performSwitch(value);\n                }\n                break;\n        }\n    };\n\n    const [action, setAction] = useState<string | null>(null);\n    const [payload, setPayload] = useState<any>(null);\n\n    return (\n        <Container>\n            {!!action && (\n                <BulkActionConfirmation\n                    onClose={() => setAction(null)}\n                    onProceed={() => {\n                        performSwitch(action);\n                        setAction(null);\n                    }}\n                    itemsCount={totalCount || 0}\n                />\n            )}\n            <TableAssignOptionsSelectDropdown\n                items={TableAssignOptionMenu}\n                onChange={handleMenuChange}\n                showUpArrow={showOptions}\n                disabled={disabled}\n                disabledLabel={disabledLabel}\n                hideHint={hideHint}\n            />\n            <OptionContainer open={showOptions}>\n                <ContentArea>\n                    {showOptionType ===\n                        TableAssignOptionTypes.ASSIGN_LABELS && (\n                        <AssignLabelOptions\n                            disabled={disabled}\n                            onAssignLabelsSubmit={() => {\n                                onAssignLabelsSubmit && onAssignLabelsSubmit();\n                            }}\n                            setAssignLabelsAction={setAssignLabelsAction}\n                            setShowOptions={setShowOptions}\n                        />\n                    )}\n\n                    {showOptionType ===\n                        TableAssignOptionTypes.ASSIGN_PRACTIS_SETS && (\n                        <AssignPractisSetOptions\n                            disabled={disabledPractisSets}\n                            setShowOptions={setShowOptions}\n                        />\n                    )}\n\n                    {showOptionType ===\n                        TableAssignOptionTypes.ASSIGN_PRACTIS_SETS_AND_DUE_DATE && (\n                        <AssignPractisSetsAndDueDateOptions\n                            users={selectedItems}\n                            searchQuery={searchQuery}\n                            isSelectAll={isSelectAll}\n                            setShowOptions={setShowOptions}\n                            successApplyPractisSetsCallback={\n                                successApplyPractisSetsCallback\n                            }\n                            totalCount={totalCount}\n                        />\n                    )}\n                </ContentArea>\n            </OptionContainer>\n\n            {showNudgeDialog && (\n                <DialogWrapper\n                    customization={{\n                        width: 480,\n                        padding: '31px 32px 32px 40px',\n                    }}\n                >\n                    <NudgeUser\n                        fromUser={nudgeFromUser}\n                        practisSetName={practisSetName}\n                        onSend={data => {\n                            if (isSelectAll) {\n                                setAction(TableAssignOptionTypes.NUDGE);\n                                setPayload(data);\n                                nudgeCloseButtonClicked();\n                            } else {\n                                onNudgeSendClicked && onNudgeSendClicked(data);\n                            }\n                        }}\n                        onClose={nudgeCloseButtonClicked}\n                    />\n                </DialogWrapper>\n            )}\n            {showNudgeWarningDialog && (\n                <DialogWrapper\n                    customization={{\n                        width: 400,\n                        padding: '36px 32px 35px 32px',\n                    }}\n                >\n                    <NudgeWarning\n                        onProceed={onNudgeWarningProceed}\n                        onClose={() => setShowNudgeWarningDialog(false)}\n                    />\n                </DialogWrapper>\n            )}\n        </Container>\n    );\n};\n\nexport const TableAssignOptionsMenuContainer: FC<TableAssignOptionsContainerInterface> = ({\n    disabled,\n    renderAdditionalAction,\n    onOpenAssignLabelAction,\n    onAssignLabelsSubmit,\n    onNudgeSendButtonClicked,\n    assignLabelsTitle,\n    assignLabelsMinWidth,\n    hideSelectAll,\n    assignedLabelsCount,\n    disabledPractisSets,\n    assignLabelButtonTitle,\n    onExportClicked,\n    exportButtonDisabled,\n    practisSetName,\n    showNudgeWarning,\n    nudgeButtonDisabled,\n    onArchiveSubmissionsSubmit,\n    onUpdateDueDatesSubmit,\n    onResendInvitesSubmit,\n    onRevokeSubmit,\n    onRemindSubmit,\n    onRestoreSubmissionsSubmit,\n    onDuplicateSubmit,\n    assignLabelsPermissions,\n    sendNudgePermissions,\n    showExportPermissions,\n    assignPractisSetsAndDueDatePermissions,\n    assignPractisSetPermissions,\n    archivePermissions,\n    resendInvitesPermissions,\n    revokePermissions,\n    removePractisSetPermission,\n    duplicateItemPermissions,\n    onRemovePractisSetSubmit,\n    showRemindPermission,\n    restorePermissions,\n    nudgeTitle,\n    remindDisabled,\n    removeItemsDisabled,\n    removeItemTitle,\n    removeItemPermissions,\n    onRemoveItemsSubmit,\n    disabledLabel,\n    hideHint,\n    duplicateItemTitle,\n    removeItemTooltip,\n    isAssignLabelsDisabled,\n    isArchiveDisabled,\n    isDueDatesDisabled,\n    isRestoreDisabled,\n    isRevokeDisabled,\n    isResendDisabled,\n    isDuplicateDisabled,\n    isSelectAll,\n    dueDatesPermissions,\n    totalCount,\n    selectedItems,\n    searchQuery,\n    successApplyPractisSetsCallback,\n}) => {\n    const state = useLabelsState();\n    const labelsList = usePortableLabelsState().data;\n    const practisState = useLibraryPractisSetState();\n    const labelsConfigState = useLabelsConfigState();\n    const updatedLabels = useUpdatedLabelsState();\n    const company = useSelector(getCompanyState);\n    const profile = useSelector(getProfileState);\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n\n    return (\n        <TableAssignOptionsMenu\n            labels={labelsList}\n            practisSets={practisState.fullList}\n            updatedLabels={updatedLabels.data}\n            disabled={disabled}\n            searchTerm={labelsConfigState.searchTerm}\n            renderAdditionalAction={renderAdditionalAction}\n            company={company}\n            onOpenAssignLabelAction={onOpenAssignLabelAction}\n            onAssignLabelsSubmit={onAssignLabelsSubmit}\n            nudgeFromUser={\n                !!profile ? `${profile.firstName} ${profile.lastName}` : ''\n            }\n            onNudgeSendButtonClicked={onNudgeSendButtonClicked}\n            assignLabelsTitle={assignLabelsTitle}\n            assignLabelsMinWidth={assignLabelsMinWidth}\n            hideSelectAll={hideSelectAll}\n            assignedLabelsCount={assignedLabelsCount}\n            setAssignLabelsAction={setAssignLabelsAction}\n            disabledPractisSets={disabledPractisSets}\n            assignLabelButtonTitle={assignLabelButtonTitle}\n            onExportClicked={onExportClicked}\n            exportButtonDisabled={exportButtonDisabled}\n            practisSetName={practisSetName}\n            showNudgeWarning={showNudgeWarning}\n            nudgeButtonDisabled={nudgeButtonDisabled}\n            onArchiveSubmissionsSubmit={onArchiveSubmissionsSubmit}\n            onUpdateDueDatesSubmit={onUpdateDueDatesSubmit}\n            onRemindSubmit={onRemindSubmit}\n            onRestoreSubmissionsSubmit={onRestoreSubmissionsSubmit}\n            onDuplicateSubmit={onDuplicateSubmit}\n            assignLabelsPermissions={assignLabelsPermissions}\n            sendNudgePermissions={sendNudgePermissions}\n            showExportPermissions={showExportPermissions}\n            assignPractisSetsAndDueDatePermissions={assignPractisSetsAndDueDatePermissions}\n            assignPractisSetPermissions={assignPractisSetPermissions}\n            archivePermissions={archivePermissions}\n            duplicateItemPermissions={duplicateItemPermissions}\n            resendInvitesPermissions={resendInvitesPermissions}\n            dueDatesPermissions={dueDatesPermissions}\n            revokePermissions={revokePermissions}\n            onResendInvitesSubmit={onResendInvitesSubmit}\n            onRevokeSubmit={onRevokeSubmit}\n            removePractisSetPermission={removePractisSetPermission}\n            onRemovePractisSetSubmit={onRemovePractisSetSubmit}\n            showRemindPermission={showRemindPermission}\n            nudgeTitle={nudgeTitle}\n            remindDisabled={remindDisabled}\n            restorePermissions={restorePermissions}\n            assignedLabels={state.assignedLabels}\n            removeItemsDisabled={removeItemsDisabled}\n            removeItemTitle={removeItemTitle}\n            onRemoveItemsSubmit={onRemoveItemsSubmit}\n            removeItemPermissions={removeItemPermissions}\n            disabledLabel={disabledLabel}\n            hideHint={hideHint}\n            duplicateItemTitle={duplicateItemTitle}\n            removeItemTooltip={removeItemTooltip}\n            isAssignLabelsDisabled={isAssignLabelsDisabled}\n            isArchiveDisabled={isArchiveDisabled}\n            isDueDatesDisabled={isDueDatesDisabled}\n            isRestoreDisabled={isRestoreDisabled}\n            isRevokeDisabled={isRevokeDisabled}\n            isResendDisabled={isResendDisabled}\n            isDuplicateDisabled={isDuplicateDisabled}\n            isSelectAll={isSelectAll}\n            totalCount={totalCount}\n            selectedItems={selectedItems}\n            searchQuery={searchQuery}\n            successApplyPractisSetsCallback={successApplyPractisSetsCallback}\n        />\n    );\n};\n\nexport default TableAssignOptionsMenuContainer;\n","import { isEmpty } from 'lodash';\nimport { FC, memo } from 'react';\n\nimport { Paging } from '../PagingNavigation';\nimport { SelectAll } from '../SelectAll';\nimport {\n    ItemCount,\n    Root,\n    TableToolsLeft,\n    TableToolsRight,\n    Wrapper,\n} from './style';\nimport { TableToolItem } from './table-tool-item';\nimport { TableSearchInput } from './table-search-input';\nimport { TableToolsProps } from './types';\nimport { TableAssignOptionsMenuContainer } from '../table/TableAssignOptionsMenu';\nimport { CalendarPopup, CalendarPopUpProps } from '../../Calendar';\n\nconst TableTools: FC<TableToolsProps> = memo(props => {\n    const {\n        customization,\n        isSelectedItemOptionsVisible,\n        selectedItemOptions,\n        searchInputOptions,\n        filterOptions,\n        calendarFilterOptions,\n        pagingOptions,\n        itemCount,\n        itemCountDataTest,\n    } = props;\n\n    const {\n        rootClassName,\n        wrapperClassName,\n        tableToolsLeftClassName,\n        tableToolsRightClassName,\n    } = customization || {};\n\n    const {\n        initialValue,\n        onSearchChange,\n        isSearchInputDisabled,\n        className,\n        dataTest = 'table-search-input',\n        placeholder = undefined,\n    } = searchInputOptions || {};\n\n    const { filterComponent = undefined } = filterOptions || {};\n    const { calendarPopUpProps = undefined } = calendarFilterOptions || {};\n\n    return (\n        <Root className={rootClassName}>\n            <Wrapper className={wrapperClassName}>\n                <TableToolsLeft className={tableToolsLeftClassName}>\n                    {isSelectedItemOptionsVisible && selectedItemOptions && (\n                        <SelectAll\n                            isSelectAll={selectedItemOptions.isSelectAll}\n                            selectedLength={\n                                selectedItemOptions?.selectedLength ?? 0\n                            }\n                            totalCount={selectedItemOptions.totalCount}\n                            itemsPerPage={selectedItemOptions.itemsPerPage}\n                            onClearSelecion={\n                                selectedItemOptions.onClearSelection\n                            }\n                            onSelectAll={selectedItemOptions.onSelectAll}\n                            style={selectedItemOptions?.style}\n                            dataTest=\"table\"\n                        >\n                            {selectedItemOptions?.bulkActionsConfig && (\n                                <TableToolItem width={153} marginRight={16}>\n                                    <TableAssignOptionsMenuContainer\n                                        {...selectedItemOptions.bulkActionsConfig}\n                                    />\n                                </TableToolItem>\n                            )}\n                        </SelectAll>\n                    )}\n                    {searchInputOptions && (\n                        <TableToolItem\n                            width={224}\n                            marginRight={16}\n                            className={className}\n                        >\n                            <TableSearchInput\n                                initialValue={initialValue}\n                                placeholder={placeholder}\n                                onChange={onSearchChange}\n                                disabled={isSearchInputDisabled}\n                                dataTest={dataTest}\n                            />\n                        </TableToolItem>\n                    )}\n                    {!isEmpty(filterOptions) && (\n                        <TableToolItem marginRight={16}>\n                            {filterComponent}\n                        </TableToolItem>\n                    )}\n                    {!isEmpty(calendarFilterOptions) && (\n                        <TableToolItem marginRight={16}>\n                            <CalendarPopup\n                                {...(calendarPopUpProps as CalendarPopUpProps<true>)}\n                            />\n                        </TableToolItem>\n                    )}\n                </TableToolsLeft>\n                <TableToolsRight className={tableToolsRightClassName}>\n                    {pagingOptions && (\n                        <TableToolItem>\n                            <Paging {...pagingOptions} />\n                        </TableToolItem>\n                    )}\n                    {itemCount && (\n                        <TableToolItem>\n                            <ItemCount data-test={itemCountDataTest ?? 'table-selected-item'}>\n                                {itemCount}\n                            </ItemCount>\n                        </TableToolItem>\n                    )}\n                </TableToolsRight>\n            </Wrapper>\n        </Root>\n    );\n});\n\nexport default TableTools;\n\n\n","import { memo } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport { TableContainer, TableExtendContainer, Wrapper } from './styles';\nimport { Table } from './table';\nimport { TableDivider } from './table-divider';\nimport { TableHeaderFilter } from './table-header-filter';\nimport { TableRefresh } from './table-refresh';\nimport { TableTools } from './table-tools';\nimport { TableViewMode } from './table/type';\nimport { TableWrapperProps } from './types';\n\nconst TableWrapperView = (props: TableWrapperProps) => {\n    const {\n        addOverflow,\n        tableWrapperClassName,\n        tableContainerClassName,\n        tableInnerClassName,\n        tableToolsOptions,\n        cornered,\n        shouldHideTableDivider,\n        tableRefreshConfigurations,\n        tableEmptyStateConfigurations,\n        selectedLabels,\n        headerFilterPosition = 'TOP',\n        onRemoveLabel,\n        configurations,\n        data,\n        tableStates,\n        scrollRef,\n        scrollPaginationProps,\n        viewMode = TableViewMode.SIMPLE,\n    } = props;\n\n    return (\n        <Wrapper>\n            <TableContainer className={tableWrapperClassName}>\n                {tableRefreshConfigurations && (\n                    <TableRefresh\n                        {...tableRefreshConfigurations}\n                        top={\n                            !isEmpty(selectedLabels) &&\n                            headerFilterPosition === 'TOP'\n                                ? -42\n                                : undefined\n                        }\n                    />\n                )}\n                {selectedLabels && headerFilterPosition === 'TOP' && (\n                    <TableHeaderFilter\n                        selectedLabels={selectedLabels}\n                        onRemoveLabel={onRemoveLabel}\n                    />\n                )}\n                <TableTools {...tableToolsOptions} />\n\n                <TableDivider hide={shouldHideTableDivider} />\n\n                {selectedLabels && headerFilterPosition === 'BOTTOM' && (\n                    <TableHeaderFilter\n                        selectedLabels={selectedLabels}\n                        onRemoveLabel={onRemoveLabel}\n                    />\n                )}\n\n                <TableExtendContainer>\n                    <Table\n                        data={data}\n                        tableStates={tableStates}\n                        cornered={cornered}\n                        addOverflow={addOverflow}\n                        tableContainerClassName={tableContainerClassName}\n                        tableInnerClassName={tableInnerClassName}\n                        tableEmptyStateConfigurations={\n                            tableEmptyStateConfigurations\n                        }\n                        configuration={configurations}\n                        scrollRef={scrollRef}\n                        scrollPaginationProps={scrollPaginationProps}\n                        viewMode={viewMode}\n                    />\n                </TableExtendContainer>\n            </TableContainer>\n        </Wrapper>\n    );\n};\n\nexport default memo(TableWrapperView);\n","export enum ErrorMessages {\n    NO_REGISTER_PERMISSION = 'You may be trying to register in the wrong place.',\n    WRONG_EMAIL_FORMAT = 'The format you used to enter this email isn’t correct.',\n    INVITATION_NOT_FOUND = 'Invitation not found or outdated',\n}\n","import styled from 'styled-components';\nimport { makeStyles } from '@material-ui/core';\nimport { Field } from 'formik';\n\nexport const useStyles = makeStyles(theme => ({\n    imageUploaderStyles: {\n        marginBottom: '60px !important',\n\n        '@media(max-height: 650px)': {\n            marginTop: '64px',\n        },\n    },\n\n    checkboxContainer: {\n        alignItems: 'flex-start !important',\n        margin: '-10px 0 20px 0',\n        gap: '4px',\n        userSelect: 'none',\n    },\n\n    checkBoxAnchorTag: {\n        color: 'var(--ps-blue-main)',\n        textDecoration: 'none',\n        marginLeft: 5,\n    },\n}));\n\nexport const UserInfoContainer = styled.div`\n    width: 100%;\n    text-align: center;\n    margin-bottom: 20px;\n`;\n\nexport const UserTitle = styled.div`\n    color: var(--ps-white-1);\n    font-size: 15px;\n`;\nexport const UserEmail = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-2);\n`;\n\nexport const HeaderTitle = styled.div`\n    flex-grow: 0;\n    font-size: 18px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.44;\n    letter-spacing: normal;\n    margin: 8px 0;\n    text-align: center;\n    color: var(--ps-white-1);\n`;\n\nexport const FormContainer = styled.div`\n    width: 100%;\n`;\n\nexport const FieldsContainer = styled.div<{ marginBottom?: string }>`\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    > div,\n    p {\n        margin-bottom: ${props =>\n            !!props.marginBottom ? props.marginBottom : '16px'};\n    }\n`;\n\nexport const StyledField = styled(Field)`\n    flex: 1;\n`;\n\nexport const Divider = styled.div`\n    width: 39px;\n    height: 3px;\n    margin: 10px auto 0;\n    background-color: var(--ps-blue-main);\n`;","import * as Yup from 'yup';\n\nimport Validation from '../../../services/validation';\n\nexport const RegisterSchema = Yup.object().shape({\n    password: Validation.password,\n    confirmPassword: Validation.confirmPassword,\n});\n\nexport const passwordHintText = 'Your password must be 8 characters long.';\n","import { RegisterFormValuesType } from './types';\n\n/**\n * @function isSubmitButtonDisabled\n * @param { RegisterFormValuesType } values\n * @returns { boolean }\n */\nexport const isSubmitButtonDisabled = (\n    values: RegisterFormValuesType\n): boolean => {\n    if (!values) return true;\n\n    const keys = Object.keys(values);\n    const formValues: any = values;\n    return keys.filter(key => formValues[key]).length < keys.length;\n};\n\n","import { Formik, Form } from 'formik';\n\nimport { Button } from '../../../ui/components/Button';\nimport { FormikField } from '../../../ui/components/FormikField';\nimport {\n    HeaderTitle,\n    StyledField,\n    FormContainer,\n    FieldsContainer,\n    UserEmail,\n    UserInfoContainer,\n    UserTitle,\n    useStyles,\n    Divider,\n} from './styles';\nimport { passwordHintText, RegisterSchema } from './constants';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport { RegistrationProps } from './types';\nimport { ImageUploader } from '../../../ui/components/ImageUploader';\nimport { isSubmitButtonDisabled } from './helper';\nimport Checkbox from '../../../ui/components/Checkbox';\n\nfunction RegistrationView(props: RegistrationProps) {\n    const {\n        formRef,\n        userInfo,\n        setProfileImage,\n        handleSubmit,\n        isTermsAccepted,\n        handleToggleTerms,\n    } = props;\n\n    const classes = useStyles();\n\n    return (\n        <LoginAuthWrapper contentWidth={343} heightToShowScroll={720} hideFooter={true}>\n            <ImageUploader\n                setProfileImage={setProfileImage}\n                placeHolder={userInfo?.firstName?.charAt(0).toUpperCase()}\n                className={classes.imageUploaderStyles}\n                dataTest=\"user-avatar\"\n            />\n            <UserInfoContainer>\n                <UserTitle data-test=\"user-name\">\n                    {`${userInfo?.firstName ?? ''} ${userInfo?.lastName ?? ''}`}\n                </UserTitle>\n                <UserEmail data-test=\"user-email\">{userInfo?.email ?? ''}</UserEmail>\n                <Divider />\n            </UserInfoContainer>\n\n            <HeaderTitle data-test=\"account-form-title\">Create an account</HeaderTitle>\n            <FormContainer>\n                <Formik\n                    ref={formRef}\n                    initialValues={{\n                        password: '',\n                        confirmPassword: '',\n                    }}\n                    enableReinitialize={true}\n                    onSubmit={handleSubmit}\n                    validationSchema={RegisterSchema}\n                >\n                    {({ values, isSubmitting }) => (\n                        <Form>\n                            <FieldsContainer>\n                                <StyledField\n                                    type=\"password-with-eye\"\n                                    autoComplete=\"new-password\"\n                                    component={FormikField}\n                                    name=\"password\"\n                                    label=\"Password\"\n                                    colorTheme=\"darkThree\"\n                                    fontSize=\"15px\"\n                                    labelFontSize=\"15px\"\n                                    height=\"56px\"\n                                    labelFontWeight={600}\n                                    className=\"login-input\"\n                                    errorPadding=\"2px 0\"\n                                    errorColor=\"var(--ps-red-main)\"\n                                    hint={passwordHintText}\n                                    autoFocus\n                                    decreaseLabelFontSize\n                                    dataTest=\"password\"\n                                />\n                                <StyledField\n                                    type=\"password-with-eye\"\n                                    autoComplete=\"new-password\"\n                                    component={FormikField}\n                                    name=\"confirmPassword\"\n                                    label=\"Confirm Password\"\n                                    colorTheme=\"darkThree\"\n                                    fontSize=\"15px\"\n                                    labelFontSize=\"15px\"\n                                    height=\"56px\"\n                                    labelFontWeight={600}\n                                    className=\"login-input\"\n                                    errorPadding=\"2px 0 0 0\"\n                                    errorColor=\"var(--ps-red-main)\"\n                                    decreaseLabelFontSize\n                                    dataTest=\"confirm-password\"\n                                />\n                            </FieldsContainer>\n\n                            <Checkbox\n                                className={classes.checkboxContainer}\n                                checked={isTermsAccepted}\n                                handleChange={handleToggleTerms}\n                                background=\"transparent\"\n                                label={\n                                    <div>\n                                        I've read, understood, and agree to the\n                                        <a\n                                            href=\"https://www.gopractis.com/document-privacy-policy\"\n                                            target=\"_blank\"\n                                            rel=\"noreferrer\"\n                                            className={\n                                                classes.checkBoxAnchorTag\n                                            }\n                                        >\n                                            Privacy Policy\n                                        </a>,\n                                        <a\n                                            href=\"https://www.gopractis.com/document-terms-of-use\"\n                                            target=\"_blank\"\n                                            rel=\"noreferrer\"\n                                            className={\n                                                classes.checkBoxAnchorTag\n                                            }\n                                        >\n                                            Terms to Use\n                                        </a>, and \n                                        <a\n                                            href=\"https://www.gopractis.com/document-terms-of-service\"\n                                            target=\"_blank\"\n                                            rel=\"noreferrer\"\n                                            className={\n                                                classes.checkBoxAnchorTag\n                                            }\n                                        >\n                                            Terms of Service.\n                                        </a>\n                                    </div>\n                                }\n                                size={16}\n                                dataTest=\"terms-checkbox\"\n                                fontColor=\"var(--ps-grey-4)\"\n                            />\n\n                            <Button\n                                type=\"submit\"\n                                width=\"100%\"\n                                height=\"56px\"\n                                buttonWidth=\"100%\"\n                                fontSize={16}\n                                style={{ marginTop: '10px' }}\n                                disabled={\n                                    isSubmitButtonDisabled(values) ||\n                                    !isTermsAccepted\n                                }\n                                loading={isSubmitting}\n                                dataTest=\"continue-button\"\n                            >\n                                Continue\n                            </Button>\n                        </Form>\n                    )}\n                </Formik>\n            </FormContainer>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default RegistrationView;\n","import { FormikActions } from 'formik';\nimport { memo, useCallback, useEffect, useRef, useState } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\n\nimport ROUTES from '../../../routes/routes';\nimport Storage from '../../../services/Storage';\nimport { LocationState } from '../../../tools/router';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useUploadPhotoService } from '../../UserProfile/store/services';\nimport {\n    useAuthType,\n    useResetProfileService,\n    useTestInvitationService,\n} from '../store/services';\nimport { ErrorMessages } from '../tools';\nimport {\n    RegisterFormValuesType,\n    UserInfoType,\n} from './types';\nimport RegistrationView from './view';\nimport useWindowDimensions from '../../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../../theme/variables';\nimport { useRedirectToPhoneVerification } from '../../../helpers/hooks/useRedirectToPhoneVerification';\nimport { isTeamLeader } from '../../../constants/enums';\nimport { useRegistrationApi } from '../../../api';\nimport { clearAuthData } from '../../../helpers/functions/auth-helpers';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { AuthType } from '../../../api/auth/enums';\nimport { replaceUrlQueryParam } from '../../../routes/helpers';\n\nconst qs = require('query-string');\n\nfunction RegistrationController() {\n    const history = useHistory();\n    const location = useLocation<LocationState>();\n    const [userInfo, setUserInfo] = useState<UserInfoType | null>(null);\n    const [profileImage, setProfileImage] = useState<File | null>(null);\n    const [isTermsAccepted, setIsTermsAccepted] = useState(false);\n\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.small;\n\n    useHtmlPageTitle('Create an account');\n\n\n    const formRef = useRef(null);\n    const handleTestInvitation = useTestInvitationService();\n    const handleResetProfile = useResetProfileService();\n    const handleFileUpload = useUploadPhotoService();\n    const showMessage = useShowMessage();\n    const redirectToPhoneVerification = useRedirectToPhoneVerification();\n    const register = useRegistrationApi();\n    const authType = useAuthType();\n\n    /**\n     * @function handleSubmitError\n     * @param { ErrorResult } error\n     * @returns { void }\n     */\n    const handleSubmitError = useCallback(\n        (error: ErrorResult) => {\n            if (error.code === 403) {\n                showMessage(ErrorMessages.NO_REGISTER_PERMISSION, 'error');\n            } else if (error.code === 404) {\n                showMessage(ErrorMessages.INVITATION_NOT_FOUND, 'error');\n            } else if (error.code === 400 && error.details) {\n                const details = error.details;\n                const checkEmail = details.find(\n                    (item: any) => item.field === 'email',\n                );\n\n                let message = '';\n                if (checkEmail) {\n                    message = ErrorMessages.WRONG_EMAIL_FORMAT;\n                } else {\n                    message = details[0].message as string;\n                }\n\n                showMessage(message, 'error');\n            } else {\n                showMessage(error.message, 'error');\n            }\n        },\n        [showMessage],\n    );\n\n    /**\n     * @function handleUploadProfilePicture\n     * @returns { Promise<void> }\n     */\n    const handleUploadProfilePicture = useCallback(\n        async (userId: number) => {\n            if (profileImage) {\n                handleFileUpload(userId, profileImage);\n            }\n        },\n        [handleFileUpload, profileImage],\n    );\n\n    /**\n     * @function handleSubmit\n     * @param { RegisterFormValuesType } values\n     * @param { FormikActions<RegisterFormValuesType> } formikActions\n     */\n    const handleSubmit = useCallback(\n        (\n            values: RegisterFormValuesType,\n            formikActions: FormikActions<RegisterFormValuesType>,\n        ) => {\n            const { setSubmitting } = formikActions;\n\n            const registerValues = {\n                firstName: userInfo?.firstName || '',\n                lastName: userInfo?.lastName || '',\n                email: userInfo?.email || '',\n                password: values.password,\n                code: qs.parse(location.search).token ?? '',\n                phoneNumber: null,\n            };\n\n            register(registerValues)\n                .then((response: any) => {\n                    Storage.set('temp_token', response.token);\n                    handleUploadProfilePicture(response.user.id);\n                    const isTeamLead = isTeamLeader(response.user.role.name);\n                    const user = Object.assign({ isTeamLead }, response.user);\n                    redirectToPhoneVerification({\n                        user,\n                        isNewUser: true,\n                    });\n                })\n                .catch((error: ErrorResult) => {\n                    setSubmitting(false);\n                    handleSubmitError(error);\n                });\n        },\n        [\n            handleUploadProfilePicture,\n            location,\n            userInfo,\n            handleSubmitError,\n            redirectToPhoneVerification,\n            register,\n        ],\n    );\n\n    /**\n     * @function handleToggleTerms\n     * @returns { void }\n     */\n    const handleToggleTerms = useCallback(() => {\n        setIsTermsAccepted(prev => !prev);\n    }, []);\n\n    /**\n     * @function handleRedirectToInvalidInvitationPage\n     * @returns { void }\n     */\n    const handleRedirectToInvalidInvitationPage = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.INVALID_INVITE);\n    }, [history]);\n\n    useEffect(() => {\n        const invitationToken = qs.parse(location.search).token ?? null;\n\n        if (!invitationToken) {\n            handleRedirectToInvalidInvitationPage();\n        }\n\n        clearAuthData();\n\n        authType({ invitation: invitationToken })\n            .then((response: { type: AuthType; url?: string }) => {\n                const url = response.url;\n                if (url) {\n                    window.location.href = replaceUrlQueryParam(url, 'redirect_uri', window.location.origin + `/auth0-callback`);\n                } else {\n                    handleTestInvitation(\n                        invitationToken,\n                        handleRedirectToInvalidInvitationPage,\n                    ).then(response => {\n                        if (response) {\n                            setUserInfo(response);\n                        }\n                    });\n                }\n            }).catch(() => {\n            handleRedirectToInvalidInvitationPage();\n        });\n    }, [\n        handleRedirectToInvalidInvitationPage,\n        handleTestInvitation,\n        location.search,\n    ]);\n\n    useEffect(() => {\n        return () => {\n            handleResetProfile();\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return (\n        <RegistrationView\n            formRef={formRef}\n            isMobile={isMobile}\n            userInfo={userInfo}\n            setProfileImage={setProfileImage}\n            handleSubmit={handleSubmit}\n            isTermsAccepted={isTermsAccepted}\n            handleToggleTerms={handleToggleTerms}\n        />\n    );\n}\n\nexport default memo(RegistrationController);","import { forwardRef } from 'react';\n\nimport { IconProps } from './types';\n\nexport const Camera = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"21\"\n                height=\"20\"\n                viewBox=\"0 0 21 20\"\n                fill=\"none\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#p0w82laf1a)\">\n                    <path\n                        fill-rule=\"evenodd\"\n                        clip-rule=\"evenodd\"\n                        d=\"m15.25 6.083-1.583-1.916H7.751L6.167 6.083l-.5.584H3.251v9.166h15V6.667h-2.417l-.583-.584zM13.72 2.5c.495 0 .964.22 1.28.6L16.584 5h1.667c.92 0 1.666.746 1.666 1.667v9.166c0 .92-.746 1.667-1.666 1.667h-15c-.92 0-1.667-.746-1.667-1.667V6.667C1.584 5.747 2.33 5 3.251 5h1.666l1.584-1.9c.317-.38.786-.6 1.28-.6h5.939zm-.886 7.917a2.063 2.063 0 0 0-2.083-2.084 2.063 2.063 0 0 0-2.084 2.084c0 1.166.917 2.083 2.084 2.083a2.063 2.063 0 0 0 2.083-2.083zm-5.833 0a3.734 3.734 0 0 1 3.75-3.75 3.734 3.734 0 0 1 3.75 3.75 3.734 3.734 0 0 1-3.75 3.75A3.734 3.734 0 0 1 7 10.417z\"\n                        fill=\"#fff\"\n                    />\n                </g>\n                <defs>\n                    <clipPath id=\"p0w82laf1a\">\n                        <path\n                            fill=\"#fff\"\n                            transform=\"translate(1.584 2.5)\"\n                            d=\"M0 0h18.333v15H0z\"\n                        />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default Camera;\n\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n`;\n\nexport const StyledImageContainer = styled.div<{ src?: string, rectStyled?: boolean }>`\n    position: absolute;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    z-index: 1;\n    width: 80px;\n    height: 80px;\n    border-radius: 50%;\n    border: none;\n    background: var(--ps-graphite-2);\n    background-image: ${({ src }) => (src ? `url('${encodeURI(src)}')` : ``)};\n    background-position: center;\n    background-repeat: no-repeat;\n    background-size: 80px 80px;\n    cursor: pointer;\n    font-size: 32px;\n    font-weight: bold;\n    color: var(--ps-grey-1);\n\n    ${({ rectStyled, src }) => (rectStyled &&\n        `width: 88px;\n        height: 88px;\n        margin: 5px 51px 25px 19px;\n        background-size: 88px 88px;\n        padding: 32px;\n        border-radius: 4px;\n        border: solid 1px var(--ps-grey-2);\n        border-width: ${src ? `0px` : `1px`};\n        background-color: var(--ps-grey-3);\n        color: var(--ps-black-1);\n        box-sizing: border-box;`\n    )}\n`;\n\nexport const BadgeContainer = styled.div<{ rectStyled?: boolean }>`\n    position: absolute;\n    width: 24px;\n    height: 24px;\n    margin-top: 3rem;\n    margin-left: 4rem;\n    box-sizing: border-box;\n    z-index: 3;\n    color: red;\n    background: var(--ps-blue-main);\n    padding: 5px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    ${({ rectStyled }) => (rectStyled &&\n        `width: 36px;\n        height: 36px;\n        padding: 8px;\n        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.14);\n        background-color: var(--ps-grey-2);`\n    )}\n`;\n\nexport const TrashContainer = styled.div`\n    position: absolute;\n    margin-top: 3rem;\n    margin-left: 4rem;\n    z-index: 3;\n    color: var(--ps-white-1);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 36px;\n    height: 36px;\n    padding: 8px;\n    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.14);\n    background-color: var(--ps-blue-main);\n`;\n\nexport const LoadingContainer = styled.div`\n    position: absolute;\n`;","import Camera from '../../icons/Camera';\nimport TrashBin from '../../icons/TrashBin';\nimport { Loading } from '../LoadingCopmonent';\nimport {\n    BadgeContainer,\n    Container,\n    StyledImageContainer,\n    TrashContainer,\n    LoadingContainer\n} from './styles';\nimport { ImageUploaderViewProps } from './types';\n\nfunction ImageUploaderView(props: ImageUploaderViewProps) {\n    const {\n        initialImage,\n        fileInputRef,\n        className,\n        placeHolder,\n        editedImage,\n        handleImageChange,\n        handleInputClick,\n        isInProgress,\n        dataTest,\n        onFileDelete,\n        rectStyled\n    } = props;\n    const imageSrc = editedImage || initialImage;\n\n    return (\n        <Container\n            className={className}\n            onClick={() => fileInputRef?.current?.click()}\n            data-test={dataTest && `${dataTest}-container`}\n        >\n            <input\n                id=\"myInput\"\n                type=\"file\"\n                ref={fileInputRef}\n                style={{ display: 'none' }}\n                accept=\"image/jpeg, image/png, image/bmp\"\n                onChange={handleImageChange}\n                onClick={handleInputClick}\n                data-test={dataTest && `${dataTest}-input`}\n            />\n            <StyledImageContainer src={!isInProgress && imageSrc} data-test={dataTest && `${dataTest}-image`} rectStyled={rectStyled}>\n                {!imageSrc && !isInProgress && placeHolder}\n                {isInProgress &&\n                    <LoadingContainer>\n                        <Loading size={24} />\n                    </LoadingContainer>\n                }\n            </StyledImageContainer>\n            {rectStyled && imageSrc ?\n                <TrashContainer data-test={dataTest && `${dataTest}-delete`} onClick={(e) => {\n                    e.stopPropagation();\n                    onFileDelete && onFileDelete();\n                }}>\n                    <TrashBin />\n                </TrashContainer> :\n                <BadgeContainer data-test={dataTest && `${dataTest}-camera`} rectStyled={rectStyled}>\n                     <Camera />\n                </BadgeContainer>\n            }\n        </Container>\n    );\n}\n\nexport default ImageUploaderView;\n","import { MutableRefObject, useCallback } from 'react';\nimport AvatarEditor from 'react-avatar-editor';\n\nimport { useShowMessage } from '../ErrorMessages/ErrorMessages';\n\nconst uuid = require('uuid/v1');\n\n/**\n * @function useCheckImage\n * @param { React.ChangeEvent<HTMLInputElement> } event\n * @returns { void }\n */\nexport const useCheckImage = (maxImageSize: number) => {\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (event: React.ChangeEvent<HTMLInputElement>) => {\n            event.persist();\n            let file = event?.target?.files?.[0];\n\n            if (!file) return false;\n            if (!['image/jpeg', 'image/png', 'image/bmp'].includes(file.type)) {\n                showMessage('Uploaded file is not a picture', 'error');\n                return false;\n            }\n            if (file.size >= maxImageSize) {\n                showMessage(`The image file size must be less than ${(maxImageSize/1048576).toFixed()} MB`, 'error');\n                return false;\n            } else if (!file.type.includes('image')) {\n                showMessage('File must be an image', 'error');\n                return false;\n            }\n\n            return true;\n        },\n        [showMessage, maxImageSize]\n    );\n};\n\n/**\n * @function getEditedImageFileInfo\n * @param { MutableRefObject<AvatarEditor | null> } imageEditorRef\n */\nexport const getEditedImageFileInfo = async (\n    imageEditorRef: MutableRefObject<AvatarEditor | null>\n) => {\n    const dataUrl = imageEditorRef?.current?.getImage()?.toDataURL();\n\n    if (!dataUrl) return null;\n\n    const result = await fetch(dataUrl);\n    const blob = await result.blob();\n\n    return {\n        url: URL.createObjectURL(blob),\n        file: new File([blob], `image${uuid()}.png`, { type: 'image/png' }),\n    };\n};\n\n","import { memo, useState, useRef } from 'react';\nimport AvatarEditor from 'react-avatar-editor';\n\nimport ImageUploaderView from './view';\nimport { ImageUploaderControllerProps } from './types';\nimport { ImageEditor } from './ImageEditor';\nimport { getEditedImageFileInfo, useCheckImage } from './helper';\nimport { MAX_IMAGE_FILE_SIZE } from './ImageEditor/constants';\n\nconst  ImageUploaderController = ({\n    initialImage,\n    setProfileImage,\n    placeHolder,\n    className,\n    dataTest,\n    maxImageSize,\n    onFileDelete,\n    rectStyled,\n    isInProgress,\n}: ImageUploaderControllerProps) =>  {\n    const fileInputRef = useRef<HTMLInputElement>(null);\n    const imageEditorRef = useRef<AvatarEditor | null>(null);\n\n    const checkImage = useCheckImage(maxImageSize || MAX_IMAGE_FILE_SIZE);\n\n    const [isImageEditorVisible, setIsImageEditorVisible] = useState<boolean>(\n        false\n    );\n\n    const [selectedImage, setSelectedImage] = useState<File | null>(null);\n    const [editedImage, setEditedImage] = useState<string | null>(null);\n\n    /**\n     * @function handleApplyImage\n     * @returns { Promise<void> }\n     */\n    const handleApplyImage = async (): Promise<void> => {\n        if (imageEditorRef) {\n            const editedImageFileInfo = await getEditedImageFileInfo(\n                imageEditorRef\n            );\n\n            if (editedImageFileInfo) {\n                Promise.resolve().then(() => {\n                    setEditedImage(editedImageFileInfo?.url);\n                    setProfileImage?.(editedImageFileInfo?.file);\n                    handleCloseImageEditor();\n                });\n            }\n        }\n    };\n\n    const handleFileDelete = (): void => {\n        setEditedImage(null);\n        onFileDelete && onFileDelete();\n    }\n\n    /**\n     * @function handleCloseImageEditor\n     * @returns { void }\n     */\n    const handleCloseImageEditor = (): void => {\n        setIsImageEditorVisible(false);\n    };\n\n    /**\n     * @function handleOpenImageEditor\n     * @returns { void }\n     */\n    const handleOpenImageEditor = (\n        event: React.ChangeEvent<HTMLInputElement>\n    ): void => {\n        const isAllowedImage = checkImage(event);\n\n        if (isAllowedImage) {\n            Promise.resolve().then(() => {\n                if (event?.target?.files?.[0]) {\n                    setSelectedImage(event.target.files[0]);\n                    setIsImageEditorVisible(true);\n                }\n            });\n        }\n    };\n\n    /**\n     * @description this function is used to handle choose same image again\n     * @function handleInputClick\n     * @param event\n     * @returns { void }\n     */\n    const handleInputClick = (\n        event: React.MouseEvent<HTMLInputElement>\n    ): void => {\n        const { target = {} } = event || {};\n        (target as HTMLInputElement).value = '';\n    };\n\n    return (\n        <>\n            <ImageUploaderView\n                initialImage={initialImage}\n                fileInputRef={fileInputRef}\n                placeHolder={placeHolder}\n                className={className}\n                editedImage={editedImage}\n                handleImageChange={handleOpenImageEditor}\n                handleInputClick={handleInputClick}\n                isInProgress={isInProgress}\n                dataTest={dataTest}\n                onFileDelete={handleFileDelete}\n                rectStyled={rectStyled}\n            />\n            {isImageEditorVisible && selectedImage && (\n                <ImageEditor\n                    editorRef={imageEditorRef}\n                    selectedImage={selectedImage}\n                    handleClose={handleCloseImageEditor}\n                    handleApplyEditedImage={handleApplyImage}\n                    rectStyled={rectStyled}\n                />\n            )}\n        </>\n    );\n}\n\nexport default memo(ImageUploaderController);\n","export const MAX_IMAGE_FILE_SIZE = 10506316;\n","import { Field } from 'formik';\nimport styled from 'styled-components';\n\nexport const HeaderTitle = styled.div`\n    flex-grow: 0;\n    font-size: 18px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.44;\n    letter-spacing: normal;\n    margin: 8px 0;\n    text-align: center;\n    color: var(--ps-white-1);\n`;\n\nexport const Content = styled.div`\n    width: 90%;\n\n    @media (min-width: 420px) {\n        width: 70%;\n    }\n    @media (min-width: 768px) {\n        width: 40%;\n    }\n\n    @media (min-width: 1440px) {\n        width: 22%;\n    }\n`;\n\nexport const FieldsContainer = styled.div<{ marginBottom?: string }>`\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    > div,\n    p {\n        margin-bottom: ${props =>\n            !!props.marginBottom ? props.marginBottom : '16px'};\n    }\n`;\n\nexport const StyledField = styled(Field)`\n    flex: 1;\n`;\n","import { RegisterFormValuesType } from './types';\n\n/**\n * @function isSubmitButtonDisabled\n * @param { RegisterFormValuesType } values\n * @returns { boolean }\n */\nexport const isSubmitButtonDisabled = (values: RegisterFormValuesType) => {\n    if (!values) return true;\n\n    const keys = Object.keys(values);\n    const formValues: any = values;\n    return keys.filter(key => formValues[key]).length < keys.length;\n};\n\n","import * as Yup from 'yup';\n\nimport Validation from '../../../services/validation';\n\nexport const RegisterSchema = Yup.object().shape({\n    invitationCode: Validation.invitationCode.required(\n        'Invitation Code is required'\n    ),\n});\n\n","import { Formik, Form } from 'formik';\n\nimport { FormikField } from '../../../ui/components/FormikField';\nimport { Button } from '../../../ui/components/Button';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport {\n    Content,\n    FieldsContainer,\n    HeaderTitle,\n    StyledField,\n} from './styles';\nimport { isSubmitButtonDisabled } from './helper';\nimport { RegisterViewProps } from './types';\nimport { RegisterSchema } from './constants';\n\nfunction RegisterView(props: RegisterViewProps) {\n    const { formRef, user, handleSubmit } = props;\n\n    return (\n        <LoginAuthWrapper>\n            <Content>\n                <HeaderTitle>Invitation Code From Email</HeaderTitle>\n                <Formik\n                    ref={formRef}\n                    initialValues={{\n                        invitationCode: user?.invitationCode ?? '',\n                    }}\n                    enableReinitialize={true}\n                    onSubmit={handleSubmit}\n                    validationSchema={RegisterSchema}\n                >\n                    {({ values, isSubmitting }) => (\n                        <Form>\n                            <FieldsContainer>\n                                <StyledField\n                                    type=\"text\"\n                                    disabled={!!user?.invitationCode}\n                                    component={FormikField}\n                                    name=\"invitationCode\"\n                                    label=\"Invite Code\"\n                                    colorTheme=\"darkThree\"\n                                    fontSize=\"15px\"\n                                    labelFontSize=\"15px\"\n                                    height=\"56px\"\n                                    labelFontWeight={600}\n                                    errorPadding=\"2px 0\"\n                                    errorColor=\"var(--ps-red-main)\"\n                                    className=\"login-input\"\n                                    decreaseLabelFontSize\n                                />\n                            </FieldsContainer>\n                            <Button\n                                type=\"submit\"\n                                width=\"100%\"\n                                height=\"56px\"\n                                buttonWidth=\"100%\"\n                                fontSize={16}\n                                style={{ marginTop: '10px' }}\n                                disabled={isSubmitButtonDisabled(values)}\n                                loading={isSubmitting}\n                            >\n                                Continue\n                            </Button>\n                        </Form>\n                    )}\n                </Formik>\n            </Content>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default RegisterView;\n","import { memo, useCallback, useEffect, useRef } from 'react';\nimport { FormikActions } from 'formik';\nimport { useHistory, useLocation } from 'react-router-dom';\n\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../UserProfile/store/reducers';\nimport RegisterView from './view';\nimport { RegisterFormValuesType } from './types';\nimport { useTestInvitationService } from '../store/services';\nimport ROUTES from '../../../routes/routes';\nimport { LocationState } from '../../../tools/router';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nconst qs = require('query-string');\n\nfunction RegisterController() {\n    const formRef = useRef(null);\n    const history = useHistory();\n    const location = useLocation<LocationState>();\n\n    const user: UserProfile | undefined = useSelector(getProfileState);\n    const handleTestInvitation = useTestInvitationService();\n\n    useHtmlPageTitle(\"Invitation Code From Email\");\n\n\n    /**\n     * @function failureTestInvitationCallback\n     * @param { function } setFieldError\n     * @param { string } errorMessage\n     * @returns { void }\n     */\n    const failureTestInvitationCallback = (\n        setFieldError: (field: string, message: string) => void,\n        errorMessage?: string\n    ) => {\n        errorMessage && setFieldError('invitationCode', errorMessage);\n    };\n\n    /**\n     * @function handleSubmit\n     * @param { RegisterFormValuesType } values\n     * @param { FormikActions<RegisterFormValuesType> } formikActions\n     */\n    const handleSubmit = useCallback(\n        (\n            values: RegisterFormValuesType,\n            formikActions: FormikActions<RegisterFormValuesType>\n        ) => {\n            const { invitationCode } = values;\n            const { setSubmitting, setFieldError } = formikActions;\n\n            if (invitationCode) {\n                handleTestInvitation(invitationCode, errorMessage =>\n                    failureTestInvitationCallback(setFieldError, errorMessage)\n                ).then(response => {\n                    if (response) {\n                        history.push(\n                            `${ROUTES.AUTH_PAGES.REGISTRATION}?token=${invitationCode}`\n                        );\n                    }\n                });\n\n                setSubmitting(false);\n            }\n        },\n        [handleTestInvitation, history]\n    );\n\n    /**\n     * @function handleRedirectToInvalidInvitationPage\n     * @returns { void }\n     */\n    const handleRedirectToInvalidInvitationPage = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.INVALID_INVITE);\n    }, [history]);\n\n    useEffect(() => {\n        const invitationToken = qs.parse(location.search).code ?? null;\n\n        if (invitationToken) {\n            handleTestInvitation(\n                invitationToken,\n                handleRedirectToInvalidInvitationPage\n            );\n        }\n    }, [handleRedirectToInvalidInvitationPage, handleTestInvitation, location]);\n\n    return (\n        <RegisterView\n            formRef={formRef}\n            user={user}\n            handleSubmit={handleSubmit}\n        />\n    );\n}\n\nexport default memo(RegisterController);\n","import { forwardRef } from 'react';\n\nimport { IconProps } from './types';\n\nexport const Person = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, dataTest }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n                data-test={dataTest}\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M10.5 5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zm.061 3.072a4 4 0 1 0-5.123 0 6.004 6.004 0 0 0-3.43 5.142.75.75 0 0 0 1.497.07 4.5 4.5 0 0 1 8.99 0 .75.75 0 1 0 1.498-.07 6.005 6.005 0 0 0-3.432-5.142z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Person;\n\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PractisSet = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, dataTest }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n                data-test={dataTest}\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M1.75 2.5a.25.25 0 0 0-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-1.5a.25.25 0 0 0-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0 1 14.25 6H1.75A1.75 1.75 0 0 1 0 4.25v-1.5zM1.75 7a.75.75 0 0 1 .75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-5.5a.75.75 0 1 1 1.5 0v5.5A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25v-5.5A.75.75 0 0 1 1.75 7zm4.5 1a.75.75 0 0 0 0 1.5h3.5a.75.75 0 1 0 0-1.5h-3.5z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default PractisSet;\n\n","import { forwardRef } from 'react';\n\nimport { IconProps } from './types';\n\nexport const TeamLeaders = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, dataTest }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n                data-test={dataTest}\n            >\n                <g clip-path=\"url(#9l12if48ma)\">\n                    <g clip-path=\"url(#5blw8zx8gb)\">\n                        <path\n                            d=\"m14.33 6.71-1.38 5.73H3.08L1.69 6.71\"\n                            stroke=\"#6D7F8C\"\n                            stroke-width=\"1.2\"\n                            stroke-miterlimit=\"10\"\n                        />\n                        <path\n                            d=\"m8.01 3.55 1.66 3.11a1.82 1.82 0 0 0 2.62.64l1.13-.78M2.57 6.52l1.13.77a1.81 1.81 0 0 0 2.62-.64l1.65-3.1\"\n                            stroke=\"#6D7F8C\"\n                            stroke-width=\"1.2\"\n                            stroke-miterlimit=\"10\"\n                        />\n                        <path\n                            d=\"M8.01 3.88a1.19 1.19 0 1 0 0-2.38 1.19 1.19 0 0 0 0 2.38zM14.33 6.95a1.19 1.19 0 1 0 0-2.38 1.19 1.19 0 0 0 0 2.38zM1.69 6.95a1.19 1.19 0 1 0 0-2.38 1.19 1.19 0 0 0 0 2.38z\"\n                            fill=\"#6D7F8C\"\n                            stroke=\"#6D7F8C\"\n                            stroke-miterlimit=\"10\"\n                        />\n                        <path\n                            d=\"M13.33 13.99H2.61v1.2h10.72v-1.2z\"\n                            fill=\"#6D7F8C\"\n                        />\n                    </g>\n                </g>\n                <defs>\n                    <clipPath id=\"9l12if48ma\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n                    </clipPath>\n                    <clipPath id=\"5blw8zx8gb\">\n                        <path\n                            fill=\"#fff\"\n                            transform=\"translate(0 1)\"\n                            d=\"M0 0h16.02v14.19H0z\"\n                        />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default TeamLeaders;\n\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 1px 0 25px 0;\n`;\n\nexport const IconContainer = styled.div`\n    display: flex;\n    justify-content: space-between;\n    margin-right: 14px;\n`;\n\nexport const Title = styled.div`\n    font-size: 13px;\n    font-weight: 500;\n    color: var(--ps-grey-1);\n    margin-left: 5px;\n`;\n","import Skeleton from '@material-ui/lab/Skeleton';\n\nimport { Tooltip } from '../../../../ui/components/Tooltip';\nimport PersonIcon from '../../../../ui/icons/Person';\nimport PractisSetIcon from '../../../../ui/icons/PractisSet';\nimport TeamLeadersIcon from '../../../../ui/icons/TeamLeader';\nimport { Container, IconContainer, Title } from './styles';\nimport { SubheaderProps } from './types';\n\nfunction SubheaderView(props: SubheaderProps) {\n    const { practisSetsCount, usersCount, teamLeadersCount } = props;\n\n    return (\n        <Container data-test=\"subheader-container\">\n            {practisSetsCount! >= 0 ? (\n                <Tooltip label=\"Practis Sets\" position=\"bottom-start\">\n                    <IconContainer data-test=\"practisset-counter-container\">\n                        <PractisSetIcon dataTest=\"practisset-counter-icon\" />\n                        <Title data-test=\"practisset-counter-title\">\n                            {practisSetsCount}\n                        </Title>\n                    </IconContainer>\n                </Tooltip>\n            ) : (\n                <Skeleton\n                    variant=\"text\"\n                    style={{\n                        background: 'var(--ps-grey-3)',\n                        marginRight: 14,\n                    }}\n                    width={20}\n                    height={18.5}\n                />\n            )}\n            {usersCount! >= 0 ? (\n                <Tooltip label=\"Users\" position=\"bottom-start\">\n                    <IconContainer data-test=\"users-counter-container\">\n                        <PersonIcon dataTest=\"users-counter-icon\" />\n                        <Title data-test=\"users-counter-title\">\n                            {usersCount}\n                        </Title>\n                    </IconContainer>\n                </Tooltip>\n            ) : (\n                <Skeleton\n                    variant=\"text\"\n                    style={{\n                        background: 'var(--ps-grey-3)',\n                        marginRight: 14,\n                    }}\n                    width={20}\n                    height={18.5}\n                />\n            )}\n\n            {teamLeadersCount! >= 0 ? (\n                <Tooltip label=\"Team Leaders\" position=\"bottom-start\">\n                    <IconContainer data-test=\"team-leaders-counter-container\">\n                        <TeamLeadersIcon dataTest=\"team-leaders-counter-icon\" />\n                        <Title data-test=\"team-leaders-counter-title\">\n                            {teamLeadersCount}\n                        </Title>\n                    </IconContainer>\n                </Tooltip>\n            ) : (\n                <Skeleton\n                    variant=\"text\"\n                    style={{\n                        background: 'var(--ps-grey-3)',\n                        marginRight: 14,\n                    }}\n                    width={20}\n                    height={18.5}\n                />\n            )}\n        </Container>\n    );\n}\n\nexport default SubheaderView;\n","import styled from 'styled-components';\nimport { motion } from 'framer-motion';\nimport { Slider, withStyles } from '@material-ui/core';\n\nexport const CustomSlider = withStyles({\n    root: {\n        color: 'var(--ps-blue-main)',\n        height: 5,\n        padding: '5px 0',\n    },\n    rail: {\n       height: 4,\n       background: 'var(--ps-grey-2)',\n       border: '1px solid var(--ps-grey-2)',\n       borderRadius: 8,\n    },\n    track: {\n        height: 5,\n        borderRadius: 2,\n    },\n    thumb: {\n        height: 20,\n        width: 20,\n        backgroundColor: 'var(--ps-blue-main)',\n        border: '1px solid currentColor',\n        marginTop: -9,\n        marginLeft: -11,\n        boxShadow: '0 4px 4px 0 rgba(0, 0, 0, 0.12)',\n        '&:focus, &:hover, &$active': {\n            boxShadow: 'var(--ps-grey-2) 0 2px 3px 1px',\n        },\n        color: 'var(--ps-grey-2)',\n    },\n})(Slider);\n\nexport const StyledDialogBlacker = styled(motion.div)`\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1200;\n    background: rgba(35, 46, 58, 0.8);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nexport const StyledDialog = styled(motion.div)`\n    width: 355px;\n    border-radius: 2px;\n    box-shadow: 0 5px 20px -5px rgba(166, 174, 190, 0.5);\n    background-color: ${props => props.theme.Colors.white};\n    border-radius: 8px;\n`;\n\nexport const SliderContainer = styled.div`\n    margin: 0 20px 0 20px;\n`;\nexport const SliderLabelContainer = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    font-size: 15px;\n    color: var(--ps-grey-1);\n`;\n\nexport const Header = styled.div`\n    display: flex;\n    align-items: center;\n    font-size: 15px;\n    font-weight: 800;\n    padding: 0 20px;\n    height: 54px;\n`;\nexport const Footer = styled.div`\n    height: 150px;\n`;\nexport const ButtonContainer = styled.div`\n    display: flex;\n    justify-content: space-between;\n    margin: 25px 20px 0 20px;\n`;\n\nexport const Divider = styled.div`\n    width: 100%;\n    height: 1px;\n    margin: 10px 0 20px 0;\n    background-color: var(--ps-grey-4);\n`;\n","import AvatarEditor from 'react-avatar-editor';\n\nimport { Button } from '../../Button';\nimport {\n    ButtonContainer,\n    CustomSlider,\n    Divider,\n    Footer,\n    Header,\n    SliderContainer,\n    SliderLabelContainer,\n    StyledDialog,\n    StyledDialogBlacker,\n} from './styles';\nimport { ImageEditorViewProps } from './types';\n\nfunction ImageEditorView(props: ImageEditorViewProps) {\n    const {\n        selectedImage,\n        handleClose,\n        editorRef,\n        handleApplyEditedImage,\n        scale,\n        onScaleChange,\n        rectStyled\n    } = props;\n\n    return (\n        <StyledDialogBlacker onClick={handleClose}>\n            <StyledDialog\n                initial={{ scale: 0.8 }}\n                animate={{ scale: 1 }}\n                onClick={(event: React.MouseEvent<HTMLDivElement>) => {\n                    event.stopPropagation();\n                }}\n            >\n                <Header data-test=\"edit-photo-title\">Edit Photo</Header>\n                    <AvatarEditor\n                        ref={editorRef}\n                        image={selectedImage}\n                        width={255}\n                        height={255}\n                        border={rectStyled ? [50, 50] : [50,20]}\n                        borderRadius={rectStyled ? 5 : 500}\n                        color={[0, 0, 0, 0.38]}\n                        scale={scale}\n                    />\n                <Footer>\n                    <SliderContainer>\n                        <SliderLabelContainer>\n                            <span data-test=\"edit-photo-zoom-label\">Zoom</span>\n                            <span data-test=\"edit-photo-zoom-value\">{scale}</span>\n                        </SliderLabelContainer>\n                        <span data-test=\"edit-photo-zoom-slider\">\n                            <CustomSlider\n                                aria-label=\"small\"\n                                onChange={onScaleChange}\n                                value={scale}\n                                step={0.1}\n                                marks={false}\n                                min={1}\n                                max={2}\n                            />\n                        </span>\n                    </SliderContainer>\n                    <Divider />\n                    <ButtonContainer>\n                        <Button\n                            action={handleClose}\n                            variant=\"inverse\"\n                            buttonWidth=\"47.5%\"\n                            dataTest=\"edit-photo-cancel-button\"\n                        >\n                            Cancel\n                        </Button>\n                        <Button\n                            type=\"submit\"\n                            action={handleApplyEditedImage}\n                            buttonWidth=\"47.5%\"\n                            dataTest=\"edit-photo-save-button\"\n                        >\n                            Save\n                        </Button>\n                    </ButtonContainer>\n                </Footer>\n            </StyledDialog>\n        </StyledDialogBlacker>\n    );\n}\n\nexport default ImageEditorView;\n","import { ChangeEvent, memo, useState } from 'react';\n\nimport { ImageEditorControllerProps } from './types';\nimport ImageEditorView from './view';\n\nfunction ImageEditorController(props: ImageEditorControllerProps) {\n    const {\n        editorRef,\n        selectedImage,\n        handleClose,\n        handleApplyEditedImage,\n        rectStyled\n    } = props;\n\n    const [scale, setScale] = useState<number>(1.2);\n\n    const onScaleChange = (\n        event: ChangeEvent<{}>,\n        scale: number | number[]\n    ) => {\n        setScale(scale as number);\n    };\n\n    return (\n        <ImageEditorView\n            editorRef={editorRef}\n            selectedImage={selectedImage}\n            handleClose={handleClose}\n            handleApplyEditedImage={handleApplyEditedImage}\n            onScaleChange={onScaleChange}\n            scale={scale}\n            rectStyled={rectStyled}\n        />\n    );\n}\n\nexport default memo(ImageEditorController);\n\n","export { default as Register } from './controller';\nexport * from './types';\n\n","export { default as Registration } from './controller';\nexport * from './types';\n","export { default as ImageEditor } from './controller';\nexport * from './types';\n","export default __webpack_public_path__ + \"static/media/back-arrow.314c7bdc.svg\";","import styled from 'styled-components';\n\nexport const Title = styled.div`\n    position: relative;\n    font-size: 20px;\n    font-weight: 700;\n    line-height: 28px;\n    color: var(--ps-white-1);\n    width: 100%;\n    text-align: center;\n`;\n\nexport const BackArrow = styled.img`\n    position: absolute;\n    top: 7px;\n    left: 0;\n    cursor: pointer;\n    width: 16px;\n    height: 14px;\n`;\n\nexport const Description = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    text-align: center;\n    padding-top: 4px;\n`;\n\nexport const FormContainer = styled.div`\n    width: 100%;\n`;\n\nexport const FieldContainer = styled.div`\n    min-height: 78px;\n    margin-top: 12px;\n    margin-bottom: 16px;\n\n    .login-input-container + div {\n        line-height: 18px;\n    }\n`;\n","import { ChangeEvent } from 'react';\nimport { Field, Form, Formik } from 'formik';\nimport * as Yup from 'yup';\nimport Validation from '../../../../../services/validation';\nimport { Variables } from '../../../../../theme/variables';\nimport { FormikField } from '../../../../../ui/components/FormikField';\nimport { Button } from '../../../../../ui/components/Button';\nimport LoginAuthWrapper from '../../../../../ui/wrapper/LoginAuthWrapper';\nimport BackArrowImage from '../../../../../assets/images/icons/back-arrow.svg';\nimport { EnterEmailAddressViewProps } from './types';\nimport {\n    Title,\n    BackArrow,\n    Description,\n    FormContainer,\n    FieldContainer,\n} from './styles';\n\nconst ForgotPasswordSchema = Yup.object().shape({\n    email: Validation.authEmail,\n});\n\nfunction EnterEmailAddressView ({\n    isSending,\n    errorMessage,\n    onClearError,\n    onSend,\n    onBack\n}: EnterEmailAddressViewProps) {\n    return (\n        <LoginAuthWrapper contentWidth={343} heightToShowScroll={470}>\n            <Title>\n                <BackArrow src={BackArrowImage} onClick={onBack} />\n                Forgot Password\n            </Title>\n            <Description>\n                Enter the email associated with your account.<br />We will email you a link to reset your password.\n            </Description>\n            <FormContainer>\n                <Formik\n                    initialValues={{\n                        email: ''\n                    }}\n                    onSubmit={values => onSend(values.email)}\n                    validationSchema={ForgotPasswordSchema}\n                >\n                    {({ values, setFieldValue }) => (\n                        <Form>\n                            <FieldContainer>\n                                <Field\n                                    type='text'\n                                    component={FormikField}\n                                    name='email'\n                                    label='Email Address'\n                                    height='56px'\n                                    colorTheme='darkThree'\n                                    fontSize='15px'\n                                    value={values.email}\n                                    labelFontSize='15px'\n                                    labelFontWeight={600}\n                                    customError={errorMessage}\n                                    errorColor={Variables.Colors.tomato}\n                                    className='login-input'\n                                    dataTest='forgot-password-email'\n                                    autoFocus={true}\n                                    handleChange={(e: ChangeEvent<HTMLInputElement>) => {\n                                        setFieldValue('email', e.target.value);\n                                        onClearError();\n                                    }}\n                                />\n                            </FieldContainer>\n                            <Button\n                                disabled={!values.email}\n                                height='56px'\n                                width='343px'\n                                fontSize={15}\n                                loading={isSending}\n                            >\n                                Send Link\n                            </Button>\n                        </Form>\n                    )}\n                </Formik>\n            </FormContainer>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default EnterEmailAddressView;\n","import { useState, useCallback } from 'react';\nimport { useForgotPasswordApi } from '../../../../../api';\nimport ROUTES from '../../../../../routes/routes';\nimport { useHistory } from '../../../../../tools/router';\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\nimport EnterEmailAddressView from './view';\nimport { EnterEmailAddressProps } from './types';\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\n\nconst NOT_FOUND_ACCOUNT_ERROR = 'That account doesn\\'t exist. Enter a different email address.';\nconst INVALID_EMAIL_ERROR = 'The format you used to enter this email isn\\'t correct';\n\nfunction EnterEmailAddressController ({ onSuccess }: EnterEmailAddressProps) {\n    const history = useHistory();\n    const forgotPassword = useForgotPasswordApi();\n    const [isSending, setIsSending] = useState<boolean>(false);\n    const [errorMessage, setErrorMessage] = useState<string>('');\n\n    /**\n     * @function handleClearError - clears error message\n     * @returns { void }\n     */    \n    const handleClearError = () => {\n        setErrorMessage('');\n    };\n\n    /**\n     * @function getErrorByCode - returns error message based on error code\n     * @param { number? } code\n     * @returns { string? }\n     */    \n    const getErrorByCode = (code?: number) => {\n        switch(code) {\n            case 400:\n                return INVALID_EMAIL_ERROR;\n            case 404:\n                return NOT_FOUND_ACCOUNT_ERROR;\n            default:\n                return null;\n        }        \n    }\n\n    /**\n     * @function handleSend - sends email to forgot-password API and\n     * shows error message if it's returned by API\n     * @param { string } email\n     * @returns { void }\n     */    \n    const handleSend = useCallback((email: string) => {\n        setIsSending(true);\n        forgotPassword(email)\n        .then(\n            (response: any) => {\n                setIsSending(false);\n                setErrorMessage('');\n                onSuccess();\n            }\n        )\n        .catch((error: ErrorResult) => {\n            setIsSending(false);\n            setErrorMessage(getErrorByCode(error.code) || error.message);\n        });\n    }, [forgotPassword, onSuccess]);\n\n    /**\n     * @function handleBack - redirects to login page\n     * @returns { void }\n     */    \n    const handleBack = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    }, [history]);\n\n    useHtmlPageTitle('Forgot Password');\n\n    return <EnterEmailAddressView\n        isSending={isSending}\n        errorMessage={errorMessage}\n        onClearError={handleClearError}\n        onSend={handleSend}\n        onBack={handleBack}\n    />\n}\n\nexport default EnterEmailAddressController;","import EnterEmailAddressController from './controller';\n\nexport default EnterEmailAddressController;","export default __webpack_public_path__ + \"static/media/check-email.5fab1d4a.svg\";","import styled from 'styled-components';\n\nexport const Title = styled.div`\n    position: relative;\n    font-size: 20px;\n    font-weight: 700;\n    line-height: 28px;\n    color: var(--ps-white-1);\n    width: 100%;\n    text-align: center;\n    padding-top: 12px;\n`;\n\nexport const Description = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    text-align: center;\n    padding-top: 8px;\n    padding-bottom: 24px;\n`;\n","import { Button } from '../../../../../ui/components/Button';\nimport LoginAuthWrapper from '../../../../../ui/wrapper/LoginAuthWrapper';\nimport CheckEmailImage from '../../../../../assets/images/check-email.svg';\nimport { FurtherInstructionsViewProps } from './types';\nimport {\n    Title,\n    Description,\n} from './styles';\n\nfunction FurtherInstructionsView ({ onSubmit }: FurtherInstructionsViewProps) {\n    return (\n        <LoginAuthWrapper contentWidth={289} heightToShowScroll={350}>\n            <img src={CheckEmailImage} width='48px' height='48px' alt='Check your email' />\n            <Title>\n                Check Your Email\n            </Title>\n            <Description>\n                If you can’t find our message with reset instructions, look in your spam folder.\n            </Description>\n            <Button\n                height='56px'\n                width='289px'\n                fontSize={15}\n                action={onSubmit}\n            >\n                Got it\n            </Button>\n\n        </LoginAuthWrapper>\n    );\n}\n\nexport default FurtherInstructionsView;\n","import { useCallback } from 'react';\nimport { useHistory } from '../../../../../tools/router';\nimport ROUTES from '../../../../../routes/routes';\nimport FurtherInstructionsView from './view';\n\nfunction FurtherInstructionsController () {\n    const history = useHistory();\n\n    /**\n     * @function handleSubmit - redirects to login page\n     * @returns { void }\n     */    \n    const handleSubmit = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    }, [history]);\n\n    return <FurtherInstructionsView onSubmit={handleSubmit} />\n}\n\nexport default FurtherInstructionsController;","import FurtherInstructionsController from './controller';\n\nexport default FurtherInstructionsController;","import { useHistory, useLocation } from 'react-router';\nimport ROUTES from '../../../routes/routes';\nimport EnterEmailAddress from './components/EnterEmailAddress';\nimport FurtherInstructions from './components/FurtherInstructions';\n\nfunction ForgotPasswordController () {\n    const history = useHistory();\n    const { search } = useLocation();\n    const query = new URLSearchParams(search);\n\n    /**\n     * @function handleSuccess - shows instructions view\n     * @returns { void }\n     */    \n    const handleSuccess = () =>\n        history.push(`${ROUTES.AUTH_PAGES.FORGOT_PASSWORD}?instructions=true`);\n\n    if (query.get('instructions') === 'true')\n        return <FurtherInstructions />;\n    return <EnterEmailAddress onSuccess={handleSuccess} />\n}\n\nexport default ForgotPasswordController;\n","import ForgotPasswordController from './controller';\n\nexport default ForgotPasswordController;","import React, { useContext } from 'react';\n\nexport interface BuildUrlOptions {\n    path?: string;\n    processData?: any;\n    params?: {\n        [keyof: string]: any;\n    };\n    query?: any;\n    absolute?: boolean;\n}\n\nexport interface BuildApiUrlOptions extends BuildUrlOptions {\n    isV2?: boolean;\n}\n\nexport interface UrlBuilder {\n    buildCompanyUrl(params: BuildUrlOptions): string;\n    buildAdminUrl(params: BuildUrlOptions): string;\n    buildApiUrl(params: BuildApiUrlOptions): string;\n}\n\nexport const UrlBuilderContext = React.createContext<UrlBuilder>(\n    undefined as any\n);\n\nexport function useUrlBuilder() {\n    return useContext(UrlBuilderContext);\n}\n","import styled from 'styled-components';\n\nexport const StyledActionsDivs = styled.div<{\n    flexDirection?: string;\n    justifyContent?: string;\n    alignItems?: string;\n    marginTop?: number;\n    padding?: string;\n}>`\n    display: flex;\n    flex-direction: ${props => props.flexDirection || 'row-reverse'};\n    justify-content: ${props => props.justifyContent || 'space-between'};\n    align-items: ${props => props.alignItems || 'normal'};\n    margin-top: ${props => props.marginTop || 23}px;\n    padding: ${props => (!!props.padding ? props.padding : '0px 5px')};\n    flex-wrap: wrap-reverse;\n`;\n\nexport const StyledActionsLinks = styled.div<any>`\n    display: flex;\n    flex-direction: column;\n    margin-top: ${props => props.marginTop || 0}px;\n`;\n\nexport const StyledActionsText = styled.div<{\n    fontSize: number;\n    fontWeight: string;\n}>`\n    font-size: ${props => props.fontSize || 14}px;\n    font-weight: ${props => props.fontWeight || 'normal'};\n    color: ${props => props.theme.Colors.white};\n`;\n","import React, { FC, MouseEvent, ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Loading } from '../LoadingCopmonent';\n\nconst StyledLinkText = styled.a<{\n    fontSize?: number;\n    weight?: string;\n    color?: string;\n    disabled?: boolean;\n}>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.color\n            ? props.color\n            : props.theme.Colors.darkSkyBlue};\n    font-size: ${props => props.fontSize || 13}px;\n    cursor: pointer;\n    font-weight: ${props => props.weight || 600};\n    user-select: none;\n    max-width: 100%;\n    word-break: keep-all;\n    height: 25px;\n    &:hover {\n        color: ${props => props.theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.windowsBlue};\n    }\n    ${props => props.disabled && 'pointer-events: none'}\n`;\n\nexport const LinkText: FC<{\n    weight?: string;\n    fontSize?: number;\n    children: ReactNode;\n    onClick?: (e: MouseEvent<HTMLAnchorElement>) => void;\n    className?: string;\n    color?: string;\n    loading?: boolean;\n    disabled?: boolean;\n    dataTest?: string;\n}> = ({\n    weight,\n    fontSize,\n    children,\n    onClick,\n    className,\n    color,\n    loading,\n    disabled,\n    dataTest\n}) => {\n    return (\n        <StyledLinkText\n            className={className}\n            weight={weight}\n            fontSize={fontSize}\n            onClick={onClick}\n            color={color}\n            disabled={disabled}\n            data-test={dataTest}\n        >\n            {loading ? <Loading /> : children}\n        </StyledLinkText>\n    );\n};\n\nexport default LinkText;\n","import styled from 'styled-components';\nimport LinkText from '../../../ui/components/LinkText/link-text';\n\nexport const StyledInputDivs = styled.div<{\n    isMobile: boolean;\n    marginBottom?: string;\n}>`\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    > div {\n        flex: 1;\n        min-width: 100px;\n        margin-bottom: ${props =>\n            props.isMobile\n                ? '8px'\n                : !!props.marginBottom\n                ? props.marginBottom\n                : '16px'};\n    }\n`;\n\nexport const ForgotPasswordLink = styled(LinkText)`\n    padding: 0 0 0 5px;\n    text-align: right;\n    font-size: 13px;\n    display: block;\n    height: auto!important;\n`;\n\nexport const StyledLoginContent = styled.div`\n    width: 100%;\n\n    @media(max-height:650px) {\n        padding-top: 30px;\n    }\n`;\n\nexport const StyledSeparatorWrapper = styled.div`\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nexport const StyledSeparator = styled.span<{ isMobile: boolean }>`\n    height: 1.2px;\n    background: ${props => props.theme.Colors.steelGrey};\n    display: inline-block;\n    width: ${props => (props.isMobile ? '81px' : '96px')};\n`;\n\nexport const StyledSeparatorText = styled.span<{ isMobile: boolean }>`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: ${props => (props.isMobile ? '13px' : '15px')};\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    margin: 0 12px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n","import React, { useState } from 'react';\nimport { Field, Form, Formik } from 'formik';\nimport { History } from 'history';\nimport * as Yup from 'yup';\n\nimport ROUTES from '../../../routes/routes';\nimport Validation from '../../../services/validation';\nimport { UrlBuilder, UrlBuilderContext } from '../../../tools/url/UrlBuilder';\nimport { StyledActionsDivs } from '../styles';\nimport { useHistory } from '../../../tools/router';\nimport { useAuthType } from '../store/services';\nimport useWindowDimensions from '../../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../../theme/variables';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport { FormikField } from '../../../ui/components/FormikField';\nimport { Button } from '../../../ui/components/Button';\nimport {\n    StyledInputDivs,\n    StyledLoginContent,\n} from './styles';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\nimport { AuthType } from '../../../api/auth/enums';\nimport { replaceUrlQueryParam } from '../../../routes/helpers';\nimport Storage from '../../../services/Storage';\n\nconst LoginSchema = Yup.object().shape({\n    email: Validation.email,\n});\n\nconst NOT_FOUND_ACCOUNT_ERROR = 'Invalid Email';\n\nconst Login = () => {\n    const [disabled, setDisabled] = useState(false);\n    const history: History<any> = useHistory();\n    const authType = useAuthType();\n    const showMessage = useShowMessage();\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.smaller;\n\n    const performLogin = (values: any, urlBuilder: UrlBuilder) => {\n        setDisabled(true);\n\n        authType({ email: values.email })\n            .then((response: { type: AuthType; url?: string }) => {\n                const url = response.url;\n                if (url) {\n                    window.location.href = replaceUrlQueryParam(url, 'redirect_uri', window.location.origin + `/auth0-callback`);\n                } else {\n                    Storage.set('temp_email', values.email);\n                    history.push(ROUTES.AUTH_PAGES.INTERNAL_LOGIN);\n                }\n            })\n            .catch(error => {\n                const errorMessage =\n                    error.code === 404\n                        ? NOT_FOUND_ACCOUNT_ERROR\n                        : error.message;\n                setDisabled(false);\n                showMessage(errorMessage, 'error');\n            });\n    };\n\n    useHtmlPageTitle('Login');\n\n    return (\n        <UrlBuilderContext.Consumer>\n            {urlBuilder => (\n                <LoginAuthWrapper contentWidth={343} heightToShowScroll={650}>\n                    <StyledLoginContent>\n                        <Formik\n                            initialValues={{\n                                email: '',\n                            }}\n                            onSubmit={values => {\n                                performLogin(values, urlBuilder);\n                            }}\n                            validationSchema={LoginSchema}\n                        >\n                            {({ values, setFieldValue }) => (\n                                <Form>\n                                    <StyledInputDivs isMobile={isMobile}>\n                                        <Field\n                                            type='text'\n                                            component={FormikField}\n                                            name='email'\n                                            label='Email Address'\n                                            height='56px'\n                                            colorTheme='darkThree'\n                                            fontSize='15px'\n                                            handleChange={(\n                                                e: React.ChangeEvent<HTMLInputElement>,\n                                            ) => {\n                                                setFieldValue(\n                                                    'email',\n                                                    e\n                                                        ? e.target.value.trim()\n                                                        : '',\n                                                );\n                                            }}\n                                            value={values.email}\n                                            labelFontSize='15px'\n                                            labelFontWeight={600}\n                                            errorPadding='8px 5px 0 26px'\n                                            errorColor={Variables.Colors.tomato}\n                                            className='login-input'\n                                            dataTest='login-email'\n                                        />\n                                    </StyledInputDivs>\n\n                                    <StyledActionsDivs\n                                        justifyContent='center'\n                                        alignItems='center'\n                                        flexDirection='column'\n                                        marginTop={16}\n                                        padding='0'\n                                    >\n                                        <Button\n                                            disabled={!values.email || !/^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g.test(values.email)}\n                                            height='56px'\n                                            width='100%'\n                                            loading={disabled}\n                                            buttonWidth='100%'\n                                            fontSize={15}\n                                            dataTest='login-button'\n                                        >\n                                            Continue\n                                        </Button>\n                                    </StyledActionsDivs>\n                                </Form>\n                            )}\n                        </Formik>\n                    </StyledLoginContent>\n                </LoginAuthWrapper>\n            )}\n        </UrlBuilderContext.Consumer>\n    );\n};\n\nexport default Login;","import React, { FC, useEffect } from 'react';\nimport { History } from 'history';\nimport { useHistory } from 'react-router-dom';\nimport ROUTES from '../../../routes/routes';\nimport { useUserLogout } from '../store/services';\n\ninterface LogoutPageProps {\n    history: History;\n    loginUrl: string;\n    onUserLogout: () => any;\n}\nconst LogoutPage: FC<LogoutPageProps> = ({\n    history,\n    loginUrl,\n    onUserLogout,\n}) => {\n    useEffect(() => {\n        onUserLogout();\n        history.push(loginUrl);\n    }, [onUserLogout, loginUrl, history]);\n\n    return null;\n};\n\nexport const LogoutPageContainer: FC<{\n    loginUrl?: string;\n}> = ({ loginUrl }) => {\n    const history = useHistory();\n    const userLogout = useUserLogout();\n    return (\n        <LogoutPage\n            history={history}\n            loginUrl={loginUrl || ROUTES.AUTH_PAGES.LOGIN}\n            onUserLogout={userLogout}\n        />\n    );\n};\n\nexport default LogoutPageContainer;\n","import { FormControl } from '@material-ui/core';\n\nimport styled from 'styled-components';\n\nexport const StyledForm = styled(FormControl)`\n    &&& {\n        width: 100%;\n        min-width: 100px;\n        margin-bottom: 16px;\n        background: #171923;\n        border-radius: 5px;\n        height: 60px;\n\n        .MuiInput-underline:before {\n            display: none\n        }\n\n        .MuiInputBase-root {\n            color: white;\n            margin-top: 15px;\n            margin-left: 15px\n        }\n        \n    }\n`;\n","import { MenuItem, Select } from '@material-ui/core';\nimport { DEV_ENV_URLS } from '../../../constants/variables/general';\nimport { StyledForm } from './styles';\nimport { ApiPlatformViewProps } from './types';\n\nfunction ApiPlatformDropdownView({apiPlatform, onPlatformChange, dataTest}: ApiPlatformViewProps) {\n    const handleChange = (event: any) => {\n        onPlatformChange(event.target.value as string);\n      };\n    \n    return <StyledForm>\n        <Select\n        value={apiPlatform}\n        label=\"Platform\"\n        onChange={handleChange}\n        placeholder=\"Choose platform ✈️\"\n        data-test={dataTest}\n        >\n            {\n                Object.keys(DEV_ENV_URLS).map((value) => {\n                    return  <MenuItem value={value}>{value.toUpperCase()}</MenuItem>\n                })\n            }\n        </Select>\n    </StyledForm>\n}\n\nexport default ApiPlatformDropdownView","import { useMemo } from 'react';\nimport ApiPlatformDropdownView from \"./view\";\nimport localStorage from '../../../services/Storage';\nimport { ApiPlatformProps } from './types';\n\nfunction ApiPlatformDropdownController({ dataTest }: ApiPlatformProps) {\n    const apiPlatform = useMemo(() => {\n        return localStorage.get('apiPlatform') || 'develop';\n    }, []);\n\n    /**\n    @function saveApiPlatform - changes platform in localstorage\n    @param { string } value\n    @returns  { void }\n    */\n    const saveApiPlatform = (value: string) => {\n        localStorage.set('apiPlatform', value || 'develop');\n        window.location.reload();\n    }\n\n    return <ApiPlatformDropdownView\n        apiPlatform={apiPlatform}\n        onPlatformChange={saveApiPlatform}\n        dataTest={dataTest}\n    />\n}\n\nexport default ApiPlatformDropdownController;","import ApiPlatformDropdown from './controller';\n\nexport default ApiPlatformDropdown;","import styled from 'styled-components';\nimport LinkText from '../../../ui/components/LinkText/link-text';\n\nexport const StyledInputDivs = styled.div<{\n    isMobile: boolean;\n    marginBottom?: string;\n}>`\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    > div {\n        flex: 1;\n        min-width: 100px;\n        margin-bottom: ${props =>\n            props.isMobile\n                ? '8px'\n                : !!props.marginBottom\n                ? props.marginBottom\n                : '16px'};\n    }\n  input:disabled {\n    color: ${props => props.theme.Colors.steelGrey};\n  }\n`;\n\nexport const ForgotPasswordLink = styled(LinkText)`\n    padding: 0 0 0 5px;\n    text-align: right;\n    font-size: 13px;\n    display: block;\n    height: auto!important;\n`;\n\nexport const StyledLoginContent = styled.div`\n    width: 100%;\n\n    @media(max-height:650px) {\n        padding-top: 30px;\n    }\n`;\n\nexport const StyledSeparatorWrapper = styled.div`\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nexport const StyledSeparator = styled.span<{ isMobile: boolean }>`\n    height: 1.2px;\n    background: ${props => props.theme.Colors.steelGrey};\n    display: inline-block;\n    width: ${props => (props.isMobile ? '81px' : '96px')};\n`;\n\nexport const StyledSeparatorText = styled.span<{ isMobile: boolean }>`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: ${props => (props.isMobile ? '13px' : '15px')};\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    margin: 0 12px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n","import React, { useState } from 'react';\nimport { Field, Form, Formik } from 'formik';\nimport { History } from 'history';\nimport * as Yup from 'yup';\n\nimport ROUTES from '../../../routes/routes';\nimport Storage from '../../../services/Storage';\nimport Validation from '../../../services/validation';\nimport { UrlBuilder, UrlBuilderContext } from '../../../tools/url/UrlBuilder';\nimport { StyledActionsDivs } from '../styles';\nimport { useHistory } from '../../../tools/router';\nimport { useLogin } from '../store/services';\nimport useWindowDimensions from '../../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../../theme/variables';\nimport {\n    setAuthToken,\n    redirectAfterLogin,\n} from '../../../helpers/functions/auth-helpers';\nimport { useRedirectToPhoneVerification } from '../../../helpers/hooks/useRedirectToPhoneVerification';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport { FormikField } from '../../../ui/components/FormikField';\nimport { Button } from '../../../ui/components/Button';\nimport ApiPlatformDropdown from '../ApiPlatformDropdown';\nimport {\n    StyledInputDivs,\n    ForgotPasswordLink,\n    StyledLoginContent,\n    StyledSeparatorWrapper,\n    StyledSeparator,\n    StyledSeparatorText,\n} from './styles';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nconst InternalLoginSchema = Yup.object().shape({\n    email: Validation.email,\n    password: Validation.loginPassword,\n});\n\nconst NOT_FOUND_ACCOUNT_ERROR = 'Invalid Email Address or Password';\n\nconst InternalLogin = () => {\n    const [disabled, setDisabled] = useState(false);\n    const history: History<any> = useHistory();\n    const from = history.location.state?.from as Location;\n    const login = useLogin();\n    const showMessage = useShowMessage();\n    const windowDimensions = useWindowDimensions();\n    const redirectToPhoneVerification = useRedirectToPhoneVerification();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.smaller;\n    const envName = process.env.REACT_APP_DEV_ENV;\n\n    const performLogin = (values: any, urlBuilder: UrlBuilder) => {\n        setDisabled(true);\n        login({ login: values.email, password: values.password })\n            .then((response: { user: UserV2; token: string }) => {\n                const user = response.user;\n                if (!user.phoneNumberVerified) {\n                    Storage.set('temp_token', response.token);\n                    redirectToPhoneVerification({ user, from });\n                } else {\n                    setAuthToken(user, response.token);\n                    redirectAfterLogin(\n                        history,\n                        urlBuilder,\n                        user,\n                        response.token,\n                        from,\n                    );\n                }\n            })\n            .catch(error => {\n                const errorMessage =\n                    error.code === 404\n                        ? NOT_FOUND_ACCOUNT_ERROR\n                        : error.message;\n                setDisabled(false);\n                showMessage(errorMessage, 'error');\n            });\n    };\n\n    const forgotPasswordAction = (): void => {\n        history.push('/forgot');\n    };\n\n    const mobileNumberLoginAction = (): void => {\n        history.push(ROUTES.AUTH_PAGES.MOBILE_NUMBER_LOGIN);\n    };\n\n    useHtmlPageTitle('Internal Login');\n\n    return (\n        <UrlBuilderContext.Consumer>\n            {urlBuilder => (\n                <LoginAuthWrapper contentWidth={343} heightToShowScroll={650}>\n                    <StyledLoginContent>\n                        {['dev', 'local'].includes(envName as string) && (\n                            <ApiPlatformDropdown dataTest='api-platform-selector' />\n                        )}\n                        <Formik\n                            initialValues={{\n                                email: Storage.get('temp_email') || '',\n                                password: '',\n                            }}\n                            onSubmit={values => {\n                                performLogin(values, urlBuilder);\n                            }}\n                            validationSchema={InternalLoginSchema}\n                        >\n                            {({ values }) => (\n                                <Form>\n                                    <StyledInputDivs isMobile={isMobile}>\n                                        <Field\n                                            type='email-with-edit-link'\n                                            component={FormikField}\n                                            name='email'\n                                            label='Email Address'\n                                            height='56px'\n                                            colorTheme='darkThree'\n                                            fontSize='15px'\n                                            disabled={true}\n                                            value={values.email}\n                                            labelFontSize='15px'\n                                            labelFontWeight={600}\n                                            errorPadding='8px 5px 0 26px'\n                                            errorColor={Variables.Colors.tomato}\n                                            className='login-input'\n                                            dataTest='login-email'\n                                        />\n                                    </StyledInputDivs>\n\n                                    <StyledInputDivs\n                                        isMobile={isMobile}\n                                        marginBottom='8px'\n                                    >\n                                        <Field\n                                            type='password-with-eye'\n                                            component={FormikField}\n                                            name='password'\n                                            label='Password'\n                                            height='56px'\n                                            colorTheme='darkThree'\n                                            fontSize='15px'\n                                            labelFontSize='15px'\n                                            labelFontWeight={600}\n                                            errorPadding='8px 5px 0 26px'\n                                            errorColor={Variables.Colors.tomato}\n                                            className='login-input'\n                                            dataTest='login-password'\n                                        />\n                                    </StyledInputDivs>\n                                    <ForgotPasswordLink\n                                        onClick={forgotPasswordAction}\n                                        dataTest='forgot-password'\n                                    >\n                                        Forgot Password?\n                                    </ForgotPasswordLink>\n                                    <StyledActionsDivs\n                                        justifyContent='center'\n                                        alignItems='center'\n                                        flexDirection='column'\n                                        marginTop={16}\n                                        padding='0'\n                                    >\n                                        <Button\n                                            height='56px'\n                                            width='100%'\n                                            loading={disabled}\n                                            buttonWidth='100%'\n                                            fontSize={16}\n                                            dataTest='login-button'\n                                        >\n                                            Log In\n                                        </Button>\n                                    </StyledActionsDivs>\n                                    <StyledActionsDivs\n                                        marginTop={20}\n                                        padding='0'\n                                    >\n                                        <StyledSeparatorWrapper>\n                                            <StyledSeparator\n                                                isMobile={isMobile}\n                                            />\n                                            <StyledSeparatorText\n                                                isMobile={isMobile}\n                                                data-test='login-button-separator'\n                                            >\n                                                or log in with\n                                            </StyledSeparatorText>\n                                            <StyledSeparator\n                                                isMobile={isMobile}\n                                            />\n                                        </StyledSeparatorWrapper>\n                                    </StyledActionsDivs>\n                                    <StyledActionsDivs\n                                        justifyContent='center'\n                                        alignItems='center'\n                                        flexDirection='column'\n                                        marginTop={8}\n                                        padding='0'\n                                    >\n                                        <Button\n                                            type='button'\n                                            height='56px'\n                                            width='100%'\n                                            buttonWidth='100%'\n                                            variant='inverse'\n                                            fontSize={15}\n                                            action={mobileNumberLoginAction}\n                                            dataTest='mobile-number-button'\n                                        >\n                                            Mobile Number\n                                        </Button>\n                                    </StyledActionsDivs>\n                                </Form>\n                            )}\n                        </Formik>\n                    </StyledLoginContent>\n                </LoginAuthWrapper>\n            )}\n        </UrlBuilderContext.Consumer>\n    );\n};\n\nexport default InternalLogin;","import * as Yup from 'yup';\nimport Validation from '../../../services/validation';\n\nexport const EXPIRED_TOKEN_MESSAGE = 'This link has expired or broken. Click \"Forgot Password?\" again to request a new link.';\n\nexport const ResetPasswordSchema = Yup.object().shape({\n    password: Validation.password,\n    confirmPassword: Validation.confirmPassword\n        .oneOf([Yup.ref('password'), null], 'New Password and Confirm Password do not match.'),\n});","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    @media(max-height:600px) {\n        padding-top: 30px;\n    }\n`;\n\nexport const Title = styled.div`\n    position: relative;\n    font-size: 20px;\n    font-weight: 700;\n    line-height: 28px;\n    color: var(--ps-white-1);\n    width: 100%;\n    text-align: center;\n`;\n\nexport const BackArrow = styled.img`\n    position: absolute;\n    top: 7px;\n    left: 0;\n    cursor: pointer;\n    width: 16px;\n    height: 14px;\n`;\n\nexport const GeneralError = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-red-main);\n    padding-top: 16px;\n    text-align: center;\n    width: 90%;\n`\n\nexport const FormContainer = styled.div`\n    width: 100%;\n`;\n\nexport const FieldContainer = styled.div`\n    margin-top: 16px;\n    min-height: 78px;\n\n    .login-input-container + div {\n        line-height: 18px;\n    }\n`;\n\nexport const ButtonContainer = styled.div`\n    margin-top: 16px;\n`;\n\nexport const FooterText = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-white-1);\n    padding-top: 20px;\n    text-align: center;\n\n    a {\n        color: var(--ps-blue-main);\n        text-decoration: none;\n    }\n`;","import { ChangeEvent } from 'react';\nimport { Field, Form, Formik } from 'formik';\nimport { Variables } from '../../../theme/variables';\nimport { FormikField } from '../../../ui/components/FormikField';\nimport { Button } from '../../../ui/components/Button';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport BackArrowImage from '../../../assets/images/icons/back-arrow.svg';\nimport { ResetPasswordSchema } from './constants';\nimport { ResetPasswordViewProps } from './types';\nimport {\n    Container,\n    Title,\n    BackArrow,\n    GeneralError,\n    FormContainer,\n    FieldContainer,\n    ButtonContainer,\n    FooterText\n} from './styles';\n\nfunction ResetPasswordView ({\n    isSubmitting,\n    errorMessage,\n    onClearError,\n    onSubmit,\n    onBack\n}: ResetPasswordViewProps) {\n    return (\n        <LoginAuthWrapper contentWidth={343} heightToShowScroll={600}>\n            <Container>\n                <Title>\n                    <BackArrow src={BackArrowImage} onClick={onBack} />\n                    Reset Password\n                </Title>\n                {\n                    !!errorMessage && (\n                        <GeneralError>{errorMessage}</GeneralError>\n                    )\n                }\n                <FormContainer>\n                    <Formik\n                        initialValues={{\n                            password: '',\n                            confirmPassword: ''\n                        }}\n                        onSubmit={values => onSubmit(values.password)}\n                        validationSchema={ResetPasswordSchema}\n                    >\n                        {({ values, setFieldValue }) => (\n                            <Form>\n                                <FieldContainer>\n                                    <Field\n                                        type=\"password-with-eye\"\n                                        component={FormikField}\n                                        name=\"password\"\n                                        label=\"New Password\"\n                                        height=\"56px\"\n                                        colorTheme=\"darkThree\"\n                                        fontSize=\"15px\"\n                                        value={values.password}\n                                        labelFontSize=\"15px\"\n                                        labelFontWeight={600}\n                                        errorColor={Variables.Colors.tomato}\n                                        className=\"login-input\"\n                                        dataTest=\"new-password\"\n                                        hint='Password must be 8 characters long.'\n                                        handleChange={(e: ChangeEvent<HTMLInputElement>) => {\n                                            setFieldValue('password', e.target.value);\n                                            onClearError();\n                                        }}\n                                    />\n                                </FieldContainer>\n                                <FieldContainer>\n                                    <Field\n                                        type=\"password-with-eye\"\n                                        component={FormikField}\n                                        name=\"confirmPassword\"\n                                        label=\"Confirm Password\"\n                                        height=\"56px\"\n                                        colorTheme=\"darkThree\"\n                                        fontSize=\"15px\"\n                                        value={values.confirmPassword}\n                                        labelFontSize=\"15px\"\n                                        labelFontWeight={600}\n                                        errorColor={Variables.Colors.tomato}\n                                        className=\"login-input\"\n                                        dataTest=\"confirm-password\"\n                                        handleChange={(e: ChangeEvent<HTMLInputElement>) => {\n                                            setFieldValue('confirmPassword', e.target.value);\n                                            onClearError();\n                                        }}\n                                    />\n                                </FieldContainer>\n                                <ButtonContainer>\n                                    <Button\n                                        height='56px'\n                                        width='343px'\n                                        fontSize={15}\n                                        loading={isSubmitting}\n                                        disabled={!values.password || !values.confirmPassword}\n                                    >\n                                        Reset Password\n                                    </Button>\n                                </ButtonContainer>\n                                <FooterText>\n                                    If you're having trouble accessing the product, please let us know at <a href='mailto:support@gopractis.com'>support@gopractis.com</a>.\n                                </FooterText>\n                            </Form>\n                        )}\n                    </Formik>\n                </FormContainer>\n            </Container>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default ResetPasswordView;\n","import { useState, useCallback } from 'react';\nimport { useHistory, useLocation } from 'react-router';\nimport ROUTES from '../../../routes/routes';\nimport { useResetPasswordApi } from '../../../api';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport ResetPasswordView from './view';\nimport { EXPIRED_TOKEN_MESSAGE } from './constants';\nimport { ROLE_NAMES } from '../../../constants/enums';\n\nconst qs = require('query-string');\n\nfunction ResetPasswordController () {\n    const history = useHistory();\n    const location = useLocation();\n    const queryParams = qs.parse(location.search);\n    const resetPasswordApi = useResetPasswordApi();\n    const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n    const [errorMessage, setErrorMessage] = useState<string>('');\n\n    /**\n     * @function handleSubmit - sends reset password request to API\n     * @param { string } password\n     * @returns { void }\n     */    \n     const handleSubmit = useCallback((password: string) => {\n        setIsSubmitting(true);\n        resetPasswordApi(password, queryParams.token)\n        .then(() => {\n            history.push(queryParams.role?.trim() === ROLE_NAMES.USER\n                ? ROUTES.AUTH_PAGES.TRAINEE_LOGIN\n                : ROUTES.AUTH_PAGES.LOGIN);\n        })\n        .catch((error: ErrorResult) => {\n            setIsSubmitting(false);\n            setErrorMessage(\n                error.code === 401\n                    ? EXPIRED_TOKEN_MESSAGE\n                    : error.message\n            );\n        });\n    }, [history, queryParams, resetPasswordApi]);\n\n    /**\n     * @function handleClearErrorMessage - clears general error message\n     * @returns { void }\n     */    \n     const handleClearErrorMessage = () => {\n        setIsSubmitting(false);\n        setErrorMessage('');\n    };\n\n    /**\n     * @function handleBack - redirects to login page\n     * @returns { void }\n     */    \n    const handleBack = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    }, [history]);\n    \n    return <ResetPasswordView\n        isSubmitting={isSubmitting}\n        errorMessage={errorMessage}\n        onBack={handleBack}\n        onClearError={handleClearErrorMessage}\n        onSubmit={handleSubmit}\n    />\n}\n\nexport default ResetPasswordController;\n","import ResetPasswordController from \"./controller\";\n\nexport default ResetPasswordController;","import styled from 'styled-components';\n\nexport const StyledCard = styled.div`\n    background: var(--ps-white-1);\n    border-radius: 24px;\n    width: 520px;\n    padding: 8px 24px 24px 24px;\n`;\n\nexport const Item = styled.div`\n    padding: 4px 0;\n    display: flex;\n`;\n\nexport const Label = styled.strong`\n    display: block;\n    width: 70px;\n`;\n\nexport const Value = styled.div`\n    margin-left: 8px;\n`;","import React from 'react';\nimport { getConfig } from '../../tools/config';\nimport LoginAuthWrapper from '../../ui/wrapper/LoginAuthWrapper';\nimport {\n    StyledCard,\n    Item,\n    Label,\n    Value\n} from './styles';\n\nfunction tryParseBuildId(buildId: string | undefined) {\n    if (buildId) {\n        try {\n            return parseInt(buildId);\n        } catch {}\n    }\n    return buildId;\n}\n\nexport const Health: React.FC = () => {\n    const config = getConfig();\n    return (\n        <LoginAuthWrapper hideLogo={true}>\n            <StyledCard>\n                <h1>About App</h1>\n                <Item>\n                    <Label>Version:</Label>\n                    <Value id=\"app_version\">{config.APP_VERSION}</Value>\n                </Item>\n                <Item>\n                    <Label>Build #:</Label>\n                    <Value id=\"build_number\">\n                        {tryParseBuildId(config.BUILD_ID)}\n                    </Value>\n                </Item>\n                <Item>\n                    <Label>Commit:</Label>\n                    <Value id=\"commit_id\">{config.COMMIT_ID}</Value>\n                </Item>\n            </StyledCard>\n        </LoginAuthWrapper>\n    );\n};\n\nexport default Health;\n","import React, { FC } from 'react';\nimport { Redirect, Route, RouteProps } from 'react-router-dom';\nimport { CompanyInterface } from '../constants/interfaces/Company';\nimport { UserInterface } from '../constants/interfaces/User';\nimport Storage from '../services/Storage';\nimport ROUTES from './routes';\n\nconst isAuthorized = () => {\n    return !!Storage.get('token');\n};\n\nconst RedirectToUrl: React.FC<{ url: string }> = ({ url }) => {\n    window.location.href = url;\n    return null;\n};\n\nexport interface PrivateRouterProps extends RouteProps {\n    component?: any;\n    customPath?: string;\n    path?: string;\n    profile?: UserInterface;\n    company?: CompanyInterface;\n    editable?: boolean;\n    url?: string;\n    propsData?: any;\n}\n\nconst PrivateRoute: FC<PrivateRouterProps> = ({\n    component: Component,\n    customPath,\n    url,\n    children,\n    propsData,\n    ...rest\n}) => {\n    return (\n        <Route\n            {...rest}\n            render={props => {\n                return isAuthorized() ? (\n                    Component ? (\n                        <Component {...props} {...rest} {...propsData} />\n                    ) : (\n                        <>{children}</>\n                    )\n                ) : url ? (\n                    <RedirectToUrl url={url} />\n                ) : (\n                    <Redirect\n                        to={{\n                            pathname: customPath\n                                ? customPath\n                                : ROUTES.AUTH_PAGES.LOGIN,\n                            state: { from: props.location },\n                        }}\n                    />\n                );\n            }}\n        />\n    );\n};\n\nexport default PrivateRoute;\n","import styled from \"styled-components\";\n\nexport const ProfilePageContainer = styled.div`\n    \n`;\n\nexport const Title = styled.div`\n    font-size: 20px;\n    color: ${props => props.theme.Colors.dark};\n    margin-bottom: 40px;\n`;\n\nexport const Content = styled.div`\n\n`;\nexport const Actions = styled.div`\n    margin-top: 30px;\n    display: flex;\n    flex-direction: row-reverse;\n`;\n\nexport const PhotoLoadingContainer = styled.div`\n    position: absolute;\n    z-index: 1;\n    display: flex;\n    width: 134px;\n    height: 134px;\n    justify-content: center;\n    align-items: center;\n`","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const AddUser = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 40 40\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {shadow && (\n                    <defs>\n                        <filter\n                            id=\"a\"\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M846.8 410.8h-3.6v3.9c0 .717-.538 1.3-1.2 1.3-.662 0-1.2-.582-1.2-1.3v-3.9h-3.6c-.662 0-1.2-.582-1.2-1.3 0-.718.538-1.3 1.2-1.3h3.6v-3.898c0-.719.538-1.302 1.2-1.302.663 0 1.2.582 1.2 1.302v3.899h3.6c.662 0 1.2.581 1.2 1.3 0 .717-.538 1.3-1.2 1.3zm-14.448-9.39c1.286.321 3.161.804 5.021 1.326-.874.597-1.621 1.352-2.266 2.188-1.512-.406-3.098-.813-4.608-1.176v-3.96c3.133-2.134 4.99-6.769 4.99-10.981 0-5.697-1.457-10.317-8.743-10.317-7.285 0-8.743 4.62-8.743 10.317 0 4.216 1.86 8.855 4.998 10.987v3.991c-4.725 1.112-10.211 2.635-11.473 3.326-.817 1.03-1.53 4.33-1.023 6.393h22.846c.23.888.58 1.721 1.03 2.496h-25.253c-1.954-3-1.162-8.998.793-10.995.93-.952 7.909-2.752 11.249-3.571-3.528-2.74-5.678-7.825-5.678-12.673 0-7.048 2.046-12.761 11.254-12.761S838 381.713 838 388.761c0 4.834-2.14 9.903-5.648 12.65z\"\n                            transform=\"translate(-808 -376)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default AddUser;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport AddUser from '../../icons/AddUser';\n\nconst StyledUploadContainer = styled.div<{ marginTop?: string }>`\n    margin-top: ${props => props.marginTop || '24px'};\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledUploadImage = styled.div<{\n    backgroundColor?: string;\n    height: number;\n    width: number;\n}>`\n    width: ${props => props.width}px;\n    height: ${props => props.height}px;\n    border-radius: 8px;\n    max-width: 100%;\n    background-color: ${props =>\n        props.backgroundColor || props.theme.Colors.darkTwo};\n    border: 1px solid ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    cursor: pointer;\n    user-select: none;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst StyledImage = styled.img<{ opacity?: number; border?: string }>`\n    width: 100%;\n    min-width: 25px;\n    height: 100%;\n    object-fit: cover;\n    border-radius: 8px;\n    opacity: 0.7;\n`;\n\nconst CustomPlaceholderContainer = styled.div`\n    width: 40px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst StyledDescription = styled.div<{ fontSize?: number }>`\n    font-size: ${props => (props.fontSize ? props.fontSize : 15)}px;\n    text-align: center;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-top: 11px;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst UploadPhoto: FC<{\n    currentImage?: string;\n    customPlaceholder?: any;\n    handleChange?: any;\n    showCustomDescription?: boolean;\n    backgroundColor?: string;\n    marginTop?: string;\n    className?: string;\n    fontSize?: number;\n    width?: number;\n    height?: number;\n    disabled?: boolean;\n}> = ({\n    currentImage,\n    customPlaceholder: PlaceholderIcon,\n    handleChange,\n    showCustomDescription,\n    backgroundColor,\n    marginTop,\n    children,\n    className,\n    fontSize,\n    width,\n    height,\n    disabled,\n}) => {\n    let upload: any;\n    return (\n        <StyledUploadContainer marginTop={marginTop} className={className}>\n            <input\n                id=\"myInput\"\n                type=\"file\"\n                ref={ref => (upload = ref)}\n                style={{ display: 'none' }}\n                onChange={e => handleChange(e)}\n                disabled={disabled}\n            />\n            <StyledUploadImage\n                height={height ? height : 136}\n                width={width ? width : 136}\n                onClick={() => upload.click()}\n                backgroundColor={backgroundColor}\n                data-test=\"uploaded-image-section\"\n            >\n                {currentImage ? (\n                    <StyledImage src={currentImage} />\n                ) : PlaceholderIcon ? (\n                    <CustomPlaceholderContainer data-test=\"upload-placeholder-container\">\n                        <PlaceholderIcon />\n                    </CustomPlaceholderContainer>\n                ) : (\n                    <CustomPlaceholderContainer>\n                        <AddUser />\n                    </CustomPlaceholderContainer>\n                )}\n            </StyledUploadImage>\n            {(!!showCustomDescription && (\n                <StyledDescription onClick={() => upload.click()}>\n                    {children}\n                </StyledDescription>\n            )) || (\n                <StyledDescription\n                    onClick={() => upload.click()}\n                    fontSize={fontSize}\n                >\n                    <div>JPG, PNG, BMP only. </div>\n                    <div>Less than 10 MB</div>\n                </StyledDescription>\n            )}\n        </StyledUploadContainer>\n    );\n};\n\nexport default UploadPhoto;\n","import { Field, Form, Formik } from 'formik';\nimport { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport * as Yup from 'yup';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport Validation from '../../../services/validation';\nimport { StyledActionsDivs, StyledActionsLinks } from '../../Auth/styles';\nimport { Content, PhotoLoadingContainer } from './styles';\nimport { Variables } from '../../../theme/variables';\nimport UploadPhoto from '../../../ui/components/UploadPhoto/UploadPhoto';\nimport LinkText from '../../../ui/components/LinkText/link-text';\nimport { FormikField } from '../../../ui/components/FormikField';\nimport { Button } from '../../../ui/components/Button';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\nimport { useShowConfirmModalDialog } from '../../../ui/components/ModalDialogs/store/actions';\nimport { isPractisAdminRole } from '../../../constants/enums';\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\n\nconst ProfilePageContainer = styled.div``;\n\nconst StyledContentHeader = styled.div``;\n\nconst UserInfoForm = styled.div`\n    padding: 24px 0 0 0;\n`;\n\nconst Divider = styled.div`\n    width: 100%;\n    height: 1px;\n    border: none;\n    margin: 0;\n    flex-shrink: 0;\n    background-color: ${props => props.theme.Colors.paleGrey};\n`;\n\nconst StyledUploadPhoto = styled(UploadPhoto)`\n    flex-direction: row;\n    flex-wrap: wrap;\n    position: relative;\n`;\n\nconst StyledDeleteButton = styled.div`\n    margin-right: 8px;\n`;\n\nconst UploadPictureLink = styled(LinkText)`\n    text-align: left;\n    margin-bottom: 8px;\n    font-size: 15px;\n    font-weight: 600;\n    display: block;\n`;\n\nconst StyledDescription = styled.div`\n    width: 192px;\n    height: 40px;\n    color: ${props => props.theme.Colors.steelGrey};\n    display: flex;\n    flex-direction: column;\n    text-align: left;\n    flex: 1;\n`;\n\nconst StyledUploadContainer = styled.div`\n    display: flex;\n    align-items: center;\n    margin-bottom: 24px;\n`;\n\nconst StyledUploadLink = styled.div`\n    margin-left: 38px;\n`;\n\nconst InputWrapper = styled.div`\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    margin-bottom: 16px;\n`;\n\nconst NoticeWrapper = styled.div`\n    margin-bottom: 40px;\n    display: flex;\n    justify-content: flex-end;\n    padding-right: 8px;\n`;\n\nconst Notice = styled.div`\n    width: calc(50% - 20px);\n    height: 40px;\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst Separator = styled.div`\n    height: 1px;\n    width: 16px;\n`;\n\ninterface Values {\n    firstName: string;\n    lastName: string;\n    phoneNumber?: string;\n    email?: string;\n}\n\nexport const ProfileInfo: FC<{\n    profile: UserV2;\n    company?: CompanyInterface\n    editable?: boolean;\n    updateUserProfile(\n        data: Partial<UserV2>,\n        userId: number\n    ): void;\n    uploadUserPicture(userId: number, file: File): void;\n    deleteUser?(userId: number): void;\n    self?: boolean;\n    dataTest?: string;\n    isPhotoUploading: boolean;\n}> = ({\n    profile,\n    company,\n    editable,\n    updateUserProfile,\n    uploadUserPicture,\n    deleteUser,\n    self,\n    dataTest,\n    isPhotoUploading,\n}) => {\n    let validationSchema;\n    const isPractisAdmin = isPractisAdminRole(profile.role?.name);\n    const isSSOAuth = company?.isSSOEnabled;\n\n    if (self && profile.phoneNumber && profile.phoneNumber.length > 0) {\n        validationSchema = Yup.object().shape<Values>({\n            firstName: Validation.firstName,\n            lastName: Validation.lastName,\n            phoneNumber: Validation.phoneNumber,\n            email: Validation.email,\n        });\n    } else {\n        validationSchema = Yup.object().shape<Values>({\n            firstName: Validation.firstName,\n            lastName: Validation.lastName,\n        });\n    }\n\n    const handleUpload = useCallback(\n        (e: any) => {\n            e.persist();\n            let file = e.target.files[0] as File;\n            uploadUserPicture(profile.id!, file);\n        },\n        [profile, uploadUserPicture]\n    );\n\n   const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const handelDelete = useCallback(() => {\n        showConfirmationModalDialog({\n            modalTitle: 'Deactivate Practis Admin account?',\n            description:\n                'Deactivating this account can not be undone. Are you sure?',\n            onConfirm: () => deleteUser?.(profile.id!),\n            confirmButtonText: 'Yes, Deactivate',\n        });\n    }, [showConfirmationModalDialog, deleteUser, profile.id]);\n\n    return (\n        <ProfilePageContainer>\n            <Content>\n                <StyledContentHeader>\n                    {editable && (\n                        <StyledUploadContainer>\n                            {isPhotoUploading &&\n                                <PhotoLoadingContainer>\n                                    <Loading size={30} />\n                                </PhotoLoadingContainer>\n                            }\n                            <StyledUploadPhoto\n                                marginTop=\"0px\"\n                                currentImage={\n                                    profile?.imageUrl\n                                }\n                                handleChange={handleUpload}\n                                showCustomDescription={true}\n                                backgroundColor={Variables.Colors.whiteFive}\n                                disabled={isPhotoUploading}\n                                data-test={`${dataTest}-upload-photo`}\n                            >\n                                <StyledUploadLink>\n                                    <UploadPictureLink\n                                        dataTest={`${dataTest}-upload-text`}\n                                    >\n                                        Upload a new picture\n                                    </UploadPictureLink>\n                                    <StyledDescription\n                                        data-test={`${dataTest}-upload-description`}\n                                    >\n                                        <div>JPG, PNG, BMP only.</div>\n                                        <div>Less than 10 MB</div>\n                                    </StyledDescription>\n                                </StyledUploadLink>\n                            </StyledUploadPhoto>\n                        </StyledUploadContainer>\n                    )}\n                </StyledContentHeader>\n                <Divider />\n                <Formik<Values>\n                    initialValues={{\n                        firstName: profile.firstName ? profile.firstName : '',\n                        lastName: profile.lastName ? profile.lastName : '',\n                        phoneNumber: profile.phoneNumber\n                            ? profile.phoneNumber\n                            : '',\n                        email: profile.email ? profile.email : '',\n                    }}\n                    enableReinitialize={true}\n                    onSubmit={values => {\n                        let sendValues;\n                        if (\n                            self &&\n                            profile.phoneNumber !== values.phoneNumber\n                        ) {\n                            sendValues = {\n                                firstName: values.firstName,\n                                lastName: values.lastName,\n                                phoneNumber: values.phoneNumber,\n                            };\n                        } else {\n                            sendValues = {\n                                firstName: values.firstName,\n                                lastName: values.lastName,\n                            };\n                        }\n                        updateUserProfile(sendValues, profile.id!);\n                    }}\n                    validationSchema={validationSchema}\n                >\n                    {({ values, setFieldValue }) => {\n                        const profilePhoneNumber = profile.phoneNumber\n                            ? profile.phoneNumber\n                            : '';\n                        const valuesUpdated =\n                            values.email !== profile.email ||\n                            values.firstName !== profile.firstName ||\n                            values.lastName !== profile.lastName ||\n                            values.phoneNumber !== profilePhoneNumber;\n\n                        const valuesMissing =\n                            !values.firstName || !values.lastName;\n\n                        return (\n                            <Form>\n                                <UserInfoForm>\n                                    <InputWrapper>\n                                        <Field\n                                            type=\"text\"\n                                            component={FormikField}\n                                            maxLength={100}\n                                            name=\"firstName\"\n                                            label=\"First Name\"\n                                            disabled={isPractisAdmin || !editable || isSSOAuth}\n                                            background={\n                                                Variables.Colors.fadedRed\n                                            }\n                                        />\n                                        <Separator />\n                                        <Field\n                                            type=\"text\"\n                                            component={FormikField}\n                                            maxLength={100}\n                                            name=\"lastName\"\n                                            label=\"Last Name\"\n                                            disabled={isPractisAdmin || !editable || isSSOAuth}\n                                        />\n                                    </InputWrapper>\n                                    <InputWrapper>\n                                        <Field\n                                            type=\"email\"\n                                            component={FormikField}\n                                            name=\"email\"\n                                            label=\"Email\"\n                                            disabled={true}\n                                            background={Variables.Colors.white}\n                                        />\n                                        <Separator />\n                                        <Field\n                                            type=\"phone\"\n                                            component={FormikField}\n                                            onChange={(e: string) => {\n                                                setFieldValue(\n                                                    'phoneNumber',\n                                                    e ? e : ''\n                                                );\n                                            }}\n                                            name=\"phoneNumber\"\n                                            label=\"Mobile Number\"\n                                            background={\n                                                Variables.Colors.whiteFive\n                                            }\n                                            fontColor={Variables.Colors.black}\n                                            labelColor={\n                                                Variables.Colors.steelGrey\n                                            }\n                                            disabled={!editable || !self || isSSOAuth}\n                                            dataTest={`${dataTest}-phone-number`}\n                                        />\n                                    </InputWrapper>\n                                    {self && (\n                                        <NoticeWrapper>\n                                            <Notice>\n                                                Updating your number requires\n                                                verification via SMS. Carrier\n                                                fees may apply.\n                                            </Notice>\n                                        </NoticeWrapper>\n                                    )}\n                                </UserInfoForm>\n\n                                <Divider />\n                                {editable && (\n                                    <StyledActionsDivs justifyContent=\"initial\">\n                                        <Button\n                                            height={'40px'}\n                                            width={'120px'}\n                                            disabled={\n                                                !valuesUpdated || valuesMissing\n                                            }\n                                            dataTest={`${dataTest}-update`}\n                                        >\n                                            Update\n                                        </Button>\n                                        {!!deleteUser && (\n                                            <StyledDeleteButton>\n                                                <Button\n                                                    height={'40px'}\n                                                    width={'120px'}\n                                                    type=\"button\"\n                                                    color=\"warning\"\n                                                    action={handelDelete}\n                                                    dataTest={`${dataTest}-delete`}\n                                                >\n                                                    Deactivate\n                                                </Button>\n                                            </StyledDeleteButton>\n                                        )}\n                                        <StyledActionsLinks />\n                                    </StyledActionsDivs>\n                                )}\n                            </Form>\n                        );\n                    }}\n                </Formik>\n            </Content>\n        </ProfilePageContainer>\n    );\n};\n\nexport const ProfileInfoContainer: FC<{\n    profile: UserV2;\n    company?: CompanyInterface,\n    editable: boolean;\n    updateUserProfile(data: UserV2, userId: number): void;\n    uploadUserPicture(userId: number, file: File): void;\n    deleteUser?(userId: number): void;\n    self?: boolean;\n    dataTest?: string;\n    isPhotoUploading: boolean;\n}> = ({\n    profile,\n    company,\n    editable,\n    updateUserProfile,\n    uploadUserPicture,\n    deleteUser,\n    self,\n    dataTest,\n    isPhotoUploading,\n}) => {\n    return (\n        <ProfileInfo\n            profile={profile}\n            company={company}\n            editable={editable}\n            updateUserProfile={updateUserProfile}\n            uploadUserPicture={uploadUserPicture}\n            deleteUser={deleteUser}\n            self={self}\n            dataTest={dataTest}\n            isPhotoUploading={isPhotoUploading}\n        />\n    );\n};\n\nexport default ProfileInfoContainer;\n\n","import { Field, Form, Formik } from 'formik';\nimport React, { FC, useState } from 'react';\nimport * as Yup from 'yup';\nimport styled, { css } from 'styled-components';\n\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport Validation from '../../../services/validation';\nimport { StyledActionsDivs, StyledActionsLinks } from '../../Auth/styles';\nimport { getProfileError, getProfileState } from '../store/reducers';\nimport { useSelector } from 'react-redux';\nimport { FormikField } from '../../../ui/components/FormikField';\nimport { Button } from '../../../ui/components/Button';\nimport { UpdatePasswordType } from '../../../api/users/types';\n\nconst ProfilePageContainer = styled.div`\n    min-width: 200px;\n`;\n\nconst UserInfoForm = styled.div`\n    padding-bottom: 8px;\n`;\n\nconst Divider = styled.div`\n    width: 100%;\n    height: 1px;\n    border: none;\n    margin: 0;\n    flex-shrink: 0;\n    background-color: ${props => props.theme.Colors.paleGrey};\n`;\n\nconst Separator = styled.div`\n    height: 1px;\n    width: 16px;\n`;\n\nconst InputItem = styled.div`\n    min-width: 150px;\n    flex: 1;\n    margin-bottom: 16px;\n`;\n\nconst InputWrapper = styled.div<{ marginBottom?: number }>`\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    ${({ marginBottom }) => css`margin-bottom: ${marginBottom}px;`}\n`;\n\nconst Content = styled.div``;\n\nconst validationSchemaDefault = Yup.object().shape({\n    password: Validation.password,\n    confirmPassword: Validation.confirmPassword,\n});\n\nconst validationSchemaWithCurrentPassword = Yup.object().shape({\n    password: Validation.password,\n    confirmPassword: Validation.confirmPassword,\n    currentPassword: Validation.currentPassword,\n});\n\nexport const Security: FC<{\n    profile: UserProfile;\n    updateUserPassword(data: UpdatePasswordType, userId: number): void;\n    dataTest?: string;\n}> = ({ profile, updateUserPassword, dataTest }) => {\n    const selfProfile = useSelector(getProfileState);\n    const isSelf = selfProfile?.id === profile?.id;\n    const error = useSelector(getProfileError);\n    \n    const [showCurrentPasswordError, setShowCurrentPasswordError] = useState(true);\n    const currentPasswordError = isSelf && error?.errorCode === 409 && showCurrentPasswordError && 'Incorrect password.';\n\n\n    return (\n        <ProfilePageContainer>\n            <Content>\n                <Formik\n                    initialValues={{\n                        password: '',\n                        confirmPassword: '',\n                        currentPassword: '',\n                    }}\n                    onSubmit={(values, actions) => {\n                        isSelf && setShowCurrentPasswordError(true);\n                        const updateValues = {\n                            password: values.password,\n                            currentPassword: values.currentPassword,\n                        };\n                        updateUserPassword(updateValues, profile.id!);\n                    }}\n                    validationSchema={isSelf ? validationSchemaWithCurrentPassword : validationSchemaDefault}\n                >\n                    {({ values }) => (\n                        <Form>\n                            <UserInfoForm>\n                                {isSelf && (\n                                    <InputWrapper marginBottom={16}>\n                                        <InputItem>\n                                            <Field\n                                                type=\"password\"\n                                                component={FormikField}\n                                                autoComplete=\"current-password\"\n                                                name=\"currentPassword\"\n                                                label=\"Current Password\"\n                                                customError={currentPasswordError}\n                                                validate={() => setShowCurrentPasswordError(false)}\n                                            />\n                                        </InputItem>\n                                        <Separator />\n                                        <InputItem />\n                                    </InputWrapper>\n                                )}\n                                <InputWrapper marginBottom={20}>\n                                    <InputItem>\n                                        <Field\n                                            type=\"password\"\n                                            component={FormikField}\n                                            autoComplete=\"new-password\"\n                                            name=\"password\"\n                                            label=\"New Password\"\n                                            dataTest={`${dataTest}-new-password`}\n                                        />\n                                    </InputItem>\n                                    <Separator />\n                                    <InputItem>\n                                        <Field\n                                            type=\"password\"\n                                            component={FormikField}\n                                            autoComplete=\"confirm-new-password\"\n                                            name=\"confirmPassword\"\n                                            label=\"Confirm Password\"\n                                            dataTest={`${dataTest}-confirm-password`}\n                                        />\n                                    </InputItem>\n                                </InputWrapper>\n                            </UserInfoForm>\n                            <Divider />\n                            <StyledActionsDivs>\n                                <Button\n                                    height={'40px'}\n                                    width={'120px'}\n                                    disabled={\n                                        !values.password ||\n                                        !values.confirmPassword ||\n                                        (isSelf && !values.currentPassword)\n                                    }\n                                    dataTest={`${dataTest}-update`}\n                                >\n                                    Update\n                                </Button>\n                                <StyledActionsLinks />\n                            </StyledActionsDivs>\n                        </Form>\n                    )}\n                </Formik>\n            </Content>\n        </ProfilePageContainer>\n    );\n};\n\nexport default Security;\n","import { Action } from 'redux';\n\nexport const decapsulateAction = <T extends Action>(\n    encapsulateTerm: string,\n    action: T\n): T => ({ ...action, type: action.type.replace(encapsulateTerm, '') });\n","import { Reducer } from 'redux';\nimport { cloneDeep } from 'lodash';\n\nimport { Config } from './types';\nimport { Actions } from './actions';\nimport { decapsulateAction } from '../../../../../store/helpers/decapsulateAction';\nimport { AppState } from '../../../../../store/reducers';\nimport { DEFAULT_LABELS_SCOPE, Scope, WithLabelsScopes } from './scopes';\n\n//region Reducer state\nexport type StateWithLabels = {\n    _labels: Record<Scope, LabelsState>;\n};\n\nexport type LabelsState = {\n    collapsed: number[];\n    selected: number[];\n    saved: number[];\n    error: string | null;\n};\n\nconst initialState: LabelsState = {\n    collapsed: [],\n    selected: [],\n    saved: [],\n    error: null,\n};\n\nexport const withLabelsInitialState = <T>(\n    baseInitialState: T,\n    reducerName: keyof AppState\n): T & StateWithLabels => {\n    const scopes =\n        WithLabelsScopes[reducerName] === undefined\n            ? [DEFAULT_LABELS_SCOPE]\n            : [\n                  ...(WithLabelsScopes[reducerName] as string[]),\n                  DEFAULT_LABELS_SCOPE,\n              ];\n\n    return {\n        ...baseInitialState,\n        _labels: scopes.reduce((acc: Record<string, LabelsState>, scope) => {\n            acc[scope] = cloneDeep(initialState);\n            return acc;\n        }, {}),\n    };\n};\n//endregion\n\n//region HOR\nexport const withLabelsReducer = <S extends StateWithLabels>(\n    config: Config\n) => (baseReducer: Reducer<S>) => (state: S, nativeAction: Actions): S => {\n    let newState = state;\n    const { reducerName } = config;\n    const action = decapsulateAction(`${reducerName}/labels/`, nativeAction);\n    const scope = action._scope;\n\n    if (!scope) {\n        return baseReducer(newState, action);\n    }\n\n    switch (action.type) {\n        case 'clearLabels':\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        selected: [],\n                        partial: [],\n                    },\n                },\n            };\n            break;\n        case 'saveLabels':\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        saved: [...state._labels[scope].selected],\n                    },\n                },\n            };\n            break;\n        case 'selectLabels':\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        selected: action.ids,\n                    },\n                },\n            };\n            break;\n        case 'toggleCollapseLabel':\n            let newCollapseLabels = [...state._labels[scope].collapsed];\n\n            if (newCollapseLabels.includes(action.id)) {\n                newCollapseLabels = newCollapseLabels.filter(\n                    id => id !== action.id\n                );\n            } else {\n                newCollapseLabels.push(action.id);\n            }\n\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        collapsed: newCollapseLabels,\n                    },\n                },\n            };\n            break;\n        case 'toggleCollapseAllLabels':\n            let collapsedLabelIDs = action.ids;\n\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        collapsed: collapsedLabelIDs,\n                    },\n                },\n            };\n            break;\n        case 'resetCollapseAllLabels':\n             \n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        collapsed: [],\n                    },\n                },\n            };\n            break;\n        case 'selectAllLabels':\n            const newSelectedList = action.allLabels;\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        selected: newSelectedList,\n                    },\n                },\n            };\n            break;\n        case 'deselectAllLabels':\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        selected: [],\n                    },\n                },\n            };\n            break;\n        case 'resetSelectedLabels': {\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        selected: state._labels[scope].saved,\n                    },\n                },\n            };\n            break;\n        }\n        case 'resetLabels':\n            newState = {\n                ...newState,\n                _labels: {\n                    ...state._labels,\n                    [scope]: {\n                        ...state._labels[scope],\n                        selected: [],\n                        saved: [],\n                        collapsed: [],\n                    },\n                },\n            };\n            break;\n    }\n\n    return baseReducer(newState, action);\n};\n//endregion\n","import { AppState } from '../../../../../store/reducers';\r\n\r\nexport type Scope = typeof DEFAULT_TEAMS_SCOPE | string;\r\n\r\nexport const DEFAULT_TEAMS_SCOPE = 'primary';\r\n\r\nexport const WithTeamsScopes: Partial<Record<keyof AppState, Scope[]>> = {\r\n    draftEdit: ['assignFilters', 'addNewUser', 'editUser'],\r\n    performance: ['assignFilters', 'addNewUser', 'editUser'],\r\n};\r\n","import { Reducer } from 'redux';\r\nimport { cloneDeep } from 'lodash';\r\n\r\nimport { Config } from './types';\r\nimport { Actions } from './actions';\r\nimport { decapsulateAction } from '../../../../../store/helpers/decapsulateAction';\r\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\r\nimport { AppState } from '../../../../../store/reducers';\r\nimport { DEFAULT_TEAMS_SCOPE, Scope, WithTeamsScopes } from './scopes';\r\nimport { Team } from '../../../../../constants/interfaces/Team';\r\nimport { toggleItemInArray } from '../../../../../helpers/functions/array-helpers';\r\n\r\n//region Reducer state\r\nexport type StateWithTeams = {\r\n    _teams: Record<Scope, TeamsState>;\r\n};\r\n\r\nexport type TeamsState = {\r\n    data: PaginationResult<Team>;\r\n    selected: number[];\r\n    saved: number[];\r\n    loading: boolean;\r\n    error: string | null;\r\n};\r\n\r\nconst initialState: TeamsState = {\r\n    data: {\r\n        items: [],\r\n        limit: 0,\r\n        offset: 0,\r\n        numberOfPages: 0,\r\n        totalCount: 0,\r\n        lastUpdated: undefined,\r\n    },\r\n    selected: [],\r\n    saved: [],\r\n    loading: false,\r\n    error: null,\r\n};\r\n\r\nexport const withTeamsInitialState = <T>(\r\n    baseInitialState: T,\r\n    reducerName: keyof AppState\r\n): T & StateWithTeams => {\r\n    const scopes =\r\n        WithTeamsScopes[reducerName] === undefined\r\n            ? [DEFAULT_TEAMS_SCOPE]\r\n            : [\r\n                  ...(WithTeamsScopes[reducerName] as string[]),\r\n                  DEFAULT_TEAMS_SCOPE,\r\n              ];\r\n\r\n    return {\r\n        ...baseInitialState,\r\n        _teams: scopes.reduce((acc: Record<string, TeamsState>, scope) => {\r\n            acc[scope] = cloneDeep(initialState);\r\n            return acc;\r\n        }, {}),\r\n    };\r\n};\r\n//endregion\r\n\r\n//region HOR\r\nexport const withTeamsReducer = <S extends StateWithTeams>(config: Config) => (\r\n    baseReducer: Reducer<S>\r\n) => (state: S, nativeAction: Actions): S => {\r\n    let newState = state;\r\n    const { reducerName } = config;\r\n    const action = decapsulateAction(`${reducerName}/teams/`, nativeAction);\r\n    const scope = action._scope;\r\n\r\n    if (!scope) {\r\n        return baseReducer(newState, action);\r\n    }\r\n\r\n    switch (action.type) {\r\n        case 'clearTeams':\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: [],\r\n                        partial: [],\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        case 'saveTeams':\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        saved: [...state._teams[scope].selected],\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        case 'selectTeams':\r\n            let updatedSelectedState = [...state._teams[scope].selected];\r\n\r\n            updatedSelectedState = toggleItemInArray(\r\n                updatedSelectedState,\r\n                action.id\r\n            );\r\n\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: updatedSelectedState,\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        case 'selectMultipleTeams': {\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: action.ids,\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        }\r\n        case 'selectAllTeams':\r\n            const newSelectedList = action.allTeams;\r\n\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: newSelectedList,\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        case 'deselectAllTeams':\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: [],\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        case 'resetSelectedTeams': {\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: state._teams[scope].saved,\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n        }\r\n        case 'resetTeams':\r\n            newState = {\r\n                ...newState,\r\n                _teams: {\r\n                    ...state._teams,\r\n                    [scope]: {\r\n                        ...state._teams[scope],\r\n                        selected: [],\r\n                        saved: [],\r\n                        collapsed: [],\r\n                    },\r\n                },\r\n            };\r\n            break;\r\n    }\r\n\r\n    return baseReducer(newState, action);\r\n};\r\n//endregion\r\n","import { Reducer } from 'redux';\nimport { cloneDeep } from 'lodash';\n\nimport { Config } from './types';\nimport { Actions } from './actions';\nimport { decapsulateAction } from '../../../../../store/helpers/decapsulateAction';\nimport { ListResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { AppState } from '../../../../../store/reducers';\nimport {\n    DEFAULT_PRACTIS_SETS_SCOPE,\n    Scope,\n    WithPractisSetsScopes,\n} from './scopes';\nimport { toggleItemInArray } from '../../../../../helpers/functions/array-helpers';\nimport { EnrollmentPractisSet } from '../../../../../constants/interfaces/PractisSets';\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\n\n//region Reducer state\nexport type StateWithPractisSets = {\n    _practisSets: Record<Scope, PractisSetsState>;\n};\n\nexport type PractisSetsState = {\n    data: ListResult<EnrollmentPractisSet>;\n    selected: PractisSetWithDueDate[];\n    saved: PractisSetWithDueDate[];\n    loading: boolean;\n    error: string | null;\n};\n\nconst initialState: PractisSetsState = {\n    data: {\n        items: [],\n        count: 0,\n    },\n    selected: [],\n    saved: [],\n    loading: false,\n    error: null,\n};\n\nexport const withPractisSetsInitialState = <T>(\n    baseInitialState: T,\n    reducerName: keyof AppState\n): T & StateWithPractisSets => {\n    const scopes =\n        WithPractisSetsScopes[reducerName] === undefined\n            ? [DEFAULT_PRACTIS_SETS_SCOPE]\n            : [\n                  ...(WithPractisSetsScopes[reducerName] as string[]),\n                  DEFAULT_PRACTIS_SETS_SCOPE,\n              ];\n\n    return {\n        ...baseInitialState,\n        _practisSets: scopes.reduce(\n            (acc: Record<string, PractisSetsState>, scope) => {\n                acc[scope] = cloneDeep(initialState);\n                return acc;\n            },\n            {}\n        ),\n    };\n};\n//endregion\n\n//region HOR\nexport const withPractisSetsReducer = <S extends StateWithPractisSets>(\n    config: Config\n) => (baseReducer: Reducer<S>) => (state: S, nativeAction: Actions): S => {\n    let newState = state;\n    const { reducerName } = config;\n    const action = decapsulateAction(\n        `${reducerName}/practisSets/`,\n        nativeAction\n    );\n    const scope = action._scope;\n\n    if (!scope) {\n        return baseReducer(newState, action);\n    }\n\n    switch (action.type) {\n        case 'clearPractisSets':\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: [],\n                        partial: [],\n                    },\n                },\n            };\n            break;\n        case 'savePractisSets':\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        saved: [...state._practisSets[scope].selected],\n                    },\n                },\n            };\n            break;\n        case 'selectPractisSets':\n            let updatedSelectedState = [...state._practisSets[scope].selected];\n\n            updatedSelectedState = toggleItemInArray(\n                updatedSelectedState,\n                action.id\n            );\n\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: updatedSelectedState,\n                    },\n                },\n            };\n            break;\n        case 'selectMultiplePractisSets': {\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: action.ids,\n                    },\n                },\n            };\n            break;\n        }\n        case 'selectAllPractisSets':\n            const newSelectedList = action.allPractisSets.map(item => ({practisSetId: item.id, dueDate: item.dueDate || null}));\n\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: newSelectedList,\n                    },\n                },\n            };\n            break;\n        case 'deselectAllPractisSets':\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: [],\n                    },\n                },\n            };\n            break;\n        case 'resetSelectedPractisSets': {\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: state._practisSets[scope].saved,\n                    },\n                },\n            };\n            break;\n        }\n        case 'resetPractisSets':\n            newState = {\n                ...newState,\n                _practisSets: {\n                    ...state._practisSets,\n                    [scope]: {\n                        ...state._practisSets[scope],\n                        selected: [],\n                        saved: [],\n                        collapsed: [],\n                    },\n                },\n            };\n            break;\n    }\n\n    return baseReducer(newState, action);\n};\n//endregion\n","import { UserV2 } from '../../../constants/interfaces/User';\r\nimport { AppState } from '../../../store/reducers';\r\nimport {\r\n    ACTIONS,\r\n    FETCH_ALL_USERS,\r\n    FETCH_ALL_USERS_FAILURE,\r\n    FETCH_ALL_USERS_SUCCESS,\r\n    FETCH_USER,\r\n    FETCH_USER_FAILURE,\r\n    FETCH_USER_SUCCESS,\r\n    fetchAllDrafts,\r\n    fetchAllDraftsFailure,\r\n    fetchAllDraftsSuccess,\r\n    fetchCreatedByUsersFailure,\r\n    fetchCreatedByUsersStart,\r\n    fetchCreatedByUsersSuccess,\r\n    fetchEditedByUsersFailure,\r\n    fetchEditedByUsersStart,\r\n    fetchEditedByUsersSuccess,\r\n    getUserPerformanceFailure,\r\n    getUserPerformanceStart,\r\n    getUserPerformanceSuccess,\r\n    resetUserPerformanceAction,\r\n    searchInvitationsFailure,\r\n    searchInvitationsStart,\r\n    searchInvitationsSuccess,\r\n    searchUserPractisSetsFailure,\r\n    searchUserPractisSetsStart,\r\n    searchUserPractisSetsSuccess,\r\n    UPDATE_USER,\r\n    UPDATE_USER_FAILURE,\r\n    UPDATE_USER_SUCCESS,\r\n    updateAllPractisSetsCheckedState,\r\n    updateAllSelectedDraftState,\r\n    updateAllSelectedInvitationsState,\r\n    updateDraftsFailure,\r\n    updateDraftsStart,\r\n    updateDraftsSuccess,\r\n    updateInvitationFailure,\r\n    updateInvitationStart,\r\n    updateInvitationSuccess,\r\n    updateSelectedDraftState,\r\n    updateSelectedInvitationState,\r\n    updateTraineeProfilePractisSetCheckedState,\r\n    updateUserActionFailure,\r\n    updateUserActionStart,\r\n    updateUserActionSuccess,\r\n    updateUserPractisSetsFailure,\r\n    updateUserPractisSetsStart,\r\n    updateUserPractisSetsSuccess,\r\n    userLabelsUpdatedAction,\r\n    fetchPortablePractisSetsStart,\r\n    fetchPortablePractisSetsSuccess,\r\n    fetchPortablePractisSetsFailure,\r\n    fetchUserFeaturesStart,\r\n    fetchUserFeaturesSuccess,\r\n    fetchUserFeaturesFailure,\r\n    removePendingUserLabel,\r\n    fetchUserAllPractisSetsSuccess,\r\n    CLEAR_ALL_USERS,\r\n    fetchUserPreferencesStart,\r\n    fetchUserPreferencesSuccess,\r\n    fetchUserPreferencesFailure,\r\n    updateUserPreferencesStart,\r\n    updateUserPreferencesSuccess,\r\n    updateUserPreferencesFailure,\r\n} from './actions';\r\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { compose, Reducer } from 'redux';\r\nimport {\r\n    DraftsState,\r\n    InvitationsState,\r\n    PerformanceState,\r\n    UpdatedDraftsState,\r\n    UpdatedUserPractisSetsState,\r\n    UpdateInvitationState,\r\n    UpdateUsersState,\r\n    UserPerformanceState,\r\n    UserFeaturesState,\r\n    UserPreferencesState\r\n} from './states';\r\nimport {\r\n    withLabelsInitialState,\r\n    withLabelsReducer,\r\n} from '../../portableLabels/store/hors/withLabels';\r\nimport {\r\n    withTeamsInitialState,\r\n    withTeamsReducer,\r\n} from '../../portableTeams/store/hors/withTeams';\r\nimport {\r\n    StateWithPractisSets,\r\n    withPractisSetsInitialState,\r\n    withPractisSetsReducer,\r\n} from '../../portablePractisSets/store/hors/withPractisSets';\r\n\r\nexport interface AllUsersInterface {\r\n    list: ListResult<UserV2>;\r\n    selectedUsers?: number[];\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nconst initialState: AllUsersInterface = withLabelsInitialState(\r\n    withTeamsInitialState(\r\n        {\r\n            list: {\r\n                items: [],\r\n                count: 0\r\n            },\r\n            selectedUsers: [],\r\n            loading: false,\r\n            loadingCreatedBy: false,\r\n            loadingEditedBy: false,\r\n            error: '',\r\n        },\r\n        'users'\r\n    ),\r\n    'users'\r\n);\r\n\r\nconst allUsersBaseReducer = (state = initialState, action: any) => {\r\n    switch (action.type) {\r\n        case FETCH_ALL_USERS:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n                reload: false,\r\n            };\r\n        case FETCH_ALL_USERS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                list: action.data,\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case FETCH_ALL_USERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case CLEAR_ALL_USERS:\r\n            return initialState;\r\n            \r\n        case ACTIONS.UPDATE_SELECTED_USER_STATE:\r\n            const selectedUserIds = [...(state.selectedUsers || [])];\r\n\r\n            const selectedUserIndex = selectedUserIds.findIndex(\r\n                (item: number) => item === action.userId\r\n            );\r\n            if (selectedUserIndex > -1) {\r\n                selectedUserIds.splice(selectedUserIndex, 1);\r\n            } else {\r\n                selectedUserIds.push(action.userId);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                selectedUsers: selectedUserIds,\r\n            };\r\n        case ACTIONS.UPDATE_ALL_SELECTED_USERS_STATE:\r\n            return {\r\n                ...state,\r\n                selectedUsers:\r\n                    action.checked || action.partial ? action.userIds : [],\r\n            };\r\n        case ACTIONS.REMOVE_USER_LABEL:\r\n            const list = {\r\n                ...state.list,\r\n                items: state.list.items.map(item => {\r\n                    if (item.id === action.userId)\r\n                        return {\r\n                            ...item,\r\n                            labels: item.labels?.filter(\r\n                                labelId => labelId !== action.labelId\r\n                            ),\r\n                        };\r\n                    return item;\r\n                }),\r\n            };\r\n            return {\r\n                ...state,\r\n                list,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const allUsersReducer = compose<Reducer<AllUsersInterface, any>>(\r\n    withLabelsReducer({ reducerName: 'users' }),\r\n    withTeamsReducer({ reducerName: 'users' }),\r\n)(allUsersBaseReducer);\r\n\r\nexport const getAllUsersState = (state: AppState) => state.users.list;\r\nexport const getAllUsersLoading = (state: AppState) => state.users.loading;\r\nexport const getAllUsersError = (state: AppState) => state.users.error;\r\n\r\nconst initialUpdateUserState: UpdateUsersState = {};\r\n\r\nexport type updateUserAction =\r\n    | ReturnType<typeof updateUserActionStart>\r\n    | ReturnType<typeof updateUserActionSuccess>\r\n    | ReturnType<typeof updateUserActionFailure>;\r\n\r\nexport const updatedUserReducer: Reducer<UpdateUsersState, updateUserAction> = (\r\n    state = initialUpdateUserState,\r\n    action: updateUserAction\r\n): UpdateUsersState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_USER_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_USER_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.user,\r\n                updateType: action.updateType,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_USER_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport interface UserState {\r\n    info?: UserV2;\r\n    isLoading?: boolean;\r\n    error?: any;\r\n}\r\n\r\nconst userInitialState: UserState = {\r\n    info: undefined,\r\n    isLoading: false,\r\n    error: '',\r\n};\r\n\r\nexport const userReducer = (state = userInitialState, action: any) => {\r\n    switch (action.type) {\r\n        case FETCH_USER:\r\n            return {\r\n                info: undefined,\r\n                isLoading: true,\r\n                error: null,\r\n            };\r\n        case FETCH_USER_SUCCESS:\r\n            return {\r\n                info: {\r\n                    ...action.data,\r\n                },\r\n                isLoading: false,\r\n                error: null,\r\n            };\r\n        case FETCH_USER_FAILURE:\r\n            return {\r\n                info: undefined,\r\n                isLoading: false,\r\n                error: action.error,\r\n            };\r\n        case UPDATE_USER:\r\n            return {\r\n                ...state,\r\n                error: null,\r\n            };\r\n        case UPDATE_USER_SUCCESS:\r\n            return {\r\n                info: {\r\n                    ...state.info,\r\n                    ...action.data,\r\n                },\r\n                error: null,\r\n            };\r\n        case UPDATE_USER_FAILURE:\r\n            return {\r\n                ...state,\r\n                error: action.error,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const getUserState = (state: AppState) => state.user.info;\r\nexport const getUserLoading = (state: AppState) => state.user.isLoading;\r\nexport const getUserError = (state: AppState) => state.user.error;\r\n\r\nexport interface InvitationsInterface {\r\n    data: ListResult<UserV2>;\r\n    selectedInvitations?: number[];\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nconst initialInvitationsState: InvitationsInterface = withLabelsInitialState(\r\n    withTeamsInitialState(\r\n        {\r\n            data: {\r\n                items: [],\r\n                count: 0,\r\n            },\r\n            selectedInvitations: [],\r\n            loading: false,\r\n            error: '',\r\n        },\r\n        'invitations'\r\n    ),\r\n    'invitations'\r\n);\r\n\r\nexport type invitationsAction =\r\n    | ReturnType<typeof searchInvitationsStart>\r\n    | ReturnType<typeof searchInvitationsSuccess>\r\n    | ReturnType<typeof searchInvitationsFailure>\r\n    | ReturnType<typeof updateSelectedInvitationState>\r\n    | ReturnType<typeof updateAllSelectedInvitationsState>\r\n    | ReturnType<typeof userLabelsUpdatedAction>\r\n    | ReturnType<typeof removePendingUserLabel>;\r\n\r\nexport const invitationsBaseReducer = (\r\n    state = initialInvitationsState,\r\n    action: invitationsAction\r\n): InvitationsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.SEARCH_USER_INVITATIONS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_USER_INVITATIONS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.users,\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_USER_INVITATIONS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.UPDATE_SELECTED_INVITATION_STATE:\r\n            const selectedInvitationIds = [\r\n                ...(state.selectedInvitations || []),\r\n            ];\r\n\r\n            const selectedInvitationIndex = selectedInvitationIds.findIndex(\r\n                (item: number) => item === action.invitationId\r\n            );\r\n            if (selectedInvitationIndex > -1) {\r\n                selectedInvitationIds.splice(selectedInvitationIndex, 1);\r\n            } else {\r\n                selectedInvitationIds.push(action.invitationId);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                selectedInvitations: selectedInvitationIds,\r\n            };\r\n        case ACTIONS.UPDATE_ALL_SELECTED_INVITATIONS_STATE:\r\n            return {\r\n                ...state,\r\n                selectedInvitations:\r\n                    action.checked || action.partial\r\n                        ? action.invitationIds\r\n                        : [],\r\n            };\r\n        case ACTIONS.REMOVE_PENDING_USER_LABEL:\r\n            const data = {\r\n                ...state.data,\r\n                items: state.data.items.map(item => {\r\n                    if (item.id === action.userId)\r\n                        return {\r\n                            ...item,\r\n                            labels: item.labels?.filter(\r\n                                labelId => labelId !== action.labelId\r\n                            )\r\n                        };\r\n                    return item;\r\n                })\r\n            };\r\n            return {\r\n                ...state,\r\n                data\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const invitationsReducer = compose<Reducer<any, any>>(\r\n    withLabelsReducer({ reducerName: 'invitations' }),\r\n    withTeamsReducer({ reducerName: 'invitations' })\r\n)(invitationsBaseReducer);\r\n\r\nconst initialUpdateInvitationState: UpdateInvitationState = {};\r\n\r\nexport type updateInvitationAction =\r\n    | ReturnType<typeof updateInvitationStart>\r\n    | ReturnType<typeof updateInvitationSuccess>\r\n    | ReturnType<typeof updateInvitationFailure>;\r\n\r\nexport const updateInvitationsReducer: Reducer<\r\n    UpdateInvitationState,\r\n    updateInvitationAction\r\n> = (\r\n    state = initialUpdateInvitationState,\r\n    action: updateInvitationAction\r\n): UpdateInvitationState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_USER_INVITATION_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_USER_INVITATION_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.invitation,\r\n                updateType: action.updateType,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_USER_INVITATION_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialUserPerformanceState = withLabelsInitialState<\r\n    PerformanceState & StateWithPractisSets\r\n>(\r\n    withTeamsInitialState(\r\n        withPractisSetsInitialState(\r\n            {\r\n                loading: false,\r\n            },\r\n            'performance'\r\n        ),\r\n        'performance'\r\n    ),\r\n    'performance'\r\n);\r\n\r\nexport type userPerformanceAction =\r\n    | ReturnType<typeof getUserPerformanceStart>\r\n    | ReturnType<typeof getUserPerformanceSuccess>\r\n    | ReturnType<typeof getUserPerformanceFailure>\r\n    | ReturnType<typeof searchUserPractisSetsStart>\r\n    | ReturnType<typeof searchUserPractisSetsSuccess>\r\n    | ReturnType<typeof searchUserPractisSetsFailure>\r\n    | ReturnType<typeof fetchPortablePractisSetsStart>\r\n    | ReturnType<typeof fetchPortablePractisSetsSuccess>\r\n    | ReturnType<typeof fetchPortablePractisSetsFailure>\r\n    | ReturnType<typeof updateTraineeProfilePractisSetCheckedState>\r\n    | ReturnType<typeof updateAllPractisSetsCheckedState>\r\n    | ReturnType<typeof fetchUserAllPractisSetsSuccess>\r\n    | ReturnType<typeof resetUserPerformanceAction>;\r\n\r\nexport const userPerformanceReducerBase: Reducer<\r\n    UserPerformanceState,\r\n    userPerformanceAction\r\n> = (\r\n    state = initialUserPerformanceState,\r\n    action: userPerformanceAction\r\n): UserPerformanceState => {\r\n    switch (action.type) {\r\n        case ACTIONS.GET_USER_PERFORMANCE_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.GET_USER_PERFORMANCE_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.trainee,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.GET_USER_PERFORMANCE_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.SEARCH_USER_PRACTIS_SETS_START:\r\n            return {\r\n                ...state,\r\n                practisSetsLoading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_USER_PRACTIS_SETS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                practisSets: action.practisSets,\r\n                practisSetsLoading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_USER_PRACTIS_SETS_FAILURE:\r\n            return {\r\n                ...state,\r\n                practisSetsLoading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_START:\r\n            return {\r\n                ...state,\r\n                portablePractisSetsLoading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                portablePractisSets: action.practisSets.items,\r\n                portablePractisSetsLoading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.FETCH_PORTABLE_PRACTIS_SETS_FAILURE:\r\n            return {\r\n                ...state,\r\n                portablePractisSetsLoading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.UPDATE_SELECTED_TRAINEE_PROFILE_PRACTIS_SET_STATE:\r\n            const selectedIds = [...(state.selectedPractisSets || [])];\r\n\r\n            const selectedIdIndex = selectedIds.findIndex(\r\n                (item: number) => item === action.id\r\n            );\r\n            if (selectedIdIndex > -1) {\r\n                selectedIds.splice(selectedIdIndex, 1);\r\n            } else {\r\n                selectedIds.push(action.id);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                selectedPractisSets: selectedIds,\r\n            };\r\n        case ACTIONS.UPDATE_ALL_SELECTED_TRAINEE_PROFILE_PRACTIS_SETS_STATE:\r\n            return {\r\n                ...state,\r\n                selectedPractisSets:\r\n                    action.checked || action.partial\r\n                        ? action.selectedPractisSetIds\r\n                        : [],\r\n            };\r\n\r\n        case ACTIONS.FETCH_USER_ALL_PRACTIS_SETS:\r\n            return {\r\n                ...state,\r\n                _practisSets: {\r\n                    ...state._practisSets,\r\n                    assignFilters: {\r\n                        data: action.data,\r\n                        selected: [],\r\n                        saved: [],\r\n                        loading: false,\r\n                        error: '',\r\n                    },\r\n                },\r\n            };\r\n        case ACTIONS.RESET_USER_PERFORMANCE:\r\n            return initialUserPerformanceState;\r\n\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const userPerformanceReducer = compose<\r\n    Reducer<UserPerformanceState, userPerformanceAction>\r\n>(\r\n    withLabelsReducer({ reducerName: 'performance' }),\r\n    withTeamsReducer({ reducerName: 'performance' }),\r\n    withPractisSetsReducer({ reducerName: 'performance' })\r\n)(userPerformanceReducerBase);\r\n\r\nconst initialUpdatedUserPractisiSetsState: UpdatedUserPractisSetsState = {};\r\n\r\nexport type updatedUserPractisSestsAction =\r\n    | ReturnType<typeof updateUserPractisSetsStart>\r\n    | ReturnType<typeof updateUserPractisSetsSuccess>\r\n    | ReturnType<typeof updateUserPractisSetsFailure>;\r\n\r\nexport const updatedUserPractisSetsReducer: Reducer<\r\n    UpdatedUserPractisSetsState,\r\n    updatedUserPractisSestsAction\r\n> = (\r\n    state = initialUpdatedUserPractisiSetsState,\r\n    action: updatedUserPractisSestsAction\r\n): UpdatedUserPractisSetsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_USER_PRACTIS_SETS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_USER_PRACTIS_SETS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.practisSets,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_USER_PRACTIS_SETS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialDraftsState: any = {\r\n    data: {\r\n        items: [],\r\n    },\r\n    draftedUsers: {\r\n        items: [],\r\n    },\r\n    selectedDrafts: [],\r\n    loading: false,\r\n    error: '',\r\n};\r\n\r\nexport type draftsAction =\r\n    | ReturnType<typeof fetchAllDrafts>\r\n    | ReturnType<typeof fetchAllDraftsSuccess>\r\n    | ReturnType<typeof fetchAllDraftsFailure>\r\n    | ReturnType<typeof updateSelectedDraftState>\r\n    | ReturnType<typeof updateAllSelectedDraftState>\r\n    | ReturnType<typeof fetchCreatedByUsersStart>\r\n    | ReturnType<typeof fetchCreatedByUsersSuccess>\r\n    | ReturnType<typeof fetchCreatedByUsersFailure>\r\n    | ReturnType<typeof fetchEditedByUsersStart>\r\n    | ReturnType<typeof fetchEditedByUsersSuccess>\r\n    | ReturnType<typeof fetchEditedByUsersFailure>;\r\n\r\nexport const draftsReducer = (\r\n    state = initialDraftsState,\r\n    action: draftsAction\r\n): DraftsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.SEARCH_STAGING_DRAFTS:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_STAGING_DRAFTS_SUCCESS:\r\n            const prevItems = state.data?.items;\r\n            return {\r\n                ...state,\r\n                data:\r\n                    action.data.offset === 0 || !prevItems\r\n                        ? action.data\r\n                        : {\r\n                              ...action.data,\r\n                              items: action.data.items,\r\n                          },\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_STAGING_DRAFTS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.UPDATE_SELECTED_DRAFT_STATE:\r\n            const selectedDraftIds = [...(state.selectedDrafts || [])];\r\n\r\n            const selectedDraftIndex = selectedDraftIds.findIndex(\r\n                (item: number) => item === action.draftId\r\n            );\r\n            if (selectedDraftIndex > -1) {\r\n                selectedDraftIds.splice(selectedDraftIndex, 1);\r\n            } else {\r\n                selectedDraftIds.push(action.draftId);\r\n            }\r\n            return {\r\n                ...state,\r\n                selectedDrafts: selectedDraftIds,\r\n            };\r\n        case ACTIONS.UPDATE_ALL_SELECTED_DRAFT_STATE:\r\n            return {\r\n                ...state,\r\n                selectedDrafts:\r\n                    action.checked || action.partial ? action.draftIds : [],\r\n            };\r\n        case ACTIONS.FETCH_CREATED_BY_USERS_START:\r\n            return {\r\n                ...state,\r\n                loadingCreatedBy: true,\r\n            };\r\n        case ACTIONS.FETCH_CREATED_BY_USERS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                createdByUsers: action.data,\r\n                loadingCreatedBy: false,\r\n            };\r\n        case ACTIONS.FETCH_CREATED_BY_USERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                error: action.error,\r\n                loadingCreatedBy: false,\r\n            };\r\n        case ACTIONS.FETCH_EDITED_BY_USERS_START:\r\n            return {\r\n                ...state,\r\n                loadingEditedBy: true,\r\n            };\r\n        case ACTIONS.FETCH_EDITED_BY_USERS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                editedByUsers: action.data,\r\n                loadingEditedBy: false,\r\n            };\r\n        case ACTIONS.FETCH_EDITED_BY_USERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                error: action.error,\r\n                loadingEditedBy: false,\r\n            };\r\n\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialUpdatedDraftsState: UpdatedDraftsState = {};\r\n\r\nexport type updatedDraftsAction =\r\n    | ReturnType<typeof updateDraftsStart>\r\n    | ReturnType<typeof updateDraftsSuccess>\r\n    | ReturnType<typeof updateDraftsFailure>;\r\n\r\nexport const updatedDraftsReducer: Reducer<\r\n    UpdatedDraftsState,\r\n    updatedDraftsAction\r\n> = (\r\n    state = initialUpdatedDraftsState,\r\n    action: updatedDraftsAction\r\n): UpdatedDraftsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_STAGING_DRAFTS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_STAGING_DRAFTS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.draft,\r\n                updateType: action.updateType,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_STAGING_DRAFTS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialUserFeaturesState: UserFeaturesState = {\r\n    data: {},\r\n    loading: false,\r\n    error: ''\r\n};\r\n\r\nexport type userFeaturesAction =\r\n    | ReturnType<typeof fetchUserFeaturesStart>\r\n    | ReturnType<typeof fetchUserFeaturesSuccess>\r\n    | ReturnType<typeof fetchUserFeaturesFailure>;\r\n\r\nexport const userFeaturesReducer: Reducer<\r\n    UserFeaturesState,\r\n    userFeaturesAction\r\n> = (\r\n    state = initialUserFeaturesState,\r\n    action: userFeaturesAction\r\n): UserFeaturesState => {\r\n    switch (action.type) {\r\n        case ACTIONS.FETCH_USER_FEATURES_START:\r\n            return {\r\n                ...state,\r\n                loading: true\r\n            };\r\n        case ACTIONS.FETCH_USER_FEATURES_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.data,\r\n                loading: false,\r\n                error: ''\r\n            };\r\n        case ACTIONS.FETCH_USER_FEATURES_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const getUserFeaturesState = (state: AppState) => state.userFeatures.data;\r\nexport const getUserFeaturesLoading = (state: AppState) => state.userFeatures.loading;\r\nexport const getUserFeaturesError = (state: AppState) => state.userFeatures.error;\r\n\r\nconst initialUserPreferencesState: UserPreferencesState = {\r\n    data: undefined,\r\n    pendingValues: undefined,\r\n    loading: false,\r\n    error: ''\r\n};\r\n\r\nexport type userPreferencesAction =\r\n    | ReturnType<typeof fetchUserPreferencesStart>\r\n    | ReturnType<typeof fetchUserPreferencesSuccess>\r\n    | ReturnType<typeof fetchUserPreferencesFailure>\r\n    | ReturnType<typeof updateUserPreferencesStart>\r\n    | ReturnType<typeof updateUserPreferencesSuccess>\r\n    | ReturnType<typeof updateUserPreferencesFailure>;\r\n\r\nexport const userPreferencesReducer: Reducer<\r\n    UserPreferencesState,\r\n    userPreferencesAction\r\n> = (\r\n    state = initialUserPreferencesState,\r\n    action: userPreferencesAction\r\n): UserPreferencesState => {\r\n    switch (action.type) {\r\n        case ACTIONS.FETCH_USER_PREFERENCES_START:\r\n            return {\r\n                ...state,\r\n                loading: true\r\n            };\r\n        case ACTIONS.FETCH_USER_PREFERENCES_SUCCESS:\r\n            return {\r\n                data: action.data,\r\n                pendingValues: undefined,\r\n                loading: false,\r\n                error: ''\r\n            };\r\n        case ACTIONS.FETCH_USER_PREFERENCES_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error\r\n            };\r\n        case ACTIONS.UPDATE_USER_PREFERENCES_START:\r\n            return {\r\n                ...state,\r\n                pendingValues: state.pendingValues\r\n                    ? state.pendingValues.concat(action.data)\r\n                    : action.data\r\n            };\r\n        case ACTIONS.UPDATE_USER_PREFERENCES_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: state.data?.map(item =>\r\n                    action.keys.includes(item.key)\r\n                        ? {\r\n                            ...item,\r\n                            value: state.pendingValues?.find(updatedItem =>\r\n                                       item.key === updatedItem.key\r\n                                   )?.value ?? item.value\r\n                        }\r\n                        : item\r\n                ),\r\n                pendingValues: state.pendingValues?.filter(item =>\r\n                    !action.keys.includes(item.key)\r\n                )\r\n            };\r\n        case ACTIONS.UPDATE_USER_PREFERENCES_FAILURE:\r\n            return {\r\n                ...state,\r\n                pendingValues: state.pendingValues?.filter(item =>\r\n                    !action.keys.includes(item.key)\r\n                )\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const getUserPreferencesState = (state: AppState) => state.userPreferences.data;\r\nexport const getUserPreferencesPendingValues = (state: AppState) => state.userPreferences.pendingValues;\r\nexport const getUserPreferencesLoading = (state: AppState) => state.userPreferences.loading;\r\nexport const getUserPreferencesError = (state: AppState) => state.userPreferences.error;","export const NOTIFICATION_SETTING_TITLE: Record<string, string> = {\n    'feed_content_new': 'New Submissions from my Learners',\n    'enrollments_overdue': 'Notify me of learners running behind on training'\n}","import styled from 'styled-components';\n\nexport const Title = styled.div`\n    font-size: 15px;\n    color: var(--ps-black-main);\n    font-weight: 600;\n`;\n\nexport const Info = styled.div`\n    display: flex;\n    justify-content: space-between;\n    padding-bottom: 16px;\n    border-bottom: 1px solid var(--ps-grey-4);\n    margin-bottom: 16px;\n`;\n\nexport const Description = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    padding-top: 4px;\n    width: 70%;\n`;\n\nexport const ToggleContainer = styled.div`\n    width: 42px;\n`","import React, { ChangeEvent, ChangeEventHandler, FC } from 'react';\nimport styled from 'styled-components';\n\nexport interface SwitchToggleInterface {\n    index: number | string;\n    checked?: boolean;\n    label?: string;\n    onChange: ChangeEventHandler<HTMLInputElement>;\n    disabled?: boolean;\n    height?: number;\n    width?: number;\n    bulletRadius?: number;\n    dataTest?: string;\n}\n\nconst StyledSwitchContainer = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nconst StyledSwitchCheckboxContainer = styled.div`\n    position: relative;\n`;\n\nconst StyledSpan = styled.span<{\n    checked?: boolean;\n    disabled?: boolean;\n    bulletRadius: number;\n}>`\n    content: '';\n    position: absolute;\n    left: 4px;\n    width: ${props => props.bulletRadius}px;\n    height: ${props => props.bulletRadius}px;\n    border-radius: 45px;\n    transition: 0.2s;\n    background: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue15\n            : props.checked\n            ? props.theme.Colors.darkSkyBlue15\n            : props.theme.Colors.cloudyBlue15};\n    box-shadow: 0 0 2px 0 rgba(10, 10, 10, 0.29);\n    border: solid 1px\n        ${props =>\n            props.disabled\n                ? props.theme.Colors.paleGrey\n                : props.checked\n                ? props.theme.Colors.darkSkyBlue\n                : props.theme.Colors.cloudyBlue};\n`;\n\nconst StyledLabel = styled.label<{\n    checked?: boolean;\n    disabled?: boolean;\n    width: number;\n    height: number;\n    bulletRadius: number;\n}>`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    width: ${props => props.width}px;\n    height: ${props => props.height}px;\n    border-radius: 100px;\n    border: solid 1px\n        ${props =>\n            props.disabled\n                ? props.theme.Colors.paleGrey\n                : props.checked\n                ? props.theme.Colors.darkSkyBlue\n                : props.theme.Colors.cloudyBlue};\n    background-color: ${props => props.theme.Colors.whiteFive};\n    position: relative;\n    transition: background-color 0.2s;\n\n    &:active ${StyledSpan} {\n        width: ${props =>\n            props.disabled ? props.bulletRadius : props.bulletRadius + 10}px;\n    }\n`;\n\nconst StyledInput = styled.input`\n    height: 0;\n    width: 0;\n    visibility: hidden;\n    position: absolute;\n    top: 15px;\n    left: 10px;\n\n    &:checked + ${StyledLabel} ${StyledSpan} {\n        left: calc(100% - 4px);\n        transform: translateX(-100%);\n    }\n`;\n\nconst StyledLabelText = styled.div`\n    margin-left: 12px;\n    font-size: 13px;\n`;\n\nconst SwitchToggle: FC<SwitchToggleInterface> = ({\n    index,\n    label,\n    onChange,\n    checked,\n    disabled,\n    height,\n    width,\n    bulletRadius,\n    dataTest\n}) => {\n    const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n        if (disabled) return;\n        onChange(e);\n    };\n\n    return (\n        <StyledSwitchContainer>\n            <StyledSwitchCheckboxContainer>\n                <StyledInput\n                    checked={checked}\n                    id={`toggle-switch-${index}`}\n                    type=\"checkbox\"\n                    onChange={handleChange}\n                    data-test={dataTest}\n                />\n                <StyledLabel\n                    htmlFor={`toggle-switch-${index}`}\n                    checked={checked}\n                    height={height ? height : 32}\n                    width={width ? width : 56}\n                    bulletRadius={bulletRadius ? bulletRadius : 20}\n                    disabled={disabled}\n                    data-test={dataTest && `${dataTest}-label`}\n                >\n                    <StyledSpan\n                        checked={checked}\n                        bulletRadius={bulletRadius ? bulletRadius : 20}\n                        disabled={disabled}\n                    />\n                </StyledLabel>\n            </StyledSwitchCheckboxContainer>\n            <StyledLabelText>{label}</StyledLabelText>\n        </StyledSwitchContainer>\n    );\n};\n\nexport default SwitchToggle;\n","import { NotificationWithToggleProps } from './types';\nimport {\n    Title,\n    Info,\n    Description,\n    ToggleContainer,\n} from './styles';\nimport SwitchToggle from '../../../../ui/components/SwitchToggle/SwitchToggle';\n\nfunction NotificationWithToggleView({\n    notificationKey,\n    title,\n    description,\n    checked,\n    disabled,\n    onChange,\n}: NotificationWithToggleProps) {\n    return <>\n        <Title>{title}</Title>\n        <Info>\n            <Description>{description}</Description>\n            <ToggleContainer>\n                <SwitchToggle\n                    index={notificationKey}\n                    width={42}\n                    height={24}\n                    bulletRadius={16}\n                    checked={checked}\n                    disabled={disabled}\n                    onChange={onChange}\n                />\n            </ToggleContainer>\n        </Info>\n    </>;\n}\n\nexport default NotificationWithToggleView;","import NotificationWithToggle from './view';\n\nexport default NotificationWithToggle;","import styled from 'styled-components';\n\nexport const LoadingContent = styled.div`\n    padding: 20px 40px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;","import NotificationWithToggle from '../NotificationWithToggle';\nimport { NotificationsViewProps } from './types';\nimport { LoadingContent } from './styles';\nimport { Loading } from '../../../../ui/components/LoadingCopmonent';\n\nfunction NotificationsView({\n    isLoading,\n    items,\n    onToggle,\n}: NotificationsViewProps) {\n    if (isLoading && !items)\n        return (\n            <LoadingContent>\n                <Loading />\n            </LoadingContent>\n        );\n    return (\n        <>\n            {items?.map(item => {\n                if (item.type === 'boolean')\n                    return (\n                        <NotificationWithToggle\n                            notificationKey={item.key}\n                            key={item.key}\n                            title={item.title}\n                            description={item.description}\n                            checked={item.value as boolean}\n                            disabled={item.isSaving}\n                            onChange={() => onToggle(item.key)}\n                        />\n                    );\n                return null;\n            })}\n        </>\n    );\n}\n\nexport default NotificationsView;","import { useSelector } from 'react-redux';\nimport { useEffect, useMemo, useCallback } from 'react';\nimport {\n    getUserPreferencesState,\n    getUserPreferencesLoading,\n    getUserPreferencesPendingValues,\n} from '../../../../features/users/store/reducers';\nimport { NOTIFICATION_SETTING_TITLE } from './constants';\nimport {\n    useGetUserPreferencesService,\n    useUpdateUserPreferenceService,\n} from '../../../../features/users/store/services';\nimport NotificationsView from './view';\nimport { NotificationsProps } from './types';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\n\nfunction NotificationsController({ userId }: NotificationsProps) {\n    const preferences = useSelector(getUserPreferencesState);\n    const pendingValues = useSelector(getUserPreferencesPendingValues);\n    const isLoading = useSelector(getUserPreferencesLoading);\n    const getPreferences = useGetUserPreferencesService();\n    const updatePreference = useUpdateUserPreferenceService();\n    const showMessage = useShowMessage();\n\n    const items = useMemo(\n        () =>\n            preferences?.map(preference => {\n                const pendingValue = pendingValues?.find(\n                    item => item.key === preference.key\n                )?.value;\n                return {\n                    key: preference.key,\n                    type: preference.type,\n                    title: NOTIFICATION_SETTING_TITLE[preference.key] ?? '',\n                    description: preference.description,\n                    value: pendingValue ?? preference.value,\n                    isSaving: typeof pendingValue !== 'undefined',\n                };\n            }),\n        [preferences, pendingValues]\n    );\n\n    const handleToggle = useCallback(\n        (key: string) => {\n            const item = items?.find(item => item.key === key);\n            if (!item) return;\n            const newValue = !item.value;\n            updatePreference(userId, key, newValue, () => {\n                showMessage(\n                    `Notifications have been ${\n                        newValue ? 'enabled' : 'disabled'\n                    }`,\n                    'success'\n                );\n            });\n        },\n        [userId, items, updatePreference, showMessage]\n    );\n\n    useEffect(() => {\n        getPreferences(userId);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return (\n        <NotificationsView\n            isLoading={isLoading}\n            items={items}\n            onToggle={handleToggle}\n        />\n    );\n}\n\nexport default NotificationsController;","import React from 'react';\n\nexport enum WEB_SITE_ID {\n    ADMIN_PORTAL = 'ADMIN_PORTAL',\n    COMPANY_PORTAL = 'COMPANY_PORTAL',\n}\n\nexport const WebSiteIdContext = React.createContext<WEB_SITE_ID>(\n    '' as WEB_SITE_ID\n);\n","import Notifications from './controller';\n\nexport default Notifications;","import React, { FC, memo } from 'react';\nimport styled from 'styled-components';\nimport { isAdminPortal } from '../../../helpers/functions/general';\nimport PractisAdminPlatformLogo from '../../icons/PractisAdminPlatformLogo';\nimport PractisLogo from '../../icons/PractisLogo';\n\nconst StyledPractisIcon = styled(isAdminPortal() ? PractisAdminPlatformLogo : PractisLogo)<{ color?: string }>`\n    color: ${props => (props.color ? props.color : props.theme.Colors.white)};\n`;\n\nconst StyledLogo = styled.div<{ height: number; width?: number }>`\n    height: ${props => props.height}px;\n    width: ${props => (props.width ? props.width + 'px' : 'auto')};\n    & img {\n        height: 100%;\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst Logo: FC<{\n    height?: number;\n    width?: number;\n    color?: string;\n    className?: string;\n    onClick?: () => void;\n}> = memo(({ height, width, color, className, onClick }) => {\n    return (\n        <StyledLogo\n            height={height ? height : 25}\n            width={width}\n            onClick={onClick}\n            className={className}\n        >\n            <StyledPractisIcon color={color} />\n        </StyledLogo>\n    );\n});\n\nexport default Logo;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const RightArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 21 18\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g\n                    fill=\"none\"\n                    fillRule=\"evenodd\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2\"\n                >\n                    <path\n                        d=\"M7 4L15 12 23 4\"\n                        transform=\"translate(0 1) rotate(-90 15 8)\"\n                    />\n                    <path d=\"M19 8L0 8\" transform=\"translate(0 1)\" />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default RightArrow;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Label = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                height=\"100%\"\n                viewBox=\"0 0 16 12\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M208 141v-10c0-.552.448-1 1-1h10.5l4.5 6-4.5 6H209c-.552 0-1-.448-1-1zm11 0l3.75-5-3.75-5h-10v10h10zm1.115-5c0 .86-.698 1.558-1.557 1.558-.86 0-1.558-.698-1.558-1.558 0-.86.697-1.558 1.558-1.558.86 0 1.557.698 1.557 1.558zm-2.336 0c0 .43.348.779.779.779.43 0 .779-.349.779-.779 0-.43-.349-.779-.78-.779-.43 0-.778.349-.778.78z\"\n                            transform=\"translate(-208 -130)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Label;\n","import { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport RightArrow from '../../icons/RightArrow';\nimport LabelIcon from '../../icons/Label';\n\nexport const PractisSupportWrapper = styled.div<{ shrink: boolean }>`\n    position: relative;\n    height: 32px;\n    padding-left: ${props => (props.shrink ? '20px' : '32px')};\n    padding-right: 20px;\n    display: flex;\n    cursor: pointer;\n    color: var(--ps-grey-1);\n    text-decoration: none;\n`;\n\nexport const StyledSidebar = styled.div`\n    z-index: 1;\n    display: flex;\n`;\n\nexport const SidebarBody = styled.div`\n    display: flex;\n    flex: 1;\n`;\n\nexport const SidebarLabels = styled.div<{ isOpen: boolean }>`\n    background: ${props => (props.isOpen ? 'var(--ps-graphite-2)' : 'none')};\n    margin-top: 28px;\n    border-top-left-radius: 8px;\n    display: flex;\n    padding-bottom: 24px;\n`;\n\nexport const ClosedLabels = styled.div`\n    width: 48px;\n    height: 48px;\n    padding: 8px;\n    box-sizing: border-box;\n    background: var(--ps-graphite-2);\n    border-radius: 8px 0 0 8px;\n`;\n\nexport const OpenLabels = styled.div`\n    width: 192px;\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n`;\n\nexport const OpenLabelsContent = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n`;\n\nexport const OpenLabelsFooter = styled.div`\n    padding: 8px 0 16px 16px;\n`;\n\nexport const StyledLabelsIcon = styled(LabelIcon)`\n    width: 16px;\n    height: 12px;\n`;\n\nexport const StyledRightArrow = styled(RightArrow)`\n    width: 12px;\n`;\n\nexport const OpenLabelsButton = styled.div`\n    width: 32px;\n    height: 32px;\n    border-radius: 4px;\n    background: var(--ps-graphite-1);\n    color: var(--ps-white-1);\n    cursor: pointer;\n    user-select: none;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const SidebarContent = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n`;\n\nexport const SidebarMenu = styled.div`\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    padding: 84px 0 105px 0;\n`;\n\nexport const SidebarProfile = styled.div``;\n\nexport const ItemLoading = styled.div<{ isOpen: boolean }>`\n    height: 32px;\n    margin-bottom: 32px;\n    margin-left: ${props => (props.isOpen ? '20px' : '32px')};\n    display: flex;\n    align-items: center;\n    flex-direction: row;\n`;\n\nexport const ItemLoadingIcon = styled.div`\n    width: 16px;\n    height: 16px;\n    background-color: var(--ps-graphite-4);\n    border-radius: 8px;\n`;\n\nexport const ItemLoadingText = styled.div`\n    width: 64px;\n    height: 8px;\n    background-color: var(--ps-graphite-4);\n    margin-left: 12px;\n`;\n\nexport const IconHolder = styled.div`\n    width: 16px;\n    height: 16px;\n    align-self: center;\n`;\n\nexport const Link = styled(NavLink)<{ shrink: boolean }>`\n    height: 32px;\n    padding-left: ${props => (props.shrink ? '20px' : '32px')};\n    padding-right: 20px;\n    margin-bottom: 32px;\n    display: flex;\n    cursor: pointer;\n    color: var(--ps-grey-1);\n    text-decoration: none;\n    position: relative;\n    &.is-active {\n        color: var(--ps-white-1);\n        font-weight: bold;\n\n        ::before {\n            width: 4px;\n            height: 32px;\n            background: var(--ps-white-1);\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            border-radius: 0 10px 10px 0;\n        }\n    }\n    ${props =>\n        props.shrink &&\n        `\n        flex-direction: row;\n        justify-content: center;\n    `}\n    &:last-child {\n        margin-bottom: 120px;\n    }\n`;\n\nexport const Label = styled.div<{ fontSize?: string }>`\n    font-weight: 500;\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '15px')};\n    text-decoration: none;\n    margin-left: 12px;\n    align-self: center;\n    line-height: 22px;\n`;\n\nexport const StyledDot = styled.div<{ isShrink?: boolean }>`\n    height: 8px;\n    width: 8px;\n    background-color: var(--ps-red-main);\n    border-radius: 50%;\n    ${props => !props.isShrink && 'margin: 10px 0 0 0'};\n    ${props => !!props.isShrink && 'position: absolute; top: 3px; right: 0'};\n`;","import React, { memo, useCallback } from 'react';\nimport { match as Match, useLocation } from 'react-router-dom';\nimport { kebabCase } from 'lodash';\n\nimport { SideBarItemProps } from './types';\nimport { IconHolder, Label, Link, StyledDot } from './styles';\n\nexport const SideBarItem: React.FC<SideBarItemProps> = memo(\n    ({\n        name,\n        icon: Icon,\n        activeIcon: ActiveIcon,\n        url,\n        shrink,\n        alternateUrl,\n        defaultItem,\n        fontSize,\n        hasNewItems,\n    }) => {\n        const location = useLocation();\n        const isActive = useCallback(\n            (isMatch: boolean) =>\n                isMatch ||\n                (!!defaultItem && location.pathname === '/') ||\n                (!!alternateUrl && alternateUrl.includes(location.pathname)),\n            [defaultItem, location, alternateUrl]\n        );\n\n        const handleIsActive = useCallback(\n            (match: Match<any>) => isActive(!!match),\n            [isActive]\n        );\n        return (\n            <Link\n                to={url}\n                activeClassName={'is-active'}\n                isActive={handleIsActive}\n                shrink={!!shrink}\n                data-test={`sidebar-${kebabCase(name)}`}\n            >\n                <IconHolder title={name}>\n                    {isActive(location.pathname.indexOf(url) > -1) ? (\n                        <ActiveIcon />\n                    ) : (\n                        <Icon />\n                    )}\n                </IconHolder>\n                {!shrink && <Label fontSize={fontSize}>{name}</Label>}\n                {hasNewItems && <StyledDot isShrink={!shrink} />}\n            </Link>\n        );\n    }\n);\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Dots = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 384 384\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                data-test={dataTest}\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <g>\n                        <circle cx=\"192\" cy=\"42.667\" r=\"42.667\" />\n                    </g>\n                </g>\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <g>\n                        <circle cx=\"192\" cy=\"192\" r=\"42.667\" />\n                    </g>\n                </g>\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <g>\n                        <circle cx=\"192\" cy=\"341.333\" r=\"42.667\" />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Dots;\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\n\nimport { Theme } from '../../../constants/interfaces/Theme';\nimport { StyleProps } from './types';\n\nexport const useStyles = makeStyles<Theme, StyleProps>(theme => ({\n    menuListClassName: {\n        width: ({ customWidth }) =>\n            customWidth ? `${customWidth}px` : '128px',\n        boxShadow: '0 5px 20px 0 rgba(0, 0, 0, 0.2)',\n        padding: '16px 8px',\n        borderRadius: '8px !important',\n        right: ({ customLeft }) => `${customLeft || '40'}px !important`,\n        bottom: ({ customLeft }) => `${customLeft ? '5px': 'unset' } !important`,\n        marginTop: ({ marginTop }) =>\n            marginTop ? `${marginTop}px !important` : '10px !important',\n        background: '#fff',\n    },\n    popper: {\n        zIndex: 1,\n        '&[x-placement*=\"bottom\"] $arrow': {\n            top: 0,\n            left: 0,\n            zIndex: 2,\n            width: '1em',\n            height: '1em',\n            '&::before': {\n                borderWidth: '0 1em 1em 1em',\n                borderColor: `transparent transparent var(--ps-white-1) transparent`,\n            },\n        },\n        '&[x-placement*=\"top\"] $arrow': {\n            bottom: 0,\n            left: 0,\n            marginBottom: '-0.9em',\n            zIndex: 2,\n            width: '3em',\n            height: '1em',\n            '&::before': {\n                borderWidth: '1em 1em 0 1em',\n                borderColor: `var(--ps-white-1) transparent transparent transparent`,\n                boxShadow: `-3px -4px 5px rgba(0, 0, 0, 0.015),\n                0 0px white, \n                -7px -3px 5px  rgba(0, 0, 0, 0.015), \n                0 0px white`,\n            },\n        },\n        '&[x-placement*=\"right\"] $arrow': {\n            left: 0,\n            marginLeft: '-0.9em',\n            zIndex: 2,\n            height: '3em',\n            width: '1em',\n            '&::before': {\n                borderWidth: '1em 1em 1em 0',\n                borderColor: `transparent var(--ps-white-1) transparent transparent`,\n                boxShadow: `-3px -4px 5px rgba(0, 0, 0, 0.015),\n                0 0px white, \n                -7px -3px 5px  rgba(0, 0, 0, 0.015), \n                0 0px white`,\n            },\n        },\n        '&[x-placement*=\"left\"] $arrow': {\n            right: 0,\n            marginRight: '-0.9em',\n            zIndex: 2,\n            height: '3em',\n            width: '1em',\n            '&::before': {\n                borderWidth: '1em 0 1em 1em',\n                borderColor: `transparent transparent transparent var(--ps-white-1)`,\n                boxShadow: `-3px -4px 5px rgba(0, 0, 0, 0.015),\n                0 0px white, \n                -7px -3px 5px  rgba(0, 0, 0, 0.015), \n                0 0px white`,\n            },\n        },\n    },\n\n    arrow: {\n        position: 'absolute',\n        fontSize: 10,\n\n        '&::before': {\n            content: '\"\"',\n            margin: 'auto',\n            display: 'block',\n            width: 0,\n            height: 0,\n            borderStyle: 'solid',\n        },\n    },\n}));\n\nexport const ActionMenuHandler = styled.div<{\n    open: boolean;\n    hasCustomComponent: boolean;\n}>`\n    width: 10px;\n    ${({ hasCustomComponent }) => !hasCustomComponent && `height: 24px;`}\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    border-radius: 8px;\n    color: ${props => props.theme.Colors.steelGrey};\n    box-shadow: ${props =>\n        props.open && !props.hasCustomComponent\n            ? `0 0 0 1px ${props.theme.Colors.cloudyBlue}`\n            : 'none'};\n    background-color: ${props =>\n        props.open && !props.hasCustomComponent\n            ? props.theme.Colors.whiteTwo\n            : 'unset'};\n`;\n\nexport const Button = styled.div`\n    display: flex;\n    justify-content: flex-end;\n    cursor: default;\n    height: 100%;\n`;\n\nexport const IconContainer = styled.div`\n    height: 100%;\n    width: 12px;\n    cursor: pointer;\n    margin: 0 5px;\n    display: flex;\n    align-items: center;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { ClickAwayListener, Grow, MenuList, Popper } from '@material-ui/core';\nimport classNames from 'classnames';\n\nimport Dots from '../../icons/Dots';\nimport { ActionMenuHandler, Button, IconContainer, useStyles } from './styles';\nimport { ActionButtonProps } from './types';\n\nconst uuid = require('uuid/v1');\n\nexport const ActionButton: React.FC<ActionButtonProps> = ({\n    children,\n    marginTop,\n    customWidth,\n    customLeft,\n    active,\n    button,\n    hideArrow = true,\n    isHidden,\n    menuItemsClassName,\n    dataTest,\n    placement,\n    isDisabled\n}) => {\n    const classes = useStyles({\n        customWidth,\n        marginTop,\n        customLeft\n    });\n    const menuListAnchorRef = useRef<HTMLDivElement>(null);\n    const customRandomId = uuid();\n\n    const [isMenuListOpen, setIsMenuListOpen] = useState<boolean>(false);\n    const [arrowRef, setArrowRef] = useState<unknown>(null);\n\n    /**\n     * @function handleToggle\n     * @param { React.MouseEvent<HTMLElement> } event\n     * @returns { void }\n     */\n    const handleToggle = (event: React.MouseEvent<HTMLElement>): void => {\n        event.stopPropagation();\n        setIsMenuListOpen(prevOpen => !prevOpen);\n    };\n\n    /**\n     * @function handleClose\n     * @param { React.MouseEvent<Document, MouseEvent> | undefined } event\n     * @returns { void }\n     */\n    const handleClose = (\n        event?: React.MouseEvent<Document, MouseEvent>\n    ): void => {\n        if (\n            menuListAnchorRef.current &&\n            menuListAnchorRef.current.contains(event?.target as HTMLElement)\n        ) {\n            return;\n        }\n\n        setIsMenuListOpen(false);\n    };\n\n    // to close the menu while scrolling outside\n    useEffect(() => {\n        const scrollableContainer = document.getElementById(\n            'MainScrollableContainer'\n        );\n\n        scrollableContainer?.addEventListener('scroll', event => {\n            handleClose();\n        });\n\n        return () => {\n            scrollableContainer?.removeEventListener('scroll', event => {\n                handleClose();\n            });\n        };\n    }, []);\n\n    return (\n        <>\n            <Button\n                ref={menuListAnchorRef}\n                id={`action-button-${customRandomId}`}\n                aria-controls={\n                    isMenuListOpen ? `action-menu-${customRandomId}` : undefined\n                }\n                aria-expanded={isMenuListOpen ? 'true' : undefined}\n                aria-haspopup=\"true\"\n                onClick={(e) => !isDisabled && handleToggle(e)}\n                className=\"action-button-element\"\n                data-test={dataTest && `${dataTest}-button`}\n            >\n                <IconContainer>\n                    {!isHidden && (\n                        <ActionMenuHandler\n                            open={!!active || isMenuListOpen}\n                            hasCustomComponent={!!button}\n                            className=\"dot-icon-container\"\n                        >\n                            {button ? button : <Dots />}\n                        </ActionMenuHandler>\n                    )}\n                </IconContainer>\n            </Button>\n            <Popper\n                open={isMenuListOpen}\n                anchorEl={menuListAnchorRef.current}\n                className={classes.popper}\n                modifiers={{\n                    arrow: {\n                        enabled: !hideArrow,\n                        element: arrowRef,\n                    },\n                }}\n                placement={placement ? placement : customLeft ? 'bottom-end': undefined}\n            >\n                {({ TransitionProps }) => (\n                    <>\n                        {!hideArrow ? (\n                            <span className={classes.arrow} ref={setArrowRef} />\n                        ) : null}\n                        <Grow {...TransitionProps}>\n                            <ClickAwayListener onClickAway={handleClose}>\n                                <MenuList\n                                    autoFocusItem={isMenuListOpen}\n                                    id={`action-menu-${customRandomId}`}\n                                    aria-labelledby={`action-button-${customRandomId}`}\n                                    data-test={`${dataTest}-menu`}\n                                    className={classNames(\n                                        classes.menuListClassName,\n                                        menuItemsClassName\n                                    )}\n                                    onClick={(event: React.MouseEvent) => {\n                                        event.stopPropagation();\n                                        handleClose(event as any);\n                                    }\n                                    }\n                                >\n                                    {children}\n                                </MenuList>\n                            </ClickAwayListener>\n                        </Grow>\n                    </>\n                )}\n            </Popper>\n        </>\n    );\n};\n","import React from 'react';\n\nexport interface TActionsContextValue {\n    toggleOpen?(value?: boolean): void;\n}\n\nexport const ActionContext = React.createContext<TActionsContextValue>({});\n","import React, { MouseEvent, FC } from 'react';\nimport styled from 'styled-components';\nimport { ActionContext } from './ActionContext';\nimport { ACTION_ITEM_HEIGHT } from './constants';\n\n//region Styles\nconst Item = styled.div<{ disabled?: boolean }>`\n    min-height: ${ACTION_ITEM_HEIGHT}px;\n    padding: 8px 16px;\n    font-weight: normal;\n    cursor: pointer;\n    font-weight: 600;\n    border-radius: 4px;\n    display: flex;\n    align-items: center;\n    ${props => props.disabled && `pointer-events: none`}\n    &:hover {\n        background: ${props => props.theme.Colors.whiteTwo};\n    }\n    &:active {\n        background: ${props => props.theme.Colors.paleGrey};\n    }\n`;\n\nconst Content = styled.span<{ type?: 'warning'; disabled?: boolean }>`\n    font-size: 13px;\n    font-weight: 500;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.type === 'warning'\n            ? props.theme.Colors.tomato\n            : props.theme.Colors.black};\n`;\n//endregion\n\nexport const ActionItem: FC<{\n    destructive?: boolean;\n    onClick?(e: MouseEvent<HTMLDivElement>): void;\n    disabled?: boolean;\n    dataTest?: string;\n}> = ({ destructive, children, onClick, disabled, dataTest }) => {\n    return (\n        <ActionContext.Consumer>\n            {context => (\n                <Item\n                    onClick={e => {\n                        if (disabled) return;\n                        if (context.toggleOpen) context.toggleOpen(false);\n                        if (onClick) onClick(e);\n                    }}\n                    disabled={disabled}\n                    data-test={dataTest}\n                >\n                    <Content\n                        type={destructive ? 'warning' : undefined}\n                        disabled={disabled}\n                    >\n                        {children}\n                    </Content>\n                </Item>\n            )}\n        </ActionContext.Consumer>\n    );\n};\n","export const ACTION_ITEM_HEIGHT: number = 40;\n","import React, { Children } from 'react';\nimport styled from 'styled-components';\nimport OutsideActionBox from '../OutsideActionBox/OutsideActionBox';\n\nconst Menu = styled(OutsideActionBox)`\n    position: absolute;\n`;\n\nconst Items = styled.div<{\n    placement: 'top' | 'bottom';\n    itemCount: number;\n    extendHeight: number;\n    marginTop?: number;\n    customWidth?: number;\n}>`\n    width: ${props => (props.customWidth ? props.customWidth : 128)}px;\n    position: fixed;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    padding: 16px 8px;\n    border-radius: 8px;\n    background: ${props => props.theme.Colors.white};\n    right: 20px;\n    z-index: 100;\n    margin-top: 40px;\n`;\n\nexport const ActionMenu: React.FC<{\n    open: boolean;\n    extendHeight: number;\n    placement?: 'top' | 'bottom';\n    marginTop?: number;\n    customWidth?: number;\n    toggleOpen(open?: boolean): void;\n    className?: string;\n    itemsClassName?: string;\n}> = ({\n    open,\n    placement,\n    children,\n    marginTop,\n    toggleOpen,\n    extendHeight,\n    customWidth,\n    className,\n    itemsClassName,\n}) => {\n    const itemCount = Children.count(children);\n    return (\n        <Menu\n            open={open}\n            toggleOpen={toggleOpen}\n            styles={{ position: 'relative' }}\n            className={className}\n        >\n            <Items\n                placement={placement || 'top'}\n                itemCount={itemCount}\n                extendHeight={extendHeight}\n                marginTop={marginTop}\n                customWidth={customWidth}\n                className={itemsClassName}\n            >\n                {children}\n            </Items>\n        </Menu>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { LinkText } from '../../../ui/components/LinkText/link-text';\n\nconst AddLabelActions = styled.div`\n    text-align: right;\n    height: 16px;\n    margin-bottom: 8px;\n`;\n\nconst CancelLabelButton = styled(LinkText)`\n    font-size: 11px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst SaveLabelButton = styled(LinkText)<{ disabled?: boolean }>`\n    font-size: 11px;\n    margin-left: 8px;\n    ${props =>\n        props.disabled &&\n        `\n        pointer-events: none;\n        color: ${props.theme.Colors.steelGrey};\n    `}\n`;\n\nconst EditLabelActions: FC<{\n    onCancel?: () => void;\n    onConfirm?: () => void;\n    confirmDisabled?: boolean;\n}> = ({ onCancel, onConfirm, confirmDisabled }) => {\n    return (\n        <AddLabelActions>\n            <CancelLabelButton onClick={onCancel} dataTest=\"sidebar-labels-cancel\">Cancel</CancelLabelButton>\n            <SaveLabelButton onClick={onConfirm} disabled={confirmDisabled} dataTest=\"sidebar-labels-save\">\n                Save\n            </SaveLabelButton>\n        </AddLabelActions>\n    );\n};\n\nexport default EditLabelActions;\n","import { useRef } from 'react';\n\nexport const useFocus = () => {\n    const htmlElRef = useRef<HTMLElement>();\n    const setFocus = () => {\n        const currentEl = htmlElRef.current;\n        currentEl && currentEl.focus();\n    };\n    return [htmlElRef, setFocus] as const;\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Input } from '../../../ui/components/input';\n\nconst LabelInput = styled(Input)`\n    font-size: 13px;\n    padding: 0 8px;\n    &::placeholder {\n        font-size: 11px;\n    }\n`;\n\nconst AddNewLabelInput: FC<{\n    name: string;\n    setName: (name: string) => void;\n    onKeyPress?: (e: KeyboardEvent) => void;\n}> = ({ name, setName, onKeyPress }) => {\n    return (\n        <LabelInput\n            height=\"24px\"\n            colorTheme=\"dark\"\n            autoFocus={true}\n            placeholder=\"Label name\"\n            maxLength={144}\n            value={name}\n            handleChange={e => setName(e.target.value)}\n            onKeyPress={onKeyPress}\n            dataTest='sidebar-labels-new-input'\n        />\n    );\n};\n\nexport default AddNewLabelInput;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledWarning = styled.div`\n    padding: 0 8px;\n    margin-bottom: 8px;\n    opacity: 0.9;\n`;\n\nconst StyledWarningLine = styled.div`\n    height: 1px;\n    border-top: 1px solid ${props => props.theme.Colors.coral};\n    margin-bottom: 4px;\n`;\n\nconst StyledWarningText = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.coral};\n`;\n\nconst LabelInputWarning = () => {\n    return (\n        <StyledWarning>\n            <StyledWarningLine />\n            <StyledWarningText>Label name is not unique</StyledWarningText>\n        </StyledWarning>\n    );\n};\n\nexport default LabelInputWarning;\n","const keyPressed = (ev: KeyboardEvent, key: string) => {\n    if (!ev.key) return false;\n    return ev.key === key;\n};\n\nexport const enterPressed = (ev: KeyboardEvent) => keyPressed(ev, 'Enter');\nexport const escPressed = (ev: KeyboardEvent) => keyPressed(ev, 'Escape');\n","import { makeStyles, Theme } from '@material-ui/core';\nimport styled from 'styled-components';\nimport Checkbox from '../../../ui/components/Checkbox';\nimport { Input } from '../../../ui/components/input';\n\nimport { StyleProps } from './types';\n\nexport const useStyles = makeStyles<Theme, StyleProps>(theme => ({\n    menuListClassName: {\n        width: ({ customWidth }) =>\n            customWidth ? `${customWidth}px` : '168px',\n        boxShadow: '0 5px 20px 0 rgba(0, 0, 0, 0.1)',\n        padding: '16px 8px',\n        borderRadius: '8px !important',\n        right: '40px !important',\n        marginTop: ({ marginTop }) =>\n            marginTop ? `${marginTop}px !important` : '5px !important',\n        marginLeft: '240px !important',\n        background: 'var(--ps-white-1)',\n    },\n    popper: {\n        zIndex: 999999,\n    },\n}));\n\nexport const DotsIconContainer = styled.div<{ disabled: boolean }>`\n    height: 100%;\n    padding: 0 6px 0 4px;\n    width: 20px;\n    cursor: pointer;\n    color: ${props =>\n        props.disabled ? 'var(--ps-grey-1)' : 'var(--ps-white-1)'};\n    &:hover {\n        color: ${props =>\n            props.disabled ? 'var(--ps-grey-1)' : 'var(--ps-white-1)'};\n    }\n`;\n\nexport const StyledLabelListItemContainer = styled.div``;\n\nexport const ChildLabelsContainer = styled.div<{\n    expanded: boolean;\n}>`\n    display: ${props => (props.expanded ? 'block' : 'none')};\n    margin-left: 8px;\n`;\n\nexport const EditLabelActionsContainer = styled.div`\n    margin: 0 16px;\n`;\n\nexport const LabelItemActions = styled.div<{ menuOpen?: boolean }>`\n    display: ${props => (props.menuOpen ? 'flex' : 'none')};\n    user-select: none;\n    align-items: center;\n    height: 100%;\n`;\n\nexport const StyledCheckbox = styled(Checkbox)`\n    height: 100%;\n    padding-left: 6px;\n`;\n\nexport const LabelNameContainer = styled.div<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    height: 100%;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n    ${props => props.disabled && 'pointer-events: none'}\n`;\n\nexport const ArrowContainer = styled.div`\n    width: 8px;\n    margin-right: 4px;\n    cursor: pointer;\n    color: var(--ps-grey-1);\n`;\n\nexport const CollapseArrow = styled.div`\n    height: 8px;\n    display: flex;\n`;\n\nexport const LabelListItemInputContainer = styled.div`\n    flex: 1;\n`;\n\nexport const LabelListItemInput = styled(Input)<{\n    ref?: any;\n    readOnly?: boolean;\n}>`\n    height: 100%;\n    color: var(--ps-grey-1);\n    font-size: 13px;\n    font-weight: 500;\n    padding: 0 4px;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    ${props => props.readOnly && `pointer-events: none`}\n`;\n\nexport const NoPermissionPlaceHolder = styled.div`\n    width: 16px;\n`;\n\nexport const StyledLabelListItem = styled.div<{\n    selected?: boolean;\n    modified?: boolean;\n    searched?: boolean;\n}>`\n    height: 32px;\n    background: var(--ps-graphite-2);\n    color: var(--ps-grey-1);\n    border-radius: 4px;\n    font-size: 13px;\n    align-items: center;\n    display: flex;\n    padding-left: 8px;\n    padding-right: 6px;\n    background: var(--ps-graphite-2);\n    ${LabelItemActions} {\n        display: ${props => (props.selected ? 'flex' : 'none')};\n    }\n    ${LabelListItemInput}, ${ArrowContainer} {\n        color: ${props =>\n            props.selected || props.modified || props.searched\n                ? 'var(--ps-white-1)'\n                : 'unset'};\n    }\n    &:hover ${LabelItemActions} {\n        display: flex;\n    }\n    &:hover ${LabelListItemInput}, :hover ${ArrowContainer} {\n        color: var(--ps-white-1);\n    }\n    &:hover {\n        background: var(--ps-graphite-1);\n    }\n`;\n\nexport const AddLabelSection = styled.div`\n    margin-bottom: 8px;\n    padding: 0 16px;\n`;","import { FC, useEffect, useRef } from 'react';\nimport { ClickAwayListener, Grow, MenuList, Popper } from '@material-ui/core';\n\nimport Dots from '../../../ui/icons/Dots';\nimport { LabelListActionsProps } from './types';\nimport { DotsIconContainer, useStyles } from './styles';\n\nconst LabelListActions: FC<LabelListActionsProps> = props => {\n    const {\n        children,\n        isMenuListOpen,\n        handleOpen,\n        handleClose,\n        customWidth,\n        marginTop,\n        disabled\n    } = props;\n\n    const classes = useStyles({ customWidth, marginTop });\n    const menuListAnchorRef = useRef<HTMLDivElement>(null);\n\n    // to close the menu while scrolling\n    useEffect(() => {\n        const labelsScrollableContainer = document.getElementById(\n            'labels-scrollable-container'\n        );\n\n        labelsScrollableContainer?.addEventListener('scroll', event => {\n            handleClose();\n        });\n\n        return () => {\n            labelsScrollableContainer?.removeEventListener('scroll', event => {\n                handleClose();\n            });\n        };\n    }, [handleClose]);\n\n    return (\n        <DotsIconContainer\n            ref={menuListAnchorRef}\n            id={`label-list-action-button`}\n            aria-controls={\n                isMenuListOpen ? `label-list-action-menu` : undefined\n            }\n            aria-expanded={isMenuListOpen ? 'true' : undefined}\n            aria-haspopup=\"true\"\n            disabled={disabled}\n            onClick={handleOpen}\n        >\n            <Dots />\n            {isMenuListOpen && (\n                <Popper\n                    open={isMenuListOpen}\n                    anchorEl={menuListAnchorRef.current}\n                    className={classes.popper}\n                >\n                    {({ TransitionProps }) => (\n                        <Grow {...TransitionProps}>\n                            <ClickAwayListener onClickAway={handleClose}>\n                                <MenuList\n                                    autoFocusItem={isMenuListOpen}\n                                    id={`label-list-action-menu`}\n                                    aria-labelledby={`label-list-action-button`}\n                                    className={classes.menuListClassName}\n                                >\n                                    {children}\n                                </MenuList>\n                            </ClickAwayListener>\n                        </Grow>\n                    )}\n                </Popper>\n            )}\n        </DotsIconContainer>\n    );\n};\n\nexport default LabelListActions;\n","import { FC, useCallback, useEffect, useState } from 'react';\nimport { kebabCase } from 'lodash';\n\nimport { ActionItem } from '../../../ui/components/ActionButton';\nimport {\n    useCreateLabelService,\n    useDeleteLabelService,\n    useExpandLabelFieldByIdService,\n    useSaveUserFiltersService,\n    useSelectLabelFilterActionService,\n    useSetEditingLabelActionService,\n    useSetLabelFilterActionService,\n    useToggleCollapseLabelFieldService,\n    useUpdateLabelService,\n} from '../store/services';\nimport { Label } from '../../../constants/interfaces/Label';\nimport EditLabelActions from './EditLabelActions';\nimport { useFocus } from '../../../helpers/hooks/useFocus';\nimport { useLabelsConfigState, useLabelsState } from '../store/states';\nimport AddNewLabelInput from './AddNewLabelInput';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport TriangleDown from '../../../ui/icons/TriangleDown';\nimport TriangleRight from '../../../ui/icons/TriangleRight';\nimport { Variables } from '../../../theme/variables';\nimport LabelInputWarning from './LabelInputWarning';\nimport { enterPressed } from '../../../helpers/functions/key-down-helpers';\nimport { listToTree } from '../../../helpers/functions/list-to-tree';\nimport { useHandleSelectLabels } from '../tools';\nimport { CheckPermission } from '../../permissions';\nimport { usePermissionsState } from '../../permissions/store/state';\nimport LabelListActions from './LabelListActions';\nimport {\n    AddLabelSection,\n    ArrowContainer,\n    ChildLabelsContainer,\n    CollapseArrow,\n    EditLabelActionsContainer,\n    LabelItemActions,\n    LabelListItemInput,\n    LabelListItemInputContainer,\n    LabelNameContainer,\n    NoPermissionPlaceHolder,\n    StyledCheckbox,\n    StyledLabelListItem,\n    StyledLabelListItemContainer,\n} from './styles';\nimport { LabelListItemProps } from './types';\nimport { useShowConfirmModalDialog } from '../../../ui/components/ModalDialogs/store/actions';\n\nexport const LabelListItem: FC<LabelListItemProps> = ({\n    label,\n    allLabels,\n    searchResults,\n    openActions,\n    toggleOpenActions,\n    deleteLabel,\n    editingLabels,\n    setEditingLabel,\n    createLabel,\n    updateLabel,\n    toggleCollapse,\n    labelsCollapseState,\n    setLabelFilters,\n    selectedLabels,\n    saveUserFilters,\n    expandLabelById,\n    disableLabels,\n}) => {\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const [savingLabels, setSavingLabels] = useState(false);\n    const [labelName, setLabelName] = useState(label.name);\n    const [newLabelName, setNewLabelName] = useState('');\n\n    const isLabelSelected = selectedLabels.includes(label.id);\n    const isLabelPartiallySelected = selectedLabels.includes(-label.id);\n\n    const editMode =\n        !!editingLabels && editingLabels.id === label.id\n            ? editingLabels.mode\n            : 'view';\n\n    const isLabelListActionDisabled = editingLabels?.mode === 'edit';       \n    const isExpanded = labelsCollapseState.includes(label.id);\n\n    const [inputRef, setFocus] = useFocus();\n\n    const hasChildren = (label?: Label) => {\n        return label && label.children && label.children.length > 0;\n    };\n\n    const checkForNotUniqueLabelName = (\n        labelName: string,\n        labels?: Label,\n        labelId?: number\n    ) => {\n        if (!labels || !labels.children) return false;\n        const children = labels.children;\n        const filteredLabels = children.filter(\n            (label: Label) => label.name === labelName && label.id !== labelId\n        );\n        return filteredLabels.length > 0;\n    };\n\n    const childLabelNotUnique = checkForNotUniqueLabelName(newLabelName, label);\n    const addNewLabelDisabled = childLabelNotUnique || newLabelName.length < 1;\n\n    const editLabelNotUnique = checkForNotUniqueLabelName(\n        labelName,\n        allLabels &&\n            allLabels.filter(parent => parent.id === label.parentId)[0],\n        label.id\n    );\n    const editLabelDisabled = editLabelNotUnique || labelName.length < 1;\n\n    const handleSelectLabels = useHandleSelectLabels();\n\n    const handleLabelSelection = () => {\n        const labelsTree = listToTree(allLabels);\n        setLabelFilters(handleSelectLabels(label, selectedLabels, labelsTree));\n        setSavingLabels(true);\n    };\n\n    const permissions = usePermissionsState();\n    useEffect(() => {\n        if (\n            savingLabels &&\n            permissions.includes(NEW_PERMISSIONS.SAVE_SEARCH_FILTER)\n        ) {\n            saveUserFilters(selectedLabels);\n            setSavingLabels(false);\n        }\n    }, [\n        selectedLabels,\n        savingLabels,\n        setSavingLabels,\n        saveUserFilters,\n        permissions,\n    ]);\n\n    const updateLabelName = () => {\n        updateLabel(label.id, {\n            name: labelName,\n            parentId: label.parentId,\n        })\n            .then(() => {\n                setEditingLabel();\n            })\n            .catch(() => {\n                setLabelName(label.name);\n                setEditingLabel();\n            });\n    };\n\n    const addSubLabelField = () => {\n        toggleOpenActions(false);\n        setEditingLabel({\n            id: label.id,\n            mode: 'new',\n        });\n        expandLabelById(label.id);\n    };\n\n    const createSubLabel = () => {\n        createLabel({\n            name: newLabelName,\n            parentId: label.id,\n        });\n        setNewLabelName('');\n        setEditingLabel();\n    };\n\n\n    const handleDeleteLabel = useCallback(\n        (event: React.MouseEvent<HTMLElement>) => {\n            event.stopPropagation();\n            showConfirmationModalDialog({\n                modalTitle: 'Are You Sure?',\n                description:\n                    'Deleting the Label will remove it from all related content items and users. It cannot be undone.',\n                confirmButtonText: 'Proceed',\n                cancelButtonText: 'Cancel',\n                onConfirm: () => {\n                    deleteLabel(label);\n                    toggleOpenActions(false);\n                },\n            });\n            toggleOpenActions(false);\n        },\n        [deleteLabel, label, showConfirmationModalDialog, toggleOpenActions]\n    );    \n\n    return (\n        <>\n            <StyledLabelListItemContainer>\n                <StyledLabelListItem\n                    title={labelName}\n                    selected={\n                        isLabelSelected ||\n                        isLabelPartiallySelected ||\n                        openActions\n                    }\n                    modified={editMode !== 'view'}\n                    searched={searchResults && searchResults.includes(label.id)}\n                >\n                    <LabelNameContainer\n                        onClick={() => toggleCollapse(label.id)}\n                        disabled={!hasChildren(label)}\n                        data-test={`sidebar-labels-item-${kebabCase(\n                            labelName\n                        )}`}\n                    >\n                        <ArrowContainer>\n                            {hasChildren(label) && (\n                                <CollapseArrow>\n                                    {labelsCollapseState.includes(label.id) ? (\n                                        <TriangleDown />\n                                    ) : (\n                                        <TriangleRight />\n                                    )}\n                                </CollapseArrow>\n                            )}\n                        </ArrowContainer>\n                        <LabelListItemInputContainer>\n                            <LabelListItemInput\n                                ref={inputRef}\n                                height={'auto'}\n                                value={labelName}\n                                handleChange={(e: any) =>\n                                    setLabelName(e.target.value)\n                                }\n                                onKeyPress={e => {\n                                    if (enterPressed(e) && !editLabelDisabled) {\n                                        updateLabelName();\n                                    }\n                                }}\n                                colorTheme=\"transparent\"\n                                maxLength={144}\n                                readOnly={editMode !== 'edit'}\n                            />\n                        </LabelListItemInputContainer>\n                    </LabelNameContainer>\n                    <LabelItemActions menuOpen={openActions}>\n                        <StyledCheckbox\n                            checked={\n                                isLabelSelected || isLabelPartiallySelected\n                            }\n                            partial={isLabelPartiallySelected}\n                            handleChange={handleLabelSelection}\n                            size={12}\n                            disabled={disableLabels}\n                            background={Variables.Colors.dark}\n                            border={Variables.Colors.steelGrey}\n                        />\n                        <CheckPermission\n                            permissions={[\n                                NEW_PERMISSIONS.UPDATE_LABEL,\n                                NEW_PERMISSIONS.CREATE_LABEL,\n                                NEW_PERMISSIONS.DELETE_LABEL,\n                            ]}\n                            alternateContent={<NoPermissionPlaceHolder />}\n                        >\n                            <LabelListActions\n                                isMenuListOpen={openActions}\n                                handleOpen={() =>\n                                    !isLabelListActionDisabled &&\n                                    toggleOpenActions(true)\n                                }\n                                handleClose={() => toggleOpenActions(false)}\n                                disabled={isLabelListActionDisabled}\n                            >\n                                {label.parentsCount < 4 && (\n                                    <CheckPermission\n                                        permissions={[\n                                            NEW_PERMISSIONS.CREATE_LABEL,\n                                        ]}\n                                    >\n                                        <ActionItem\n                                            onClick={e => {\n                                                e.stopPropagation();\n                                                addSubLabelField();\n                                            }}\n                                        >\n                                            Add a Sub Label\n                                        </ActionItem>\n                                    </CheckPermission>\n                                )}\n                                <CheckPermission\n                                    permissions={[NEW_PERMISSIONS.UPDATE_LABEL]}\n                                >\n                                    <ActionItem\n                                        onClick={e => {\n                                            e.stopPropagation();\n                                            toggleOpenActions(false);\n                                            setEditingLabel({\n                                                id: label.id,\n                                                mode: 'edit',\n                                            });\n                                            setFocus();\n                                        }}\n                                    >\n                                        Edit Name\n                                    </ActionItem>\n                                </CheckPermission>\n                                <CheckPermission\n                                    permissions={[NEW_PERMISSIONS.DELETE_LABEL]}\n                                >\n                                    <ActionItem\n                                        destructive={true}\n                                        onClick={handleDeleteLabel}\n                                    >\n                                        Delete Label\n                                    </ActionItem>\n                                </CheckPermission>\n                            </LabelListActions>\n                        </CheckPermission>\n                    </LabelItemActions>\n                </StyledLabelListItem>\n                {editMode === 'edit' && (\n                    <div>\n                        {editLabelNotUnique && <LabelInputWarning />}\n                        <EditLabelActionsContainer>\n                            <EditLabelActions\n                                onConfirm={updateLabelName}\n                                confirmDisabled={editLabelDisabled}\n                                onCancel={() => {\n                                    setLabelName(label.name);\n                                    setEditingLabel();\n                                }}\n                            />\n                        </EditLabelActionsContainer>\n                    </div>\n                )}\n                {editMode === 'new' && (\n                    <AddLabelSection>\n                        <AddNewLabelInput\n                            name={newLabelName}\n                            setName={setNewLabelName}\n                            onKeyPress={e => {\n                                if (enterPressed(e) && !addNewLabelDisabled) {\n                                    createSubLabel();\n                                }\n                            }}\n                        />\n                        {childLabelNotUnique && <LabelInputWarning />}\n                        <EditLabelActions\n                            onConfirm={createSubLabel}\n                            confirmDisabled={addNewLabelDisabled}\n                            onCancel={() => {\n                                setNewLabelName('');\n                                setEditingLabel();\n                            }}\n                        />\n                    </AddLabelSection>\n                )}\n            </StyledLabelListItemContainer>\n            {hasChildren(label) && (\n                <ChildLabelsContainer\n                    expanded={isExpanded}\n                >\n                    {label.children!.map((childLabel: Label) => (\n                        <LabelListItemContainer\n                            key={childLabel.id}\n                            label={childLabel}\n                            labelsCollapseState={labelsCollapseState}\n                            selectedLabels={selectedLabels}\n                            siblingIds={\n                                label.children &&\n                                label.children.map(label => label.id)\n                            }\n                            disableLabels={disableLabels}\n                        />\n                    ))}\n                </ChildLabelsContainer>\n            )}\n        </>\n    );\n};\n\nconst LabelListItemContainer: FC<{\n    label: Label;\n    labelsCollapseState: number[];\n    selectedLabels: number[];\n    siblingIds?: number[];\n    disableLabels?: boolean;\n}> = ({ label, labelsCollapseState, selectedLabels, disableLabels }) => {\n    const [open, setOpen] = useState(false);\n    const deleteLabel = useDeleteLabelService();\n\n    const allLabels = useLabelsState();\n\n    const labelsConfigState = useLabelsConfigState();\n    const setEditingLabel = useSetEditingLabelActionService();\n    const createLabel = useCreateLabelService();\n    const updateLabel = useUpdateLabelService();\n\n    const toggleCollapse = useToggleCollapseLabelFieldService();\n    const expandLabelById = useExpandLabelFieldByIdService();\n    const selectLabelFilter = useSelectLabelFilterActionService();\n    const setLabelFilters = useSetLabelFilterActionService();\n    const saveUserFilters = useSaveUserFiltersService();\n\n    return (\n        <LabelListItem\n            label={label}\n            searchResults={allLabels.searchResults}\n            allLabels={allLabels.data && allLabels.data.items}\n            openActions={open}\n            deleteLabel={deleteLabel}\n            toggleOpenActions={setOpen}\n            expandLabelById={expandLabelById}\n            editingLabels={labelsConfigState.editingLabels}\n            setEditingLabel={setEditingLabel}\n            createLabel={createLabel}\n            updateLabel={updateLabel}\n            toggleCollapse={toggleCollapse}\n            labelsCollapseState={labelsCollapseState}\n            selectLabelFilter={selectLabelFilter}\n            setLabelFilters={setLabelFilters}\n            saveUserFilters={saveUserFilters}\n            selectedLabels={selectedLabels}\n            disableLabels={disableLabels}\n        />\n    );\n};\n\nexport default LabelListItemContainer;","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Label } from '../../../constants/interfaces/Label';\nimport LabelListItem from './LabelListtem';\n\nconst StyledLabelsList = styled.div`\n    padding-left: 8px;\n    margin-bottom: 16px;\n`;\n\nconst ScrollableLabelContainer = styled.div`\n    height: 100%;\n`;\n\nconst LabelsList: FC<{\n    labels?: Label[];\n    labelsCollapseState: number[];\n    selectedLabels: number[];\n    disableLabels?: boolean;\n}> = ({ labels, labelsCollapseState, selectedLabels, disableLabels }) => {\n    if (!labels || (labels && labels.length === 0)) return null;\n    return (\n        <StyledLabelsList>\n            <ScrollableLabelContainer>\n                {labels &&\n                    labels.map(label => {\n                        return (\n                            <LabelListItem\n                                key={label.id}\n                                label={label}\n                                labelsCollapseState={labelsCollapseState}\n                                selectedLabels={selectedLabels}\n                                disableLabels={disableLabels}\n                            />\n                        );\n                    })}\n            </ScrollableLabelContainer>\n        </StyledLabelsList>\n    );\n};\n\nexport const LabelsListContainer: FC<{\n    labels?: Label[];\n    labelsCollapseState: number[];\n    selectedLabels: number[];\n    disableLabels?: boolean;\n}> = ({ labels, labelsCollapseState, selectedLabels, disableLabels }) => {\n    return (\n        <LabelsList\n            labels={labels}\n            labelsCollapseState={labelsCollapseState}\n            selectedLabels={selectedLabels}\n            disableLabels={disableLabels}\n        />\n    );\n};\n\nexport default LabelsListContainer;\n","import React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { MutateLabelsParams } from '../../../api/labels/types';\nimport EditLabelActions from './EditLabelActions';\nimport AddNewLabelInput from './AddNewLabelInput';\nimport LabelInputWarning from './LabelInputWarning';\nimport { Label } from '../../../constants/interfaces/Label';\nimport { enterPressed } from '../../../helpers/functions/key-down-helpers';\n\nconst AddLabelSection = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst AddLabels: FC<{\n    saveLabel?: (params: MutateLabelsParams) => Promise<any>;\n    setEditing: () => void;\n    labels?: Label[];\n}> = ({ saveLabel, setEditing, labels }) => {\n    const [labelName, setLabelName] = useState('');\n    const [labelUnique, setLabelUnique] = useState(true);\n    const addLabelDisabled = !labelUnique || labelName.trim().length < 1;\n    useEffect(() => {\n        if (!labels) return;\n        const filteredLabels = labels.filter(\n            (label: Label) => label.name === labelName && !label.parentId\n        );\n        setLabelUnique(filteredLabels.length < 1);\n    }, [labels, labelName]);\n\n    const handleCreateLabel = () => {\n        saveLabel &&\n            saveLabel({ name: labelName })\n                .then(result => {\n                    setEditing();\n                    setLabelName('');\n                })\n                .catch(e => {});\n    };\n\n    return (\n        <AddLabelSection>\n            <AddNewLabelInput\n                name={labelName}\n                setName={setLabelName}\n                onKeyPress={e => {\n                    if (enterPressed(e) && !addLabelDisabled) {\n                        handleCreateLabel();\n                    }\n                }}\n            />\n            {!labelUnique && <LabelInputWarning />}\n            <EditLabelActions\n                onCancel={() => {\n                    setLabelName('');\n                    setEditing();\n                }}\n                confirmDisabled={addLabelDisabled}\n                onConfirm={handleCreateLabel}\n            />\n        </AddLabelSection>\n    );\n};\n\nexport default AddLabels;\n","import React from 'react';\nimport styled from 'styled-components';\nimport NoLabels from '../../../ui/icons/NoLabels';\n\nconst StyledEmptyLabels = styled.div`\n    display: flex;\n    padding-top: 56px;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst StyledEmptyLabelsContent = styled.div`\n    max-width: 140px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst NoLabelsIcon = styled.div`\n    width: 30px;\n    height: 40px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 16px;\n`;\n\nconst NoLabelsTitle = styled.div`\n    font-weight: bold;\n    font-size: 13px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoLabelsDescription = styled.div`\n    font-size: 11px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    width: 100%;\n    white-space: break-spaces;\n`;\n\nconst EmptyLabels = () => {\n    return (\n        <StyledEmptyLabels>\n            <StyledEmptyLabelsContent>\n                <NoLabelsIcon>\n                    <NoLabels />\n                </NoLabelsIcon>\n                <NoLabelsTitle>No Matching Label</NoLabelsTitle>\n                <NoLabelsDescription>\n                    There are no labels that match your search\n                </NoLabelsDescription>\n            </StyledEmptyLabelsContent>\n        </StyledEmptyLabels>\n    );\n};\n\nexport default EmptyLabels;\n","import { useEffect, useRef } from 'react';\nimport equal from 'deep-equal';\n\n/**\n * @function usePreviousData\n * @param { T } value\n * @returns { T }\n */\nexport function usePreviousData<T>(value: T) {\n    const ref = useRef<T>();\n    useEffect(() => {\n        ref.current = value;\n    });\n    return ref.current;\n}\n\n/**\n * @function useIfChanged\n * @param { T } value\n * @param { boolean } dontCheckEmpty\n * @returns { boolean }\n */\nexport function useIfChanged<T>(value: T, dontCheckEmpty?: boolean) {\n    const previousValue = usePreviousData(value);\n\n    if (!previousValue && dontCheckEmpty) {\n        return false;\n    }\n    return !equal(value, previousValue && previousValue);\n}\n","import React, { useContext } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Dispatch } from 'redux';\r\n\r\nimport { PaginationResult, ListResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { UserV2 } from '../../../constants/interfaces/User';\r\nimport {\r\n    EnrollmentDailyTraining,\r\n    EnrollmentInterface,\r\n    EnrollmentProgress\r\n} from '../../../constants/interfaces/Enrollments';\r\nimport { Team, TeamV2 } from '../../../constants/interfaces/Team';\r\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\r\nimport { AppState } from '../../../store/reducers';\r\nimport { StateWithLabels } from '../../portableLabels/store/hors/withLabels';\r\nimport { TeamMember } from '../../../constants/interfaces/TeamMember';\r\nimport { TeamLeader } from '../../../constants/interfaces/TeamLeader';\r\nimport { TrainingPractisSet } from '../../../constants/interfaces/TrainingPractisSet';\r\nimport { selectItemsByIds } from '../../../tools/redux';\r\nimport { isEqual } from 'lodash';\r\n\r\nexport interface TeamLeadersState {\r\n    data?: PaginationResult<TeamLeader>;\r\n    selected: number[];\r\n    saved: number[];\r\n}\r\n\r\nexport interface TeamsState {\r\n    myTeams?: ListResult<Team>;\r\n    selectedMyTeamsItems?: number[];\r\n    teamLeaders: TeamLeadersState;\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nexport type TeamsStateSelector = (state: any) => TeamsState;\r\n\r\nexport const TeamsStateSelectorContext = React.createContext<TeamsStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useTeamsState(): TeamsState {\r\n    return useSelector(useContext(TeamsStateSelectorContext), isEqual);\r\n}\r\n\r\nexport interface UpdateTeamsState {\r\n    data?: any;\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdateTeamsStateStateSelector = (state: any) => UpdateTeamsState;\r\n\r\nexport const UpdateTeamsStateStateSelectorContext = React.createContext<UpdateTeamsStateStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdateTeamsState(): UpdateTeamsState {\r\n    return useSelector(useContext(UpdateTeamsStateStateSelectorContext));\r\n}\r\n\r\nexport enum TeamUpdateStatus {\r\n    IN_PROGRESS = 'inProgress',\r\n    COMPLETED = 'completed',\r\n    ERROR = 'error'\r\n}\r\n\r\nexport interface TeamEditState {\r\n    data?: TeamV2;\r\n    allUsers?: ListResult<UserV2>;\r\n    teamMembers?: ListResult<TeamMember>;\r\n    assignedLabels: number[];\r\n    deletedLabels: number[];\r\n    updatedTeam?: Partial<TeamV2>;\r\n    loading: boolean;\r\n    error?: string;\r\n    updateStatus?: TeamUpdateStatus\r\n}\r\n\r\nexport type TeamEditSelector = (state: any) => TeamEditState;\r\n\r\nexport const TeamEditSelectorContext = React.createContext<TeamEditSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useTeamEditState(): TeamEditState {\r\n    return useSelector(useContext(TeamEditSelectorContext));\r\n}\r\n\r\n//region Team members\r\nexport type TeamMembersStateSelector = (state: AppState) => TeamMembersState;\r\n\r\nexport type TeamMembersBaseState = {\r\n    itemsOnPage: number;\r\n    list: ListResult<TeamMember>;\r\n    data?: TeamV2;\r\n    loading: boolean;\r\n    error: string | null;\r\n};\r\n\r\nexport interface UpdateMembersState {\r\n    data?: any;\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdateMembersStateStateSelector = (\r\n    state: any\r\n) => UpdateMembersState;\r\n\r\nexport const UpdateMembersStateStateSelectorContext = React.createContext<UpdateMembersStateStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdateMembersState(): UpdateMembersState {\r\n    return useSelector(useContext(UpdateMembersStateStateSelectorContext));\r\n}\r\n\r\nexport type TeamMembersState = StateWithLabels & TeamMembersBaseState;\r\n\r\nexport const TeamMembersStateSelectorContext = React.createContext<TeamMembersStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useTeamMembersState(): TeamMembersState {\r\n    return useSelector(useContext(TeamMembersStateSelectorContext));\r\n}\r\n//endregion\r\n\r\nexport interface ProgressState {\r\n    updatedProgress: UpdatedProgressState;\r\n    enrollments: EnrollmentState;\r\n    report: PractisSetReportState;\r\n}\r\n\r\nexport interface PractisSetsTrainingState {\r\n    data?: ListResult<TrainingPractisSet>;\r\n    teamData?: TeamV2;\r\n    selectedPractisSets?: number[];\r\n    checked: number[];\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nexport type PractisSetsStateSelector = (state: any) => PractisSetsTrainingState;\r\n\r\nexport const TrainerStateSelectorContext = React.createContext<PractisSetsStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useTrainerPractisSetState(): PractisSetsTrainingState {\r\n    return useSelector(useContext(TrainerStateSelectorContext));\r\n}\r\n\r\nexport interface UpdatedProgressState {\r\n    data?: PractisSets;\r\n    updateType?: 'create' | 'update' | 'delete' | 'labels';\r\n    loading?: boolean;\r\n}\r\n\r\nexport type UpdatedProgressStateSelector = (state: any) => UpdatedProgressState;\r\n\r\nexport const UpdatedProgressStateSelectorContext = React.createContext<UpdatedProgressStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useUpdatedProgressState(): UpdatedProgressState {\r\n    return useSelector(useContext(UpdatedProgressStateSelectorContext));\r\n}\r\n\r\nexport interface EnrollmentState {\r\n    data?: PaginationResult<EnrollmentInterface>;\r\n    loading?: boolean;\r\n    practisSet?: PractisSets;\r\n    update?: Array<'invite' | 'reInvite' | 'unassign'>;\r\n    error?: string;\r\n}\r\n\r\nexport type EnrollmentStateSelector = (state: any) => EnrollmentState;\r\n\r\nexport const EnrollmentStateSelectorContext = React.createContext<EnrollmentStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useEnrollmentState(): EnrollmentState {\r\n    return useSelector(useContext(EnrollmentStateSelectorContext));\r\n}\r\n\r\nexport function selectSelectedProgresses(state: EnrollmentState, selectedProgressIds: number[] | undefined): EnrollmentInterface[] {\r\n    return selectItemsByIds<EnrollmentInterface>(selectedProgressIds, state?.data?.items);\r\n}\r\n\r\nexport interface AssignUsersState {\r\n    data?: ListResult<UserV2 & {dueDate?: Date}>;\r\n    selectedUsers?: number[];\r\n    loading?: boolean;\r\n    update?: Array<'invite' | 'reInvite' | 'unassign'>;\r\n    error?: string;\r\n}\r\n\r\nexport type TrainerInvitationStateSelector = (state: any) => AssignUsersState;\r\n\r\nexport const TrainerInvitationStateSelectorContext = React.createContext<TrainerInvitationStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function useTrainerInvitationState(): [AssignUsersState, Dispatch<any>] {\r\n    const selector = useContext(TrainerInvitationStateSelectorContext);\r\n    const state = useSelector(selector);\r\n    const dispatch = useDispatch();\r\n    return [state, dispatch];\r\n}\r\n\r\nexport interface PractisSetReportState {\r\n    enrollment?: EnrollmentInterface;\r\n    progress?: ListResult<EnrollmentProgress>;\r\n    dailyTraining?: EnrollmentDailyTraining[];\r\n    loading?: boolean;\r\n    error?: string;\r\n}\r\n\r\nexport type PractisSetReportStateSelector = (\r\n    state: any\r\n) => PractisSetReportState;\r\n\r\nexport const PractisSetReportStateSelectorContext = React.createContext<PractisSetReportStateSelector>(\r\n    () => {\r\n        throw new Error('Not implemented');\r\n    }\r\n);\r\n\r\nexport function usePractisSetReportState(): PractisSetReportState {\r\n    return useSelector(useContext(PractisSetReportStateSelectorContext));\r\n}\r\n","import { Roles } from '../../../constants/interfaces/Roles';\n\nexport enum ACTIONS {\n    LOAD_USER_ROLES_START = 'LOAD_USER_ROLES_START =',\n    LOAD_USER_ROLES_SUCCESS = 'LOAD_USER_ROLES_SUCCESS',\n    LOAD_USER_ROLES_FAILURE = 'LOAD_USER_ROLES_FAILURE',\n}\n\nexport function loadUserRolesStart() {\n    return {\n        type: ACTIONS.LOAD_USER_ROLES_START as ACTIONS.LOAD_USER_ROLES_START,\n    };\n}\n\nexport function loadUserRolesSuccess(data: Roles[]) {\n    return {\n        type: ACTIONS.LOAD_USER_ROLES_SUCCESS as ACTIONS.LOAD_USER_ROLES_SUCCESS,\n        data,\n    };\n}\n\nexport function loadUserRolesFailure(error: string) {\n    return {\n        type: ACTIONS.LOAD_USER_ROLES_FAILURE as ACTIONS.LOAD_USER_ROLES_FAILURE,\n        error,\n    };\n}\n","import React, { createContext, FC, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { debounce } from 'lodash';\r\nimport { Input } from '../../../ui/components/input';\r\nimport styled from 'styled-components';\r\nimport Dots from '../../../ui/icons/Dots';\r\nimport LabelsListContainer from '../components/LabelsList';\r\nimport {\r\n    EditingLabels,\r\n    useLabelsConfigState,\r\n    useLabelsState,\r\n    useUpdatedLabelsState,\r\n} from '../store/states';\r\nimport { useSelector } from 'react-redux';\r\nimport { getCompanyState } from '../../../pages/CompanySettings/store/reducers';\r\nimport {\r\n    useClearLabelFilterActionService,\r\n    useCollapseAllLabelsService,\r\n    useCreateLabelService,\r\n    useExpandAllLabelsService,\r\n    useExpandLabelFieldByIdService,\r\n    useSaveUserFiltersService,\r\n    useSearchLabelsService,\r\n    useSetAssignLabelsActionService,\r\n    useSetEditingLabelActionService,\r\n    useSetLabelFilterActionService,\r\n    useSetLabelsSearchTermService,\r\n} from '../store/services';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../constants/interfaces/filters';\r\nimport { PaginationResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { Label } from '../../../constants/interfaces/Label';\r\nimport { MutateLabelsParams } from '../../../api/labels/types';\r\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\r\nimport AddLabels from '../components/AddLabels';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { ClickAwayListener } from '@material-ui/core';\r\nimport { listToTree } from '../../../helpers/functions/list-to-tree';\r\nimport { treeToList } from '../../../helpers/functions/tree-to-list';\r\nimport { ActionItem } from '../../../ui/components/ActionButton';\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport EmptyLabels from '../components/EmptyLabels';\r\nimport { Variables } from '../../../theme/variables';\r\nimport { sortLabels, useRenewLabelsStateOnUpdate } from '../tools';\r\nimport { useIfChanged } from '../../../helpers/hooks/usePreviousData';\r\nimport { getAllUsersLoading } from '../../users/store/reducers';\r\nimport { useInvitationsState } from '../../users/store/states';\r\nimport {\r\n    useLibraryChallengesState,\r\n    useLibraryPractisSetState,\r\n    useLibraryScenariosState,\r\n} from '../../library/store/states';\r\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\r\nimport { CheckPermission } from '../../permissions';\r\nimport { usePermissionsState } from '../../permissions/store/state';\r\nimport {\r\n    useTeamMembersState,\r\n    useTeamsState,\r\n    useTrainerPractisSetState,\r\n} from '../../teams/store/states';\r\nimport { useSearchDebounced } from '../../../helpers/hooks/useSearch';\r\nimport { usePortableLabelsState } from '../../portableLabels/store/states';\r\nimport Search from '../../../ui/icons/Search';\r\nimport { SEARCH_INPUT_DEBOUNCE_DELAY } from '../../../constants/variables/component-settings';\r\n\r\nconst StyledCreateLabels = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n`;\r\n\r\nconst CreateLabelsHeader = styled.div`\r\n    padding: 0 16px 19px 16px;\r\n`;\r\n\r\nconst SearchInput = styled(Input) <{ placeholderColor?: string }>`\r\n    height: 40px;\r\n    padding: 0 16px 0 0;\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n\r\n    ${props =>\r\n        !!props.placeholderColor &&\r\n        `\r\n        &:: placeholder {\r\n        color: ${props.placeholderColor};\r\n        font-size: 11px;\r\n    }`}\r\n`;\r\n\r\nconst CreateLabelsBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n`;\r\n\r\nconst FiltersHeader = styled.div`\r\n    padding: 0 12px 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    height: 24px;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst FiltersSelectedPanel = styled.div`\r\n    padding: 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst SelectedLabelsStyle = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst ClearSelectedLabels = styled.div<{ disabled?: boolean }>`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    user-select: none;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.steelGrey\r\n            : props.theme.Colors.darkSkyBlue};\r\n    &:hover {\r\n        color: ${props => props.theme.Colors.lightBlue};\r\n    }\r\n    &:active {\r\n        color: ${props => props.theme.Colors.windowsBlue};\r\n    }\r\n    ${props => props.disabled && 'pointer-events: none'}\r\n`;\r\n\r\nconst FilterActionsMenu = styled.div<{ disabled?: boolean }>`\r\n    width: 12px;\r\n    height: 18px;\r\n    border-radius: 6px;\r\n    color: var(--ps-grey-1);\r\n    cursor: pointer;\r\n    padding: 1px;\r\n    &:active {\r\n        background: ${props => props.theme.Colors.dark};\r\n        opacity: 0.7;\r\n    }\r\n    ${props => props.disabled && `pointer-events: none`}\r\n`;\r\n\r\nconst FilterTitle = styled.p`\r\n    margin: 0;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.white};\r\n`;\r\n\r\nconst StyledAddLabels = styled.div`\r\n    padding: 0 16px 100px 16px;\r\n`;\r\n\r\nconst StyledLinkText = styled(Button)`\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    margin: 0 !important;\r\n    & span {\r\n        font-weight: bold;\r\n        margin-right: 10px;\r\n    }\r\n`;\r\n\r\nconst LabelsActionMenu = styled.div`\r\n    width: 184px;\r\n    position: fixed;\r\n    background: ${props => props.theme.Colors.white};\r\n    padding: 16px 8px;\r\n    border-radius: 8px;\r\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\r\n    z-index: 1;\r\n    margin-left: 150px;\r\n    margin-top: 80px;\r\n`;\r\n\r\nconst LabelsScrollableContainer = styled.div`\r\n    overflow: auto;\r\n    flex: 1 1 auto;\r\n    overflow-x: hidden;\r\n    height: 0;\r\n\r\n    &::-webkit-scrollbar-thumb {\r\n        background: ${Variables.Colors.steelGrey40};\r\n        border-radius: 8px;\r\n    }\r\n\r\n    ::-webkit-scrollbar-thumb:hover {\r\n        background: ${Variables.Colors.steelGrey40};\r\n    }\r\n`;\r\n\r\nconst Container = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    overflow: hidden;\r\n    border-radius: 4px;\r\n    background: ${props => props.theme.Colors.dark};\r\n    border: 1px solid ${props => props.theme.Colors.dark};\r\n\r\n    &:focus-within {\r\n        border: 1px solid ${props => props.theme.Colors.steelGrey};\r\n    }\r\n`;\r\n\r\nconst Icon = styled.div`\r\n    width: 40px;\r\n    height: 100%;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst SearchIcon = styled(Search) <{ disabled?: boolean }>`\r\n    width: 12px;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.battleshipGrey\r\n            : props.theme.Colors.steelGrey};\r\n`;\r\n\r\nexport const LabelsListScrollContext = createContext<number>(0);\r\n\r\nconst CreateLabels: FC<{\r\n    labels?: PaginationResult<Label>;\r\n    allLabels?: Label[];\r\n    labelsCollapseState: number[];\r\n    selectedLabels: number[];\r\n    assignedLabels: number[];\r\n    labelsModified?: boolean;\r\n    searchLabels(searchParams: SearchParams): void;\r\n    saveUserFilters(filters: number[] | null): void;\r\n    updatedLabels?: Label;\r\n    updateType?: 'create' | 'update' | 'delete';\r\n    createLabel: (params: MutateLabelsParams) => Promise<any>;\r\n    searchTerm: string;\r\n    setLabelsSearchTerm: (value: string) => void;\r\n    company?: CompanyInterface;\r\n    setLabels(labels: number[]): void;\r\n    clearLabels(): void;\r\n    editingLabels?: EditingLabels;\r\n    setEditingLabel: (configs?: EditingLabels) => void;\r\n    setLabelFilters: (labelIds: number[]) => void;\r\n    setAssignedLabels: (labelIds: number[]) => void;\r\n    expandAll: () => void;\r\n    collapseAll: () => void;\r\n    expandLabel: (labelId: number) => void;\r\n    disableLabels?: boolean;\r\n    loading?: boolean;\r\n}> = ({\r\n    labels,\r\n    allLabels,\r\n    labelsCollapseState,\r\n    selectedLabels,\r\n    assignedLabels,\r\n    createLabel,\r\n    searchLabels,\r\n    updatedLabels,\r\n    updateType,\r\n    company,\r\n    clearLabels,\r\n    searchTerm,\r\n    setLabelsSearchTerm,\r\n    editingLabels,\r\n    setEditingLabel,\r\n    setLabelFilters,\r\n    setAssignedLabels,\r\n    expandAll,\r\n    collapseAll,\r\n    expandLabel,\r\n    saveUserFilters,\r\n    disableLabels,\r\n    loading,\r\n}) => {\r\n        const [open, setOpen] = useState(false);\r\n        const [savingLabels, setSavingLabels] = useState(false);\r\n        \r\n        const transformedLabels = useMemo(\r\n            () => listToTree(treeToList(labels && labels.items)),\r\n            [labels]\r\n        );\r\n\r\n        const [localSearchTerm, setLocalSearchTerm] = useState(searchTerm);\r\n        const setLabelsSearchTermDebounced = useMemo(\r\n            () => debounce(setLabelsSearchTerm, SEARCH_INPUT_DEBOUNCE_DELAY),\r\n            [setLabelsSearchTerm]\r\n        );\r\n        const handleSearchTermChange = useCallback(\r\n            (value, useDebounce) => {\r\n                setLocalSearchTerm(value);\r\n                if (useDebounce)\r\n                    setLabelsSearchTermDebounced(value);\r\n                else\r\n                    setLabelsSearchTerm(value);\r\n            },\r\n            [setLabelsSearchTermDebounced, setLabelsSearchTerm]\r\n        );\r\n\r\n        const editMode =\r\n            !!editingLabels && !editingLabels.id ? editingLabels.mode : 'view';\r\n\r\n        const initialSearchParams: SearchParams = {\r\n            searchTerm: searchTerm,\r\n            filters: [],\r\n            orderBy: {},\r\n            offset: 0,\r\n            totalCount: 0,\r\n            numberOfPages: 0,\r\n        };\r\n\r\n        const {\r\n            searchParams,\r\n            setSearchTerm,\r\n            refreshSearchParams,\r\n        } = useSearchParamsState(initialSearchParams);\r\n        const ifSearchParamsChanged = useIfChanged(searchParams);\r\n\r\n        useEffect(() => {\r\n            if (ifSearchParamsChanged) {\r\n                searchLabels(searchParams);\r\n            } \r\n        }, [searchLabels, searchParams, company, ifSearchParamsChanged]);\r\n\r\n        useEffect(() => {\r\n            setSearchTerm(searchTerm);\r\n        }, [searchTerm, setSearchTerm]);\r\n\r\n        const permissions = usePermissionsState();\r\n        useEffect(() => {\r\n            if (\r\n                savingLabels &&\r\n                permissions.includes(NEW_PERMISSIONS.SAVE_SEARCH_FILTER)\r\n            ) {\r\n                saveUserFilters(selectedLabels);\r\n                setSavingLabels(false);\r\n            }\r\n        }, [\r\n            selectedLabels,\r\n            savingLabels,\r\n            setSavingLabels,\r\n            saveUserFilters,\r\n            permissions,\r\n        ]);\r\n\r\n        useEffect(() => {\r\n            if (searchTerm.length > 0) {\r\n                const parentLabelPaths: any =\r\n                    labels &&\r\n                    labels.items\r\n                        .filter((label: Label) => {\r\n                            return !!label.path;\r\n                        })\r\n                        .map((label: Label) => label.path && label.path.split('/'));\r\n                if (parentLabelPaths && parentLabelPaths.length > 0) {\r\n                    const flattened = [].concat.apply([], parentLabelPaths);\r\n\r\n                    const uniqueIds = new Set(\r\n                        flattened.filter((item: string) => item !== '')\r\n                    );\r\n\r\n                    for (let id of Array.from(uniqueIds)) {\r\n                        expandLabel(Number(id));\r\n                    }\r\n                }\r\n            }\r\n        }, [searchTerm, labels, expandLabel]);\r\n\r\n        useEffect(() => {\r\n            if (updatedLabels) refreshSearchParams();\r\n        }, [updatedLabels, refreshSearchParams]);\r\n\r\n        const handleSelectLabels = useRenewLabelsStateOnUpdate();\r\n        const ifAllLabelsChanged = useIfChanged(allLabels);\r\n\r\n        useEffect(() => {\r\n            const labelsTree = listToTree(allLabels);\r\n            if (\r\n                ifAllLabelsChanged &&\r\n                updatedLabels &&\r\n                (updateType === 'delete' || updateType === 'create')\r\n            ) {\r\n                setLabelFilters(\r\n                    handleSelectLabels(\r\n                        updatedLabels,\r\n                        selectedLabels,\r\n                        labelsTree,\r\n                        updateType\r\n                    )\r\n                );\r\n\r\n                setSavingLabels(true);\r\n            }\r\n        }, [\r\n            allLabels,\r\n            updatedLabels,\r\n            updateType,\r\n            handleSelectLabels,\r\n            selectedLabels,\r\n            setLabelFilters,\r\n            ifAllLabelsChanged,\r\n        ]);\r\n        useEffect(() => {\r\n            if (ifAllLabelsChanged && updatedLabels && updateType === 'delete') {\r\n                if (updateType === 'delete') {\r\n                    setAssignedLabels(\r\n                        assignedLabels.filter(\r\n                            labelId => labelId !== updatedLabels.id\r\n                        )\r\n                    );\r\n                }\r\n            }\r\n        }, [\r\n            updatedLabels,\r\n            updateType,\r\n            assignedLabels,\r\n            setAssignedLabels,\r\n            ifAllLabelsChanged,\r\n        ]);\r\n\r\n        /**\r\n         * @function isSearchDisabled\r\n         * @returns { boolean }\r\n         */\r\n        const isSearchDisabled = (): boolean => {\r\n            return (\r\n                !!labels &&\r\n                labels.items.length < 1 &&\r\n                localSearchTerm.length < 1 &&\r\n                !loading\r\n            );\r\n        }\r\n\r\n        if (loading && !labels && searchTerm.length < 1) {\r\n            return <Loading />;\r\n        }\r\n\r\n        return (\r\n            <StyledCreateLabels>\r\n                <CreateLabelsHeader>\r\n                    <Container>\r\n                        <Icon>\r\n                            <SearchIcon disabled={isSearchDisabled()} />\r\n                        </Icon>\r\n                        <SearchInput\r\n                            colorTheme=\"darkTwo\"\r\n                            height={'40px'}\r\n                            value={localSearchTerm}\r\n                            handleChange={(e: any) => {\r\n                                handleSearchTermChange(e.target.value, true);\r\n                            }}\r\n                            placeholderColor={\r\n                                isSearchDisabled()\r\n                                    ? Variables.Colors.steelGrey\r\n                                    : Variables.Colors.cloudyBlue\r\n                            }\r\n                            disabled={isSearchDisabled()}\r\n                            clearInput={() => {\r\n                                handleSearchTermChange('', false);\r\n                            }}\r\n                            dataTest='sidebar-labels-search-input'\r\n                        />\r\n                    </Container>\r\n                </CreateLabelsHeader>\r\n                <CreateLabelsBody>\r\n                    <FiltersHeader>\r\n                        <FilterTitle data-test='sidebar-labels-filter-text'>Filter by</FilterTitle>\r\n                        {labels && labels.items.length > 0 && (\r\n                            <FilterActionsMenu\r\n                                onClick={() => setOpen(true)}\r\n                                data-test=\"sidebar-labels-menu\"\r\n                            >\r\n                                <Dots />\r\n                            </FilterActionsMenu>\r\n                        )}\r\n                        {open && (\r\n                            <ClickAwayListener\r\n                                onClickAway={() => setOpen(false)}\r\n                            >\r\n                                <LabelsActionMenu>\r\n                                    <ActionItem\r\n                                        onClick={e => {\r\n                                            e.stopPropagation();\r\n                                            collapseAll();\r\n                                            setOpen(false);\r\n                                        }}\r\n                                    >\r\n                                        Collapse All\r\n                                    </ActionItem>\r\n                                    <ActionItem\r\n                                        onClick={e => {\r\n                                            e.stopPropagation();\r\n                                            expandAll();\r\n                                            setOpen(false);\r\n                                        }}\r\n                                    >\r\n                                        Expand All\r\n                                    </ActionItem>\r\n                                </LabelsActionMenu>\r\n                            </ClickAwayListener>\r\n                        )}\r\n                    </FiltersHeader>\r\n                    <FiltersSelectedPanel>\r\n                        <SelectedLabelsStyle data-test='sidebar-labels-selected-counter'>\r\n                            {selectedLabels && selectedLabels.length > 0\r\n                                ? selectedLabels.filter(x => x > 0).length\r\n                                : 'No'}{' '}\r\n                            Labels selected\r\n                        </SelectedLabelsStyle>\r\n                        <ClearSelectedLabels\r\n                            onClick={() => {\r\n                                clearLabels();\r\n                                setSavingLabels(true);\r\n                            }}\r\n                            disabled={\r\n                                !(selectedLabels && selectedLabels.length > 0)\r\n                            }\r\n                            data-test=\"sidebar-labels-clear\"\r\n                        >\r\n                            Clear\r\n                        </ClearSelectedLabels>\r\n                    </FiltersSelectedPanel>\r\n                    {searchTerm.length > 0 &&\r\n                    labels &&\r\n                    labels.items.length < 1 ? (\r\n                        <EmptyLabels />\r\n                    ) : (\r\n                        <LabelsScrollableContainer id=\"labels-scrollable-container\">\r\n                            <LabelsListContainer\r\n                                labels={sortLabels(transformedLabels)}\r\n                                labelsCollapseState={labelsCollapseState}\r\n                                selectedLabels={selectedLabels}\r\n                                disableLabels={disableLabels}\r\n                            />\r\n                            <CheckPermission\r\n                                permissions={[NEW_PERMISSIONS.CREATE_LABEL]}\r\n                            >\r\n                                <StyledAddLabels>\r\n                                    {editMode === 'edit' && (\r\n                                        <AddLabels\r\n                                            saveLabel={createLabel}\r\n                                            setEditing={setEditingLabel}\r\n                                            labels={labels && labels.items}\r\n                                        />\r\n                                    )}\r\n                                    <div data-test=\"sidebar-labels-add\">\r\n                                        <StyledLinkText\r\n                                            variant=\"transparent\"\r\n                                            action={() =>\r\n                                                setEditingLabel({\r\n                                                    id: null,\r\n                                                    mode: 'edit',\r\n                                                })\r\n                                            }\r\n                                            disabled={editMode === 'edit'}\r\n                                        >\r\n                                            <span>+</span>Add Label\r\n                                        </StyledLinkText>\r\n                                    </div>\r\n                                </StyledAddLabels>\r\n                            </CheckPermission>\r\n                        </LabelsScrollableContainer>\r\n                    )}\r\n                </CreateLabelsBody>\r\n            </StyledCreateLabels>\r\n        );\r\n    };\r\n\r\nexport const CreateLabelsContainer: FC = () => {\r\n    const state = useLabelsState();\r\n    const labelsList = usePortableLabelsState().data;\r\n    const labelsConfigState = useLabelsConfigState();\r\n    const updatedLabels = useUpdatedLabelsState();\r\n    const company = useSelector(getCompanyState);\r\n\r\n    const createLabel = useCreateLabelService();\r\n\r\n    const searchLabels = useSearchLabelsService();\r\n    const searchLabelsDebounced = useSearchDebounced(searchLabels, 0);\r\n\r\n    const setLabelsSearchTerm = useSetLabelsSearchTermService();\r\n    const setEditingLabel = useSetEditingLabelActionService();\r\n    const saveUserFilters = useSaveUserFiltersService();\r\n    const setLabels = useSetLabelFilterActionService();\r\n    const clearLabels = useClearLabelFilterActionService();\r\n\r\n    const expandAll = useExpandAllLabelsService();\r\n    const expandLabel = useExpandLabelFieldByIdService();\r\n    const collapseAll = useCollapseAllLabelsService();\r\n    const setLabelFilters = useSetLabelFilterActionService();\r\n    const setAssignedLabels = useSetAssignLabelsActionService();\r\n\r\n    const loadingUsers = useSelector(getAllUsersLoading);\r\n    const loadingInvitations = useInvitationsState().loading;\r\n    const loadingScenarios = useLibraryScenariosState().loading;\r\n    const loadingChallenges = useLibraryChallengesState().loading;\r\n    const loadingPractisSets = useLibraryPractisSetState().loading;\r\n    const loadingMyTeams = useTeamsState().loading;\r\n    const loadingTeamMembers = useTeamMembersState().loading;\r\n    const loadingPractisSetTraining = useTrainerPractisSetState().loading;\r\n\r\n    const labelsShouldBeDisabledOnLoading =\r\n        loadingUsers ||\r\n        loadingInvitations ||\r\n        loadingScenarios ||\r\n        loadingChallenges ||\r\n        loadingPractisSets ||\r\n        loadingMyTeams ||\r\n        loadingTeamMembers ||\r\n        loadingPractisSetTraining;\r\n\r\n    return (\r\n        <CreateLabels\r\n            labels={state.data}\r\n            allLabels={labelsList.items}\r\n            labelsCollapseState={state.collapseLabels}\r\n            selectedLabels={state.selected || []}\r\n            assignedLabels={state.assignedLabels || []}\r\n            labelsModified={state.selectedModified}\r\n            searchLabels={searchLabelsDebounced}\r\n            saveUserFilters={saveUserFilters}\r\n            updatedLabels={updatedLabels.data}\r\n            updateType={updatedLabels.updateType}\r\n            company={company}\r\n            setLabels={setLabels}\r\n            clearLabels={clearLabels}\r\n            createLabel={createLabel}\r\n            searchTerm={labelsConfigState.searchTerm}\r\n            setLabelsSearchTerm={setLabelsSearchTerm}\r\n            editingLabels={labelsConfigState.editingLabels}\r\n            setEditingLabel={setEditingLabel}\r\n            setLabelFilters={setLabelFilters}\r\n            setAssignedLabels={setAssignedLabels}\r\n            expandAll={expandAll}\r\n            collapseAll={collapseAll}\r\n            expandLabel={expandLabel}\r\n            disableLabels={labelsShouldBeDisabledOnLoading}\r\n            loading={state.loading}\r\n        />\r\n    );\r\n};\r\n\r\nexport default CreateLabelsContainer;\r\n","import {\n    fetchCompanyInfo,\n    fetchCompanyInfoFailure,\n    fetchCompanyInfoSuccess,\n    loadVoiceSettingsFailure,\n    loadVoiceSettingsStart,\n    loadVoiceSettingsSuccess,\n    fetchCompanyAdminsStart,\n    fetchCompanyAdminsSuccess,\n    fetchCompanyAdminsFailure,\n    fetchCompanyUserStatsStart,\n    fetchCompanyUserStatsSuccess,\n    fetchCompanyUserStatsFailure,\n    clearCompanyAdmins,\n} from './actions';\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport {\n    useGetCompanyApi,\n    useSearchUsersApi,\n    useGetCompanyUserStatsApi,\n    useSetCompanyLogoApi,\n    useGetCompanyVoiceSettingsApi,\n} from '../../../api';\nimport { AxiosError } from 'axios';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { handleMessage, useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { Roles } from '../../../constants/interfaces/Roles';\nimport { ROLE_NAMES } from '../../../constants/enums';\nimport { SearchUsersParams } from '../../../api/users/types';\nimport { UserStatus } from '../../../features/users/store/costants';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport { CompanyUserStats } from '../../../constants/interfaces/CompanyUserStats';\nimport { useUploadMediaService } from '../../../services/MediaService';\n\nexport const useGetCompanyService = () => {\n    const dispatch = useDispatch();\n    const getCompanyApi = useGetCompanyApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (companyId: number) => {\n            dispatch(fetchCompanyInfo());\n            return getCompanyApi(companyId)\n                .then(data => {\n                    dispatch(fetchCompanyInfoSuccess(data));\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchCompanyInfoFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getCompanyApi, showMessage]\n    );\n};\n\nexport const useLoadVoiceSettingsService = () => {\n    const getCompanyVoiceSettingsApi = useGetCompanyVoiceSettingsApi();\n    const showMessage = useShowMessage();\n    const dispatch = useDispatch();\n    return useCallback((companyId: number) => {\n        dispatch(loadVoiceSettingsStart());\n        return getCompanyVoiceSettingsApi(companyId)\n            .then(data => {\n                dispatch(loadVoiceSettingsSuccess(data));\n                return data;\n            })\n            .catch((error: AxiosError) => {\n                showMessage(error.message, 'error');\n                dispatch(loadVoiceSettingsFailure(error.message));\n                throw error;\n            });\n    }, [dispatch, getCompanyVoiceSettingsApi, showMessage]);\n};\n\nexport const useGetCompanyAdmins = () => {\n    const dispatch = useDispatch();\n    const searchUsersApi = useSearchUsersApi();\n    return useCallback(\n        (userRoles: Roles[], companyId: number) => {\n            dispatch(fetchCompanyAdminsStart());\n            const roleId = userRoles.find(role => role.name === ROLE_NAMES.COMPANY_ADMIN)?.id;\n            if (!roleId) {\n                return fetchCompanyAdminsFailure(`${ROLE_NAMES.COMPANY_ADMIN} role id could not be found`);\n            }\n            const params: SearchUsersParams = {\n                status: `${UserStatus.ACTIVE},${UserStatus.PENDING}`,\n                roles: roleId.toString(),\n                companies: companyId.toString(),\n                sort: 'name_asc',\n                limit: 100,\n                offset: 0\n            };\n            return searchUsersApi(params)\n                .then((res: ListResult<UserV2>) => {\n                    dispatch(fetchCompanyAdminsSuccess(res.items));\n                    return res;\n                })\n                .catch((error: any) => {\n                    dispatch(fetchCompanyAdminsFailure(error));\n                    handleMessage(dispatch, error, 'error');\n                    return 'error';\n                });\n            },\n        [dispatch, searchUsersApi]\n    );\n};\n\nexport const useClearCompanyAdmins = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(clearCompanyAdmins());\n    }, [dispatch]);\n}\n\n/**\n * @function useGetCompanyUserStatsService\n * @returns { CallableFunction }\n */\nexport const useGetCompanyUserStatsService = () => {\n    const dispatch = useDispatch();\n    const getCompanyUserStatsApi = useGetCompanyUserStatsApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @param { number } companyId\n     * @returns { void }\n     */\n    return useCallback(\n        (companyId: number, callback?: (result: CompanyUserStats) => void) => {\n            dispatch(fetchCompanyUserStatsStart());\n            getCompanyUserStatsApi(companyId)\n                .then((result: CompanyUserStats) => {\n                    dispatch(fetchCompanyUserStatsSuccess(result));\n                    callback?.(result);\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchCompanyUserStatsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n            },\n        [dispatch, getCompanyUserStatsApi, showMessage]\n    );\n};\n\n/**\n * @description uploads company logo and sets its media id to company\n * @function useUploadLogoService\n * @returns { CallableFunction }\n */\nexport const useUploadLogoService = () => {\n    const uploadMedia = useUploadMediaService();\n    const setCompanyLogoApi = useSetCompanyLogoApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @param { number } companyId\n     * @param { File } file\n     * @returns { Promise<void> }\n     */\n     return useCallback(\n        (companyId: number, file: File) => {\n            return uploadMedia(file)\n                .then((mediaId) => {\n                    return setCompanyLogoApi(companyId, mediaId);\n                })\n                .catch((error) => {\n                    showMessage(error.message, 'error');\n                    return Promise.reject(error);\n                });\n        },\n        [uploadMedia, setCompanyLogoApi, showMessage]\n    );\n};","import React, { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport OutsideActionBox from '../OutsideActionBox/OutsideActionBox';\nimport { motion } from 'framer-motion';\n\nconst Container = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst DropDownComponent = styled(motion.div)<{\n    marginTop?: number;\n    width?: string;\n}>`\n    background: ${props => props.theme.Colors.white};\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    width: ${props => (props.width ? props.width : '248px')};\n    position: absolute;\n    border-radius: 8px;\n    right: -5px;\n    margin-top: ${props => (props.marginTop ? `${props.marginTop}px` : '16px')};\n    z-index: 1000;\n    overflow: hidden;\n`;\n\nconst ContentArea = styled.div`\n    overflow-y: auto;\n    max-height: 295px;\n    padding: 16px;\n    ::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.whiteFive};\n        border-radius: 8px;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n        background: ${props => props.theme.Colors.whiteThree};\n    }\n`;\nexport const DropDownList: React.FC<{\n    open: boolean;\n    toggleOpen: (open: boolean) => void;\n    className?: string;\n    width?: string;\n    marginTop?: number;\n    renderItem?: ReactNode;\n}> = ({\n    children,\n    open,\n    toggleOpen,\n    className,\n    marginTop,\n    width,\n    renderItem,\n}) => {\n    return (\n        <Container\n            open={open}\n            toggleOpen={toggleOpen}\n            styles={{ position: 'relative' }}\n        >\n            <DropDownComponent\n                className={className}\n                initial={{ scale: 0.5 }}\n                animate={{ scale: 1 }}\n                marginTop={marginTop}\n                width={width}\n                data-test='dropDownListContainer'\n            >\n                {renderItem}\n                <ContentArea>{children}</ContentArea>\n            </DropDownComponent>\n        </Container>\n    );\n};\n","import React, { ComponentType, ForwardRefExoticComponent } from 'react';\nimport styled from 'styled-components';\nimport { NavLink, useLocation } from 'react-router-dom';\n\nconst StyledDropDownItem = styled.div`\n    color: ${props => props.theme.Colors.black};\n    margin-top: 8px;\n\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst StyledNavLink = styled(NavLink)`\n    color: ${props => props.theme.Colors.black};\n    text-decoration: none;\n    display: flex;\n    align-items: center;\n    font-size: 13px;\n    font-weight: 500;\n    height: 40px;\n    padding: 8px 12px;\n    border-radius: 4px;\n    &.--custom {\n        color: ${props => props.theme.Colors.tomato};\n    }\n    &.--active {\n        background: ${props => props.theme.Colors.whiteFive};\n    }\n    &:hover {\n        background: ${props => props.theme.Colors.whiteFive};\n    }\n`;\n\nconst StyledA = StyledNavLink.withComponent('a');\nconst StyledIcon = styled.div<{iconSize?: number}>`\n    height: ${props => props.iconSize || 20}px;\n    width: ${props => props.iconSize || 20}px;\n    margin-left: 6px;\n    margin-right: 12px;\n`;\n\nexport const DropDownListItem: React.FC<{\n    name: string;\n    url: string;\n    custom?: boolean;\n    externalUrl?: boolean;\n    replaceUrl?: boolean;\n    modalUrl?: boolean;\n    icon?: ComponentType | ForwardRefExoticComponent<any>;\n    iconSize?: number;\n    className?: string;\n    onClick?(): void;\n}> = ({\n    name,\n    url,\n    icon: Icon,\n    custom,\n    externalUrl,\n    replaceUrl,\n    modalUrl,\n    className,\n    iconSize,\n    onClick,\n}) => {\n    let location = useLocation();\n    const IconComponent = Icon && (\n        <StyledIcon iconSize={iconSize}>\n            <Icon />\n        </StyledIcon>\n    );\n\n    if (externalUrl) {\n        return (\n            <StyledDropDownItem className={className} data-test='dropDownListItem'>\n                <StyledA href={url} className={custom ? '--custom' : ''} target='blank' data-test='dropDownListLink'>\n                   {name}{IconComponent}\n                </StyledA>\n            </StyledDropDownItem>\n        );\n    } \n    else if (replaceUrl) {\n        return (\n            <StyledDropDownItem className={className} data-test='dropDownListItem'>\n                <StyledA href={url} className={custom ? '--custom' : ''} data-test='dropDownListLink'>\n                   {name}{IconComponent}\n                </StyledA>\n            </StyledDropDownItem>\n        );\n    }\n    else if (modalUrl) {\n        return (\n            <StyledDropDownItem className={className} data-test='dropDownListItem'>\n                <StyledNavLink\n                    activeClassName=\"--active\"\n                    className={custom ? '--custom' : ''}\n                    to={{\n                        pathname: url,\n                        state: { background: location },\n                    }}\n                    data-test='dropDownListLink'\n                >\n                    {IconComponent}\n                    {name}\n                </StyledNavLink>\n            </StyledDropDownItem>\n        );\n    }\n\n    return (\n        <StyledDropDownItem onClick={onClick} data-test='dropDownListItem'>\n            <StyledNavLink\n                activeClassName=\"--active\"\n                className={custom ? '--custom' : ''}\n                to={url}\n                data-test='dropDownListLink'\n            >\n                {IconComponent}\n                {name}\n            </StyledNavLink>\n        </StyledDropDownItem>\n    );\n};\n","import styled from 'styled-components';\n\nexport const StyledUserArea = styled.div<{ open: boolean }>`\n    display: flex;\n    border-radius: 8px;\n    margin: 0 24px;\n    width: 200px;\n    ${props => props.open && `background: var(--ps-graphite-2)`};\n    padding: 8px;\n    box-sizing: border-box;\n`;\n\nexport const UserInfo = styled.div`\n    width: 150px;\n`;\n\nexport const UserRole = styled.div`\n    font-size: 13px;\n    font-weight: 500;\n    color: var(--ps-grey-1);\n`;\n\nexport const UserName = styled.div`\n    font-size: 13px;\n    font-weight: 500;\n    color: var(--ps-white-1);\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n`;\n\nexport const UserProfilePictureSection = styled.div`\n    height: 32px;\n    width: 32px;\n    border-radius: 4px;\n    overflow: hidden;\n    margin-right: 12px;\n`;\n\nexport const UserRoleLoading = styled.div`\n    width: 66px;\n    height: 8px;\n    background-color: var(--ps-grey-1);\n    margin-top: 12px;\n    margin-left: 2px;\n    margin-bottom: 4px;\n`;\n\nexport const UserNameLoading = styled.div`\n    width: 76px;\n    height: 8px;\n    background-color: var(--ps-white-1);\n    margin-top: 4px;\n    margin-left: 2px;\n`;","import { FC, memo } from 'react';\nimport AvatarPlaceholder from '../../../../../components/AvatarPlaceholder/AvatarPlaceholder';\nimport { userRoleTitle } from '../../../../../../constants/enums';\nimport { UserProfile } from '../../../../../../constants/interfaces/User';\nimport {\n    StyledUserArea,\n    UserInfo,\n    UserRole,\n    UserName,\n    UserProfilePictureSection,\n    UserRoleLoading,\n    UserNameLoading,\n} from './styles';\n\nconst UserProfileArea: FC<{\n    profile: Partial<UserProfile>;\n    open: boolean;\n    loading?: boolean;\n}> = memo(({ profile, open, loading }) => {\n    const dataTest = 'user-profile-area';\n\n    return (\n        <StyledUserArea open={open}>\n            <UserProfilePictureSection>\n                <AvatarPlaceholder profile={profile} size={'sm'} dataTest={`${dataTest}-avatar`}/>\n            </UserProfilePictureSection>\n            <UserInfo>\n                {\n                    loading\n                    ? <>\n                        <UserNameLoading />\n                        <UserRoleLoading />\n                    </>\n                    :\n                    <>\n                        <UserName data-test={`${dataTest}-name`}>\n                            {profile.firstName} {profile.lastName}\n                        </UserName>\n                        <UserRole data-test={`${dataTest}-role`}>\n                            {userRoleTitle(profile)}\n                        </UserRole>\n                    </>\n                }\n            </UserInfo>\n        </StyledUserArea>\n    );\n});\nexport default UserProfileArea;\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Roles } from '../../../constants/interfaces/Roles';\n\nexport interface UserRolesState {\n    list: Roles[];\n    loading: boolean;\n    error?: string;\n}\n\nexport type UserRolesStateSelector = (state: any) => UserRolesState;\n\nexport const UserRolesStateSelectorContext = React.createContext<UserRolesStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useUserRolesState(): UserRolesState {\n    return useSelector(useContext(UserRolesStateSelectorContext));\n}\n","import { useCallback, useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Roles } from '../../../constants/interfaces/Roles';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { useLoadUserRolesApi } from '../../../api';\nimport {\n    loadUserRolesFailure,\n    loadUserRolesStart,\n    loadUserRolesSuccess,\n} from './actions';\nimport { useUserRolesState } from './states';\n\nexport const useLoadUserRolesService = () => {\n    const dispatch = useDispatch();\n    const loadUserRolesApi = useLoadUserRolesApi();\n    const showMessage = useShowMessage();\n    return useCallback(() => {\n        dispatch(loadUserRolesStart());\n        loadUserRolesApi()\n            .then(data => {\n                dispatch(loadUserRolesSuccess(data));\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(loadUserRolesFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, loadUserRolesApi, showMessage]);\n};\n\nexport const useUserRolesService = () => {\n    const state = useUserRolesState();\n\n    const loading = state.loading;\n\n    const rolesByName = useMemo(\n        () => state.list?.reduce(\n            (result, role) => {\n                result[role.name] = role;\n                return result;\n            },\n            {} as Record<string, Roles>\n        ),\n        [state.list]\n    );\n\n    const getRoleByName = useCallback(\n        (roleName: string) => rolesByName[roleName],\n        [rolesByName]\n    );\n\n    return useMemo(() => ({\n        loading,\n        getRoleByName,\n    }), [\n        loading,\n        getRoleByName,\n    ]);\n};\n","import React, { FC, useEffect, useState, ComponentType, memo } from 'react';\nimport styled from 'styled-components';\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\nimport { CompanyInterface } from '../../../../../constants/interfaces/Company';\nimport { UserProfile } from '../../../../../constants/interfaces/User';\nimport { useGetCompanyService } from '../../../../../pages/CompanySettings/store/services';\nimport { useGetProfileService } from '../../../../../pages/UserProfile/store/services';\nimport ROUTES from '../../../../../routes/routes';\nimport { DropDownListItem } from '../../../../components/DropdownList';\nimport { useUpdatedLabelsState } from '../../../../../features/labels/store/states';\nimport { CheckPermission } from '../../../../../features/permissions';\nimport { usePermissionsState } from '../../../../../features/permissions/store/state';\nimport { useSelector } from 'react-redux';\nimport {\n    getProfileLoading,\n    getProfileState,\n} from '../../../../../pages/UserProfile/store/reducers';\nimport OutsideActionBox from '../../../../components/OutsideActionBox/OutsideActionBox';\nimport UserProfileArea from './components/UserProfileArea';\nimport MinimizedUserProfileArea from './components/MinimizedUserProfileArea';\nimport { useLoadUserRolesService } from '../../../../../features/roles/store/services';\nimport { getCompanyState } from \"../../../../../pages/CompanySettings/store/reducers\";\nimport { useUserRolesState } from '../../../../../features/roles/store/states';\nimport { isEqual } from 'lodash';\nimport { isPractisAdminRole } from '../../../../../constants/enums';\nimport { useUrlBuilder } from '../../../../../tools/url/UrlBuilder';\nimport Storage from '../../../../../services/Storage';\nimport { isAdminPortal } from '../../../../../helpers/functions/general';\n\nconst StyledProfileContainer = styled.div`\n    display: flex;\n    cursor: pointer;\n    position: absolute;\n    z-index: 1;\n    bottom: 0;\n    background: var(--ps-graphite-3);\n    border-top: 1px solid #343850;\n    height: 84px;\n    align-items: center;\n`;\n\nconst StyledMenu = styled.div<{ left: number;}>`\n    position: absolute;\n    bottom: 95%;\n    left: ${props => props.left}px;\n    background: ${props => props.theme.Colors.white};\n    width: 200px;\n    padding: 16px;\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n`;\n\nexport interface ProfileDropDownItem {\n    name: string;\n    url: string;\n    custom?: boolean;\n    permissions?: NEW_PERMISSIONS[];\n    externalUrl?: boolean;\n    replaceUrl?: boolean;\n    icon?: ComponentType;\n    iconSize?: number;\n    modalUrl?: boolean;\n}\n\nexport const ProfileSection: React.FC<{\n    profile: Partial<UserProfile>;\n    company?: CompanyInterface;\n    loading?: boolean;\n    getProfile: () => void;\n    getCompany: (companyId: number) => void;\n    sideBarOpen: boolean;\n}> = memo(({ profile, getProfile, getCompany, sideBarOpen, company, loading }) => {\n    const [open, setOpen] = useState(false);\n    const updatedLabels = useUpdatedLabelsState();\n    const permissions = usePermissionsState();\n    const urlBuilder = useUrlBuilder();\n\n    useEffect(() => {\n        if (!profile?.id || !!updatedLabels?.data) {\n            getProfile();\n        }\n    }, [getProfile, profile?.id, updatedLabels?.data]);\n\n    useEffect(() => {\n        if (profile.companyId) {\n            if (!company || company.id !== profile.companyId) {\n                getCompany(profile.companyId);\n            }\n        }\n    }, [company, getCompany, permissions, profile]);\n\n    useEffect(() => {\n        const isItAdminPortal = isAdminPortal();\n\n        if (\n            isPractisAdminRole(profile.role?.name) &&\n            !profile.companyId &&\n            !isItAdminPortal\n        ) {\n            window.location.href = urlBuilder.buildAdminUrl({\n                absolute: true,\n                query: {\n                    t: Storage.get('token'),\n                    id: profile.id,\n                    p: Storage.get('apiPlatform'),\n                },\n            });\n        }\n    }, [profile.companyId, profile.id, profile.role?.name, urlBuilder]);\n    \n\n    const defaultProfileItems: ProfileDropDownItem[] = [\n        { name: 'Log Out', url: ROUTES.AUTH_PAGES.LOGOUT, custom: true },\n        {\n            name: 'Company Settings',\n            url: ROUTES.COMPANY_SETTINGS.ROOT,\n            permissions: [NEW_PERMISSIONS.UPDATE_COMPANY_INFO],\n            modalUrl: true,\n        },\n        { name: 'My Settings', url: ROUTES.PROFILE.replace(':userId', 'me') },\n    ];\n\n    return (\n        <ProfileSectionContext.Consumer>\n            {context => (\n                <StyledProfileContainer\n                    onClick={() => setOpen(!open)}\n                >\n                    {sideBarOpen ? (\n                        <MinimizedUserProfileArea\n                            profile={profile}\n                            open={open}\n                        />\n                    ) : (\n                        <UserProfileArea profile={profile} open={open} loading={loading} />\n                    )}\n                    <OutsideActionBox\n                        open={open}\n                        toggleOpen={() => setOpen(false)}\n                    >\n                        <StyledMenu\n                            left={sideBarOpen ? 8 : 24}\n                        >\n                            {(context.items || defaultProfileItems).map(\n                                item => (\n                                    <CheckPermission\n                                        key={item.url}\n                                        permissions={item.permissions}\n                                    >\n                                        <DropDownListItem\n                                            name={item.name}\n                                            url={item.url}\n                                            custom={item.custom}\n                                            externalUrl={item.externalUrl}\n                                            replaceUrl={item?.replaceUrl}\n                                            icon={item.icon}\n                                            iconSize={item.iconSize}\n                                            modalUrl={item.modalUrl}\n                                        />\n                                    </CheckPermission>\n                                )\n                            )}\n                        </StyledMenu>\n                    </OutsideActionBox>\n                </StyledProfileContainer>\n            )}\n        </ProfileSectionContext.Consumer>\n    );\n});\n\nconst ProfileSectionContainer: FC<{ sideBarOpen: boolean }> = ({\n    sideBarOpen,\n}) => {\n    const company = useSelector(getCompanyState, isEqual);\n    const getProfile = useGetProfileService();\n    const getCompany = useGetCompanyService();\n    const profile = useSelector(getProfileState, isEqual);\n    const profileLoading = useSelector(getProfileLoading, isEqual);\n    const userRoles = useUserRolesState();\n    const loadUserRoles = useLoadUserRolesService();\n    useEffect(() => {\n        if (!userRoles?.list?.length) {\n            loadUserRoles();\n        }\n    }, [userRoles?.list?.length, loadUserRoles]);\n\n    return (\n        <ProfileSection\n            company={company}\n            profile={profile || {}}\n            loading={profileLoading}\n            getProfile={getProfile}\n            getCompany={getCompany}\n            sideBarOpen={sideBarOpen}\n        />\n    );\n};\n\nexport default ProfileSectionContainer;\n\nexport interface ProfileSectionContextValue {\n    items?: ProfileDropDownItem[];\n}\n\nexport const ProfileSectionContext = React.createContext<ProfileSectionContextValue>(\n    {}\n);\n","import { PRACTIS_SUPPORT_EMAIL } from \"../../ui/layout/Sidebar/constants\";\nimport { isSafari } from \"./detect-browsers\";\nimport { getOS } from \"./general\";\nimport * as qs from 'query-string';\n\nconst WINDOW_OPTIONS = 'height=1000,width=1000,left=-1000,top=-1000';\n\n/**\n * @function sendEmail\n * @description opens email app with a prefilled email form including subject and body\n * @param { string } subject\n * @param { string? } body\n * @returns { void }\n */\nexport function sendEmail(subject: string, body?: string) {\n    const isItSafari = isSafari();\n    const userOS = getOS();\n\n    const emailLink = qs.stringifyUrl({\n        url: `mailto:${PRACTIS_SUPPORT_EMAIL}`,\n        query: { subject, body, format: 'html' }\n    });\n\n    if (isItSafari || userOS === 'Win') {\n        window.location.href = emailLink;\n    } else {\n        window.open(emailLink, '_blank', WINDOW_OPTIONS);\n    }\n}","export const PRACTIS_SUPPORT_EMAIL = 'support@gopractis.com';\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Support = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                className={className}\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M2 3h12a1 1 0 0 1 .97.753L8.831 7.844a1.5 1.5 0 0 1-1.664 0L1.031 3.753A1 1 0 0 1 2 3zM1 4.934V12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4.934L9.387 8.676a2.5 2.5 0 0 1-2.774 0L1 4.934zM0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Support;","import { FC, useCallback } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { sendEmail } from '../../../helpers/functions/email-helpers';\nimport { getCompanyState } from '../../../pages/CompanySettings/store/reducers';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport SupportIcon from '../../icons/Support';\nimport { generateEmailBody } from './helpers';\nimport { IconHolder, Label, PractisSupportWrapper } from './styles';\nimport { PractisSupportProps } from './types';\n\nexport const PractisSetSupport: FC<PractisSupportProps> = ({ shrink }) => {\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n\n    const handleSendEmail = useCallback(() => {\n        const body = generateEmailBody();\n        const subject = `Request from ${profile?.firstName} ${\n            profile?.lastName\n        } at ${company.name ?? ''}`;\n\n        if (body) {\n            sendEmail(subject, body);\n        }\n    }, [company.name, profile]);\n\n    return (\n        <PractisSupportWrapper onClick={handleSendEmail} shrink={!!shrink}>\n            <IconHolder title=\"Practis Support\">\n                <SupportIcon />\n            </IconHolder>\n            {!shrink ? <Label fontSize=\"15px\">Practis Support</Label> : null}\n        </PractisSupportWrapper>\n    );\n};","import { CompanyInterface } from '../../../constants/interfaces/Company';\nimport { ListResult, PaginationResult } from '../../../constants/interfaces/PaginationResult';\n\nexport enum ACTIONS {\n    SEARCH_COMPANIES_START = 'ADMIN_SEARCH_COMPANIES_START',\n    SEARCH_COMPANIES_SUCCESS = 'ADMIN_SEARCH_COMPANIES_SUCCESS',\n    SEARCH_COMPANIES_FAILURE = 'ADMIN_SEARCH_COMPANIES_FAILURE',\n}\n\nexport enum ADMIN_ACTIONS {\n    CHANGE_COMPANY = 'CHANGE_COMPANY',\n}\n\nexport function searchCompaniesStart() {\n    return {\n        type: ACTIONS.SEARCH_COMPANIES_START as ACTIONS.SEARCH_COMPANIES_START,\n    };\n}\n\nexport function searchCompaniesSuccess(\n    companies: PaginationResult<CompanyInterface>\n) {\n    return {\n        type: ACTIONS.SEARCH_COMPANIES_SUCCESS as ACTIONS.SEARCH_COMPANIES_SUCCESS,\n        companies,\n    };\n}\n\nexport function searchCompaniesFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_COMPANIES_FAILURE as ACTIONS.SEARCH_COMPANIES_FAILURE,\n        error,\n    };\n}\n\nexport const SEARCH_ALL_COMPANIES_START = 'SEARCH_ALL_COMPANIES_START';\nexport const SEARCH_ALL_COMPANIES_SUCCESS = 'SEARCH_ALL_COMPANIES_SUCCESS';\nexport const SEARCH_ALL_COMPANIES_FAILURE = 'SEARCH_ALL_COMPANIES_FAILURE';\nexport const FETCH_ACTIVE_COMPANIES_START = 'FETCH_ACTIVE_COMPANIES_START';\nexport const FETCH_ACTIVE_COMPANIES_SUCCESS = 'FETCH_ACTIVE_COMPANIES_SUCCESS';\nexport const FETCH_ACTIVE_COMPANIES_FAILURE = 'FETCH_ACTIVE_COMPANIES_FAILURE';\n\nexport function adminChangeCompanyAction() {\n    return {\n        type: ADMIN_ACTIONS.CHANGE_COMPANY as ADMIN_ACTIONS.CHANGE_COMPANY,\n    };\n}\n\nexport function searchAllCompaniesStartAction() {\n    return {\n        type: SEARCH_ALL_COMPANIES_START,\n    };\n}\n\nexport function searchAllCompaniesSuccessAction(data: any) {\n    return {\n        type: SEARCH_ALL_COMPANIES_SUCCESS,\n        data,\n    };\n}\n\nexport function searchAllCompaniesFailureAction(error: any) {\n    return {\n        type: SEARCH_ALL_COMPANIES_FAILURE,\n        error,\n    };\n}\n\nexport function fetchActiveCompaniesStart() {\n    return {\n        type: FETCH_ACTIVE_COMPANIES_START,\n    };\n}\n\nexport function fetchActiveCompaniesSuccess(data: ListResult<CompanyInterface>) {\n    return {\n        type: FETCH_ACTIVE_COMPANIES_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchActiveCompaniesFailure(error: string) {\n    return {\n        type: FETCH_ACTIVE_COMPANIES_FAILURE,\n        error,\n    };\n}","import {\n    getDeviceInfo,\n    getNetworkConnectionType,\n} from '../../../helpers/functions/detect-browsers';\nimport { getConfig } from '../../../tools/config';\n\n/**\n * @function generateEmailBody\n * @returns { string }\n */\nexport function generateEmailBody() {\n    const deviceInfo = getDeviceInfo();\n    const config = getConfig();\n    const networkConnectionType = getNetworkConnectionType();\n\n    return `\\n\\n\\n\\nDevice/Browser: ${deviceInfo}\\nInternet Connection: ${networkConnectionType.toUpperCase()}\\nWeb App Version: ${\n        config.APP_VERSION\n    }`;\n}","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarScrimmageAI = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\">\n                <g clip-path=\"url(#so9fm7tiza)\" stroke=\"#6D7F8C\" stroke-linecap=\"round\">\n                    <path d=\"M1.8 7.926C.466 5.375.22 2.843 1.536 1.534c1.94-1.946 6.551-.478 9.947 2.924 3.395 3.402 4.884 8.046 2.943 9.993-1.322 1.33-3.84 1.123-6.458-.305\" stroke-linejoin=\"round\"/>\n                    <path d=\"M1.78 7.88C.46 5.342.234 2.837 1.536 1.534c1.94-1.946 6.551-.478 9.947 2.924 3.395 3.402 4.884 8.046 2.943 9.993-1.322 1.33-3.84 1.123-6.458-.305\" stroke-linejoin=\"round\"/>\n                    <path d=\"M10.804.817C12.326.49 13.661.67 14.485 1.5c1.94 1.947.385 6.592-3.01 9.994-3.395 3.402-8.007 4.93-9.947 2.983-1.309-1.316-1.07-3.874.273-6.452a14.797 14.797 0 0 1 2.644-3.575\" stroke-linejoin=\"round\"/>\n                    <path d=\"M4.292 10.328 5.96 5.955a.1.1 0 0 1 .186 0l1.648 4.373M9.654 5.895v4.431\" stroke-linejoin=\"round\"/>\n                    <path d=\"M7.402 9.29H5.003\" stroke-miterlimit=\"10\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"so9fm7tiza\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarScrimmageAI;\n\n","import React, { memo } from 'react';\nimport { kebabCase } from 'lodash';\n\nimport { SideBarExternalLinkItemProps } from './types';\nimport { IconHolder, Label, Link } from './styles';\n\nexport const SideBarExternalLinkItem: React.FC<SideBarExternalLinkItemProps> = memo(\n    ({\n        name,\n        icon: Icon,\n        url,\n        shrink,\n        fontSize,\n    }) => {\n\n        return (\n            <Link\n                target={'_blank'}\n                to={{pathname: url}}\n                activeClassName={'is-active'}\n                shrink={!!shrink}\n                data-test={`sidebar-${kebabCase(name)}`}\n            >\n                <IconHolder title={name}>\n                    <Icon />\n                </IconHolder>\n                {!shrink && <Label fontSize={fontSize}>{name}</Label>}\n            </Link>\n        );\n    }\n);\n","import React, { memo, useEffect, useLayoutEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { isEqual } from 'lodash';\nimport { makeStyles } from '@material-ui/core';\nimport Drawer from '@material-ui/core/Drawer';\n\nimport { Variables } from '../../../theme/variables';\nimport Logo from '../../components/Logo/Logo';\nimport { SideBarItem } from './SideBarItem';\nimport { OPEN_SIDEBAR_WIDTH } from '../../wrapper/configs';\nimport CreateLabelsContainer from '../../../features/labels/pages/CreateLabels';\nimport { useLabelsState } from '../../../features/labels/store/states';\nimport {\n    useCloseLabelCreationPanelService,\n    useExpandMultipleLabelsService,\n    useOpenLabelCreationPanelService,\n} from '../../../features/labels/store/services';\nimport {\n    getProfileState,\n    getProfileLoading,\n} from '../../../pages/UserProfile/store/reducers';\nimport {\n    useGenerateLabelsConfiguration,\n    useGetSavedLabelExpandedState,\n    useGetSavedLabelPanelState,\n} from '../../../features/labels/config';\nimport { CheckPermission } from '../../../features/permissions';\nimport ProfileSectionContainer from './components/ProfileSection/ProfileSection';\nimport {\n    StyledSidebar,\n    SidebarBody,\n    SidebarLabels,\n    ClosedLabels,\n    OpenLabels,\n    OpenLabelsContent,\n    OpenLabelsFooter,\n    StyledLabelsIcon,\n    StyledRightArrow,\n    OpenLabelsButton,\n    SidebarContent,\n    SidebarMenu,\n    SidebarProfile,\n    ItemLoading,\n    ItemLoadingIcon,\n    ItemLoadingText,\n} from './styles';\nimport { PractisSetSupport } from './PractisSupport';\nimport { SideBarItemProps } from './types';\nimport { isAdminPortal } from '../../../helpers/functions/general';\nimport { getCompanyState } from '../../../pages/CompanySettings/store/reducers';\nimport SidebarScrimmageAI from '../../icons/SidebarScrimmageAI';\nimport { SideBarExternalLinkItem } from './SideBarExternalLinkItem';\n\nconst useStyles = makeStyles(theme => ({\n    drawerPaper: {\n        position: 'unset',\n        overflowX: 'hidden',\n        overflowY: 'overlay' as 'scroll', // TS issue\n        zIndex: 1000,\n        whiteSpace: 'nowrap',\n        width: OPEN_SIDEBAR_WIDTH,\n        background: Variables.Colors.dark,\n        transition: theme.transitions.create('width', {\n            easing: theme.transitions.easing.sharp,\n            duration: theme.transitions.duration.enteringScreen,\n        }),\n    },\n    drawerPaperClose: {\n        overflowX: 'hidden',\n        transition: theme.transitions.create('width', {\n            easing: theme.transitions.easing.sharp,\n            duration: theme.transitions.duration.leavingScreen,\n        }),\n        width: theme.spacing(7),\n        [theme.breakpoints.up('sm')]: {\n            width: theme.spacing(9),\n        },\n    },\n    logoContainer: {\n        marginTop: 48,\n        display: 'flex',\n        alignItems: 'center',\n        flexDirection: 'column',\n    },\n}));\n\nexport type SideBarMenuItem = SideBarItemProps;\n\nexport const Sidebar: React.FC<{\n    menuItems: SideBarMenuItem[];\n    fontSize?: string;\n}> = memo(\n    ({ menuItems, fontSize }) => {\n        const classes = useStyles();\n        const labels = useLabelsState();\n        const open = !!labels && labels.open;\n        const openLabelsPanel = useOpenLabelCreationPanelService();\n        const closeLabelsPanel = useCloseLabelCreationPanelService();\n        const expandMultipleLabels = useExpandMultipleLabelsService();\n        const profile = useSelector(getProfileState);\n        const profileLoading = useSelector(getProfileLoading);\n        const generateLabelsConfiguration = useGenerateLabelsConfiguration();\n        const getLabelsPanelState = useGetSavedLabelPanelState();\n        const getLabelsExpandedState = useGetSavedLabelExpandedState();\n        const isItAdminPortal = isAdminPortal();\n        const company = useSelector(getCompanyState, isEqual);\n \n        useLayoutEffect(() => {\n            const expandedLabels = getLabelsExpandedState();\n            if (expandedLabels && expandedLabels.length > 0) {\n                expandMultipleLabels(expandedLabels);\n            }\n        }, [getLabelsExpandedState, expandMultipleLabels]);\n\n        useLayoutEffect(() => {\n            if (getLabelsPanelState()) {\n                openLabelsPanel();\n            }\n        }, [getLabelsPanelState, openLabelsPanel]);\n\n        useEffect(() => {\n            if (labels && profile && profile.id) {\n                generateLabelsConfiguration(labels.open, labels.collapseLabels);\n            }\n        }, [labels, profile, generateLabelsConfiguration]);\n\n        return (\n            <StyledSidebar>\n                <Drawer\n                    variant=\"permanent\"\n                    classes={{\n                        paper: classes.drawerPaper,\n                    }}\n                >\n                    <div className={classes.logoContainer}>\n                        <Logo\n                            width={isItAdminPortal ? 110 : 92}\n                            height={isItAdminPortal ? 36 : 25}\n                        />\n                    </div>\n                    <SidebarBody>\n                        <SidebarContent>\n                            <SidebarMenu>\n                                <div>\n                                    {(company && company.isScrimmageEnabled) &&\n                                        <SideBarExternalLinkItem\n                                            name={'Scrimmage AI'}\n                                            url={'https://dashboard.gopractis.com/'}\n                                            shrink={open}\n                                            fontSize={fontSize}\n                                            icon={SidebarScrimmageAI}/>\n                                    }\n                                    {menuItems.map((item, index) => (\n                                        <>\n                                            {profileLoading ? (\n                                                <ItemLoading isOpen={open}>\n                                                    <ItemLoadingIcon />\n                                                    {!open && (\n                                                        <ItemLoadingText />\n                                                    )}\n                                                </ItemLoading>\n                                            ) : (\n                                                <CheckPermission\n                                                    key={index}\n                                                    permissions={\n                                                        item.permissions\n                                                    }\n                                                >\n                                                    <SideBarItem\n                                                        {...item}\n                                                        shrink={open}\n                                                        fontSize={fontSize}\n                                                    />\n                                                </CheckPermission>\n                                            )}\n                                        </>\n                                    ))}\n                                </div>\n                                {!isItAdminPortal && (\n                                    <PractisSetSupport shrink={open} />\n                                )}\n                            </SidebarMenu>\n                            <SidebarProfile>\n                                <ProfileSectionContainer sideBarOpen={open} />\n                            </SidebarProfile>\n                        </SidebarContent>\n                        {labels && (\n                            <SidebarLabels isOpen={open}>\n                                {!open ? (\n                                    <ClosedLabels>\n                                        <OpenLabelsButton\n                                            onClick={() => openLabelsPanel()}\n                                            data-test=\"sidebar-labels-expand\"\n                                        >\n                                            {profileLoading ? (\n                                                <ItemLoadingIcon />\n                                            ) : (\n                                                <StyledLabelsIcon />\n                                            )}\n                                        </OpenLabelsButton>\n                                    </ClosedLabels>\n                                ) : (\n                                    <OpenLabels>\n                                        <OpenLabelsFooter>\n                                            <OpenLabelsButton\n                                                onClick={() =>\n                                                    closeLabelsPanel()\n                                                }\n                                                data-test=\"sidebar-labels-collapse\"\n                                            >\n                                                <StyledRightArrow />\n                                            </OpenLabelsButton>\n                                        </OpenLabelsFooter>\n                                        <OpenLabelsContent>\n                                            <CreateLabelsContainer />\n                                        </OpenLabelsContent>\n                                    </OpenLabels>\n                                )}\n                            </SidebarLabels>\n                        )}\n                    </SidebarBody>\n                </Drawer>\n            </StyledSidebar>\n        );\n    },\n    (prevProps, nextProps) =>\n        isEqual(\n            prevProps as Record<string, any>,\n            nextProps as Record<string, any>\n        )\n);\n\nexport default Sidebar;","export const CLOSED_SIDEBAR_WIDTH = 50;\nexport const OPEN_SIDEBAR_WIDTH = 248;\n\nexport const SM_SCREEN_BREAKPOINT = 750;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Plus = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 12 12\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M684.835 62L684.835 56.827 690 56.827 690 55.173 684.835 55.173 684.835 50 683.179 50 683.179 55.173 678 55.173 678 56.827 683.179 56.827 683.179 62z\"\n                            transform=\"translate(-678 -50)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Plus;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Folder = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 20 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {shadow && (\n                    <defs>\n                        <filter\n                            id=\"a\"\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        id=\"Document\"\n                        fill=\"currentColor\"\n                        d=\"M18.75 20H1.25C.56 20 0 19.44 0 18.75V1.25C0 .56.56 0 1.25 0H7.5c.69 0 1.25.56 1.25 1.25V2.5h10c.69 0 1.25.56 1.25 1.25v15c0 .69-.56 1.25-1.25 1.25zm-.625-16.25H7.5V1.875c0-.345-.28-.625-.625-.625h-5c-.345 0-.625.28-.625.625V5h16.875c.345 0 .625-.28.625-.626 0-.345-.28-.624-.625-.624zm.625 3.75V6.25H1.25v11.876c0 .345.28.624.625.624h16.25c.346 0 .625-.279.625-.624V7.5z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Folder;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NewUser = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 20 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {shadow && (\n                    <defs>\n                        <filter\n                            id=\"a\"\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        id=\"New-User\"\n                        fill=\"currentColor\"\n                        d=\"M19.376 12.5h-1.248c-.345 0-.624-.28-.624-.625 0-.344.28-.625.624-.625h1.248c.345 0 .624.28.624.625 0 .346-.28.625-.624.625zm0-3.75h-2.497c-.344 0-.624-.28-.624-.625s.28-.625.624-.625h2.497c.345 0 .624.28.624.625 0 .346-.28.625-.624.625zm0-3.75h-2.497c-.344 0-.624-.28-.624-.625s.28-.624.624-.624h2.497c.345 0 .624.28.624.624 0 .346-.28.626-.624.626zm-8.163 8.167c.862.207 5.296 1.293 5.843 1.794 1 .916 1.397 3.664.398 5.039l-8.397-.002L.58 20c-1.007-1.375-.599-4.123.409-5.04.56-.509 4.857-1.546 5.856-1.781-2.24-1.181-3.63-4.072-3.63-6.798C3.216 2.857 4.271 0 9.016 0c4.744 0 5.798 2.857 5.798 6.38 0 2.716-1.377 5.597-3.601 6.787zM9.015 1.246c-3.754 0-4.504 2.31-4.504 5.158 0 2.371 1.218 4.992 3.218 5.812v2.162h-.535c-2.458.513-4.717 1.227-5.376 1.549-.421.471-.69 1.878-.429 2.823l7.667-.002 7.588.002c.26-.945-.002-2.348-.416-2.822-.663-.317-2.883-1.032-5.312-1.55h-.612v-2.164c1.998-.821 3.216-3.44 3.216-5.81 0-2.849-.751-5.158-4.505-5.158zM19.376 15c.345 0 .624.28.624.625s-.28.625-.624.626c-.344-.001-.623-.28-.623-.626 0-.344.279-.625.623-.625zm0 0zm0 1.25z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NewUser;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Document = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 20 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {shadow && (\n                    <defs>\n                        <filter\n                            id=\"a\"\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        id=\"Document\"\n                        fill=\"currentColor\"\n                        d=\"M18.571 17.333H4.286c-.79 0-1.429-.596-1.429-1.333V1.333C2.857.597 3.497 0 4.286 0H18.57C19.361 0 20 .597 20 1.333V16c0 .737-.64 1.333-1.429 1.333zm0-15.333c0-.368-.32-.666-.714-.666H5c-.394 0-.714.298-.714.666v13.333c0 .368.32.667.714.667h12.857c.395 0 .714-.299.714-.667V2zM16.43 13.333h-10c-.395 0-.715-.298-.715-.667 0-.368.32-.667.715-.667h10c.394 0 .714.3.714.667 0 .369-.32.667-.714.667zm0-4h-10c-.395 0-.715-.298-.715-.666 0-.368.32-.667.715-.667h10c.394 0 .714.299.714.667 0 .368-.32.666-.714.666zm-4.286-4H6.429c-.395 0-.715-.298-.715-.666 0-.368.32-.667.715-.667h5.714c.394 0 .714.299.714.667 0 .368-.32.666-.714.666zm5 14.667H1.429C.639 20 0 19.403 0 18.666V4c0-.736.64-1.332 1.429-1.332v15.998H18.57c0 .737-.64 1.334-1.428 1.334z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Document;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Mountains = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 20 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        d=\"M15.171 0v.999h4.332v5.075h-6.428v-1h-.978v2.503L20 20H3.076l.001-.001L0 20 7.346 8.491l1.528 2.395 2.105-3.309V0h4.192zM7.346 10.61l-5.231 8.196 1.721-.001 4.363-6.858-.853-1.336zm4.192-1.786l-6.35 9.982h12.7l-6.35-9.982zm6.847-6.63h-4.192V4.88h4.192V2.193zm-5.31 1.686V1.194h-.978v2.687l.978-.001z\"\n                        id=\"Mountains\"\n                        fill=\"currentColor\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Mountains;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Team = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 20 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <g>\n                                <path\n                                    d=\"M19.002 15H19zM19 16.25zM7.354 0c3.87 0 4.73 2.429 4.73 5.424 0 2.307-1.123 4.756-2.938 5.768.704.176 4.32 1.099 4.767 1.525.815.778 1.14 6.116.324 7.285L7.387 20l-6.913.002c-.821-1.169-.488-6.507.333-7.285.457-.433 3.963-1.315 4.777-1.515-1.828-1.004-2.96-3.461-2.96-5.778 0-2.995.86-5.424 4.73-5.424zm0 1C4.259 1 3.729 2.98 3.729 5.42c0 2.032 1.005 4.278 2.654 4.98v1.854h-.531c-2.027.439-3.735 1.05-4.28 1.326-.346.405-.568 4.36-.353 5.17l6.168-.001 6.109.001c.214-.81-.001-4.762-.343-5.169-.547-.271-2.23-.884-4.232-1.327h-.648v-1.855c.387-.165.738-.415 1.049-.727.325-.326.606-.72.838-1.156.493-.925.764-2.04.764-3.096 0-2.441-.475-4.42-3.57-4.42zM19.176 15.717c.815.778 1.14 3.115.325 4.283l-4.186.002c.12-.349.21-.776.272-1.252h3.105c.214-.81-.001-1.762-.343-2.169-.377-.187-1.436-.537-2.714-.882-.03-.397-.075-.786-.133-1.157 1.422.359 3.369.883 3.674 1.175zM12.822 3.004L12.617 3c1.737 0 2.867.489 3.586 1.298.883.995.784 2.474.784 4.126 0 1.769-.644 3.62-1.762 4.845-.128-.438-.281-.803-.458-1.06.768-1.02 1.204-2.45 1.204-3.789 0-2.38-.106-4.322-2.982-4.416-.04-.351-.095-.684-.167-1z\"\n                                    transform=\"translate(-1200 -302) translate(1168 80) translate(32 222)\"\n                                />\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Team;\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport ROUTES from '../../../../../routes/routes';\nimport { SmallButton } from '../../../../components/Button';\nimport { DropDownList, DropDownListItem } from '../../../../components/DropdownList';\nimport Plus from '../../../../icons/Plus';\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\nimport { CheckPermission } from '../../../../../features/permissions';\nimport FolderIcon from '../../../../icons/Folder';\nimport NewUserIcon from '../../../../icons/NewUser';\nimport DocumentIcon from '../../../../icons/Document';\nimport MountainsIcon from '../../../../icons/Mountains';\nimport TeamIcon from '../../../../icons/Team';\n\nconst StyledActionsContainer = styled.div`\n    position: relative;\n    margin-left: 16px;\n`;\n\nconst StyledActionsButton = styled.div`\n    user-select: none;\n`;\n\nconst StyledPlus = styled(Plus)`\n    width: 12px;\n`;\n\nexport interface ActionsDropdownItem {\n    icon: any;\n    title: string;\n    url: string;\n    permissions: NEW_PERMISSIONS[];\n}\n\nconst defaultItems: ActionsDropdownItem[] = [\n    {\n        title: 'Practis Set',\n        icon: FolderIcon,\n        url: ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE.replace(\n            ':practisSetId',\n            'new'\n        ),\n        permissions: [NEW_PERMISSIONS.CREATE_PRACTIS_SET],\n    },\n    {\n        title: 'Scenario',\n        icon: DocumentIcon,\n        url: ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE.replace(\n            ':scenarioId',\n            'new'\n        ),\n        permissions: [NEW_PERMISSIONS.CREATE_SCENARIO],\n    },\n    {\n        title: 'Challenge',\n        icon: MountainsIcon,\n        url: ROUTES.LIBRARY_SETTINGS.CHALLENGES.SINGLE.replace(\n            ':challengeId',\n            'new'\n        ),\n        permissions: [NEW_PERMISSIONS.CREATE_CHALLENGE],\n    },\n    {\n        title: 'User',\n        icon: NewUserIcon,\n        url: ROUTES.ACTION_ITEMS.NEW_USER.replace(':draftId', 'new'),\n        permissions: [NEW_PERMISSIONS.CREATE_STAGING],\n    },\n    {\n        title: 'Team',\n        icon: TeamIcon,\n        url: ROUTES.TEAMS_PAGES.NEW_TEAM,\n        permissions: [NEW_PERMISSIONS.CREATE_TEAM],\n    },\n];\n\nexport const ActionsDropdown: React.FC = () => {\n    const [open, toggleOpen] = useState(false);\n    \n    return (\n        <ActionsDropdownContext.Consumer>\n            {context => {\n                const items = context.items || defaultItems;\n                return (\n                    <StyledActionsContainer data-test=\"actionDropDownContainer\">\n                        <StyledActionsButton\n                            onClick={() => toggleOpen(!open)}\n                            data-test=\"actionDropDownToggleButton\"\n                        >\n                            <SmallButton>\n                                <StyledPlus />\n                            </SmallButton>\n                        </StyledActionsButton>\n                        {open && (\n                            <DropDownList\n                                open={open}\n                                toggleOpen={toggleOpen}\n                                marginTop={8}\n                            >\n                                {items.map(item => (\n                                    <CheckPermission\n                                        key={item.title}\n                                        permissions={item.permissions}\n                                    >\n                                        <DropDownListItem\n                                            name={item.title}\n                                            modalUrl={true}\n                                            icon={item.icon}\n                                            url={item.url}\n                                        />\n                                    </CheckPermission>\n                                ))}\n                            </DropDownList>\n                        )}\n                    </StyledActionsContainer>\n                );\n            }}\n        </ActionsDropdownContext.Consumer>\n    );\n};\n\nexport default ActionsDropdown;\n\nexport interface ActionsDropdownContextValue {\n    items?: ActionsDropdownItem[];\n}\n\nexport const ActionsDropdownContext = React.createContext<ActionsDropdownContextValue>(\n    {}\n);\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const BackArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 14\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    fill=\"currentColor\"\n                    d=\"M303.972 50.656L302.447 49 296 56 302.447 63 303.972 61.344 300.161 57.206 312 57.208 312 54.818 300.138 54.818z\"\n                    transform=\"translate(-296 -49)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default BackArrow;\n","import styled from 'styled-components';\n\nexport const HeaderContainer = styled.div<{\n    hasBorder?: boolean;\n    headerPadding?: string;\n    minHeight?: string;\n}>`\n    font-size: 16px;\n    background: ${props => props.theme.Colors.white};\n    ${props =>\n        !!props.hasBorder &&\n        `border-bottom: 2px solid ${props.theme.Colors.paleGrey}`};\n    flex-direction: column;\n    ${props => !!props.headerPadding && `padding: ${props.headerPadding};`};\n    ${props => !!props.minHeight && `min-height: ${props.minHeight}`};\n`;\n\nexport const SubHeaderContainer = styled.div<{ hasBackButton: boolean }>`\n    margin-left: ${props => props.hasBackButton ? '18px' : '0'};\n`;\n\nexport const NavigationPanel = styled.div<{ useReducedHeight?: boolean }>`\n    display: flex;\n    width: 100%;\n    align-items: flex-start;\n    padding: 24px 0 0 20px;\n    ${props => (\n        typeof props.useReducedHeight === 'undefined'\n            ? ''\n            : props.useReducedHeight ? 'min-height: 112px' : 'min-height: 119px'\n    )};\n`;\n\nexport const Toolbar = styled.div``;\n\nexport const SecondaryNavigation = styled.div`\n    width: 100%;\n`;\n\nexport const LeftPanel = styled.div`\n    flex-grow: 1;\n    flex: 2;\n`;\n\nexport const TitleContainer = styled.div`\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const TitleSection = styled.div<{ useTopPadding: boolean }>`\n    padding-top: ${props => (props.useTopPadding ? '4px' : '0px')};\n`;\nexport const MainTitle = styled.div`\n    flex: 1;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    font-size: 13px;\n    line-height: 24px;\n`;\n\nexport const SubTitle = styled.div`\n    font-size: 20px;\n    font-weight: 800;\n    color: ${props => props.theme.Colors.black};\n    min-height: 28px;\n    line-height: 32px;\n`;\n\nexport const RightPanel = styled.div`\n    display: flex;\n    flex: 1;\n    justify-content: flex-end;\n    align-items: center;\n`;\n\nexport const CompanySectionWrapper = styled.div`\n    border-radius: 4px;\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n`;\n\nexport const TitleIcon = styled.div`\n    width: 13px;\n    color: ${props => props.theme.Colors.black};\n    margin-right: 4px;\n    left: -16px;\n    position: relative;\n    cursor: pointer;\n    display: flex;\n    align-self: flex-end;\n    margin-bottom: 8px;\n    &:hover {\n        color: ${props => props.theme.Colors.steelGrey};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.cloudyBlue};\n    }\n`;\n","import { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { CompanyStatus } from '../../../constants/interfaces/Company';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { SearchParams } from '../../../constants/interfaces/filters';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport ROUTES from '../../../routes/routes';\nimport Storage from '../../../services/Storage';\nimport { WEB_SITE_ID } from '../../../tools/constants/WebSiteId';\nimport { ThunkContext } from '../../../tools/thunk/ThunkContext';\nimport {\n    adminChangeCompanyAction,\n    fetchActiveCompaniesFailure,\n    fetchActiveCompaniesStart,\n    fetchActiveCompaniesSuccess,\n    searchAllCompaniesFailureAction,\n    searchAllCompaniesStartAction,\n    searchAllCompaniesSuccessAction,\n} from './actions';\nimport { updateUser } from '../../users/store/services';\nimport {useDispatch} from \"react-redux\";\nimport {useCallback} from \"react\";\nimport {useSearchCompaniesApi} from \"../../../api\";\n\nexport const changeCompanyOfPractisAdmin = (\n    companyId?: number,\n    successCallback?: () => void,\n    openInNewTab?: boolean,\n) => {\n    return (dispatch: any, getState: any, tc: ThunkContext) => {\n        dispatch(adminChangeCompanyAction());\n        const { webSiteId, urlBuilder } = tc;\n        const user = getProfileState(getState());\n        adminChangeCompanyAction();\n        return updateUser(\n            { companyId: companyId || null } as any,\n            user!.id!,\n            true,\n            'Company Changed!',\n            () => {\n                let url = null;\n                if (companyId) {\n                    const isCompanyPortal =\n                        webSiteId === WEB_SITE_ID.COMPANY_PORTAL;\n                    url = urlBuilder.buildCompanyUrl({\n                        path: ROUTES.SUBMISSIONS,\n                        query: {\n                            t: isCompanyPortal\n                                ? undefined\n                                : Storage.get('token'),\n                            id: Storage.get('userId'),\n                            p: Storage.get('apiPlatform')\n                        },\n                        absolute: true,\n                    });\n                } else if (webSiteId !== WEB_SITE_ID.ADMIN_PORTAL) {\n                    url = urlBuilder.buildAdminUrl({\n                        query: {\n                            t: Storage.get('token'),\n                            id: Storage.get('userId'),\n                            p: Storage.get('apiPlatform')\n                        },\n                        absolute: true,\n                    });\n                }\n                if (url) {\n                    if (openInNewTab) {\n                        window.open(url, '_blank');\n                    } else {\n                        window.location.href = url;\n                    }\n                }\n\n                successCallback?.();\n            }\n        )(dispatch);\n    };\n};\n\nexport const useSearchAllCompaniesService = () => {\n    const dispatch = useDispatch();\n    const searchCompaniesApi = useSearchCompaniesApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (sp?: SearchParams) => {\n            dispatch(searchAllCompaniesStartAction());\n            return searchCompaniesApi(sp)\n                .then(data => {\n                    dispatch(searchAllCompaniesSuccessAction(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchAllCompaniesFailureAction(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchCompaniesApi, showMessage]\n    );\n};\n\n/**\n * @function useFetchActiveCompaniesService\n * @returns { CallableFunction }\n */\nexport const useFetchActiveCompaniesService = () => {\n    const dispatch = useDispatch();\n    const searchCompaniesApi = useSearchCompaniesApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @returns { Promise }\n     */\n    return useCallback(\n        () => {\n            dispatch(fetchActiveCompaniesStart());\n            return searchCompaniesApi(undefined, [ CompanyStatus.ACTIVE ])\n                .then(data => {\n                    dispatch(fetchActiveCompaniesSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchActiveCompaniesFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchCompaniesApi, showMessage]\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const BoldDownArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 491.996 491.996\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fillRule=\"evenodd\" fill=\"currentColor\">\n                    <g>\n                        <path\n                            d=\"M484.132,124.986l-16.116-16.228c-5.072-5.068-11.82-7.86-19.032-7.86c-7.208,0-13.964,2.792-19.036,7.86l-183.84,183.848\n\t\t\tL62.056,108.554c-5.064-5.068-11.82-7.856-19.028-7.856s-13.968,2.788-19.036,7.856l-16.12,16.128\n\t\t\tc-10.496,10.488-10.496,27.572,0,38.06l219.136,219.924c5.064,5.064,11.812,8.632,19.084,8.632h0.084\n\t\t\tc7.212,0,13.96-3.572,19.024-8.632l218.932-219.328c5.072-5.064,7.856-12.016,7.864-19.224\n\t\t\tC491.996,136.902,489.204,130.046,484.132,124.986z\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default BoldDownArrow;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const BoldUpArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 492.002 492.002\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fillRule=\"evenodd\" fill=\"currentColor\">\n                    <g>\n                        <path\n                            d=\"M484.136,328.473L264.988,109.329c-5.064-5.064-11.816-7.844-19.172-7.844c-7.208,0-13.964,2.78-19.02,7.844\n\t\t\tL7.852,328.265C2.788,333.333,0,340.089,0,347.297c0,7.208,2.784,13.968,7.852,19.032l16.124,16.124\n\t\t\tc5.064,5.064,11.824,7.86,19.032,7.86s13.964-2.796,19.032-7.86l183.852-183.852l184.056,184.064\n\t\t\tc5.064,5.06,11.82,7.852,19.032,7.852c7.208,0,13.96-2.792,19.028-7.852l16.128-16.132\n\t\t\tC494.624,356.041,494.624,338.965,484.136,328.473z\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default BoldUpArrow;\n","import styled from 'styled-components';\nimport BoldDownArrow from '../../../../ui/icons/BoldDownArrow';\nimport BoldUpArrow from '../../../../ui/icons/BoldUpArrow';\n\nexport const TEXT_STYLES = `\n    font-size: 14px;\n    font-weight: 500;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: #909ba7;\n    display: inline-block;\n`;\n\nexport const Root = styled.div<{ open?: boolean }>`\n    height: 40px;\n    display: flex;\n    cursor: pointer;\n    position: relative;\n    border-radius: 4px;\n    padding: 0 10px;\n    background: ${props =>\n        props.open ? props.theme.Colors.whiteTwo : props.theme.Colors.white};\n`;\n\nexport const DownIcon = styled(BoldDownArrow)`\n    color: ${props => props.theme.Colors.black};\n    cursor: pointer;\n    height: 10px;\n    width: 8px;\n    margin-left: 10px;\n`;\n\nexport const UpIcon = styled(BoldUpArrow)`\n    color: ${props => props.theme.Colors.black};\n    cursor: pointer;\n    height: 10px;\n    width: 8px;\n    margin-left: 10px;\n`;\n\nexport const DropdownButton = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const DropdownButtonLabel = styled.div`\n    color: ${props => props.theme.Colors.dark};\n    margin-left: 10px;\n    font-size: 13px;\n    font-weight: 600;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    max-width: 150px;\n`;\n\nexport const LogoContainer = styled.div<{ practis?: boolean }>`\n    height: ${props => (props.practis ? '20px' : '24px')};\n    width: ${props => (props.practis ? '20px' : '24px')};\n    border-radius: 4px;\n    overflow: hidden;\n`;\n\nexport const StyledLogo = styled.img`\n    height: 100%;\n    width: 100%;\n    object-fit: cover;\n`;\n","import React, { useCallback } from 'react';\nimport styled from 'styled-components';\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { TEXT_STYLES } from './styles';\nimport { CompanyItem } from './types';\n\nconst Root = styled.div<{ practis: boolean }>`\n    height: 56px;\n    width: 272px;\n    color: ${props => props.theme.Colors.dark};\n    display: flex;\n    align-items: center;\n    padding: 0 16px;\n    overflow: hidden;\n    border-radius: 4px;\n    &:hover {\n        background: ${props => props.theme.Colors.whiteTwo};\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst Logo = styled.div<{ practis: boolean }>`\n    width: 40px;\n    height: 40px;\n    padding: 4px;\n    margin-right: 16px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    & img {\n        height: ${props => (props.practis ? '31px' : '100%')};\n        width: 100%;\n        object-fit: cover;\n        border-radius: 4px;\n    }\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.dark};\n    flex: 1;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    font-size: 13px;\n    font-weight: 600;\n`;\n\nconst SubTitle = styled.span`\n    ${TEXT_STYLES};\n    margin-left: 12px;\n`;\n\nexport const CompaniesDropdownItem: React.FC<{\n    company: CompanyItem;\n    dataTest?:string;\n    onClick(company: CompanyItem): void;\n}> = ({ company, onClick, dataTest }) => {\n\n    const handleClick = useCallback(() => onClick(company), [company, onClick]);\n    const { logo, logoUrl, name, subTitle } = company;\n    const mediaUrl = logo || logoUrl;\n    return (\n        <Root data-test={dataTest} practis={!!company.practis} onClick={handleClick}>\n            <Logo practis={!!company.practis}>\n                {mediaUrl ? (\n                    <img src={mediaUrl} alt=\"org\" />\n                ) : (\n                    <AvatarPlaceholder profile={company} size=\"sm\" />\n                )}\n            </Logo>\n            <Title>{name}</Title>\n            {subTitle && <SubTitle>{subTitle}</SubTitle>}\n        </Root>\n    );\n};\n","import logoPractis from '../../../../assets/images/practis-icon.svg';\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\n\nexport interface CompanyItem {\n    id?: number;\n    name?: string;\n    logo?: string;\n    logoUrl?: string;\n    subTitle?: string;\n    practis?: boolean;\n}\n\nexport const practisCompanyItem: CompanyItem = {\n    name: 'Practis',\n    logo: logoPractis,\n    subTitle: '(Admin)',\n    practis: true,\n};\n\nexport interface CompaniesDropdownButtonProps {\n    company: CompanyItem;\n    updatedCompany: CompanyInterface;\n    onChangeCompany(company: CompanyItem): void;\n}\n","export default __webpack_public_path__ + \"static/media/practis-icon.bb2a71c9.svg\";","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PractisIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 40 40\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        fill=\"#4aa9e2\"\n                        d=\"M16.526 0C7.399 0 0 7.407 0 16.545V40l8.353-6.91h8.173c9.127 0 16.525-7.407 16.525-16.545C33.051 7.407 25.653 0 16.526 0zm-.106 8c4.651 0 8.421 3.817 8.421 8.526v.141c-.075 4.644-3.816 8.386-8.42 8.386H8v-8.527C8 11.817 11.77 8 16.42 8z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default PractisIcon;\n","import React, { useCallback } from 'react';\nimport styled from 'styled-components';\nimport { CompanyItem } from './types';\nimport PractisIcon from '../../../../ui/icons/PractisIcon';\n\nconst Container = styled.div`\n    height: 100%;\n    width: 272px;\n    padding: 24px 16px 16px 16px;\n`;\n\nconst Root = styled.div`\n    height: 40px;\n    width: 272px;\n    color: ${props => props.theme.Colors.dark};\n    display: flex;\n    align-items: center;\n    padding: 0 16px;\n    overflow: hidden;\n    border-radius: 4px;\n    &:hover {\n        background: ${props => props.theme.Colors.whiteTwo};\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst Logo = styled.div<{ practis: boolean }>`\n    width: 40px;\n    height: 40px;\n    margin-right: 16px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nconst Divider = styled.div`\n    margin: 0 24px;\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    background: ${props => props.theme.Colors.paleGrey};\n`;\n\nconst StyledLogo = styled(PractisIcon)`\n    height: 24px;\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.dark};\n    flex: 1;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    font-size: 13px;\n    font-weight: 600;\n`;\n\nexport const PractisDropdownItem: React.FC<{\n    company: CompanyItem;\n    onClick(company: CompanyItem): void;\n}> = ({ company, onClick }) => {\n    const handleClick = useCallback(() => onClick(company), [company, onClick]);\n    return (\n        <>\n            <Container>\n                <Root onClick={handleClick} data-test=\"practisAdminItemContainer\">\n                    <Logo practis={!!company.practis} data-test=\"practisAdminItemLogo\">\n                        <StyledLogo />\n                    </Logo>\n                    <Title data-test=\"practisAdminItemTitle\">Practis Admin</Title>\n                </Root>\n            </Container>\n            <Divider />\n        </>\n    );\n};\n","import React, { FC, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\nimport { CompaniesDropdownItem } from './CompaniesDropdownItem';\nimport { CompanyItem, practisCompanyItem } from './types';\nimport { DropDownList } from '../../../../ui/components/DropdownList';\nimport { PractisDropdownItem } from './PractisDropdownItem';\nimport { useCompaniesGlobalState } from '../../store/states';\nimport { useFetchActiveCompaniesService } from '../../store/services';\nimport { usePreviousData } from '../../../../helpers/hooks/usePreviousData';\nimport { isEmpty } from 'lodash';\nimport equal from 'deep-equal';\n\nconst StyledListCard = styled(DropDownList)`\n    background: ${props => props.theme.Colors.white};\n    right: -5px;\n    margin-top: 65px;\n    min-width: 200px;\n`;\n\nexport const CompaniesDropdown: React.FC<{\n    companies?: CompanyItem[];\n    open: boolean;\n    toggleOpen(open?: boolean): void;\n    onChangeCompany(company: CompanyItem): void;\n    practisCompanyItem?: any;\n}> = ({ companies, open, toggleOpen, onChangeCompany, practisCompanyItem }) => {\n    return (\n        <StyledListCard\n            open={open}\n            toggleOpen={toggleOpen}\n            width={'auto'}\n            renderItem={\n                <PractisDropdownItem\n                    company={practisCompanyItem}\n                    onClick={onChangeCompany}\n                />\n            }\n        >\n            {companies?.map((company: any) => (\n                <CompaniesDropdownItem\n                    key={'company_' + (company.id || '')}\n                    company={company}\n                    onClick={onChangeCompany}\n                    dataTest={'company-' + (company.id || '')}\n                />\n            ))}\n        </StyledListCard>\n    );\n};\n\nconst CompaniesDropdownContainer: FC<{\n    open: boolean;\n    updatedCompany?: CompanyInterface;\n    toggleOpen(open?: boolean): void;\n    onChangeCompany(company: CompanyItem): void;\n}> = ({ updatedCompany, open, toggleOpen, onChangeCompany }) => {\n    const fetchActiveCompanies = useFetchActiveCompaniesService();\n    const { activeCompanies, isActiveCompaniesLoading } = useCompaniesGlobalState();\n\n    const prevUpdatedCompany = usePreviousData(updatedCompany);\n\n    useEffect(() => {\n        if (!activeCompanies?.items && !isActiveCompaniesLoading) {\n            fetchActiveCompanies();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        if (isEmpty(prevUpdatedCompany) || equal(updatedCompany, prevUpdatedCompany)) return;\n        fetchActiveCompanies();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [updatedCompany]);\n\n    return (\n        <CompaniesDropdown\n            companies={activeCompanies?.items}\n            open={open}\n            toggleOpen={toggleOpen}\n            onChangeCompany={onChangeCompany}\n            practisCompanyItem={practisCompanyItem}\n        />\n    );\n};\n\nexport default CompaniesDropdownContainer;\n","import { useSelector } from 'react-redux';\nimport { AllCompaniesInterface } from './reducers';\n\nexport const useCompaniesGlobalState = (): AllCompaniesInterface => {\n    const appState = useSelector(state => state);\n    return appState.companies;\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\nimport { UserInterface } from '../../../constants/interfaces/User';\n\nconst StyledAvatarContainer = styled.div<{\n    disabled?: boolean;\n}>`\n    font-size: 13px;\n    height: 100%;\n    width: 100%;\n    border-radius: 4px;\n    background: ${props => props.theme.Colors.whiteFive};\n    color: ${props => props.theme.Colors.black};\n    opacity: ${props => (props.disabled ? 0.7 : 1)};\n    border: solid 1px ${props => props.theme.Colors.cloudyBlue};\n    flex-shrink: 0;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledImage = styled.img`\n    height: 100%;\n    width: 100%;\n    border-radius: 4px;\n    object-fit: cover;\n`;\n\nexport interface AvatarPlaceholderInterface {\n    profile: (UserInterface & CompanyInterface) | undefined;\n    loading?: boolean;\n    link?: string;\n    disabled?: boolean;\n    className?: string;\n    backgroundColor?: string;\n}\n\nconst NamePlaceholder: FC<{\n    image?: string;\n    name?: string;\n    disabled?: boolean;\n    className?: string;\n    dataTest?: string;\n}> = ({ image, name, disabled, className, dataTest }) => {\n    if (image) {\n        return (\n            <StyledAvatarContainer disabled={disabled} className={className}>\n                <StyledImage src={image} alt={'profile'} data-test={dataTest} />\n            </StyledAvatarContainer>\n        );\n    } else {\n        return (\n            <StyledAvatarContainer disabled={disabled} className={className} data-test={dataTest}>\n                {name && name[0].toUpperCase()}\n            </StyledAvatarContainer>\n        );\n    }\n};\n\nexport default NamePlaceholder;\n","import { FC, useCallback, useState } from 'react';\r\n\r\nimport CompaniesDropdownContainer from './CompaniesDropdown';\r\nimport { CompaniesDropdownButtonProps, CompanyItem } from './types';\r\nimport { useCollapseAllLabelsService } from '../../../labels/store/services';\r\nimport NamePlaceholder from '../../../../ui/components/AvatarPlaceholder';\r\nimport {\r\n    DownIcon,\r\n    DropdownButton,\r\n    DropdownButtonLabel,\r\n    LogoContainer,\r\n    Root,\r\n    StyledLogo,\r\n    UpIcon,\r\n} from './styles';\r\n\r\nexport const CompaniesDropdownButton: FC<CompaniesDropdownButtonProps> = ({\r\n    company,\r\n    updatedCompany,\r\n    onChangeCompany,\r\n}) => {\r\n    const [open, setOpen] = useState(false);\r\n    const collapseLabels = useCollapseAllLabelsService();\r\n    const toggleOpen = useCallback(\r\n        (newOpen?: boolean) =>\r\n            setOpen(prevOpen =>\r\n                typeof newOpen === 'boolean' ? newOpen : !prevOpen\r\n            ),\r\n        [setOpen]\r\n    );\r\n    const handleChangeCompany = useCallback(\r\n        (company: CompanyItem) => {\r\n            setOpen(false);\r\n            collapseLabels();\r\n            onChangeCompany(company);\r\n        },\r\n        [setOpen, onChangeCompany, collapseLabels]\r\n    );\r\n\r\n    const mediaUrl = company.logo || company.logoUrl;\r\n\r\n    return (\r\n        <Root open={open}>\r\n            <DropdownButton\r\n                onClick={() => toggleOpen(!open)}\r\n                data-test=\"companyDropDownToggleButton\"\r\n            >\r\n                <LogoContainer practis={company.practis}>\r\n                    {mediaUrl ? (\r\n                        <StyledLogo src={mediaUrl} alt=\"org\" />\r\n                    ) : (\r\n                        <NamePlaceholder\r\n                            image={mediaUrl}\r\n                            name={company.name}\r\n                        />\r\n                    )}\r\n                </LogoContainer>\r\n                <DropdownButtonLabel>{company.name}</DropdownButtonLabel>\r\n                {open ? (\r\n                    <UpIcon data-test=\"companyDropDownUpIcon\" />\r\n                ) : (\r\n                    <DownIcon data-test=\"companyDropDownDownIcon\" />\r\n                )}\r\n            </DropdownButton>\r\n            <CompaniesDropdownContainer\r\n                updatedCompany={updatedCompany}\r\n                open={open}\r\n                toggleOpen={toggleOpen}\r\n                onChangeCompany={handleChangeCompany}\r\n            />\r\n        </Root>\r\n    );\r\n};\r\n\r\nexport default CompaniesDropdownButton;\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { debounce } from 'lodash';\r\nimport { bindActionCreators } from 'redux';\r\nimport styled from 'styled-components';\r\n\r\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\r\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\r\nimport {\r\n    getCompanyLoading,\r\n    getCompanyState,\r\n} from '../../../../pages/CompanySettings/store/reducers';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport { changeCompanyOfPractisAdmin } from '../../store/services';\r\nimport CompaniesDropdownButton from '../CompaniesDropdownButton/CompaniesDropdownButton';\r\nimport { CompanyItem } from '../CompaniesDropdownButton/types';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { CheckPermission } from '../../../permissions';\r\nimport { useSaveUserFiltersService } from '../../../labels/store/services';\r\nimport {\r\n    listenBroadCastChannelMessage,\r\n    postBroadCastChannelMessage,\r\n} from '../../../../helpers/functions/broadcast-channel';\r\nimport { pushModal, useHistory } from '../../../../tools/router';\r\n\r\n\r\nconst StyledCompanySection = styled.div`\r\n    height: 40px;\r\n    & img {\r\n        height: 100%;\r\n        width: 100%;\r\n        object-fit: cover;\r\n        border-radius: 8px;\r\n    }\r\n`;\r\n\r\nconst StyledCompanyLogo = styled.div`\r\n    height: 100%;\r\n    width: 100%;\r\n`;\r\n\r\nconst LogoButton = styled.div`\r\n    text-decoration: none;\r\n    cursor: pointer;\r\n`;\r\n\r\nconst LogoContainer = styled.div<{ practis?: boolean }>`\r\n    height: ${props => (props.practis ? '20px' : '24px')};\r\n    width: ${props => (props.practis ? '20px' : '24px')};\r\n    border-radius: 4px;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst Root = styled.div<{ open?: boolean }>`\r\n    height: 40px;\r\n    display: flex;\r\n    position: relative;\r\n    border-radius: 4px;\r\n    padding: 0 10px;\r\n    background: ${props =>\r\n        props.open ? props.theme.Colors.whiteTwo : props.theme.Colors.white};\r\n`;\r\n\r\nconst DropdownButton = styled.div`\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n`;\r\n\r\nconst DropdownButtonLabel = styled.div`\r\n    color: ${props => props.theme.Colors.dark};\r\n    margin-left: 10px;\r\n    font-size: 13px;\r\n    font-weight: 600;\r\n    overflow: hidden;\r\n    white-space: nowrap;\r\n    text-overflow: ellipsis;\r\n    max-width: 150px;\r\n`;\r\n\r\nconst StyledLogo = styled.img`\r\n    height: 100%;\r\n    width: 100%;\r\n    object-fit: cover;\r\n`;\r\n\r\nconst NoLogoButton = styled.div`\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n\r\n    .avatar-placeholder {\r\n        width: 24px;\r\n        height: 24px;\r\n        margin-right: 6px;\r\n    }\r\n\r\n    span {\r\n        color: #212121;\r\n        font-size: 13px;\r\n    }\r\n`;\r\n\r\nexport const CompanySection: React.FC<{\r\n    companies: boolean;\r\n    company?: CompanyInterface;\r\n    loading?: boolean;\r\n    changeCompany?: (\r\n        companyId?: number,\r\n        successCallback?: <T>(args?: T) => void\r\n    ) => Promise<void>;\r\n}> = ({ company, changeCompany }) => {\r\n    const saveUserFilters = useSaveUserFiltersService();\r\n    const history = useHistory();\r\n\r\n    /**\r\n     * @function clearUserFilters\r\n     * @returns { void }\r\n     */\r\n    const clearUserFilters = useCallback(() => {\r\n        saveUserFilters([]);\r\n    }, [saveUserFilters]);\r\n\r\n    /**\r\n     * @function successChangeCompanyCallback\r\n     * @param { CompanyItem } company\r\n     */\r\n    const successChangeCompanyCallback = useCallback(\r\n        company => {\r\n            debounce(clearUserFilters, 200);\r\n            postBroadCastChannelMessage(company.id);\r\n        },\r\n        [clearUserFilters]\r\n    );\r\n\r\n    /**\r\n     * @function handleChangeCompany\r\n     * @param { CompanyItem } company\r\n     * @returns { void }\r\n     */\r\n\r\n    const handleChangeCompany = useCallback(\r\n        async (company: CompanyItem) => {\r\n            if (changeCompany) {\r\n                await changeCompany(company.id, () =>\r\n                    successChangeCompanyCallback(company)\r\n                );\r\n            }\r\n        },\r\n        [changeCompany, successChangeCompanyCallback]\r\n    );\r\n\r\n    /**\r\n     * @function listenBroadCastChannelCallback\r\n     * @returns { void }\r\n     */\r\n    const listenBroadCastChannelCallback = useCallback(\r\n        async message => {\r\n            await changeCompany?.(message, debounce(clearUserFilters, 200));\r\n        },\r\n        [changeCompany, clearUserFilters]\r\n    );\r\n\r\n    const openCompanySettings = useCallback(() => {\r\n        pushModal(history, ROUTES.COMPANY_SETTINGS.ROOT);\r\n    }, [history]);\r\n\r\n    // handle change company for other open tabs\r\n    useEffect(() => {\r\n        listenBroadCastChannelMessage(listenBroadCastChannelCallback);\r\n    }, [listenBroadCastChannelCallback]);\r\n\r\n    if (!company) {\r\n        return null;\r\n    }\r\n\r\n    const mediaUrl = company?.logoUrl || company?.logo;\r\n\r\n    const logo =\r\n        mediaUrl ? (\r\n            <Root>\r\n                <DropdownButton>\r\n                    <LogoContainer practis={false}>\r\n                        <StyledLogo src={mediaUrl} alt=\"org\" />\r\n                    </LogoContainer>\r\n                    <DropdownButtonLabel>\r\n                        {company?.name}\r\n                    </DropdownButtonLabel>\r\n                </DropdownButton>\r\n            </Root>\r\n        ) : (\r\n            <Root>\r\n                <NoLogoButton>\r\n                    <AvatarPlaceholder\r\n                        profile={company}\r\n                        size=\"sm\"\r\n                        className=\"avatar-placeholder\"\r\n                    />\r\n                    <span>{company?.name}</span>\r\n                </NoLogoButton>\r\n            </Root>\r\n        );\r\n\r\n    return (\r\n        <CheckPermission\r\n            permissions={[NEW_PERMISSIONS.ACCESS_ANY_COMPANY]}\r\n            alternateContent={\r\n                <StyledCompanySection>\r\n                    <StyledCompanyLogo>\r\n                        <CheckPermission\r\n                            permissions={[NEW_PERMISSIONS.VIEW_COMPANY]}\r\n                            alternateContent={logo}\r\n                        >\r\n                            <LogoButton onClick={openCompanySettings}>\r\n                                {logo}\r\n                            </LogoButton>\r\n                        </CheckPermission>\r\n                    </StyledCompanyLogo>\r\n                </StyledCompanySection>\r\n            }\r\n        >\r\n            <CompaniesDropdownButton\r\n                company={company}\r\n                updatedCompany={company}\r\n                onChangeCompany={handleChangeCompany}\r\n            />\r\n        </CheckPermission>\r\n    );\r\n};\r\n\r\nfunction mapStateToProps(state: any, container: any) {\r\n    return {\r\n        webSiteId: container.webSiteId,\r\n        urlBuilder: container.urlBuilder,\r\n        company: getCompanyState(state),\r\n        loading: getCompanyLoading(state),\r\n    };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) =>\r\n    bindActionCreators(\r\n        {\r\n            changeCompany: changeCompanyOfPractisAdmin,\r\n        },\r\n        dispatch\r\n    );\r\n\r\nexport default connect(\r\n    mapStateToProps,\r\n    mapDispatchToProps\r\n)(CompanySection as any);\r\n","import useWindowDimensions from '../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../theme/variables';\nimport LandingCard1 from '../../assets/images/LandingCard1.png';\nimport LandingCard2 from '../../assets/images/LandingCard2.png';\nimport LandingCard3 from '../../assets/images/LandingCard3.png';\n\nexport enum Platform {\n    DESKTOP = 'DESKTOP',\n    LAPTOP = 'LAPTOP',\n    TABLET = 'TABLET',\n    MOBILE = 'MOBILE',\n}\n\nconst CardWidth = {\n    [Platform.DESKTOP]: 448,\n    [Platform.LAPTOP]: 350,\n    [Platform.TABLET]: 304,\n    [Platform.MOBILE]: 289,\n};\n\nconst CardHeight = {\n    [Platform.DESKTOP]: 592,\n    [Platform.LAPTOP]: 480,\n    [Platform.TABLET]: 424,\n    [Platform.MOBILE]: 304,\n};\n\nexport const useGetPlatform = (): string => {\n    const windowWidth = useWindowDimensions().width;\n\n    if (windowWidth > Variables.BreakPoints.mid) {\n        return Platform.DESKTOP;\n    } else if (windowWidth > Variables.BreakPoints.small) {\n        return Platform.LAPTOP;\n    } else if (windowWidth > Variables.BreakPoints.smaller) {\n        return Platform.TABLET;\n    } else {\n        return Platform.MOBILE;\n    }\n};\n\nexport const useDynamicCardWidth = (): number => {\n    const windowWidth = useWindowDimensions().width;\n\n    if (windowWidth > Variables.BreakPoints.mid) {\n        return CardWidth[Platform.DESKTOP];\n    } else if (windowWidth > Variables.BreakPoints.small) {\n        return CardWidth[Platform.LAPTOP];\n    } else if (windowWidth > Variables.BreakPoints.smaller) {\n        return CardWidth[Platform.TABLET];\n    } else {\n        return CardWidth[Platform.MOBILE];\n    }\n};\n\nexport const useDynamicCardHeight = (): number => {\n    const windowWidth = useWindowDimensions().width;\n\n    if (windowWidth > Variables.BreakPoints.mid) {\n        return CardHeight[Platform.DESKTOP];\n    } else if (windowWidth > Variables.BreakPoints.small) {\n        return CardHeight[Platform.LAPTOP];\n    } else if (windowWidth > Variables.BreakPoints.smaller) {\n        return CardHeight[Platform.TABLET];\n    } else {\n        return CardHeight[Platform.MOBILE];\n    }\n};\n\nexport const CARDS = [\n    {\n        description: 'Are you a sales organization with a distributed team?',\n        image: LandingCard1,\n    },\n    {\n        description:\n            'Do you rely on consistency of message to optimize your close rate?',\n        image: LandingCard2,\n    },\n    {\n        description:\n            'Do you have a hard time monitoring capability and compliance?',\n        image: LandingCard3,\n    },\n];\n","/**\n * @description - Post Message by Broadcast channel api\n * @function postBroadCastChannelMessage\n * @param { T } message\n * @returns { void }\n */\nexport function postBroadCastChannelMessage<T>(message: T): void {\n    try {\n        const broadcastChannel = new BroadcastChannel('app-data');\n\n        broadcastChannel.postMessage(message);\n    } catch (error) {\n        console.log(\n            'broadcast-channel.ts: postBroadCastChannelMessage: ',\n            error\n        );\n    }\n}\n\n/**\n * @function listenBroadCastChannelMessage\n * @param { Function } callback\n * @returns { void }\n */\nexport function listenBroadCastChannelMessage<T>(\n    callback: (message: T) => void\n): void {\n    try {\n        const broadcastChannel = new BroadcastChannel('app-data');\n\n        broadcastChannel.onmessage = event => {\n            callback(event.data);\n        };\n    } catch (error) {\n        console.log(\n            'broadcast-channel.ts: listenBroadCastChannelMessage: ',\n            error\n        );\n    }\n}\n\n","import { createContext, ReactNode } from 'react';\n\nimport CompanySection from '../../../features/companies/components/CompanySection/CompanySection';\n\nexport interface HeaderProps {\n    title?: string;\n    subTitle?: string;\n    tabs?: ReactNode;\n    subHeader?: ReactNode;\n    hasBorder?: boolean;\n    headerPadding?: string;\n    goBackUrl?: string;\n    useGoBack?: boolean;\n    dataTest?: string;\n    minHeight?: string;\n}\n\nexport interface HeaderContextValue {\n    companySectionComponent: any;\n}\n\nexport const HeaderContext = createContext<HeaderContextValue>({\n    companySectionComponent: CompanySection,\n});\n","import { memo, useContext } from 'react';\nimport { useHistory } from 'react-router';\nimport { isEqual } from 'lodash';\nimport Skeleton from '@material-ui/lab/Skeleton';\n\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport ActionsDropdown from './components/ActionsDropdown/ActionsDropdown';\nimport BackArrow from '../../icons/BackArrow';\nimport { CheckPermission } from '../../../features/permissions';\nimport {\n    CompanySectionWrapper,\n    HeaderContainer,\n    LeftPanel,\n    MainTitle,\n    NavigationPanel,\n    RightPanel,\n    SecondaryNavigation,\n    SubHeaderContainer,\n    SubTitle,\n    TitleContainer,\n    TitleIcon,\n    TitleSection,\n    Toolbar,\n} from './styles';\nimport { HeaderContext, HeaderProps } from './types';\n\nexport const Header: React.FC<HeaderProps> = memo(\n    ({\n        title,\n        subTitle,\n        tabs,\n        subHeader,\n        hasBorder,\n        goBackUrl,\n        useGoBack,\n        headerPadding,\n        dataTest,\n        minHeight,\n    }) => {\n        const history = useHistory();\n        const { companySectionComponent: CompanySection } =\n            useContext(HeaderContext);\n        const hasTabs = !!tabs;\n        const hasBackButton = !!goBackUrl || !!useGoBack;\n\n        const handleGoBack = () => {\n            if (!!useGoBack) {\n                history.goBack();\n            } else if (!!goBackUrl) {\n                history.push(goBackUrl);\n            }\n        };\n\n        return (\n            <HeaderContainer\n                hasBorder={hasBorder}\n                headerPadding={headerPadding}\n                minHeight={minHeight ?? (hasTabs ? undefined : '144px')}\n            >\n                <Toolbar>\n                    <NavigationPanel useReducedHeight={minHeight ? undefined : hasTabs}>\n                        <LeftPanel>\n                            <TitleContainer>\n                                {hasBackButton && (\n                                    <TitleIcon\n                                        onClick={handleGoBack}\n                                        data-test=\"back-arrow-button\"\n                                    >\n                                        <BackArrow />\n                                    </TitleIcon>\n                                )}\n                                <TitleSection useTopPadding={!title}>\n                                    {title && (\n                                        <MainTitle\n                                            data-test={\n                                                dataTest &&\n                                                `${dataTest}-page-title`\n                                            }\n                                        >\n                                            {title}\n                                        </MainTitle>\n                                    )}\n\n                                    {subTitle ? (\n                                        <SubTitle\n                                            data-test={\n                                                dataTest &&\n                                                `${dataTest}-page-subtitle`\n                                            }\n                                        >\n                                            {subTitle}\n                                        </SubTitle>\n                                    ) : (\n                                        <Skeleton\n                                            variant=\"text\"\n                                            width={140}\n                                            height={32}\n                                            style={{\n                                                background: 'var(--ps-grey-3)',\n                                            }}\n                                        />\n                                    )}\n                                </TitleSection>\n                            </TitleContainer>\n                            {subHeader && (\n                                <SubHeaderContainer hasBackButton={hasBackButton}>\n                                    {subHeader}\n                                </SubHeaderContainer>\n                            )}\n                        </LeftPanel>\n                        <RightPanel>\n                            <CompanySectionWrapper data-test=\"companyDropDownSection\">\n                                <CompanySection />\n                            </CompanySectionWrapper>\n                            <CheckPermission\n                                permissions={[\n                                    NEW_PERMISSIONS.CREATE_PRACTIS_SET,\n                                    NEW_PERMISSIONS.CREATE_SCENARIO,\n                                    NEW_PERMISSIONS.CREATE_CHALLENGE,\n                                    NEW_PERMISSIONS.CREATE_STAGING,\n                                ]}\n                            >\n                                <ActionsDropdown />\n                            </CheckPermission>\n                        </RightPanel>\n                    </NavigationPanel>\n                    <SecondaryNavigation>\n                        {tabs}\n                    </SecondaryNavigation>\n                </Toolbar>\n            </HeaderContainer>\n        );\n    },\n    (prevProps, nextProps) =>\n        isEqual(\n            prevProps as Record<string, any>[],\n            nextProps as Record<string, any>[]\n        )\n);\n\nexport default Header;","import { Container } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const WrapperContainer = styled.div`\n    display: flex;\n    height: 100vh;\n`;\n\nexport const Content = styled.main<{\n    height?: string;\n    contentPadding?: string;\n}>`\n    padding: ${props =>\n        !!props.contentPadding ? props.contentPadding : '0 24px'};\n\n    flex: 1;\n    min-width: 511px;\n    ${props => !!props.height && `height: ${props.height};`};\n`;\n\nexport const StyledTest = styled.div<{ isScrollable: boolean }>`\n    flex: 1;\n    ${props => !!props.isScrollable && `overflow-y: scroll;`};\n    position: relative;\n`;\n\nexport const StyledContainer = styled(Container)<{ height?: string, marginBottom?: string }>`\n    padding: 0 !important;\n    margin-bottom:  ${props => props.marginBottom || '72px' };\n    ${props => !!props.height && `height: ${props.height};`};\n`;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarLibrary = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M15 14.933V6.401c.552 0 1-.478 1-1.068V1.067C16 .477 15.552 0 15 0H1C.448 0 0 .477 0 1.067v4.266c0 .59.448 1.068 1 1.068v8.532C1 15.523 1.448 16 2 16h12c.552 0 1-.478 1-1.067zm-12.5 0c-.276 0-.5-.238-.5-.533V6.933c0-.294.224-.532.5-.532H5v2.132c0 .59.448 1.067 1 1.067h4c.552 0 1-.477 1-1.067V6.401h2.5c.276 0 .5.238.5.532V14.4c0 .295-.224.533-.5.533h-11zM10 8V6.401H6V8c0 .295.224.533.5.533h3c.276 0 .5-.239.5-.533zm4.5-6.933c.276 0 .5.239.5.533v3.2c0 .295-.224.534-.5.534h-13c-.276 0-.5-.24-.5-.534V1.6c0-.294.224-.533.5-.533h13z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default SidebarLibrary;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarLibraryActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill=\"#fff\"\n                    d=\"M1 1h14v5H1zM2 6h12v9H2z\"\n                />\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M15 14.933V6.401c.552 0 1-.478 1-1.068V1.067C16 .477 15.552 0 15 0H1C.448 0 0 .477 0 1.067v4.266c0 .59.448 1.068 1 1.068v8.532C1 15.523 1.448 16 2 16h12c.552 0 1-.478 1-1.067zm-12.5 0c-.276 0-.5-.238-.5-.533V6.933c0-.294.224-.532.5-.532H5v2.132c0 .59.448 1.067 1 1.067h4c.552 0 1-.477 1-1.067V6.401h2.5c.276 0 .5.238.5.532V14.4c0 .295-.224.533-.5.533h-11zM10 8V6.401H6V8c0 .295.224.533.5.533h3c.276 0 .5-.239.5-.533zm4.5-6.933c.276 0 .5.239.5.533v3.2c0 .295-.224.534-.5.534h-13c-.276 0-.5-.24-.5-.534V1.6c0-.294.224-.533.5-.533h13z\"\n                    fill=\"#222431\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default SidebarLibraryActive;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarTeams = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M6.268 1a2 2 0 0 1 3.464 0H12a1 1 0 0 1 1 1h3v14H0V2h3a1 1 0 0 1 1-1h2.268zM12 2v2H4V2h3a1 1 0 0 1 2 0h3zM3 4V3H1v12h14V3h-2v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm1 5V8h8v1H4zm0 3v-1h6v1H4z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default SidebarTeams;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarTeamsActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path d=\"M1 3h2l1 1.5L8 5l4-.5L13 3h2v12H1V3z\" fill=\"#fff\"/>\n                <path fill=\"#222431\" d=\"M4 8h8v1H4zM4 11h6v1H4z\"/>\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 0a2 2 0 0 0-1.732 1H4a1 1 0 0 0-1 1H0v14h16V2h-3a1 1 0 0 0-1-1H9.732A2 2 0 0 0 8 0zm5 3v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V3H1v12h14V3h-2z\" fill=\"#222431\"/>\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9 2a1 1 0 0 0-2 0H4v2h8V2H9z\" fill=\"#fff\"/>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarTeamsActive;\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarFeed = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n            >\n                <g clip-path=\"url(#3q8huv9lja)\">\n                    <path\n                        fill-rule=\"evenodd\"\n                        clip-rule=\"evenodd\"\n                        d=\"M15.777 5.336 8 0 .223 5.336a.5.5 0 0 0-.124.715c.172.23.505.283.744.119l.224-.153V16h4.8V9.34c0-.283.239-.513.533-.513h3.2c.295 0 .534.23.534.513V16h4.8V6.017l.223.153c.24.164.572.111.744-.12a.5.5 0 0 0-.124-.714zm-1.91-.051L8 1.259 2.134 5.285v9.69H4.8V9.34c0-.85.717-1.538 1.6-1.538h3.2c.884 0 1.6.689 1.6 1.538v5.635h2.667v-9.69z\"\n                        fill=\"#6D7F8C\"\n                    />\n                </g>\n                <defs>\n                    <clipPath id=\"3q8huv9lja\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarFeed;\n\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarFeedActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n            >\n                <g clip-path=\"url(#rftlgqqbqa)\" fill=\"#fff\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.777 5.336 8 0 .223 5.336a.5.5 0 0 0-.124.715c.172.23.505.283.744.119l.224-.153V16h4.8V9.34c0-.283.239-.513.533-.513h3.2c.295 0 .534.23.534.513V16h4.8V6.017l.223.153c.24.164.572.111.744-.12a.5.5 0 0 0-.124-.714zm-1.91-.051L8 1.259 2.134 5.285v9.69H4.8V9.34c0-.85.717-1.538 1.6-1.538h3.2c.884 0 1.6.689 1.6 1.538v5.635h2.667v-9.69z\"/>\n                    <g clip-path=\"url(#xtobi3f9sb)\">\n                        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.777 5.336 8 0 .223 5.336a.5.5 0 0 0-.124.715c.172.23.505.283.744.119l.224-.153V16h4.8V9.34c0-.283.239-.513.533-.513h3.2c.295 0 .534.23.534.513V16h4.8V6.017l.223.153c.24.164.572.111.744-.12a.5.5 0 0 0-.124-.714zm-1.91-.051L8 1.259 2.134 5.285v9.69H4.8V9.34c0-.85.717-1.538 1.6-1.538h3.2c.884 0 1.6.689 1.6 1.538v5.635h2.667v-9.69z\"/>\n                        <path d=\"M5.5 15.5V9l.5-.5h4.5v7h4v-10L8 1 1.5 5.5v10h4z\"/>\n                    </g>\n                </g>\n                <defs>\n                    <clipPath id=\"rftlgqqbqa\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                    <clipPath id=\"xtobi3f9sb\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarFeedActive;\n\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarUsers = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"16\"\n                height=\"16\"\n                fill=\"none\"\n                className={className}\n                viewBox=\"0 0 16 16\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M13.645 11.969c-.438-.401-3.985-1.27-4.675-1.436 1.78-.951 2.881-3.256 2.881-5.428 0-2.82-.843-5.105-4.639-5.105-3.795 0-4.639 2.286-4.639 5.105 0 2.18 1.111 4.493 2.904 5.438-.8.189-4.237 1.018-4.685 1.426C-.014 12.7-.34 14.9.465 16l6.78-.002 6.718.002c.8-1.1.481-3.299-.318-4.031zM15.501 4h-1.997a.5.5 0 0 1 0-1H15.5a.5.5 0 0 1 0 1zM13.504 7H15.5a.5.5 0 1 0 0-1h-1.997a.5.5 0 0 0 0 1zm.998 3h.999a.5.5 0 0 0 0-1h-.998a.5.5 0 0 0 0 1zM7.212.997c-3.003 0-3.604 1.848-3.604 4.126 0 1.897.975 3.994 2.575 4.65v1.73h-.428c-1.966.41-3.773.981-4.301 1.238-.336.378-.552 1.503-.343 2.26l6.134-.002 6.07.001c.208-.756-.001-1.878-.333-2.258-.53-.253-2.306-.825-4.249-1.24h-.49v-1.73c1.599-.658 2.573-2.753 2.573-4.649 0-2.279-.601-4.126-3.604-4.126z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default SidebarUsers;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarUsersActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"16\"\n                height=\"16\"\n                fill=\"none\"\n                className={className}\n                viewBox=\"0 0 16 16\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M13.645 11.969c-.438-.401-3.985-1.27-4.675-1.436 1.78-.951 2.881-3.256 2.881-5.428 0-2.82-.843-5.105-4.639-5.105-3.795 0-4.639 2.286-4.639 5.105 0 2.18 1.111 4.493 2.904 5.438-.8.189-4.237 1.018-4.685 1.426C-.014 12.7-.34 14.9.465 16l6.78-.002 6.718.002c.8-1.1.481-3.299-.318-4.031zM15.501 4h-1.997a.5.5 0 0 1 0-1H15.5a.5.5 0 0 1 0 1zM13.504 7H15.5a.5.5 0 1 0 0-1h-1.997a.5.5 0 0 0 0 1zm.998 3h.999a.5.5 0 0 0 0-1h-.998a.5.5 0 0 0 0 1z\"\n                    fill=\"#fff\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default SidebarUsersActive;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarAssessment = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    d=\"M15.99 4.138a1.207 1.207 0 0 0-.64-.884l-1.714-.863L12.78.665a1.2 1.2 0 0 0-.877-.644 1.181 1.181 0 0 0-1.032.332L8.423 2.817c-.32.323-.402.811-.196 1.227L9.24 6.082l-.248.25-1.672 1.683a.517.517 0 0 0 0 .739.517.517 0 0 0 .361.156.5.5 0 0 0 .361-.156l1.673-1.685.247-.25 2.024 1.02a1.1 1.1 0 0 0 .474.114c.269 0 .537-.104.744-.312l2.446-2.464a1.21 1.21 0 0 0 .33-1.04h.01zm-6.834-.583 2.447-2.464s.082-.051.113-.051h.031s.083.02.114.093l.763 1.539-.051.052-2.56 2.578-.857-1.757v.01zm5.77.895L12.48 6.913h-.02l-1.725-.862 2.56-2.579.052-.052 1.538.77c.062.03.083.083.083.114s0 .094-.041.146zm.527 3.14c.02.207.03.405.03.613 0 4.304-3.468 7.797-7.741 7.797C3.468 16 0 12.507 0 8.203S3.468.405 7.742.405c.279 0 .557.021.836.052l-.929.936C3.954 1.435.97 4.47.97 8.203c0 3.732 3.035 6.82 6.772 6.82s6.575-2.88 6.761-6.477l.95-.957zm-3.768 1.798c-.506 1.715-2.064 2.973-3.943 2.973-2.281 0-4.13-1.86-4.13-4.158A4.146 4.146 0 0 1 6.649 4.21c.041.177.103.354.186.53l.216.427a3.125 3.125 0 0 0-2.405 3.036c0 1.715 1.394 3.119 3.097 3.119a3.092 3.092 0 0 0 2.994-2.37l.557.28c.124.062.248.114.382.156h.01z\"\n                    fill=\"#6D7F8C\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default SidebarAssessment;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarAssessmentActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path d=\"M15.99 4.138a1.207 1.207 0 0 0-.64-.884l-1.714-.863L12.78.665a1.2 1.2 0 0 0-.877-.644 1.181 1.181 0 0 0-1.032.332L8.423 2.817c-.32.323-.402.811-.196 1.227L9.24 6.082l-.248.25-1.672 1.683a.517.517 0 0 0 0 .739.517.517 0 0 0 .361.156.5.5 0 0 0 .361-.156l1.673-1.685.247-.25 2.024 1.02a1.1 1.1 0 0 0 .474.114c.269 0 .537-.104.744-.312l2.446-2.464a1.21 1.21 0 0 0 .33-1.04h.01zm-.537 3.451c.02.208.03.406.03.614 0 4.304-3.468 7.797-7.741 7.797C3.468 16 0 12.507 0 8.203S3.468.405 7.742.405c.279 0 .557.021.836.052l-.929.936C3.954 1.435.97 4.47.97 8.203c0 3.732 3.035 6.82 6.772 6.82s6.575-2.88 6.761-6.477l.95-.957zm-3.768 1.799c-.506 1.715-2.064 2.973-3.943 2.973-2.281 0-4.13-1.86-4.13-4.158A4.146 4.146 0 0 1 6.649 4.21c.041.177.103.354.186.53l.216.427a3.125 3.125 0 0 0-2.405 3.036c0 1.715 1.394 3.119 3.097 3.119a3.092 3.092 0 0 0 2.994-2.37l.557.28c.124.062.248.114.382.156h.01z\" fill=\"#fff\"/>\n                <path d=\"m11 5 1.5-1.5\" stroke=\"#222431\" stroke-linecap=\"round\"/>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarAssessmentActive;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarReports = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14 15H2V1h8v4h4v10zm-.45-11L11 1.571V4h2.55zM10.8 0H1v16h14V4l-4.2-4z\" fill=\"#6D7F8C\"/>\n                <path fill=\"#6D7F8C\" d=\"M4 3h3v2H4zM4 8h2v1H4zM4 11h2v1H4zM8 8h4v1H8zM8 11h4v1H8z\"/>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarReports;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarReports = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0h9v5h5v11H1V0zm10 .19V4h4L11 .19zM4 3h4v2H4V3zm2 5H4v1h2V8zm-2 3h2v1H4v-1zm9-3H8v1h5V8zm-5 3h3v1H8v-1z\" fill=\"#fff\"/>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarReports;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarRoleplays = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg ref={ref} className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <g clip-path=\"url(#y25b9jn7ba)\" stroke=\"#6D7F8C\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M.469 2.797v8.11l2.577-1.84c.294-.21.647-.322 1.009-.322h5.668c.74 0 1.34-.6 1.34-1.34V1.455H1.81c-.74 0-1.34.6-1.34 1.341z\"/>\n                <path d=\"M12.938 5.093h1.253c.74 0 1.34.6 1.34 1.34v8.11l-2.577-1.838a1.737 1.737 0 0 0-1.008-.323H6.277c-.74 0-1.34-.6-1.34-1.341v-.42M8.787 4.012H3.37M8.787 6.2H3.37\"/>\n            </g>\n            <defs>\n                <clipPath id=\"y25b9jn7ba\">\n                    <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                </clipPath>\n            </defs>\n        </svg>\n        );\n    }\n);\n\nexport default SidebarRoleplays;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarRoleplaysActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg ref={ref} className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                <g clip-path=\"url(#gbq6l76f4a)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#fff\">\n                    <path d=\"M15.791 14.988a.5.5 0 0 0 .271-.445v-8.11a1.84 1.84 0 0 0-1.84-1.84H12.97a.5.5 0 1 0 0 1h1.252a.84.84 0 0 1 .84.84v7.14l-1.786-1.276a2.237 2.237 0 0 0-1.3-.415H6.309a.84.84 0 0 1-.84-.841v-.42a.5.5 0 0 0-1 0v.42a1.84 1.84 0 0 0 1.84 1.84h5.669c.257 0 .508.081.718.23l2.577 1.839a.5.5 0 0 0 .52.038z\" />\n                    <path d=\"M.79 11.357A.5.5 0 0 1 0 10.95V2.84A1.84 1.84 0 0 1 1.84 1h9.255a.5.5 0 0 1 .5.5v5.948a1.84 1.84 0 0 1-1.841 1.84H4.086c-.258 0-.509.08-.718.23L.79 11.357zm2.612-6.845a.5.5 0 0 1 0-1h5.416a.5.5 0 1 1 0 1H3.402zm0 2.188a.5.5 0 0 1 0-1h5.416a.5.5 0 1 1 0 1H3.402z\" />\n                </g>\n                <defs>\n                    <clipPath id=\"gbq6l76f4a\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default SidebarRoleplaysActive;\n","import { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport ROUTES from '../../../routes/routes';\nimport SidebarLibrary from '../../icons/SidebarLibrary';\nimport SidebarLibraryActive from '../../icons/SidebarLibraryActive';\nimport SidebarTeams from '../../icons/SidebarTeams';\nimport SidebarTeamsActive from '../../icons/SidebarTeamsActive';\nimport SidebarFeed from '../../icons/SidebarFeed';\nimport SidebarFeedActive from '../../icons/SidebarFeedActive';\nimport SidebarUsers from '../../icons/SidebarUsers';\nimport SidebarUsersActive from '../../icons/SidebarUsersActive';\nimport SidebarAssessment from '../../icons/SidebarAssessment';\nimport SidebarAssessmentActive from '../../icons/SidebarAssessmentActive';\nimport SidebarReports from '../../icons/SidebarReports';\nimport SidebarReportsActive from '../../icons/SidebarReportsActive';\nimport { SideBarMenuItem } from '../../layout/Sidebar/Sidebar';\nimport SidebarRoleplays from '../../icons/SidebarRoleplays';\nimport SidebarRoleplaysActive from '../../icons/SidebarRoleplaysActive';\n\nexport const initialDefaultSideBarMenuItems: SideBarMenuItem[] = [\n    {\n        name: 'Feed',\n        icon: SidebarFeed,\n        activeIcon: SidebarFeedActive,\n        url: ROUTES.SUBMISSIONS,\n        permissions: [NEW_PERMISSIONS.LIST_SUBMISSION],\n    },\n    {\n        name: 'Teams',\n        icon: SidebarTeams,\n        activeIcon: SidebarTeamsActive,\n        url: ROUTES.TEAMS,\n        permissions: [NEW_PERMISSIONS.LIST_PRACTIS_SET],\n    },\n    {\n        name: 'Training Log',\n        icon: SidebarAssessment,\n        activeIcon: SidebarAssessmentActive,\n        url: ROUTES.ORGANIZATION_ASSESSMENT_LOGS,\n        permissions: [NEW_PERMISSIONS.MANAGE_RECORDINGS],\n    },\n    {\n        name: 'Reports',\n        icon: SidebarReports,\n        activeIcon: SidebarReportsActive,\n        url: ROUTES.REPORTS.LIST_OF_REPORTS,\n        permissions: [NEW_PERMISSIONS.VIEW_USER_PRACTIS_SET_REPORT],\n    },\n    {\n        name: 'Library',\n        icon: SidebarLibrary,\n        activeIcon: SidebarLibraryActive,\n        url: ROUTES.LIBRARY,\n        permissions: [\n            NEW_PERMISSIONS.LIST_SCENARIO,\n            NEW_PERMISSIONS.LIST_CHALLENGE,\n            NEW_PERMISSIONS.LIST_PRACTIS_SET,\n        ],\n    },\n    {\n        name: 'Users',\n        icon: SidebarUsers,\n        activeIcon: SidebarUsersActive,\n        url: ROUTES.USERS,\n        alternateUrl: [ROUTES.INVITATIONS, ROUTES.DRAFTS],\n        permissions: [\n            NEW_PERMISSIONS.LIST_USER,\n            NEW_PERMISSIONS.LIST_INVITATION,\n        ],\n    },\n    {\n        name: 'Roleplay AI',\n        icon: SidebarRoleplays,\n        activeIcon: SidebarRoleplaysActive,\n        url: ROUTES.ROLEPLAYS.LIST_OF_ROLEPLAYS,\n    },\n];\n\n","import React, { memo, useEffect, useMemo, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { CssBaseline } from '@material-ui/core';\n\nimport Sidebar from '../../layout/Sidebar/Sidebar';\nimport Loading from '../../components/LoadingCopmonent/Loading';\nimport { ScrollPaginationContext } from '../../components/ScrollPagination';\nimport Header from '../../layout/Header/Header';\nimport { TableDivider } from '../../components/table-wrapper/table-divider';\nimport { MainWrapperProps } from './types';\nimport {\n    Content,\n    StyledContainer,\n    StyledTest,\n    WrapperContainer,\n} from './styles';\nimport { initialDefaultSideBarMenuItems } from './constants';\n\nexport const MainWrapper: React.FC<MainWrapperProps> = memo(\n    ({\n        children,\n        contentSize,\n        headerPadding,\n        headerMinHeight,\n        contentPadding,\n        title,\n        subTitle,\n        subHeader,\n        hideHeader,\n        loading,\n        sideBarMenuItems,\n        tabs,\n        goBackUrl,\n        useGoBack,\n        height,\n        headerHasBorder,\n        refreshComponent: RefreshComponent,\n        fontSize,\n        isScrollable = true,\n        htmlPageTitle = 'Practis Web Portal',\n        dataTest,\n        marginBottom\n    }) => {\n        const location = useLocation()\n        const mainRef = useRef<any>();\n        const spContext = useMemo(\n            () => ({ scrollableRef: mainRef }),\n            [mainRef]\n        );\n\n        \n        useEffect(() => {\n            document.title = htmlPageTitle;\n        }, [htmlPageTitle, location]);\n        \n\n        return (\n            <WrapperContainer data-test={dataTest}>\n                <CssBaseline />\n                <Sidebar\n                    menuItems={\n                        sideBarMenuItems || initialDefaultSideBarMenuItems\n                    }\n                    fontSize={fontSize}\n                />\n                <StyledTest\n                    id=\"MainScrollableContainer\"\n                    ref={mainRef}\n                    isScrollable={isScrollable}\n                >\n                    <Content height={height} contentPadding={contentPadding}>\n                        {!hideHeader && (\n                            <Header\n                                title={title}\n                                subTitle={subTitle}\n                                tabs={tabs}\n                                subHeader={subHeader}\n                                goBackUrl={goBackUrl}\n                                useGoBack={useGoBack}\n                                hasBorder={headerHasBorder}\n                                headerPadding={headerPadding}\n                                dataTest={dataTest}\n                                minHeight={headerMinHeight}\n                            />\n                        )}\n                        <MainWrapperContainer\n                            contentSize={contentSize}\n                            loading={loading}\n                            height={height}\n                            marginBottom={marginBottom}\n                        >\n                            {!hideHeader && <TableDivider hide={false} />}\n                            <ScrollPaginationContext.Provider value={spContext}>\n                                {children}\n                            </ScrollPaginationContext.Provider>\n                        </MainWrapperContainer>\n                    </Content>\n                </StyledTest>\n            </WrapperContainer>\n        );\n    }\n);\n\nexport const MainWrapperContainer: React.FC<{\n    contentSize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false;\n    loading?: boolean;\n    height?: string;\n    marginBottom?: string;\n}> = memo(({ contentSize, loading, height, children, marginBottom }) => {\n    return (\n        <StyledContainer\n            maxWidth={typeof contentSize !== 'undefined' ? contentSize : 'xl'}\n            height={height}\n            marginBottom={marginBottom}\n        >\n            <div>{loading ? <Loading /> : children}</div>\n        </StyledContainer>\n    );\n});\n\nexport default MainWrapper;","import { pickBy } from 'lodash';\n\nexport const isEmpty = (obj: any) => {\n    if (!obj) {\n        return false;\n    }\n    return Object.keys(obj).length === 0 && obj.constructor === Object;\n};\n\n/**\n * @description check if all object values are empty\n * @function isAllObjectValuesEmpty\n * @param { Record<string, unknown> } object\n * @returns { boolean }\n */\nexport const isAllObjectValuesEmpty = (\n    object: Record<string, unknown>\n): boolean => {\n    return Object.keys(object as any).every(function (item) {\n        return object[item] === '' || object[item] === null;\n    });\n};\n\n/**\n * @function removeNullValues\n * @param { Record<string, unknown> } object \n * @returns { Record<string, unknown> }\n */\nexport const removeNullValues = (\n    object: Record<string, unknown>\n): Record<string, unknown> => {\n    return pickBy(object, value => value);\n};\n","import { History } from 'history';\r\nimport { FC, useCallback, useContext, useEffect, useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { NavLink, Switch, useHistory } from 'react-router-dom';\r\nimport styled from 'styled-components';\r\nimport { isCompanyAdminRole, isPractisAdminRole, isTeamLeader, userRoleTitle } from '../../constants/enums';\r\nimport { NEW_PERMISSIONS } from '../../constants/enums/permissions';\r\nimport { UserV2 } from '../../constants/interfaces/User';\r\nimport PrivateRoute from '../../routes/PrivateRouter';\r\nimport ROUTES, { replaceUserId, useUserIdMatch } from '../../routes/routes';\r\nimport ProfileInfo from './components/ProfileInfo';\r\nimport Security from './components/Security';\r\nimport Notifications from './components/Notifications';\r\nimport { getProfileState } from './store/reducers';\r\nimport { useUploadPhotoService, useUpdateProfileService, useGetProfileService } from './store/services';\r\n\r\nimport { useFetchUser } from '../../features/users/store/services';\r\nimport {\r\n    getUserLoading,\r\n    getUserState,\r\n} from '../../features/users/store/reducers';\r\nimport { CompanyInterface } from '../../constants/interfaces/Company';\r\nimport { getCompanyState } from '../CompanySettings/store/reducers';\r\nimport { usePermissionsState } from '../../features/permissions/store/state';\r\nimport { WEB_SITE_ID, WebSiteIdContext } from '../../tools/constants/WebSiteId';\r\nimport ArrowRight from '../../ui/icons/ArrowRight';\r\nimport AvatarPlaceholder from '../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\r\nimport { Button } from '../../ui/components/Button';\r\nimport { TableDivider } from '../../ui/components/table-wrapper/table-divider';\r\nimport { Loading } from '../../ui/components/LoadingCopmonent';\r\nimport MainWrapper from '../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport { useUpdateUserPassword } from '../../api';\r\nimport { UpdatePasswordType } from '../../api/users/types';\r\nimport { useShowMessage } from '../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { ErrorResult } from '../../constants/interfaces/ErrorResult';\r\nimport { removeNullValues } from '../../helpers/functions/object-helpers';\r\n\r\nconst StyledUserProfile = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n`;\r\n\r\nexport const StyledProfileDescription = styled.div`\r\n    display: flex;\r\n    padding: 27px 0;\r\n    justify-content: space-between;\r\n`;\r\n\r\nexport const ProfileSection = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    margin-left: 32px;\r\n`;\r\n\r\nexport const ViewProfile = styled.div``;\r\n\r\nexport const StyledAvatar = styled.div`\r\n    height: 48px;\r\n    width: 48px;\r\n    border-radius: 4px;\r\n    background-color: ${props => props.theme.Colors.whiteFive};\r\n    img {\r\n        height: 100%;\r\n        width: 100%;\r\n        border-radius: 4px;\r\n        object-fit: cover;\r\n    }\r\n`;\r\n\r\nconst StyledDescription = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    text-align: left;\r\n    margin-left: 24px;\r\n    flex: 1;\r\n`;\r\n\r\nconst StyledProfileInfoWrapper = styled.div`\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    padding: 22px 0;\r\n`;\r\n\r\nconst StyledProfileInfo = styled.div`\r\n    display: flex;\r\n    flex: 3;\r\n    min-width: 200px;\r\n    margin-right: 32px;\r\n`;\r\n\r\nconst StyledProfileNavigation = styled.div`\r\n    width: 100%;\r\n`;\r\n\r\nconst NavigationItem = styled(NavLink)`\r\n    align-items: center;\r\n    padding: 0 20px 0 32px;\r\n    height: 64px;\r\n    text-decoration: none;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    display: flex;\r\n    border-radius: 4px;\r\n    background-color: ${props => props.theme.Colors.white};\r\n    margin-bottom: 16px;\r\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\r\n    &.is-active {\r\n        color: ${props => props.theme.Colors.black};\r\n        border: solid 1px ${props => props.theme.Colors.cloudyBlue};\r\n    }\r\n`;\r\n\r\nconst NavLinkText = styled.div`\r\n    flex: 1;\r\n    margin: auto;\r\n`;\r\n\r\nconst NavLinkIcon = styled(ArrowRight)`\r\n    cursor: pointer;\r\n    margin-left: 15px;\r\n    width: 8px;\r\n    height: 8px;\r\n    display: flex;\r\n`;\r\n\r\nconst StyledProfileContent = styled.div`\r\n    flex: 5;\r\n    padding: 40px 39.5px;\r\n    border-radius: 4px;\r\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\r\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\r\n    min-height: 600px;\r\n`;\r\n\r\nconst StyledLoadingContent = styled.div`\r\n    padding: 20px 40px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n`;\r\n\r\nconst UserRole = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst Title = styled.div`\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    color: ${props => props.theme.Colors.black};\r\n`;\r\n\r\nconst Address = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    margin: 0;\r\n    color: var(--ps-grey-1);\r\n`;\r\n\r\nexport const UserProfile: FC<{\r\n    history: History;\r\n    userId: number | 'me';\r\n    profile?: UserV2;\r\n    loading?: boolean;\r\n    self?: boolean;\r\n    profileRoute: string;\r\n    securityRoute: string;\r\n    notificationsRoute: string;\r\n    company?: CompanyInterface;\r\n    isPhotoUploading: boolean;\r\n    updateUserProfile(data: UserV2, userId: number): void;\r\n    uploadUserPicture(userId: number, file: File): void;\r\n    deleteUser?(userId: number): void;\r\n}> = ({\r\n    history,\r\n    company,\r\n    userId,\r\n    profile,\r\n    loading,\r\n    self,\r\n    profileRoute,\r\n    securityRoute,\r\n    notificationsRoute,\r\n    isPhotoUploading,\r\n    updateUserProfile,\r\n    uploadUserPicture,\r\n    deleteUser,\r\n}) => {\r\n    const updateUserPassword = useUpdateUserPassword();\r\n    const showMessage = useShowMessage();\r\n    const portal = useContext(WebSiteIdContext);\r\n    const permissions = usePermissionsState();\r\n    const editable = self || permissions.includes(NEW_PERMISSIONS.UPDATE_USER);\r\n    const canUpdatePassword =\r\n        self || permissions.includes(NEW_PERMISSIONS.SET_USER_PASSWORD);\r\n    const isPractisAdmin = isPractisAdminRole(profile?.role?.name);\r\n\r\n    const notificationsAllowed =\r\n        isTeamLeader(profile?.role?.name) || isCompanyAdminRole(profile?.role?.name);\r\n    const isLoading =\r\n        self || (profile && userId === profile.id) ? false : loading;\r\n    const isSSOAuth = company?.isSSOEnabled;\r\n\r\n    const prevCompanyRef = useRef(company);\r\n    useEffect(() => {\r\n        prevCompanyRef.current = company;\r\n    });\r\n    const prevCompany = prevCompanyRef.current;\r\n\r\n    useEffect(() => {\r\n        if (\r\n            !company ||\r\n            !(company && company.id) ||\r\n            !prevCompany ||\r\n            !(prevCompany && prevCompany.id)\r\n        )\r\n            return;\r\n        if (company.id !== prevCompany.id && userId !== 'me') {\r\n            history.push(ROUTES.USERS);\r\n        }\r\n    }, [company, prevCompany, history, userId]);\r\n\r\n    const handleViewProfile = useCallback(() => {\r\n        if (!profile) return;\r\n\r\n        if (permissions.includes(NEW_PERMISSIONS.VIEW_USER_PERFORMANCE)) {\r\n            history.push(\r\n                ROUTES.USER_PERFORMANCE.replace(\r\n                    ':userId',\r\n                    profile.id!.toString()\r\n                ),\r\n                { useGoBack: true }\r\n            );\r\n        }\r\n    }, [profile, history, permissions]);\r\n\r\n    /**\r\n     * @function handleUpdateUserPassword\r\n     * @param { UpdatePasswordType } data\r\n     * @param { number } userId\r\n     * @returns { Promise<void>  }\r\n     */\r\n    const handleUpdateUserPassword = async (\r\n        data: UpdatePasswordType,\r\n        userId: number\r\n    ): Promise<void> => {\r\n        await updateUserPassword(\r\n            userId,\r\n            removeNullValues(data) as UpdatePasswordType\r\n        )\r\n            .then(() => {\r\n                showMessage('Profile Updated!', 'success');\r\n            })\r\n            .catch((error: ErrorResult) => {\r\n                error.message && showMessage(error.message, 'error');\r\n            });\r\n    };\r\n\r\n    return (\r\n        <StyledUserProfile>\r\n            <StyledProfileDescription>\r\n                <ProfileSection>\r\n                    <StyledAvatar>\r\n                        <AvatarPlaceholder\r\n                            profile={profile}\r\n                            loading={isLoading}\r\n                            size=\"default\"\r\n                            dataTest=\"user-profile-avatar\"\r\n                        />\r\n                    </StyledAvatar>\r\n                    <StyledDescription>\r\n                        {!isLoading && (\r\n                            <UserRole data-test=\"user-profile-role\">\r\n                                {userRoleTitle(profile)}\r\n                            </UserRole>\r\n                        )}\r\n                        {!isLoading && (\r\n                            <Title data-test=\"user-profile-full-name\">\r\n                                {profile && profile.firstName}{' '}\r\n                                {profile && profile.lastName}\r\n                            </Title>\r\n                        )}\r\n                        {!isLoading && (\r\n                            <Address data-test=\"user-profile-email\">\r\n                                {profile && profile.email}\r\n                            </Address>\r\n                        )}\r\n                    </StyledDescription>\r\n                </ProfileSection>\r\n                {portal === WEB_SITE_ID.COMPANY_PORTAL && (\r\n                    <ViewProfile>\r\n                        <Button\r\n                            label={'View Profile'}\r\n                            width={'136px'}\r\n                            height={'40px'}\r\n                            action={handleViewProfile}\r\n                        />\r\n                    </ViewProfile>\r\n                )}\r\n            </StyledProfileDescription>\r\n            <TableDivider />\r\n            <StyledProfileInfoWrapper>\r\n                <StyledProfileInfo>\r\n                    <StyledProfileNavigation>\r\n                        <NavigationItem\r\n                            to={replaceUserId(profileRoute, userId)}\r\n                            activeClassName={'is-active'}\r\n                            exact\r\n                            data-test=\"edit-details\"\r\n                        >\r\n                            <NavLinkText>Edit User Details</NavLinkText>\r\n                            <NavLinkIcon />\r\n                        </NavigationItem>\r\n                        {editable && canUpdatePassword && (profile && !isPractisAdmin) && !isSSOAuth && (\r\n                            <NavigationItem\r\n                                to={replaceUserId(securityRoute, userId)}\r\n                                activeClassName={'is-active'}\r\n                                exact\r\n                                data-test=\"change-password\"\r\n                            >\r\n                                <NavLinkText>Change Password</NavLinkText>\r\n                                <NavLinkIcon />\r\n                            </NavigationItem>\r\n                        )}\r\n                        {editable && notificationsAllowed && (\r\n                            <NavigationItem\r\n                                to={replaceUserId(notificationsRoute, userId)}\r\n                                activeClassName={'is-active'}\r\n                                exact\r\n                                data-test=\"notifications\"\r\n                            >\r\n                                <NavLinkText>Notifications</NavLinkText>\r\n                                <NavLinkIcon />\r\n                            </NavigationItem>\r\n                        )}\r\n                    </StyledProfileNavigation>\r\n                </StyledProfileInfo>\r\n                <StyledProfileContent>\r\n                    {!isLoading && profile ? (\r\n                        <Switch>\r\n                            <PrivateRoute path={profileRoute} exact>\r\n                                <ProfileInfo\r\n                                    profile={profile}\r\n                                    company={company}\r\n                                    editable={editable}\r\n                                    updateUserProfile={updateUserProfile}\r\n                                    uploadUserPicture={uploadUserPicture}\r\n                                    deleteUser={deleteUser}\r\n                                    self={self}\r\n                                    dataTest={'user-profile'}\r\n                                    isPhotoUploading={isPhotoUploading}\r\n                                />\r\n                            </PrivateRoute>\r\n                            {editable && (\r\n                                <PrivateRoute path={securityRoute} exact>\r\n                                    <Security\r\n                                        profile={profile}\r\n                                        updateUserPassword={\r\n                                            handleUpdateUserPassword\r\n                                        }\r\n                                        dataTest={'change-password'}\r\n                                    />\r\n                                </PrivateRoute>\r\n                            )}\r\n                            {editable && notificationsAllowed && (\r\n                                <PrivateRoute path={notificationsRoute} exact>\r\n                                    <Notifications userId={profile.id} />\r\n                                </PrivateRoute>\r\n                            )}\r\n                        </Switch>\r\n                    ) : (\r\n                        <StyledLoadingContent>\r\n                            <Loading />\r\n                        </StyledLoadingContent>\r\n                    )}\r\n                </StyledProfileContent>\r\n            </StyledProfileInfoWrapper>\r\n        </StyledUserProfile>\r\n    );\r\n};\r\n\r\nexport const UserProfileContainer: FC = () => {\r\n    const history = useHistory();\r\n    const company = useSelector(getCompanyState);\r\n    const userId = useUserIdMatch();\r\n    const meProfile = useSelector(getProfileState);\r\n    const user = useSelector(getUserState);\r\n    const userLoading = useSelector(getUserLoading);\r\n    const getProfile = useGetProfileService();\r\n    const updateProfileService = useUpdateProfileService();\r\n    const fetchUser = useFetchUser();\r\n    const uploadPhoto = useUploadPhotoService();\r\n    const showMessage = useShowMessage();\r\n    const [isPhotoUploading, setIsPhotoUploading] = useState(false);\r\n\r\n    let self =\r\n        (meProfile && user && meProfile.id === user.id) ?? false;\r\n\r\n    let targetUser = self ? meProfile || user : user;\r\n\r\n    if (typeof userId === 'number' && targetUser && targetUser.id !== userId) {\r\n        targetUser = undefined;\r\n        self = false;\r\n    }\r\n\r\n    /**\r\n     * @function fetchUserSettingData\r\n     * @returns { void }\r\n     */\r\n    const fetchUserSettingData = useCallback(() => {\r\n        fetchUser(userId === 'me' ? meProfile?.id! : (userId as number));\r\n    }, [fetchUser, meProfile?.id, userId]);\r\n\r\n    /**\r\n     * @function handleUpdateUserSuccess\r\n     * @param { number } userId\r\n     * @returns { void }\r\n     */\r\n     const handleUpdateUserSuccess = useCallback((userId: number) => {\r\n        if (userId === meProfile?.id) {\r\n            return getProfile();\r\n        }\r\n        return fetchUser(userId);\r\n    }, [meProfile?.id, getProfile, fetchUser]);\r\n\r\n\r\n    /**\r\n     * @function handleUpdateUserProfileInfo\r\n     * @returns { void }\r\n     */\r\n    const handleUpdateUserProfileInfo = useCallback(\r\n        (data: UserV2, userId: number) => {\r\n            updateProfileService(data, userId, self, true)\r\n                .then(() => handleUpdateUserSuccess(userId));\r\n        },\r\n        [updateProfileService, self, handleUpdateUserSuccess]\r\n    );\r\n\r\n    /**\r\n     * @function handleUpdateUserProfilePicture\r\n     * @returns { void }\r\n     */\r\n    const handleUpdateUserProfilePicture = useCallback(\r\n        (userId: number, file: File) => {\r\n            setIsPhotoUploading(true);\r\n            uploadPhoto(userId, file)\r\n                .then(() => handleUpdateUserSuccess(userId))\r\n                .catch(() => {\r\n                    setIsPhotoUploading(false);\r\n                    return Promise.reject();\r\n                })\r\n                .then(() => {\r\n                    setIsPhotoUploading(false);\r\n                    showMessage('Image Uploaded!', 'success');\r\n                });\r\n        },\r\n        [uploadPhoto, handleUpdateUserSuccess, showMessage]\r\n    );\r\n\r\n    useEffect(() => {\r\n        if (typeof userId === 'number' || meProfile?.id) fetchUserSettingData();\r\n    }, [fetchUserSettingData, meProfile?.id, userId]);\r\n\r\n    return (\r\n        <MainWrapper\r\n            goBackUrl={ROUTES.USERS}\r\n            subTitle=\"User Settings\"\r\n            htmlPageTitle={`User Settings ${\r\n                targetUser\r\n                    ? `- ${targetUser.firstName} ${targetUser.lastName}`\r\n                    : ''\r\n            } - Practis`}\r\n            useGoBack={true}\r\n            dataTest=\"user-settings\"\r\n        >\r\n            <UserProfile\r\n                history={history}\r\n                company={company}\r\n                userId={userId}\r\n                profile={targetUser}\r\n                loading={userLoading}\r\n                self={self}\r\n                profileRoute={ROUTES.PROFILE}\r\n                securityRoute={ROUTES.PROFILE_SETTINGS.SECURITY}\r\n                notificationsRoute={ROUTES.PROFILE_SETTINGS.NOTIFICATIONS}\r\n                isPhotoUploading={isPhotoUploading}\r\n                updateUserProfile={handleUpdateUserProfileInfo}\r\n                uploadUserPicture={handleUpdateUserProfilePicture}\r\n            />\r\n        </MainWrapper>\r\n    );\r\n};\r\n\r\nexport default UserProfileContainer;\r\n","export default __webpack_public_path__ + \"static/media/404.c3f1226a.svg\";","import styled from 'styled-components';\nimport { NavLink } from 'react-router-dom';\nimport ROUTES from '../../../routes/routes';\nimport { getCopyrightYear } from '../../../helpers/functions/date-convert';\n\nconst StyledFooterContainer = styled.div`\n    background: ${props => props.theme.Colors.lighterGray};\n    padding: 30px 50px;\n`;\n\nconst StyledTermsRow = styled.div`\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n`;\n\nconst StyledTermsItems = styled(NavLink)`\n    color: ${props => props.theme.Colors.coolGray};\n    font-size: 14px;\n    line-height: 1.14;\n    letter-spacing: normal;\n    margin-right: 40px;\n    text-decoration: none;\n`;\n\nconst Footer = () => {\n    return (\n        <StyledFooterContainer>\n            <StyledTermsRow>\n                <div>\n                    <StyledTermsItems to=\"#\">\n                        © Practis {getCopyrightYear()}\n                    </StyledTermsItems>\n                </div>\n                <div>\n                    <StyledTermsItems to={ROUTES.SUPPORT}>\n                        Support\n                    </StyledTermsItems>\n                    <StyledTermsItems to={ROUTES.TERMS}>\n                        Terms & Conditions\n                    </StyledTermsItems>\n                    <StyledTermsItems to={ROUTES.PRIVACY}>\n                        Privacy Policy\n                    </StyledTermsItems>\n                </div>\n            </StyledTermsRow>\n        </StyledFooterContainer>\n    );\n};\n\nexport default Footer;\n","import styled from 'styled-components';\n\nimport { Button } from '../../../components/Button';\nimport ROUTES from '../../../../routes/routes';\nimport Logo from '../../../components/Logo/Logo';\nimport { Variables } from '../../../../theme/variables';\n\nexport interface LandingHeaderInterface {\n    withAction?: boolean;\n    history?: any;\n}\n\nconst StyledLandingHeader = styled.div`\n    padding: 0 50px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    flex-wrap: wrap;\n`;\n\nconst StyledLogoContainer = styled.div`\n    width: 172px;\n    height: 42px;\n    padding: 24px 0;\n`;\n\nconst StyledLogo = styled(Logo)`\n    cursor: pointer;\n    max-width: 100%;\n`;\n\nconst StyledActionPanel = styled.div`\n    padding: 24px 0;\n    display: flex;\n`;\n\nconst LandingHeader = ({ withAction, history }: LandingHeaderInterface) => {\n    const handleCreateProfile = () => {\n        history.push(ROUTES.AUTH_PAGES.REGISTER);\n    };\n\n    const handleLogin = () => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    };\n\n    const handleGoToHome = () => {\n        history.push(ROUTES.LANDING);\n    };\n\n    return (\n        <StyledLandingHeader>\n            <StyledLogoContainer>\n                <StyledLogo\n                    onClick={handleGoToHome}\n                    height={40}\n                    color={Variables.Colors.black}\n                />\n            </StyledLogoContainer>\n            {withAction && (\n                <StyledActionPanel>\n                    <Button\n                        variant=\"inverse\"\n                        style={{\n                            minWidth: 130,\n                            padding: '0 20px',\n                            marginRight: 20,\n                        }}\n                        action={handleCreateProfile}\n                    >\n                        Create Profile\n                    </Button>\n                    <Button\n                        style={{ minWidth: 90, fontSize: 14 }}\n                        action={handleLogin}\n                    >\n                        Login\n                    </Button>\n                </StyledActionPanel>\n            )}\n        </StyledLandingHeader>\n    );\n};\n\nexport default LandingHeader;\n","import React, { useEffect } from 'react';\nimport { RouteComponentProps, withRouter } from 'react-router';\nimport Footer from '../../layout/Footer/Footer';\nimport styled from 'styled-components';\nimport LandingHeader from './LandingHeader/LandingHeader';\n\nexport interface LandingWrapperInterface {\n    children: any;\n    contentSize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false;\n    title?: string;\n    withAction?: boolean;\n    height?: string;\n    className?: string;\n}\n\nconst StyledLandingContainer = styled.div`\n    display: flex;\n    align-items: stretch;\n    flex-direction: column;\n    height: 100vh;\n    background: ${props => props.theme.Colors.white};\n    overflow: auto;\n`;\nconst StyledLandingContent = styled.div<any>`\n    flex: 1;\n    display: flex;\n`;\n\nconst LandingWrapper = ({\n    children,\n    history,\n    withAction,\n    className,\n}: LandingWrapperInterface & RouteComponentProps) => {\n    useEffect(() => {\n        window.scrollTo(0, 0);\n    }, []);\n\n    return (\n        <StyledLandingContainer>\n            <LandingHeader withAction={withAction} history={history} />\n            <StyledLandingContent className={className}>\n                {children}\n            </StyledLandingContent>\n            <Footer />\n        </StyledLandingContainer>\n    );\n};\n\nexport default withRouter(LandingWrapper);\n","import React from 'react';\nimport styled from 'styled-components';\nimport NotFoundImage from '../../assets/images/404.svg';\nimport ROUTES from '../../routes/routes';\nimport { Button } from '../../ui/components/Button';\nimport LandingWrapper from '../../ui/wrapper/LandingWrapper/LandingWrapper';\n\nexport interface NotFoundPageInterface {\n    history?: any;\n}\n\nconst NotFoundContainer = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    min-height: 450px;\n    justify-content: center;\n    display: flex;\n    height: 100%;\n    padding: 0 50px;\n    text-align: center;\n`;\nconst StyledNotFoundImageContainer = styled.div`\n    max-width: 600px;\n    margin-bottom: 40px;\n`;\nconst StyledNotFoundImage = styled.img`\n    max-width: 100%;\n`;\nconst StyledNotFoundHeader = styled.h1`\n    font-size: 36px;\n    font-weight: bold;\n    letter-spacing: 0.5px;\n    color: ${props => props.theme.Colors.dark};\n    margin: 0;\n    margin-bottom: 30px;\n`;\nconst StyledActionContainer = styled.div`\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst NotFoundPage = ({ history }: NotFoundPageInterface) => {\n    const handleGoBack = () => {\n        history.push(ROUTES.TEAMS);\n    };\n\n    return (\n        <LandingWrapper height={'450px'}>\n            <NotFoundContainer>\n                <StyledNotFoundImageContainer>\n                    <StyledNotFoundImage src={NotFoundImage} />\n                </StyledNotFoundImageContainer>\n                <StyledNotFoundHeader>\n                    Looks like you found a dead end, we’ll try to fix this.\n                </StyledNotFoundHeader>\n                <StyledActionContainer>\n                    <Button\n                        style={{\n                            minWidth: 110,\n                            padding: '0 15px',\n                            marginRight: 20,\n                        }}\n                        action={handleGoBack}\n                    >\n                        Go Back\n                    </Button>\n                </StyledActionContainer>\n            </NotFoundContainer>\n        </LandingWrapper>\n    );\n};\n\nexport default NotFoundPage;\n","export default __webpack_public_path__ + \"static/media/LandingCard1.ec958756.png\";","export default __webpack_public_path__ + \"static/media/LandingCard2.3619aa7d.png\";","export default __webpack_public_path__ + \"static/media/LandingCard3.f13aba15.png\";","import React from 'react';\n\nexport function getBrowserVisibilityProp() {\n    if (typeof document.hidden !== 'undefined') {\n        // Opera 12.10 and Firefox 18 and later support\n        return 'visibilitychange';\n        // @ts-ignore\n    } else if (typeof document.msHidden !== 'undefined') {\n        return 'msvisibilitychange';\n        // @ts-ignore\n    } else if (typeof document.webkitHidden !== 'undefined') {\n        return 'webkitvisibilitychange';\n    } else {\n        return 'default';\n    }\n}\nexport function getBrowserDocumentHiddenProp() {\n    if (typeof document.hidden !== 'undefined') {\n        return 'hidden';\n        // @ts-ignore\n    } else if (typeof document.msHidden !== 'undefined') {\n        return 'msHidden';\n        // @ts-ignore\n    } else if (typeof document.webkitHidden !== 'undefined') {\n        return 'webkitHidden';\n    } else {\n        return false;\n    }\n}\nexport function getIsDocumentHidden() {\n    const browserHidden = getBrowserDocumentHiddenProp();\n\n    return browserHidden && !document[browserHidden as 'hidden'];\n}\n\nexport const usePageVisibility = () => {\n    const [isVisible, setIsVisible] = React.useState(getIsDocumentHidden());\n    const onVisibilityChange = () => setIsVisible(getIsDocumentHidden());\n    React.useEffect(() => {\n        const visibilityChange = getBrowserVisibilityProp();\n        window.addEventListener(visibilityChange, onVisibilityChange, false);\n        return () => {\n            window.removeEventListener(visibilityChange, onVisibilityChange);\n        };\n    });\n    return isVisible;\n};\n\nexport default usePageVisibility;\n","import { Team, TeamV2 } from '../../../constants/interfaces/Team';\r\nimport { PaginationResult, ListResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\r\nimport { TrainingPractisSet } from '../../../constants/interfaces/TrainingPractisSet';\r\nimport { UserV2 } from '../../../constants/interfaces/User';\r\nimport {\r\n    EnrollmentDailyTraining,\r\n    EnrollmentInterface,\r\n    EnrollmentProgress,\r\n    Enrollments,\r\n} from '../../../constants/interfaces/Enrollments';\r\nimport { Label } from '../../../constants/interfaces/Label';\r\nimport { Action } from 'redux';\r\nimport { TeamMember } from '../../../constants/interfaces/TeamMember';\r\nimport { TeamLeader } from '../../../constants/interfaces/TeamLeader';\r\n\r\nexport enum ACTIONS {\r\n    // Create new team start\r\n    SEARCH_SINGLE_TEAM_START = 'SEARCH_SINGLE_TEAM_START',\r\n    SEARCH_SINGLE_TEAM_SUCCESS = 'SEARCH_SINGLE_TEAM_SUCCESS',\r\n    SEARCH_SINGLE_TEAM_FAILURE = 'SEARCH_SINGLE_TEAM_FAILURE',\r\n    SEARCH_SINGLE_TEAM_ALL_USERS_START = 'SEARCH_SINGLE_TEAM_ALL_USERS_START',\r\n    SEARCH_SINGLE_TEAM_ALL_USERS_SUCCESS = 'SEARCH_SINGLE_TEAM_ALL_USERS_SUCCESS',\r\n    SEARCH_SINGLE_TEAM_ALL_USERS_FAILURE = 'SEARCH_SINGLE_TEAM_ALL_USERS_FAILURE',\r\n    SEARCH_SINGLE_TEAM_MEMBERS_START = 'SEARCH_SINGLE_TEAM_MEMBERS_START',\r\n    SEARCH_SINGLE_TEAM_MEMBERS_SUCCESS = 'SEARCH_SINGLE_TEAM_MEMBERS_SUCCESS',\r\n    SEARCH_SINGLE_TEAM_MEMBERS_FAILURE = 'SEARCH_SINGLE_TEAM_MEMBERS_FAILURE',\r\n    MODIFY_TEAM_NAME = 'MODIFY_TEAM_NAME',\r\n    UPDATE_TEAM_LEAD = 'UPDATE_TEAM_LEAD',\r\n    SET_ASSIGNED_LABELS_TO_SINGLE_TEAM = 'SET_ASSIGNED_LABELS_TO_SINGLE_TEAM',\r\n    SET_DELETED_LABELS_TO_SINGLE_TEAM = 'SET_DELETED_LABELS_TO_SINGLE_TEAM',\r\n    RESET_SINGLE_TEAM_PAGE = 'RESET_SINGLE_TEAM_PAGE',\r\n    REMOVE_SINGLE_TEAM_ALL_USERS_LABEL = 'REMOVE_SINGLE_TEAM_ALL_USERS_LABEL',\r\n    REMOVE_SINGLE_TEAM_MEMBER_LABEL = 'REMOVE_SINGLE_TEAM_MEMBER_LABEL',\r\n\r\n    CREATE_SINGLE_TEAM_SUCCESS = 'CREATE_SINGLE_TEAM_SUCCESS',\r\n\r\n    UPDATE_SINGLE_TEAM_START = 'UPDATE_SINGLE_TEAM_START',\r\n    UPDATE_SINGLE_TEAM_SUCCESS = 'UPDATE_SINGLE_TEAM_SUCCESS',\r\n    UPDATE_SINGLE_TEAM_FAILURE = 'UPDATE_SINGLE_TEAM_FAILURE',\r\n    UPDATE_SINGLE_TEAM_STOP = 'UPDATE_SINGLE_TEAM_STOP',\r\n\r\n    CLEAR_TEAM_UPDATE_STATUS = 'CLEAR_TEAM_UPDATE_STATUS',\r\n\r\n    FETCH_ALL_TEAMS = 'FETCH_ALL_TEAMS',\r\n    FETCH_ALL_TEAMS_SUCCESS = 'FETCH_ALL_TEAMS_SUCCESS',\r\n    FETCH_ALL_TEAMS_FAILURE = 'FETCH_ALL_TEAMS_FAILURE',\r\n\r\n    UPDATE_SELECTED_TEAM_STATE = 'UPDATE_SELECTED_TEAM_STATE',\r\n    UPDATE_ALL_SELECTED_TEAMS_STATE = 'UPDATE_ALL_SELECTED_TEAMS_STATE',\r\n\r\n    UPDATE_TEAM_START = 'UPDATE_TEAM_START',\r\n    UPDATE_TEAM_SUCCESS = 'UPDATE_TEAM_SUCCESS',\r\n    UPDATE_TEAM_FAILURE = 'UPDATE_TEAM_FAILURE',\r\n\r\n    UPDATE_TRAINEE_DUE_DATE = 'UPDATE_TRAINEE_DUE_DATE',\r\n\r\n    UPDATE_ALL_SELECTED_TEAM_PRACTIS_SETS_STATE = 'UPDATE_ALL_SELECTED_TEAM_PRACTIS_SETS_STATE',\r\n    UPDATE_SELECTED_TEAM_PRACTIS_SET_STATE = 'UPDATE_SELECTED_TEAM_PRACTIS_SET_STATE',\r\n    UPDATE_TEAM_PROGRESS_SUCCESS = 'UPDATE_TEAM_PROGRESS_SUCCESS',\r\n\r\n    SEARCH_TEAM_PRACTIS_SETS_START = 'SEARCH_TEAM_PRACTIS_SETS_START',\r\n    SEARCH_TEAM_PRACTIS_SETS_SUCCESS = 'SEARCH_TEAM_PRACTIS_SETS_SUCCESS',\r\n    SEARCH_TEAM_PRACTIS_SETS_FAILURE = 'SEARCH_TEAM_PRACTIS_SETS_FAILURE',\r\n\r\n    SEARCH_TRAINER_PRACTIS_SETS_START = 'SEARCH_TRAINER_PRACTIS_SETS',\r\n    SEARCH_TRAINER_PRACTIS_SETS_SUCCESS = 'SEARCH_TRAINER_PRACTIS_SETS_SUCCESS',\r\n    SEARCH_TRAINER_PRACTIS_SETS_FAILURE = 'SEARCH_TRAINER_PRACTIS_SETS_FAILURE',\r\n\r\n    UPDATE_PROGRESS_START = 'UPDATE_PROGRESS_START',\r\n    UPDATE_PROGRESS_SUCCESS = 'UPDATE_PROGRESS_SUCCESS',\r\n    UPDATE_PROGRESS_FAILURE = 'UPDATE_PROGRESS_FAILURE',\r\n\r\n    SEARCH_TRAINER_PRACTIS_USERS_START = 'SEARCH_TRAINER_PRACTIS_USERS_START',\r\n    SEARCH_TRAINER_PRACTIS_USERS_SUCCESS = 'SEARCH_TRAINER_PRACTIS_USERS_SUCCESS',\r\n    SEARCH_TRAINER_PRACTIS_USERS_FAILURE = 'SEARCH_TRAINER_PRACTIS_USERS_FAILURE',\r\n    CLEAR_TRAINER_PRACTIS_SETS_SUCCESS = 'CLEAR_TRAINER_PRACTIS_SETS_SUCCESS',\r\n\r\n    SEARCH_TRAINER_INVITATION_USERS_START = 'SEARCH_TRAINER_INVITATION_USERS_START',\r\n    SEARCH_TRAINER_INVITATION_USERS_SUCCESS = 'SEARCH_TRAINER_INVITATION_USERS_SUCCESS',\r\n    SEARCH_TRAINER_INVITATION_USERS_FAILURE = 'SEARCH_TRAINER_INVITATION_USERS_FAILURE',\r\n\r\n    SEND_TRAINEE_INVITATION_START = 'SEND_TRAINEE_INVITATION_START',\r\n    SEND_TRAINEE_INVITATION_SUCCESS = 'SEND_TRAINEE_INVITATION_SUCCESS',\r\n    SEND_TRAINEE_INVITATION_FAILURE = 'SEND_TRAINEE_INVITATION_FAILURE',\r\n    UPDATE_SELECTED_INVITATION_TRAINEES_STATE = 'UPDATE_SELECTED_INVITATION_TRAINEES_STATE',\r\n    UPDATE_ALL_SELECTED_INVITATION_TRAINEES_STATE = 'UPDATE_ALL_SELECTED_INVITATION_TRAINEES_STATE',\r\n\r\n    GET_PRACTIS_SET_REPORT_START = 'GET_PRACTIS_SET_REPORT_START',\r\n    GET_PRACTIS_SET_REPORT_SUCCESS = 'GET_PRACTIS_SET_REPORT_SUCCESS',\r\n    GET_PRACTIS_SET_REPORT_FAILURE = 'GET_PRACTIS_SET_REPORT_FAILURE',\r\n    RESET_PRACTIS_SET_REPORT = 'RESET_PRACTIS_SET_REPORT',\r\n    RESET_PRACTIS_SET_DETAILS = 'RESET_PRACTIS_SET_DETAILS',\r\n\r\n    GET_PRACTIS_SET_START = 'GET_PRACTIS_SET_START',\r\n    GET_PRACTIS_SET_SUCCESS = 'GET_PRACTIS_SET_SUCCESS',\r\n    GET_PRACTIS_SET_FAILURE = 'GET_PRACTIS_SET_FAILURE',\r\n\r\n    CHECK_ALL_PROGRESS = 'CHECK_ALL_PROGRESS',\r\n    CHECK_SINGLE_PROGRESS = 'CHECK_SINGLE_PROGRESS',\r\n\r\n    UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE = 'UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE',\r\n    UPDATE_SELECTED_PRACTIS_SET_STATE = 'UPDATE_SELECTED_PRACTIS_SET_STATE',\r\n\r\n    UPDATE_MEMBER_START = 'UPDATE_MEMBER_START',\r\n    UPDATE_MEMBER_SUCCESS = 'UPDATE_MEMBER_SUCCESS',\r\n    UPDATE_MEMBER_FAILURE = 'UPDATE_MEMBER_FAILURE',\r\n\r\n    GET_TEAM_INFO_START = 'GET_TEAM_INFO_START',\r\n    GET_TEAM_INFO_SUCCESS = 'GET_TEAM_INFO_SUCCESS',\r\n    GET_TEAM_INFO_FAILURE = 'GET_TEAM_INFO_FAILURE',\r\n    RESET_TEAM_INFO = 'RESET_TEAM_INFO',\r\n\r\n    GET_TEAM_INFO_TRAINING_START = 'GET_TEAM_INFO_TRAINING_START',\r\n    GET_TEAM_INFO_TRAINING_SUCCESS = 'GET_TEAM_INFO_TRAINING_SUCCESS',\r\n    GET_TEAM_INFO_TRAINING_FAILURE = 'GET_TEAM_INFO_TRAINING_FAILURE',\r\n\r\n    SEARCH_TEAM_MEMBERS_START = 'SEARCH_TEAM_MEMBERS_START',\r\n    SEARCH_TEAM_MEMBERS_SUCCESS = 'SEARCH_TEAM_MEMBERS_SUCCESS',\r\n    SEARCH_TEAM_MEMBERS_FAILURE = 'SEARCH_TEAM_MEMBERS_FAILURE',\r\n\r\n    SEARCH_TEAM_LEADERS_START = 'SEARCH_TEAM_LEADERS_START',\r\n    SEARCH_TEAM_LEADERS_SUCCESS = 'SEARCH_TEAM_LEADERS_SUCCESS',\r\n    SEARCH_TEAM_LEADERS_FAILURE = 'SEARCH_TEAM_LEADERS_FAILURE',\r\n    SELECT_TEAM_LEADER = 'SELECT_TEAM_LEADER',\r\n    SELECT_MULTIPLE_TEAM_LEADERS = 'SELECT_MULTIPLE_TEAM_LEADERS',\r\n    RESET_TEAM_LEADERS_SELECTION = 'RESET_TEAM_LEADERS_SELECTION',\r\n    DESELECT_ALL_TEAM_LEADERS_SELECTION = 'DESELECT_ALL_TEAM_LEADERS_SELECTION',\r\n    SAVE_TEAM_LEADERS_SELECTION = 'SAVE_TEAM_LEADERS_SELECTION',\r\n}\r\n\r\nexport function searchSingleTeamStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_START as ACTIONS.SEARCH_SINGLE_TEAM_START,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamSuccess(data: TeamV2) {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_SUCCESS as ACTIONS.SEARCH_SINGLE_TEAM_SUCCESS,\r\n        data,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamFailure(error: any) {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_FAILURE as ACTIONS.SEARCH_SINGLE_TEAM_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function getTeamInfoStart() {\r\n    return {\r\n        type: ACTIONS.GET_TEAM_INFO_START as ACTIONS.GET_TEAM_INFO_START,\r\n    };\r\n}\r\n\r\nexport function getTeamInfoSuccess(data: TeamV2) {\r\n    return {\r\n        type: ACTIONS.GET_TEAM_INFO_SUCCESS as ACTIONS.GET_TEAM_INFO_SUCCESS,\r\n        data,\r\n    };\r\n}\r\n\r\nexport function getTeamInfoFailure(error: any) {\r\n    return {\r\n        type: ACTIONS.GET_TEAM_INFO_FAILURE as ACTIONS.GET_TEAM_INFO_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function resetTeamInfo() {\r\n    return {\r\n        type: ACTIONS.RESET_TEAM_INFO as ACTIONS.RESET_TEAM_INFO,\r\n    };\r\n}\r\n\r\nexport function getTeamInfoTrainingStart() {\r\n    return {\r\n        type: ACTIONS.GET_TEAM_INFO_TRAINING_START as ACTIONS.GET_TEAM_INFO_TRAINING_START,\r\n    };\r\n}\r\n\r\nexport function getTeamInfoTrainingSuccess(data: TeamV2) {\r\n    return {\r\n        type: ACTIONS.GET_TEAM_INFO_TRAINING_SUCCESS as ACTIONS.GET_TEAM_INFO_TRAINING_SUCCESS,\r\n        data,\r\n    };\r\n}\r\n\r\nexport function getTeamInfoTrainingFailure(error: any) {\r\n    return {\r\n        type: ACTIONS.GET_TEAM_INFO_TRAINING_FAILURE as ACTIONS.GET_TEAM_INFO_TRAINING_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamAllUsersStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_START as ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_START,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamAllUsersSuccess(\r\n    data: ListResult<UserV2>,\r\n    offset: number,\r\n    isRefreshed?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_SUCCESS as ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_SUCCESS,\r\n        data,\r\n        offset,\r\n        isRefreshed,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamAllUsersFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_FAILURE as ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamMembersStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_START as ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_START,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamMembersSuccess(\r\n    data: ListResult<TeamMember>,\r\n    offset: number,\r\n    isRefreshed?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_SUCCESS as ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_SUCCESS,\r\n        data,\r\n        offset,\r\n        isRefreshed,\r\n    };\r\n}\r\n\r\nexport function searchSingleTeamMembersFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_FAILURE as ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function modifyTeamName(value: string) {\r\n    return {\r\n        type: ACTIONS.MODIFY_TEAM_NAME as ACTIONS.MODIFY_TEAM_NAME,\r\n        value,\r\n    };\r\n}\r\n\r\nexport function updateTeamLead(teamUserId: number, isTeamLead: boolean) {\r\n    return {\r\n        type: ACTIONS.UPDATE_TEAM_LEAD as ACTIONS.UPDATE_TEAM_LEAD,\r\n        teamUserId,\r\n        isTeamLead,\r\n    };\r\n}\r\n\r\nexport function setAssignedLabelsToSingleTeam(labelIDs: number[]) {\r\n    return {\r\n        type: ACTIONS.SET_ASSIGNED_LABELS_TO_SINGLE_TEAM as ACTIONS.SET_ASSIGNED_LABELS_TO_SINGLE_TEAM,\r\n        labelIDs,\r\n    };\r\n}\r\n\r\nexport function setDeletedLabelsToSingleTeam(labelIDs: number[]) {\r\n    return {\r\n        type: ACTIONS.SET_DELETED_LABELS_TO_SINGLE_TEAM as ACTIONS.SET_DELETED_LABELS_TO_SINGLE_TEAM,\r\n        labelIDs,\r\n    };\r\n}\r\n\r\nexport function resetSingleTeamPage() {\r\n    return {\r\n        type: ACTIONS.RESET_SINGLE_TEAM_PAGE as ACTIONS.RESET_SINGLE_TEAM_PAGE,\r\n    };\r\n}\r\n\r\nexport function removeSingleTeamAllUsersLabel(userId: number, labelId: number) {\r\n    return {\r\n        type: ACTIONS.REMOVE_SINGLE_TEAM_ALL_USERS_LABEL as ACTIONS.REMOVE_SINGLE_TEAM_ALL_USERS_LABEL,\r\n        userId,\r\n    labelId\r\n    };\r\n}\r\n\r\nexport function removeSingleTeamMemberLabel(userId: number, labelId: number) {\r\n    return {\r\n        type: ACTIONS.REMOVE_SINGLE_TEAM_MEMBER_LABEL as ACTIONS.REMOVE_SINGLE_TEAM_MEMBER_LABEL,\r\n        userId,\r\n        labelId\r\n    };\r\n}\r\n\r\nexport function createSingleTeamSuccess(team: Partial<TeamV2>) {\r\n    return {\r\n        type: ACTIONS.CREATE_SINGLE_TEAM_SUCCESS as ACTIONS.CREATE_SINGLE_TEAM_SUCCESS,\r\n        team,\r\n    };\r\n}\r\n\r\nexport function updateSingleTeamStart() {\r\n    return {\r\n        type: ACTIONS.UPDATE_SINGLE_TEAM_START as ACTIONS.UPDATE_SINGLE_TEAM_START,\r\n    };\r\n}\r\n\r\nexport function updateSingleTeamSuccess(team?: Partial<TeamV2>) {\r\n    return {\r\n        type: ACTIONS.UPDATE_SINGLE_TEAM_SUCCESS as ACTIONS.UPDATE_SINGLE_TEAM_SUCCESS,\r\n        team,\r\n    };\r\n}\r\n\r\nexport function updateSingleTeamFailure(error?: string) {\r\n    return {\r\n        type: ACTIONS.UPDATE_SINGLE_TEAM_FAILURE as ACTIONS.UPDATE_SINGLE_TEAM_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function updateSingleTeamStop() {\r\n    return {\r\n        type: ACTIONS.UPDATE_SINGLE_TEAM_STOP as ACTIONS.UPDATE_SINGLE_TEAM_STOP,\r\n    };\r\n}\r\n\r\nexport function clearTeamUpdateStatus() {\r\n    return {\r\n        type: ACTIONS.CLEAR_TEAM_UPDATE_STATUS as ACTIONS.CLEAR_TEAM_UPDATE_STATUS,\r\n    };\r\n}\r\n\r\nexport function searchTeamPractisSetsStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_PRACTIS_SETS_START as ACTIONS.SEARCH_TEAM_PRACTIS_SETS_START,\r\n    };\r\n}\r\n\r\nexport function searchTeamPractisSetsSuccess(\r\n    practisSets: PaginationResult<PractisSets>\r\n) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_PRACTIS_SETS_SUCCESS as ACTIONS.SEARCH_TEAM_PRACTIS_SETS_SUCCESS,\r\n        practisSets,\r\n    };\r\n}\r\n\r\nexport function searchTeamPractisSetsFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_PRACTIS_SETS_FAILURE as ACTIONS.SEARCH_TEAM_PRACTIS_SETS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function fetchAllTeamsStart() {\r\n    return {\r\n        type: ACTIONS.FETCH_ALL_TEAMS as ACTIONS.FETCH_ALL_TEAMS,\r\n    };\r\n}\r\n\r\nexport function fetchAllTeamsSuccess(data: ListResult<Team>) {\r\n    return {\r\n        type: ACTIONS.FETCH_ALL_TEAMS_SUCCESS as ACTIONS.FETCH_ALL_TEAMS_SUCCESS,\r\n        data,\r\n    };\r\n}\r\n\r\nexport function fetchAllTeamsFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.FETCH_ALL_TEAMS_FAILURE as ACTIONS.FETCH_ALL_TEAMS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function updateSelectedTeamState(teamId: number) {\r\n    return {\r\n        type: ACTIONS.UPDATE_SELECTED_TEAM_STATE as ACTIONS.UPDATE_SELECTED_TEAM_STATE,\r\n        teamId,\r\n    };\r\n}\r\n\r\nexport function updateAllSelectedTeamsState(\r\n    teamIds: number[],\r\n    checked: boolean,\r\n    partial?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_ALL_SELECTED_TEAMS_STATE as ACTIONS.UPDATE_ALL_SELECTED_TEAMS_STATE,\r\n        teamIds,\r\n        checked,\r\n        partial,\r\n    };\r\n}\r\n\r\nexport function updateMemberActionStart() {\r\n    return {\r\n        type: ACTIONS.UPDATE_MEMBER_START as ACTIONS.UPDATE_MEMBER_START,\r\n    };\r\n}\r\n\r\nexport function updateMemberActionSuccess(\r\n    team: any,\r\n    updateType: 'create' | 'update' | 'delete' | 'labels'\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_MEMBER_SUCCESS as ACTIONS.UPDATE_MEMBER_SUCCESS,\r\n        team,\r\n        updateType,\r\n    };\r\n}\r\n\r\nexport function updateMemberActionFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.UPDATE_MEMBER_FAILURE as ACTIONS.UPDATE_MEMBER_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function updateTeamActionStart() {\r\n    return {\r\n        type: ACTIONS.UPDATE_TEAM_START as ACTIONS.UPDATE_TEAM_START,\r\n    };\r\n}\r\n\r\nexport function updateTeamActionSuccess(\r\n    team: any,\r\n    updateType: 'create' | 'update' | 'delete' | 'labels'\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_TEAM_SUCCESS as ACTIONS.UPDATE_TEAM_SUCCESS,\r\n        team,\r\n        updateType,\r\n    };\r\n}\r\n\r\nexport function updateTeamActionFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.UPDATE_TEAM_FAILURE as ACTIONS.UPDATE_TEAM_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function updateTraineeDueDateAction(trainees: number[], dueDate: Date | null) {\r\n    return {\r\n        type: ACTIONS.UPDATE_TRAINEE_DUE_DATE as ACTIONS.UPDATE_TRAINEE_DUE_DATE,\r\n        trainees,\r\n        dueDate,\r\n    };\r\n}\r\n\r\nexport function updateAllSelectedTeamPractisSetsState(\r\n    setIds: number[],\r\n    checked: boolean,\r\n    partial?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_ALL_SELECTED_TEAM_PRACTIS_SETS_STATE as ACTIONS.UPDATE_ALL_SELECTED_TEAM_PRACTIS_SETS_STATE,\r\n        setIds,\r\n        checked,\r\n        partial,\r\n    };\r\n}\r\n\r\nexport function updateSelectedTeamPractisSetState(setId: number) {\r\n    return {\r\n        type: ACTIONS.UPDATE_SELECTED_TEAM_PRACTIS_SET_STATE as ACTIONS.UPDATE_SELECTED_TEAM_PRACTIS_SET_STATE,\r\n        setId,\r\n    };\r\n}\r\n\r\nexport function updateAllSelectedPractisSetsState(\r\n    setIds: number[],\r\n    checked: boolean,\r\n    partial?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE as ACTIONS.UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE,\r\n        setIds,\r\n        checked,\r\n        partial,\r\n    };\r\n}\r\n\r\nexport function updateSelectedPractisSetState(setId: number) {\r\n    return {\r\n        type: ACTIONS.UPDATE_SELECTED_PRACTIS_SET_STATE as ACTIONS.UPDATE_SELECTED_PRACTIS_SET_STATE,\r\n        setId,\r\n    };\r\n}\r\n\r\nexport function searchTrainerStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_START as ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_START,\r\n    };\r\n}\r\n\r\nexport function searchTrainerSuccess(\r\n    practisSets: ListResult<TrainingPractisSet>\r\n) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_SUCCESS as ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_SUCCESS,\r\n        practisSets,\r\n    };\r\n}\r\n\r\nexport function clearTrainerPractisSet() {\r\n    return {\r\n        type: ACTIONS.CLEAR_TRAINER_PRACTIS_SETS_SUCCESS as ACTIONS.CLEAR_TRAINER_PRACTIS_SETS_SUCCESS,\r\n    };\r\n}\r\n\r\nexport function searchTrainerFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_FAILURE as ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function updatedProgressActionStart() {\r\n    return {\r\n        type: ACTIONS.UPDATE_PROGRESS_START as ACTIONS.UPDATE_PROGRESS_START,\r\n    };\r\n}\r\n\r\nexport function updatedProgressActionSuccess(\r\n    progress: PractisSets,\r\n    updateType: 'create' | 'update' | 'delete' | 'labels'\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_PROGRESS_SUCCESS as ACTIONS.UPDATE_PROGRESS_SUCCESS,\r\n        progress,\r\n        updateType,\r\n    };\r\n}\r\n\r\nexport function updatedProgressActionFailure(error: any) {\r\n    return {\r\n        type: ACTIONS.UPDATE_PROGRESS_FAILURE as ACTIONS.UPDATE_PROGRESS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function searchPractisUsersStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_START as ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_START,\r\n    };\r\n}\r\n\r\nexport function searchPractisUsersSuccess(\r\n    users: PaginationResult<EnrollmentInterface>\r\n) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_SUCCESS as ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_SUCCESS,\r\n        users,\r\n    };\r\n}\r\n\r\nexport function searchPractisUsersFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_FAILURE as ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function searchInvitationUsersStart() {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_INVITATION_USERS_START as ACTIONS.SEARCH_TRAINER_INVITATION_USERS_START,\r\n    };\r\n}\r\n\r\nexport function searchInvitationUsersSuccess(\r\n    users: ListResult<UserV2>,\r\n    offset: number,\r\n    isRefreshed?: boolean,\r\n) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_INVITATION_USERS_SUCCESS as ACTIONS.SEARCH_TRAINER_INVITATION_USERS_SUCCESS,\r\n        users,\r\n        offset,\r\n        isRefreshed,\r\n    };\r\n}\r\n\r\nexport function searchInvitationUsersFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEARCH_TRAINER_INVITATION_USERS_FAILURE as ACTIONS.SEARCH_TRAINER_INVITATION_USERS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function sendTraineeInvitationStart() {\r\n    return {\r\n        type: ACTIONS.SEND_TRAINEE_INVITATION_START as ACTIONS.SEND_TRAINEE_INVITATION_START,\r\n    };\r\n}\r\n\r\nexport function sendTraineeInvitationSuccess(\r\n    enrollments: Enrollments,\r\n    inviteType: 'invite' | 'reInvite' | 'unassign'\r\n) {\r\n    return {\r\n        type: ACTIONS.SEND_TRAINEE_INVITATION_SUCCESS as ACTIONS.SEND_TRAINEE_INVITATION_SUCCESS,\r\n        enrollments,\r\n        inviteType,\r\n    };\r\n}\r\n\r\nexport function sendTraineeInvitationFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.SEND_TRAINEE_INVITATION_FAILURE as ACTIONS.SEND_TRAINEE_INVITATION_FAILURE,\r\n        error,\r\n    };\r\n}\r\nexport function getPractisSetStart() {\r\n    return {\r\n        type: ACTIONS.GET_PRACTIS_SET_START as ACTIONS.GET_PRACTIS_SET_START,\r\n    };\r\n}\r\n\r\nexport function getPractisSetSuccess(practisSet: PractisSets) {\r\n    return {\r\n        type: ACTIONS.GET_PRACTIS_SET_SUCCESS as ACTIONS.GET_PRACTIS_SET_SUCCESS,\r\n        practisSet,\r\n    };\r\n}\r\n\r\nexport function getPractisSetFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.GET_PRACTIS_SET_FAILURE as ACTIONS.GET_PRACTIS_SET_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function getPractisSetReportStart() {\r\n    return {\r\n        type: ACTIONS.GET_PRACTIS_SET_REPORT_START as ACTIONS.GET_PRACTIS_SET_REPORT_START,\r\n    };\r\n}\r\n\r\nexport function getPractisSetReportSuccess(\r\n    enrollment: EnrollmentInterface,\r\n    progress: ListResult<EnrollmentProgress>,\r\n    dailyTraining: EnrollmentDailyTraining[]\r\n) {\r\n    return {\r\n        type: ACTIONS.GET_PRACTIS_SET_REPORT_SUCCESS as ACTIONS.GET_PRACTIS_SET_REPORT_SUCCESS,\r\n        enrollment,\r\n        progress,\r\n        dailyTraining,\r\n    };\r\n}\r\n\r\nexport function getPractisSetReportFailure(error: string) {\r\n    return {\r\n        type: ACTIONS.GET_PRACTIS_SET_REPORT_FAILURE as ACTIONS.GET_PRACTIS_SET_REPORT_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function resetPractisSetDetails() {\r\n    return {\r\n        type: ACTIONS.RESET_PRACTIS_SET_DETAILS as ACTIONS.RESET_PRACTIS_SET_DETAILS,\r\n    };\r\n}\r\n\r\nexport function resetPractisSetReport() {\r\n    return {\r\n        type: ACTIONS.RESET_PRACTIS_SET_REPORT as ACTIONS.RESET_PRACTIS_SET_REPORT,\r\n    };\r\n}\r\n\r\nexport function checkSingleProgress(id: number) {\r\n    return {\r\n        type: ACTIONS.CHECK_SINGLE_PROGRESS as ACTIONS.CHECK_SINGLE_PROGRESS,\r\n        id,\r\n    };\r\n}\r\n\r\nexport function updateAllSelectedInvitationTraineesState(\r\n    userIds: number[],\r\n    checked: boolean,\r\n    partial?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.UPDATE_ALL_SELECTED_INVITATION_TRAINEES_STATE as ACTIONS.UPDATE_ALL_SELECTED_INVITATION_TRAINEES_STATE,\r\n        userIds,\r\n        checked,\r\n        partial,\r\n    };\r\n}\r\n\r\nexport function updateSelectedInvitationTraineesState(userId: number) {\r\n    return {\r\n        type: ACTIONS.UPDATE_SELECTED_INVITATION_TRAINEES_STATE as ACTIONS.UPDATE_SELECTED_INVITATION_TRAINEES_STATE,\r\n        userId,\r\n    };\r\n}\r\n\r\nexport function checkAllProgress(\r\n    progressId: any,\r\n    checked: boolean,\r\n    partial?: boolean\r\n) {\r\n    return {\r\n        type: ACTIONS.CHECK_ALL_PROGRESS as ACTIONS.CHECK_ALL_PROGRESS,\r\n        progressId,\r\n        checked,\r\n        partial,\r\n    };\r\n}\r\n\r\nexport enum INVITATION_LABEL_ACTIONS {\r\n    SEARCH_LABELS_START = 'SEARCH_INVITATION_LABELS_START',\r\n    SEARCH_LABELS_SUCCESS = 'SEARCH__INVITATION_LABELS_SUCCESS',\r\n    SEARCH_LABELS_FAILURE = 'SEARCH_INVITATION_LABELS_FAILURE',\r\n\r\n    TOGGLE_COLLAPSE_INVITATION_LABEL_FIELD = 'TOGGLE_COLLAPSE_INVITATION_LABEL_FIELD',\r\n    SAVE_SELECTED_INVITATION_LABELS = 'SAVE_SELECTED_INVITATION_LABELS',\r\n\r\n    SET_INVITATION_LABEL_FILTERS = 'SET_INVITATION_LABEL_FILTERS',\r\n    CLEAR_LABEL_FILTERS = 'CLEAR_INVITATION_LABEL_FILTERS',\r\n}\r\n\r\nexport function searchLabelsStart(withLoading?: boolean) {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.SEARCH_LABELS_START as INVITATION_LABEL_ACTIONS.SEARCH_LABELS_START,\r\n        withLoading,\r\n    };\r\n}\r\n\r\nexport function searchLabelsSuccess(\r\n    data: PaginationResult<Label>,\r\n    searchTerm?: boolean\r\n) {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.SEARCH_LABELS_SUCCESS as INVITATION_LABEL_ACTIONS.SEARCH_LABELS_SUCCESS,\r\n        data,\r\n        searchTerm,\r\n    };\r\n}\r\n\r\nexport function searchLabelsFailure(error: string) {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.SEARCH_LABELS_FAILURE as INVITATION_LABEL_ACTIONS.SEARCH_LABELS_FAILURE,\r\n        error,\r\n    };\r\n}\r\n\r\nexport function toggleCollapseLabelFieldAction(labelId: number) {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.TOGGLE_COLLAPSE_INVITATION_LABEL_FIELD as INVITATION_LABEL_ACTIONS.TOGGLE_COLLAPSE_INVITATION_LABEL_FIELD,\r\n        labelId,\r\n    };\r\n}\r\n\r\nexport function setLabelFilterAction(labels: number[]) {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.SET_INVITATION_LABEL_FILTERS as INVITATION_LABEL_ACTIONS.SET_INVITATION_LABEL_FILTERS,\r\n        labels,\r\n    };\r\n}\r\n\r\nexport function saveSelectedInvitationLabels() {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.SAVE_SELECTED_INVITATION_LABELS as INVITATION_LABEL_ACTIONS.SAVE_SELECTED_INVITATION_LABELS,\r\n    };\r\n}\r\n\r\nexport function clearLabelFilterAction() {\r\n    return {\r\n        type: INVITATION_LABEL_ACTIONS.CLEAR_LABEL_FILTERS as INVITATION_LABEL_ACTIONS.CLEAR_LABEL_FILTERS,\r\n    };\r\n}\r\n\r\nexport const searchTeamMembersStartAction = (): Action<ACTIONS.SEARCH_TEAM_MEMBERS_START> => {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_MEMBERS_START,\r\n    };\r\n};\r\n\r\nexport const searchTeamMembersSuccessAction = (\r\n    data: ListResult<TeamMember>\r\n): Action<ACTIONS.SEARCH_TEAM_MEMBERS_SUCCESS> & {\r\n    data: ListResult<TeamMember>;\r\n} => {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_MEMBERS_SUCCESS,\r\n        data,\r\n    };\r\n};\r\n\r\nexport const searchTeamMembersFailureAction = (\r\n    error: string\r\n): Action<ACTIONS.SEARCH_TEAM_MEMBERS_FAILURE> & { error: string } => {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_MEMBERS_FAILURE,\r\n        error,\r\n    };\r\n};\r\n\r\nexport const searchTeamLeadersStartAction = () => {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_LEADERS_START as ACTIONS.SEARCH_TEAM_LEADERS_START,\r\n    };\r\n};\r\n\r\nexport const searchTeamLeadersSuccessAction = (\r\n    data: PaginationResult<TeamLeader>\r\n) => {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_LEADERS_SUCCESS as ACTIONS.SEARCH_TEAM_LEADERS_SUCCESS,\r\n        data,\r\n    };\r\n};\r\n\r\nexport const searchTeamLeadersFailureAction = (error: string) => {\r\n    return {\r\n        type: ACTIONS.SEARCH_TEAM_LEADERS_FAILURE as ACTIONS.SEARCH_TEAM_LEADERS_FAILURE,\r\n        error,\r\n    };\r\n};\r\n\r\nexport const selectTeamLeaderAction = (leaderId: number) => {\r\n    return {\r\n        type: ACTIONS.SELECT_TEAM_LEADER as ACTIONS.SELECT_TEAM_LEADER,\r\n        leaderId,\r\n    };\r\n};\r\n\r\nexport const selectMultipleTeamLeaderAction = (leaderIds: number[]) => {\r\n    return {\r\n        type: ACTIONS.SELECT_MULTIPLE_TEAM_LEADERS as ACTIONS.SELECT_MULTIPLE_TEAM_LEADERS,\r\n        leaderIds,\r\n    };\r\n};\r\n\r\nexport const resetTeamLeadersSelectionAction = () => {\r\n    return {\r\n        type: ACTIONS.RESET_TEAM_LEADERS_SELECTION as ACTIONS.RESET_TEAM_LEADERS_SELECTION,\r\n    };\r\n};\r\n\r\nexport const deselectAllTeamLeadersSelectionAction = () => {\r\n    return {\r\n        type: ACTIONS.DESELECT_ALL_TEAM_LEADERS_SELECTION as ACTIONS.DESELECT_ALL_TEAM_LEADERS_SELECTION,\r\n    };\r\n};\r\n\r\nexport const saveTeamLeaderSelection = () => {\r\n    return {\r\n        type: ACTIONS.SAVE_TEAM_LEADERS_SELECTION as ACTIONS.SAVE_TEAM_LEADERS_SELECTION,\r\n    };\r\n};\r\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { CARDS, useDynamicCardHeight, useDynamicCardWidth } from '../configs';\nimport usePageVisibility from '../../../helpers/hooks/usePageVisibility';\nimport {\n    isSafari,\n    isOpera,\n    isEdge,\n    isChrome,\n    isFirefox,\n} from '../../../helpers/functions/detect-browsers';\n\nconst StyledCardContent = styled(motion.div)`\n    display: flex;\n    flex: 1 1 0;\n    flex-direction: column;\n    align-items: center;\n    position: relative;\n    overflow: hidden;\n    justify-content: center;\n`;\n\nconst StyledCard = styled(motion.div)<{ width: number; height: number }>`\n    height: ${props => props.height}px;\n    width: ${props => props.width}px;\n`;\n\nconst StyledNextCard = styled(motion.div)<{\n    width: number;\n    height: number;\n    margin: number;\n}>`\n    height: ${props => props.height}px;\n    width: ${props => props.width}px;\n    margin-top: -${props => props.margin}px;\n    margin-left: ${props =>\n        isSafari() || isOpera() || isEdge()\n            ? props.width + 80\n            : (props.width + 80) * 2}px;\n    position: absolute;\n`;\n\nconst StyledCounter = styled(motion.div)<{\n    percentage: number;\n    width: number;\n    height: number;\n    margin?: number;\n}>`\n    height: ${props => props.height}px;\n    width: ${props => props.width}px;\n    background: ${props => props.theme.Colors.white};\n    opacity: 0.8;\n    border-radius: 6px;\n    z-index: 2;\n    margin: ${props => (props.margin ? props.margin : 32)}px 0;\n    position: relative;\n    overflow: hidden;\n    &:before {\n        display: block;\n        position: absolute;\n        content: '';\n        background: ${props => props.theme.Colors.softBlue};\n        bottom: 0;\n        width: ${props => props.percentage}%;\n        height: 100%;\n        transition: ${props =>\n            props.percentage > 0 ? 'width 1s linear' : 'width 0.2s linear'};\n        left: 0;\n        border-radius: 6px;\n    }\n`;\n\nconst currentCardAnimation = {\n    initial: { opacity: 1, scale: 1 },\n    center: { opacity: 1, scale: 1 },\n    exit: { opacity: 0, scale: 0.5 },\n};\n\nconst nextCardAnimations = {\n    enter: {\n        x: 528,\n        opacity: 0,\n    },\n    center: {\n        x: 0,\n        opacity: 0.5,\n    },\n    exit: (width: number) => {\n        return {\n            x: -(width + 80),\n            opacity: 1,\n        };\n    },\n};\n\nconst CardContent: FC<{\n    card: any;\n    counterHeight: number;\n    counterWidth: number;\n    counterMargin?: number;\n}> = ({ card: LandingCard, counterHeight, counterWidth, counterMargin }) => {\n    const [card, setCard] = useState({ current: 0, next: 1 });\n    const [counter, setCounter] = useState(0);\n    let intervalId = useRef<any>();\n    const browserTabVisible = usePageVisibility();\n\n    const goNext = useCallback(() => {\n        if (card.next === CARDS.length - 1) {\n            setCard({ current: card.next, next: 0 });\n        } else {\n            setCard({ current: card.next, next: card.next + 1 });\n        }\n    }, [card.next]);\n\n    useEffect(() => {\n        intervalId.current = setTimeout(() => {\n            if (browserTabVisible) {\n                if (counter === 5) {\n                    setCounter(0);\n                    goNext();\n                } else {\n                    setCounter(counter + 1);\n                }\n            }\n        }, 1000);\n        return () => {\n            clearInterval(intervalId.current);\n        };\n    }, [goNext, counter, browserTabVisible]);\n\n    const clearCounter = () => {\n        clearInterval(intervalId.current);\n        setCounter(0);\n    };\n\n    const cardWidth = useDynamicCardWidth();\n    const cardHeight = useDynamicCardHeight();\n\n    return (\n        <StyledCardContent>\n            <AnimatePresence initial={false} exitBeforeEnter>\n                <StyledCard\n                    width={cardWidth}\n                    height={cardHeight}\n                    key={card.current}\n                    initial=\"initial\"\n                    animate=\"visible\"\n                    exit={{\n                        scale: [1, 0.2, 0.2, 0, 0],\n                        opacity: [1, 0.2, 0, 0, 0],\n                    }}\n                    variants={currentCardAnimation}\n                    transition={{\n                        duration: 1,\n                    }}\n                >\n                    <LandingCard\n                        image={CARDS[card.current].image}\n                        description={CARDS[card.current].description}\n                        goNext={() => {\n                            clearCounter();\n                            goNext();\n                        }}\n                    />\n                </StyledCard>\n            </AnimatePresence>\n            <AnimatePresence initial={false} custom={cardWidth}>\n                <StyledNextCard\n                    width={cardWidth}\n                    height={cardHeight}\n                    margin={\n                        counterMargin\n                            ? isChrome() || isFirefox()\n                                ? 40\n                                : 20\n                            : isChrome() || isFirefox()\n                            ? 76\n                            : 38\n                    }\n                    key={card.next}\n                    custom={cardWidth}\n                    variants={nextCardAnimations}\n                    initial=\"enter\"\n                    animate=\"center\"\n                    exit=\"exit\"\n                    transition={{\n                        x: { type: 'spring', stiffness: 100, damping: 16 },\n                        duration: 0.2,\n                    }}\n                >\n                    <LandingCard\n                        image={CARDS[card.next].image}\n                        description={CARDS[card.next].description}\n                    />\n                </StyledNextCard>\n            </AnimatePresence>\n            <StyledCounter\n                percentage={(counter / 5) * 100}\n                width={counterWidth}\n                height={counterHeight}\n                margin={counterMargin}\n            />\n        </StyledCardContent>\n    );\n};\n\nexport default CardContent;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport useWindowDimensions from '../../../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../../../theme/variables';\nimport RightArrow from '../../../../ui/icons/RightArrow';\n\nconst StyledCardContent = styled.div<{ image?: string }>`\n    height: 100%;\n    width: 100%;\n    background-image: url(${props => props.image});\n    background-size: 100%;\n    background-repeat: no-repeat;\n    display: flex;\n`;\n\nconst Info = styled.div`\n    height: 310px;\n    border-radius: 32px;\n    align-self: flex-end;\n    background: ${props => props.theme.Colors.white};\n    padding: 64px;\n    box-sizing: border-box;\n    position: relative;\n`;\n\nconst Description = styled.div<{ fontSize: number }>`\n    font-size: ${props => props.fontSize}px;\n    color: ${props => props.theme.Colors.black};\n    margin-top: 8px;\n`;\n\nconst NextButton = styled.div<{ disabled?: boolean }>`\n    height: 64px;\n    width: 64px;\n    border-radius: 50px;\n    background: ${props => props.theme.Colors.whiteTwo};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: absolute;\n    right: 16px;\n    bottom: 16px;\n    cursor: ${props => (props.disabled ? 'no-drop' : 'pointer')};\n    user-select: none;\n    &:active {\n        ${props => !props.disabled && ' opacity: 0.7'};\n    }\n`;\n\nconst StyledArrowIcon = styled(RightArrow)`\n    height: 20px;\n    width: 20px;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst LandingCard: FC<{\n    image?: string;\n    description: string;\n    goNext?: () => void;\n}> = ({ image, description, goNext }) => {\n    return (\n        <StyledCardContent image={image}>\n            <Info>\n                <Description\n                    fontSize={\n                        useWindowDimensions().width < Variables.BreakPoints.mid\n                            ? 22\n                            : 28\n                    }\n                >\n                    {description}\n                </Description>\n                <NextButton onClick={goNext} disabled={!goNext}>\n                    <StyledArrowIcon />\n                </NextButton>\n            </Info>\n        </StyledCardContent>\n    );\n};\n\nexport default LandingCard;\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport authBackground from '../../../../assets/images/auth-background.png';\nimport authBackground2x from '../../../../assets/images/auth-background2x.png';\nimport authBackground3x from '../../../../assets/images/auth-background3x.png';\nimport { isAdminPortal } from '../../../../helpers/functions/general';\nimport PractisAdminPlatformLogo from '../../../../ui/icons/PractisAdminPlatformLogo';\nimport PractisLogo from '../../../../ui/icons/PractisLogo';\nimport CardContent from '../../Component/CardContent';\nimport LandingCard from './LandingCard';\n\nconst LeftContentContainer = styled.div`\n    flex: 0 0 50%;\n    height: 100%;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n`;\n\nconst AuthBackground = styled.img`\n    height: 90%;\n    right: -10%;\n    bottom: 0;\n    position: absolute;\n`;\n\nconst StyledLogo = styled.div`\n    height: 32px;\n    width: 125px;\n    color: ${props => props.theme.Colors.white};\n    margin-top: 70px;\n    margin-left: 73px;\n`;\n\nclass LeftPanel extends Component {\n    render() {\n        return (\n            <LeftContentContainer>\n                <AuthBackground\n                    src={authBackground}\n                    srcSet={`${authBackground2x} 2x, ${authBackground3x} 3x`}\n                />\n                <StyledLogo>\n                    {isAdminPortal() ?\n                        <PractisAdminPlatformLogo />\n                        :\n                        <PractisLogo />}\n                </StyledLogo>\n                <CardContent\n                    card={LandingCard}\n                    counterHeight={12}\n                    counterWidth={112}\n                />\n            </LeftContentContainer>\n        );\n    }\n}\n\nexport default LeftPanel;\n","import React, { FC } from 'react';\nimport { getCopyrightYear } from '../../../helpers/functions/date-convert';\n\nexport const Copyright: FC = () => {\n    return (\n        <>Copyright © {getCopyrightYear()} Practis, Inc. All Rights Reserved.</>\n    );\n};\n\n","import React from 'react';\nimport styled from 'styled-components';\nimport ROUTES from '../../../../routes/routes';\nimport { useHistory } from 'react-router';\nimport { Button } from '../../../../ui/components/Button';\nimport { Copyright } from '../../../../ui/components/Copyright';\n\nconst RightContentContainer = styled.div`\n    flex: 0 0 50%;\n    background: ${props => props.theme.Colors.white};\n    border-top-left-radius: 32px;\n    border-bottom-left-radius: 32px;\n    display: flex;\n    flex-direction: column;\n    box-shadow: 0 0 50px 0 rgba(0, 0, 0, 0.5);\n    z-index: 2;\n`;\n\nconst Header = styled.div`\n    height: 104px;\n    display: flex;\n    justify-content: flex-end;\n    align-items: flex-end;\n    padding: 0 64px;\n`;\n\nconst Body = styled.div`\n    display: flex;\n    flex: 1;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst Content = styled.div`\n    width: 288px;\n    padding: 16px;\n`;\n\nconst Title = styled.div`\n    font-size: 56px;\n    margin-bottom: 24px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.2;\n    font-family: 'Merriweather';\n`;\n\nconst Description = styled.div`\n    font-size: 20px;\n    margin-bottom: 48px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.5;\n`;\n\nconst Footer = styled.div`\n    height: 80px;\n    font-size: 15px;\n    padding: 0 56px;\n    color: ${props => props.theme.Colors.black};\n    text-align: right;\n`;\n\nconst RightPanel = () => {\n    const history = useHistory();\n\n    const handleLogin = () => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    };\n\n    return (\n        <RightContentContainer>\n            <Header>\n                <Button\n                    label=\"Log In\"\n                    action={handleLogin}\n                    width=\"128px\"\n                    height=\"48px\"\n                />\n            </Header>\n            <Body>\n                <Content>\n                    <Title>You need Practis.</Title>\n                    <Description>\n                        Practis is a system for large teams to learn, retain,\n                        and effectively articulate messaging on the front lines.\n                    </Description>\n                </Content>\n            </Body>\n            <Footer><Copyright /></Footer>\n        </RightContentContainer>\n    );\n};\n\nexport default RightPanel;\n","import React from 'react';\nimport LeftPanel from './LeftPanel';\nimport RightPanel from './RightPanel';\n\nconst WebLandingPage = () => {\n    return (\n        <>\n            <LeftPanel />\n            <RightPanel />\n        </>\n    );\n};\n\nexport default WebLandingPage;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport RightArrow from '../../../../ui/icons/RightArrow';\n\n\nconst StyledCardContent = styled.div<{ image?: string }>`\n    height: 100%;\n    width: 100%;\n    background-image: url(${props => props.image});\n    background-size: 100%;\n    background-repeat: no-repeat;\n    display: flex;\n    border-bottom-left-radius: 32px;\n    border-bottom-right-radius: 32px;\n`;\n\nconst Info = styled.div`\n    height: 144px;\n    border-radius: 32px;\n    align-self: flex-end;\n    background: ${props => props.theme.Colors.white};\n    padding: 32px;\n    box-sizing: border-box;\n    position: relative;\n`;\n\nconst Description = styled.div`\n    font-size: 17px;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst NextButton = styled.div<{ disabled?: boolean }>`\n    height: 40px;\n    width: 40px;\n    border-radius: 50px;\n    background: ${props => props.theme.Colors.whiteTwo};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: absolute;\n    right: 16px;\n    bottom: 16px;\n    cursor: ${props => (props.disabled ? 'no-drop' : 'pointer')};\n    user-select: none;\n    &:active {\n        ${props => !props.disabled && ' opacity: 0.7'};\n    }\n`;\n\nconst StyledArrowIcon = styled(RightArrow)`\n    height: 20px;\n    width: 20px;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst LandingCard: FC<{\n    image?: string;\n    description: string;\n    goNext?: () => void;\n}> = ({ image, description, goNext }) => {\n    return (\n        <StyledCardContent image={image}>\n            <Info>\n                <Description>{description}</Description>\n                <NextButton onClick={goNext} disabled={!goNext}>\n                    <StyledArrowIcon />\n                </NextButton>\n            </Info>\n        </StyledCardContent>\n    );\n};\n\nexport default LandingCard;\n","import React from 'react';\nimport styled from 'styled-components';\nimport authBackground from '../../../../assets/images/auth-background.png';\nimport authBackground2x from '../../../../assets/images/auth-background2x.png';\nimport authBackground3x from '../../../../assets/images/auth-background3x.png';\nimport ROUTES from '../../../../routes/routes';\nimport { useHistory } from 'react-router';\nimport LandingCard from './LandingCard';\nimport CardContent from '../../Component/CardContent';\nimport LinkText from '../../../../ui/components/LinkText/link-text';\nimport PractisLogo from '../../../../ui/icons/PractisLogo';\nimport { isAdminPortal } from '../../../../helpers/functions/general';\nimport PractisAdminPlatformLogo from '../../../../ui/icons/PractisAdminPlatformLogo';\n\nconst LeftContentContainer = styled.div`\n    flex: 3;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n`;\n\nconst AuthBackground = styled.img`\n    height: 90%;\n    right: 0;\n    bottom: 0;\n    position: absolute;\n`;\n\nconst StyledHeader = styled.div`\n    height: 72px;\n`;\n\nconst StyledHeaderContent = styled.div`\n    padding: 24px;\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst StyledLogo = styled.div`\n    height: 24px;\n    width: 94px;\n    color: ${props => props.theme.Colors.white};\n`;\n\nconst StyledLinkText = styled(LinkText)`\n    font-size: 13px;\n    font-weight: bold;\n`;\n\nconst LeftPanel = () => {\n    const history = useHistory();\n\n    const handleLogin = () => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    };\n\n    return (\n        <LeftContentContainer>\n            <AuthBackground\n                src={authBackground}\n                srcSet={`${authBackground2x} 2x, ${authBackground3x} 3x`}\n            />\n            <StyledHeader>\n                <StyledHeaderContent>\n                    <StyledLogo>\n                        {isAdminPortal() ?\n                            <PractisAdminPlatformLogo />\n                            :\n                            <PractisLogo />}\n                    </StyledLogo>\n                    <StyledLinkText onClick={handleLogin}>\n                        Log In\n                    </StyledLinkText>\n                </StyledHeaderContent>\n            </StyledHeader>\n            <CardContent\n                card={LandingCard}\n                counterHeight={8}\n                counterWidth={64}\n                counterMargin={16}\n            />\n        </LeftContentContainer>\n    );\n};\n\nexport default LeftPanel;\n","import styled from 'styled-components';\nimport { Copyright } from '../../../../ui/components/Copyright';\n\n\nconst RightContentContainer = styled.div`\n    flex: 2;\n    background: ${props => props.theme.Colors.white};\n    border-top-left-radius: 32px;\n    border-top-right-radius: 32px;\n    display: flex;\n    flex-direction: column;\n    box-shadow: 0 0 50px 0 rgba(0, 0, 0, 0.5);\n    z-index: 2;\n`;\n\nconst Body = styled.div`\n    display: flex;\n    flex: 1;\n`;\n\nconst Content = styled.div`\n    padding: 40px 40px 0 40px;\n    margin-bottom: 24px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst Title = styled.div`\n    font-size: 24px;\n    margin-bottom: 16px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.2;\n    font-family: 'Merriweather';\n    text-align: center;\n`;\n\nconst Description = styled.div`\n    font-size: 13px;\n    font-weight: 300;\n    margin-bottom: 24px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.5;\n    text-align: center;\n`;\n\n\nconst Footer = styled.div`\n    font-size: 11px;\n    font-weight: 300;\n    color: ${props => props.theme.Colors.black};\n    align-items: flex-end;\n    display: flex;\n    justify-content: center;\n    padding-bottom: 16px;\n`;\n\nconst RightPanel = () => {\n    return (\n        <RightContentContainer>\n            <Body>\n                <Content>\n                    <Title>You need Practis.</Title>\n                    <Description>\n                        Practis is a system for large teams to learn, retain,\n                        and effectively articulate messaging on the front lines.\n                    </Description>\n                </Content>\n            </Body>\n            <Footer><Copyright /></Footer>\n        </RightContentContainer>\n    );\n};\n\nexport default RightPanel;\n","import React from 'react';\nimport LeftPanel from './LeftPanel';\nimport RightPanel from './RightPanel';\n\nconst MobileLandingPage = () => {\n    return (\n        <>\n            <LeftPanel />\n            <RightPanel />\n        </>\n    );\n};\n\nexport default MobileLandingPage;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport RightArrow from '../../../../ui/icons/RightArrow';\n\n\nconst StyledCardContent = styled.div<{ image?: string }>`\n    height: 100%;\n    width: 100%;\n    background-image: url(${props => props.image});\n    background-size: 100%;\n    background-repeat: no-repeat;\n    display: flex;\n`;\n\nconst Info = styled.div`\n    height: 240px;\n    border-radius: 32px;\n    align-self: flex-end;\n    background: ${props => props.theme.Colors.white};\n    padding: 37px;\n    box-sizing: border-box;\n    position: relative;\n`;\n\nconst Description = styled.div`\n    font-size: 24px;\n    color: ${props => props.theme.Colors.black};\n    margin-top: 8px;\n`;\n\nconst NextButton = styled.div<{ disabled?: boolean }>`\n    height: 43px;\n    width: 43px;\n    border-radius: 50px;\n    background: ${props => props.theme.Colors.whiteTwo};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: absolute;\n    right: 16px;\n    bottom: 16px;\n    cursor: ${props => (props.disabled ? 'no-drop' : 'pointer')};\n    user-select: none;\n    &:active {\n        ${props => !props.disabled && ' opacity: 0.7'};\n    }\n`;\n\nconst StyledArrowIcon = styled(RightArrow)`\n    height: 20px;\n    width: 20px;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst LandingCard: FC<{\n    image?: string;\n    description: string;\n    goNext?: () => void;\n}> = ({ image, description, goNext }) => {\n    return (\n        <StyledCardContent image={image}>\n            <Info>\n                <Description>{description}</Description>\n                <NextButton onClick={goNext} disabled={!goNext}>\n                    <StyledArrowIcon />\n                </NextButton>\n            </Info>\n        </StyledCardContent>\n    );\n};\n\nexport default LandingCard;\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport authBackground from '../../../../assets/images/auth-background.png';\nimport authBackground2x from '../../../../assets/images/auth-background2x.png';\nimport authBackground3x from '../../../../assets/images/auth-background3x.png';\nimport { isAdminPortal } from '../../../../helpers/functions/general';\nimport PractisAdminPlatformLogo from '../../../../ui/icons/PractisAdminPlatformLogo';\nimport PractisLogo from '../../../../ui/icons/PractisLogo';\nimport CardContent from '../../Component/CardContent';\nimport LandingCard from './LandingCard';\n\nconst LeftContentContainer = styled.div`\n    flex: 0 0 50%;\n    height: 100%;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n`;\n\nconst AuthBackground = styled.img`\n    height: 90%;\n    right: -10%;\n    bottom: 0;\n    position: absolute;\n`;\n\nconst StyledHeader = styled.div``;\n\nconst StyledHeaderContent = styled.div`\n    padding: 52px 48px 16px 48px;\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst StyledLogo = styled.div`\n    height: 24px;\n    width: 93px;\n    color: ${props => props.theme.Colors.white};\n`;\n\nclass LeftPanel extends Component {\n    render() {\n        return (\n            <LeftContentContainer>\n                <AuthBackground\n                    src={authBackground}\n                    srcSet={`${authBackground2x} 2x, ${authBackground3x} 3x`}\n                />\n                <StyledHeader>\n                    <StyledHeaderContent>\n                        <StyledLogo>\n                            {isAdminPortal() ?\n                                <PractisAdminPlatformLogo />\n                                :\n                                <PractisLogo />}\n                        </StyledLogo>\n                    </StyledHeaderContent>\n                </StyledHeader>\n                <CardContent\n                    card={LandingCard}\n                    counterWidth={80}\n                    counterHeight={8}\n                />\n            </LeftContentContainer>\n        );\n    }\n}\n\nexport default LeftPanel;\n","import React from 'react';\nimport styled from 'styled-components';\nimport ROUTES from '../../../../routes/routes';\nimport { useHistory } from 'react-router';\nimport { Button } from '../../../../ui/components/Button';\nimport { Copyright } from '../../../../ui/components/Copyright';\n\nconst RightContentContainer = styled.div`\n    flex: 0 0 50%;\n    background: ${props => props.theme.Colors.white};\n    border-top-left-radius: 32px;\n    border-bottom-left-radius: 32px;\n    display: flex;\n    flex-direction: column;\n    box-shadow: 0 0 50px 0 rgba(0, 0, 0, 0.5);\n    z-index: 2;\n`;\n\nconst Header = styled.div`\n    height: 104px;\n    display: flex;\n    justify-content: flex-end;\n    align-items: flex-end;\n    padding: 0 64px;\n`;\n\nconst Body = styled.div`\n    display: flex;\n    flex: 1;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst Content = styled.div`\n    width: 208px;\n    padding: 16px;\n`;\n\nconst Title = styled.div`\n    font-size: 40px;\n    margin-bottom: 24px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.2;\n    font-family: 'Merriweather';\n`;\n\nconst Description = styled.div`\n    font-size: 15px;\n    font-weight: 300;\n    margin-bottom: 48px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.5;\n`;\n\nconst Footer = styled.div`\n    height: 64px;\n    font-size: 13px;\n    font-weight: 300;\n    padding: 0 24px;\n    color: ${props => props.theme.Colors.black};\n    text-align: right;\n`;\n\nconst RightPanel = () => {\n    const history = useHistory();\n\n    const handleLogin = () => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    };\n\n    return (\n        <RightContentContainer>\n            <Header>\n                <Button\n                    label=\"Log In\"\n                    action={handleLogin}\n                    width=\"128px\"\n                    height=\"48px\"\n                />\n            </Header>\n            <Body>\n                <Content>\n                    <Title>You need Practis.</Title>\n                    <Description>\n                        Practis is a system for large teams to learn, retain,\n                        and effectively articulate messaging on the front lines.\n                    </Description>\n                </Content>\n            </Body>\n            <Footer><Copyright /></Footer>\n        </RightContentContainer>\n    );\n};\n\nexport default RightPanel;\n","import React from 'react';\nimport LeftPanel from './LeftPanel';\nimport RightPanel from './RightPanel';\n\nconst TabletLandingPage = () => {\n    return (\n        <>\n            <LeftPanel />\n            <RightPanel />\n        </>\n    );\n};\n\nexport default TabletLandingPage;\n","import React from 'react';\nimport styled from 'styled-components';\nimport WebLandingPage from './platforms/web';\nimport MobileLandingPage from './platforms/mobile';\nimport TabletLandingPage from './platforms/tablet';\nimport { Platform, useGetPlatform } from './configs';\n\nconst LandingPageContainer = styled.div<{ isMobile: boolean }>`\n    display: flex;\n    justify-content: center;\n    background: ${props => props.theme.Colors.dark};\n    height: 100vh;\n    min-height: 700px;\n    flex-direction: ${props => (props.isMobile ? 'column' : 'row')};\n`;\n\nconst LandingPage = () => {\n    const platform = useGetPlatform();\n    const isMobile = platform === Platform.MOBILE;\n    let content = <WebLandingPage />;\n\n    switch (platform) {\n        case Platform.DESKTOP:\n            content = <WebLandingPage />;\n            break;\n        case Platform.LAPTOP:\n            content = <WebLandingPage />;\n            break;\n        case Platform.TABLET:\n            content = <TabletLandingPage />;\n            break;\n        case Platform.MOBILE:\n            content = <MobileLandingPage />;\n            break;\n        default:\n            content = <WebLandingPage />;\n    }\n    return (\n        <LandingPageContainer isMobile={isMobile}>\n            {content}\n        </LandingPageContainer>\n    );\n};\n\nexport default LandingPage;\n","import { ErrorResult } from '../../../constants/interfaces/ErrorResult';\r\nimport {\r\n    handleMessage,\r\n    useShowMessage,\r\n} from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useCallback } from 'react';\r\nimport { SearchParams } from '../../../constants/interfaces/filters';\r\nimport {\r\n    modifyTeamName,\r\n    resetSingleTeamPage,\r\n    searchSingleTeamAllUsersFailure,\r\n    searchSingleTeamAllUsersStart,\r\n    searchSingleTeamAllUsersSuccess,\r\n    searchSingleTeamFailure,\r\n    searchSingleTeamMembersFailure,\r\n    searchSingleTeamMembersStart,\r\n    searchSingleTeamMembersSuccess,\r\n    searchSingleTeamStart,\r\n    searchSingleTeamSuccess,\r\n    searchTeamPractisSetsFailure,\r\n    searchTeamPractisSetsStart,\r\n    searchTeamPractisSetsSuccess,\r\n    updateAllSelectedTeamPractisSetsState,\r\n    updateAllSelectedTeamsState,\r\n    updateSelectedTeamPractisSetState,\r\n    updateSelectedTeamState,\r\n    createSingleTeamSuccess,\r\n    updateSingleTeamFailure,\r\n    updateSingleTeamStart,\r\n    updateSingleTeamSuccess,\r\n    updateTeamActionFailure,\r\n    updateTeamActionStart,\r\n    fetchAllTeamsStart,\r\n    fetchAllTeamsFailure,\r\n    fetchAllTeamsSuccess,\r\n    updateTeamActionSuccess,\r\n    checkAllProgress,\r\n    checkSingleProgress,\r\n    clearLabelFilterAction,\r\n    getPractisSetFailure,\r\n    getPractisSetReportFailure,\r\n    getPractisSetReportStart,\r\n    getPractisSetReportSuccess,\r\n    getPractisSetStart,\r\n    getPractisSetSuccess,\r\n    resetPractisSetReport,\r\n    saveSelectedInvitationLabels,\r\n    searchInvitationUsersFailure,\r\n    searchInvitationUsersStart,\r\n    searchInvitationUsersSuccess,\r\n    searchPractisUsersFailure,\r\n    searchPractisUsersStart,\r\n    searchPractisUsersSuccess,\r\n    searchTrainerFailure,\r\n    searchTrainerStart,\r\n    searchTrainerSuccess,\r\n    sendTraineeInvitationFailure,\r\n    sendTraineeInvitationStart,\r\n    sendTraineeInvitationSuccess,\r\n    setLabelFilterAction,\r\n    toggleCollapseLabelFieldAction,\r\n    updateAllSelectedInvitationTraineesState,\r\n    updateAllSelectedPractisSetsState,\r\n    updatedProgressActionSuccess,\r\n    updateSelectedInvitationTraineesState,\r\n    updateSelectedPractisSetState,\r\n    searchTeamMembersStartAction,\r\n    searchTeamMembersSuccessAction,\r\n    searchTeamMembersFailureAction,\r\n    updateMemberActionSuccess,\r\n    setDeletedLabelsToSingleTeam,\r\n    setAssignedLabelsToSingleTeam,\r\n    searchTeamLeadersStartAction,\r\n    searchTeamLeadersSuccessAction,\r\n    searchTeamLeadersFailureAction,\r\n    selectTeamLeaderAction,\r\n    selectMultipleTeamLeaderAction,\r\n    saveTeamLeaderSelection,\r\n    resetTeamLeadersSelectionAction,\r\n    getTeamInfoStart,\r\n    getTeamInfoSuccess,\r\n    getTeamInfoFailure,\r\n    getTeamInfoTrainingStart,\r\n    getTeamInfoTrainingSuccess,\r\n    getTeamInfoTrainingFailure,\r\n    resetTeamInfo,\r\n    deselectAllTeamLeadersSelectionAction,\r\n    resetPractisSetDetails,\r\n    removeSingleTeamAllUsersLabel,\r\n    removeSingleTeamMemberLabel,\r\n    updateTeamLead,\r\n    clearTrainerPractisSet,\r\n} from './actions';\r\nimport {\r\n    useDeleteTeamsApi,\r\n    useGetSingleTeamApi,\r\n    useCreateNewTeamApi,\r\n    useUpdateTeamNameApi,\r\n    useSearchTeamsApi,\r\n    useGetPractisSetsReportApi,\r\n    useMarkTeamAsViewedApi,\r\n    useSearchTeamMembersApi,\r\n    useGetMembersReportApi,\r\n    useSearchTeamLeadersApi,\r\n    useSearchTrainingPractisSetsApi,\r\n    useSearchPractisSetDetailsUsersApi,\r\n    useNudgeUsersApi,\r\n    useDeleteUserLabelsApi,\r\n    useDeletePractisSetLabelsApi,\r\n    useUpdateTeamLeaderApi,\r\n    useDeleteLabelsFromTeamsApi,\r\n    useGetEnrollmentsReportApi,\r\n    useEnrollPractisSetsToUserApi,\r\n    useRemindToStartApi,\r\n    useSearchUsersApi,\r\n    useDeleteEnrollmentsApi,\r\n    useGetEnrollmentApi,\r\n    useGetEnrollmentProgressApi,\r\n    useGetEnrollmentDailyTrainingApi,\r\n} from '../../../api';\r\nimport { EnrollmentType } from '../../../api/enrollments/types';\r\nimport { Team, TeamV2 } from '../../../constants/interfaces/Team';\r\nimport { setAssignLabelsAction } from '../../labels/store/actions';\r\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\r\nimport { fileDownload } from '../../../helpers/functions/file-download';\r\nimport { Dispatch } from 'redux';\r\nimport { ThunkContext } from '../../../tools/thunk/ThunkContext';\r\nimport {\r\n    ListResult,\r\n    PaginationResult,\r\n} from '../../../constants/interfaces/PaginationResult';\r\nimport { useGetPractisSetApi } from '../../../api';\r\nimport { SEARCH_STATE } from '../../searchState/constants';\r\nimport {\r\n    setSearchState,\r\n    setSecondarySearchState,\r\n} from '../../searchState/store/actions';\r\nimport {\r\n    SearchTrainingPractisSetsParams,\r\n    ReportTrainingPractisSetsParams,\r\n    ReportMembersParams,\r\n    SearchTeamParams,\r\n} from '../../../api/teams/types';\r\nimport { usePortableLabelsState } from '../../portableLabels/store/states';\r\nimport { findAllChildIds } from '../../../helpers/functions/tree-helpers';\r\nimport {\r\n    createSearchTeamMembersParams,\r\n    createSearchTeamsParams,\r\n    createSearchPractisSetDetailsParams,\r\n} from '../tools';\r\nimport { CLIENT_SIDE_ERROR_MESSAGE } from '../../../ui/components/ErrorMessages/constants';\r\nimport {\r\n    EnrollmentDailyTraining,\r\n    EnrollmentInterface,\r\n    EnrollmentProgress,\r\n    Enrollments,\r\n} from '../../../constants/interfaces/Enrollments';\r\nimport { getSearchSortingValue } from '../../../helpers/functions/search-params-helpers';\r\nimport { NudgeData, RemindToStartEnrollment } from '../../../api/alert/types';\r\nimport { ENROLLMENT_REMIND_TO_START } from '../../../api/alert/constants';\r\nimport { SearchUsersParams } from '../../../api/users/types';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { UserStatus } from '../../users/store/costants';\r\n\r\nconst uuid = require('uuid/v1');\r\n\r\nexport const useGetTeamInfoService = () => {\r\n    const dispatch = useDispatch();\r\n    const getSingleTeam = useGetSingleTeamApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (draftId: number) => {\r\n            dispatch(getTeamInfoStart());\r\n            getSingleTeam(draftId)\r\n                .then(data => {\r\n                    dispatch(getTeamInfoSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(getTeamInfoFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, getSingleTeam, showMessage]\r\n    );\r\n};\r\n\r\nexport const useResetTeamInfoService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(resetTeamInfo());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useGetTeamInfoTrainingService = () => {\r\n    const dispatch = useDispatch();\r\n    const getSingleTeam = useGetSingleTeamApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (draftId: number) => {\r\n            dispatch(getTeamInfoTrainingStart());\r\n            getSingleTeam(draftId)\r\n                .then(data => {\r\n                    dispatch(getTeamInfoTrainingSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(getTeamInfoTrainingFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, getSingleTeam, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGetSingleTeamService = () => {\r\n    const dispatch = useDispatch();\r\n    const getSingleTeam = useGetSingleTeamApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (draftId: number) => {\r\n            dispatch(searchSingleTeamStart());\r\n            getSingleTeam(draftId)\r\n                .then(data => {\r\n                    dispatch(searchSingleTeamSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchSingleTeamFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, getSingleTeam, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchTeamsAllUsersService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchTeamsAllUsers = useSearchUsersApi();\r\n    const profile = useSelector(getProfileState);\r\n    const showMessage = useShowMessage();\r\n\r\n    return useCallback(\r\n        (searchParams: SearchParams, isRefreshed?: boolean) => {\r\n            if (!profile?.companyId) return;\r\n            const searchAllUsersParams: SearchUsersParams = {\r\n                status:\r\n                    searchParams.filters?.reduce((statuses, filter) => {\r\n                        if (filter.field === 'status') {\r\n                            statuses = String(filter.value);\r\n                        }\r\n\r\n                        return statuses;\r\n                    }, '') || `${UserStatus.ACTIVE},${UserStatus.PENDING}`,\r\n                labels: searchParams.labelIDs?.join(','),\r\n                roles: searchParams.roleIDs?.join(','),\r\n                teams: searchParams.teamIds?.join(','),\r\n                companies: profile?.companyId?.toString(),\r\n                limit: searchParams.limit ?? 20,\r\n                offset: searchParams.offset,\r\n                query: searchParams.searchTerm,\r\n                sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\r\n                excludeTeamId: searchParams.teamId?.toString(),\r\n            };\r\n            dispatch(searchSingleTeamAllUsersStart());\r\n            searchTeamsAllUsers(searchAllUsersParams)\r\n                .then(data => {\r\n                    dispatch(\r\n                        searchSingleTeamAllUsersSuccess(\r\n                            data,\r\n                            searchParams.offset,\r\n                            isRefreshed\r\n                        )\r\n                    );\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchSingleTeamAllUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, profile?.companyId, searchTeamsAllUsers, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchSingleTeamMembersService = (teamId: number | string) => {\r\n    const dispatch = useDispatch();\r\n    const searchTeamMembersApi = useSearchTeamMembersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (sp: SearchParams, isRefreshed?: boolean) => {\r\n            dispatch(searchSingleTeamMembersStart());\r\n            searchTeamMembersApi(teamId, createSearchTeamMembersParams(sp))\r\n                .then(data => {\r\n                    dispatch(\r\n                        searchSingleTeamMembersSuccess(\r\n                            data,\r\n                            sp.offset,\r\n                            isRefreshed\r\n                        )\r\n                    );\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchSingleTeamMembersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, searchTeamMembersApi, teamId, showMessage]\r\n    );\r\n};\r\n\r\nexport const useTogglePromoteTeamLeader = () => {\r\n    const updateTeamLeaderApi = useUpdateTeamLeaderApi();\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (teamUserId: number, isTeamLead: boolean) => {\r\n            dispatch(updateSingleTeamStart());\r\n            updateTeamLeaderApi(teamUserId, isTeamLead)\r\n                .then(() => {\r\n                    dispatch(updateTeamLead(teamUserId, isTeamLead));\r\n                    dispatch(updateSingleTeamSuccess());\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateSingleTeamFailure(error.message));\r\n                });\r\n        },\r\n        [dispatch, updateTeamLeaderApi]\r\n    );\r\n};\r\n\r\nexport const useSetAssignedLabelsToSingleTeam = () => {\r\n    const dispatch = useDispatch();\r\n    const showMessage = useShowMessage();\r\n\r\n    return useCallback(\r\n        (labelIDs: number[]) => {\r\n            dispatch(setAssignedLabelsToSingleTeam(labelIDs));\r\n            showMessage('Labels have been assigned to the team', 'success');\r\n        },\r\n        [dispatch, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSetDeletedLabelsToSingleTeam = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelIDs: number[]) => {\r\n            dispatch(setDeletedLabelsToSingleTeam(labelIDs));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useResetSingleTeamPageService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(resetSingleTeamPage());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useCreateNewTeamService = () => {\r\n    const dispatch = useDispatch();\r\n    const createNewTeamApi = useCreateNewTeamApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (name: string): Promise<TeamV2> => {\r\n            return createNewTeamApi(name)\r\n                .then(data => {\r\n                    dispatch(createSingleTeamSuccess(data));\r\n                    showMessage('New team has been created', 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, createNewTeamApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @description updates team name\r\n * @function useUpdateTeamNameService\r\n * @param { string | number } teamId\r\n * @param { string } name\r\n * @returns { Promise }\r\n */\r\nexport const useUpdateTeamNameService = (teamId: string | number) => {\r\n    const dispatch = useDispatch();\r\n    const updateTeamNameApi = useUpdateTeamNameApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (name: string): Promise<void> => {\r\n            dispatch(updateSingleTeamStart());\r\n            return updateTeamNameApi(teamId, name)\r\n                .then(() => {\r\n                    dispatch(updateSingleTeamSuccess({ id: Number(teamId) }));\r\n                    dispatch(modifyTeamName(name));\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateSingleTeamFailure(error.message));\r\n                    error.message &&\r\n                        showMessage(\r\n                            CLIENT_SIDE_ERROR_MESSAGE[error.message],\r\n                            'error'\r\n                        );\r\n                    throw error;\r\n                });\r\n        },\r\n        [teamId, dispatch, updateTeamNameApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchTeamsService = (storeSearchParams: boolean = false) => {\r\n    const dispatch = useDispatch();\r\n    const searchTeamsApi = useSearchTeamsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (p: SearchParams) => {\r\n            dispatch(fetchAllTeamsStart());\r\n            const params: SearchTeamParams = createSearchTeamsParams(p);\r\n\r\n            searchTeamsApi(params)\r\n                .then(data => {\r\n                    if (storeSearchParams) {\r\n                        dispatch(\r\n                            setSecondarySearchState(SEARCH_STATE.TEAMS.name, p)\r\n                        );\r\n                    }\r\n                    dispatch(fetchAllTeamsSuccess(data));\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(fetchAllTeamsFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, searchTeamsApi, showMessage, storeSearchParams]\r\n    );\r\n};\r\n\r\nexport const searchTeamPractisSets = (sp: SearchParams) => {\r\n    return (dispatch: Dispatch<any>, getState: any, context: ThunkContext) => {\r\n        dispatch(searchTeamPractisSetsStart());\r\n        return context.http\r\n            .post('teams/practisSets/search', sp)\r\n            .then((data: PaginationResult<PractisSets>) => {\r\n                dispatch(searchTeamPractisSetsSuccess(data));\r\n                return data;\r\n            })\r\n            .catch((error: ErrorResult) => {\r\n                dispatch(searchTeamPractisSetsFailure(error.message));\r\n                handleMessage(dispatch, error.message, 'error');\r\n                return 'error';\r\n            });\r\n    };\r\n};\r\n\r\n/**\r\n * @description deletes team member label including children labels\r\n * @function useDeleteMemberLabelService\r\n * @param { string | number } teamId\r\n * @param { number } userId\r\n * @param { number } labelId\r\n * @returns { void }\r\n */\r\nexport const useDeleteMemberLabelService = (teamId: string | number) => {\r\n    const dispatch = useDispatch();\r\n    const deleteUserLabelsApi = useDeleteUserLabelsApi();\r\n    const showMessage = useShowMessage();\r\n    const labels = usePortableLabelsState();\r\n    return useCallback(\r\n        (userId: number, labelId: number) => {\r\n            const payload: { userId: number; labelId: number }[] = [\r\n                { userId, labelId },\r\n            ];\r\n            const children: any[] = [];\r\n            findAllChildIds(labels.data.items, labelId, children);\r\n            if (children.length > 0)\r\n                children.forEach(item =>\r\n                    payload.push({ userId, labelId: item.id })\r\n                );\r\n            return deleteUserLabelsApi(payload)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateMemberActionSuccess(\r\n                            { id: teamId } as Team,\r\n                            'labels'\r\n                        )\r\n                    );\r\n                    showMessage('Label removed successfully', 'success');\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [teamId, labels, showMessage, deleteUserLabelsApi, dispatch]\r\n    );\r\n};\r\n\r\n/**\r\n * @description deletes a label of user who can be assigned to a team\r\n * @function useDeleteSingleTeamAllUsersLabelService\r\n * @param { string | number } teamId\r\n * @param { number } userId\r\n * @param { number } labelId\r\n * @returns { void }\r\n */\r\nexport const useDeleteSingleTeamAllUsersLabelService = (\r\n    teamId: string | number\r\n) => {\r\n    const dispatch = useDispatch();\r\n    const deleteMemberLabelService = useDeleteMemberLabelService(teamId);\r\n    return useCallback(\r\n        (userId: number, labelId: number) => {\r\n            dispatch(updateSingleTeamStart());\r\n            deleteMemberLabelService(userId, labelId)\r\n                .then(() => {\r\n                    dispatch(removeSingleTeamAllUsersLabel(userId, labelId));\r\n                    dispatch(updateSingleTeamSuccess());\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateSingleTeamFailure(error.message));\r\n                });\r\n        },\r\n        [dispatch, deleteMemberLabelService]\r\n    );\r\n};\r\n\r\n/**\r\n * @description deletes a label of a team member\r\n * @function useDeleteSingleTeamMemberLabelService\r\n * @param { string | number } teamId\r\n * @param { number } userId\r\n * @param { number } labelId\r\n * @returns { void }\r\n */\r\nexport const useDeleteSingleTeamMemberLabelService = (\r\n    teamId: string | number\r\n) => {\r\n    const dispatch = useDispatch();\r\n    const deleteMemberLabelService = useDeleteMemberLabelService(teamId);\r\n    return useCallback(\r\n        (userId: number, labelId: number) => {\r\n            dispatch(updateSingleTeamStart());\r\n            deleteMemberLabelService(userId, labelId)\r\n                .then(() => {\r\n                    dispatch(removeSingleTeamMemberLabel(userId, labelId));\r\n                    dispatch(updateSingleTeamSuccess());\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateSingleTeamFailure(error.message));\r\n                });\r\n        },\r\n        [dispatch, deleteMemberLabelService]\r\n    );\r\n};\r\n\r\nexport const useDeleteLabelFromTeamService = () => {\r\n    const dispatch = useDispatch();\r\n    const deleteLabelFromTeamApi = useDeleteLabelsFromTeamsApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    return useCallback(\r\n        (teamRemovedLabels, teamId) => {\r\n            deleteLabelFromTeamApi(teamRemovedLabels)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateTeamActionSuccess(\r\n                            { id: teamId } as Team,\r\n                            'labels'\r\n                        )\r\n                    );\r\n                    showMessage(`Label removed successfully`, 'success');\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [showMessage, deleteLabelFromTeamApi, dispatch]\r\n    );\r\n};\r\n\r\nexport const useSetAssignLabelsActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labels: number[]) => {\r\n            dispatch(setAssignLabelsAction(labels));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllSelectedTeamsStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (teamIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(updateAllSelectedTeamsState(teamIds, checked, partial));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateSelectedTeamStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (teamId: number) => {\r\n            dispatch(updateSelectedTeamState(teamId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllTeamSelectedPractisSetsStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (setIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(\r\n                updateAllSelectedTeamPractisSetsState(setIds, checked, partial)\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateTeamSelectedPractisSetStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (setId: number) => {\r\n            dispatch(updateSelectedTeamPractisSetState(setId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\n\r\nexport const useDeleteTeamsService = () => {\r\n    const dispatch = useDispatch();\r\n    const deleteTeamsApi = useDeleteTeamsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (teamIds: number, successCallback?: () => void) => {\r\n            dispatch(updateTeamActionStart());\r\n            return deleteTeamsApi([teamIds])\r\n                .then((data: any) => {\r\n                    dispatch(updateTeamActionSuccess({ id: uuid() }, 'delete'));\r\n\r\n                    showMessage('Team has been deleted', 'success');\r\n                    successCallback?.();\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateTeamActionFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, deleteTeamsApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSearchTrainingPractisSets = (teamId: string) => {\r\n    const dispatch = useDispatch();\r\n    const searchTrainingPractisSets = useSearchTrainingPractisSetsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (sp: SearchParams) => {\r\n            dispatch(searchTrainerStart());\r\n            const overdueFilter = sp.filters?.find(\r\n                f => f.field === 'hasOverdue'\r\n            );\r\n            const params: SearchTrainingPractisSetsParams = {\r\n                enrollmentStatus: sp.filterByStatus?.join(','),\r\n                isOverdue: overdueFilter?.value ? true : undefined,\r\n                labels: sp.labelIDs?.join(','),\r\n                limit: sp.limit ?? 20,\r\n                offset: sp.offset ?? 0,\r\n                query: sp.searchTerm,\r\n                sort: getSearchSortingValue(sp.orderBy, 'name', true),\r\n            };\r\n            return searchTrainingPractisSets(teamId, params)\r\n                .then((data: any) => {\r\n                    dispatch(\r\n                        setSearchState(\r\n                            SEARCH_STATE.TRAINING.name,\r\n                            SEARCH_STATE.TRAINING.childrenKeys,\r\n                            sp\r\n                        )\r\n                    );\r\n                    dispatch(searchTrainerSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchTrainerFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return 'error';\r\n                });\r\n        },\r\n        [dispatch, searchTrainingPractisSets, showMessage, teamId]\r\n    );\r\n};\r\n\r\n\r\nexport const useClearTrainerPractisSet = () => {\r\n    const dispatch = useDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(clearTrainerPractisSet());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSearchPractisSetDetailsUsersService = (\r\n    teamId: string,\r\n    practisSetId: any\r\n) => {\r\n    const dispatch = useDispatch();\r\n    const searchPractisSetDetailsUsers = useSearchPractisSetDetailsUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (sp: SearchParams) => {\r\n            const params = createSearchPractisSetDetailsParams(sp);\r\n            dispatch(searchPractisUsersStart());\r\n            return searchPractisSetDetailsUsers(teamId, practisSetId, params)\r\n                .then((data: PaginationResult<EnrollmentInterface>) => {\r\n                    dispatch(\r\n                        setSearchState(\r\n                            SEARCH_STATE.PRACTIS_SET_DETAILS.name,\r\n                            SEARCH_STATE.PRACTIS_SET_DETAILS.childrenKeys,\r\n                            sp\r\n                        )\r\n                    );\r\n                    dispatch(searchPractisUsersSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchPractisUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return 'error';\r\n                });\r\n        },\r\n        [\r\n            dispatch,\r\n            practisSetId,\r\n            searchPractisSetDetailsUsers,\r\n            showMessage,\r\n            teamId,\r\n        ]\r\n    );\r\n};\r\n\r\nexport const getAssignUsersSearchParams = (searchParams: SearchParams) => {\r\n    const hasRegStatusesFilter = searchParams.filterByRegistrationStatus && searchParams.filterByRegistrationStatus.length;\r\n    return {\r\n        status: (hasRegStatusesFilter ? <string[]>searchParams.filterByRegistrationStatus : [UserStatus.ACTIVE, UserStatus.PENDING]).join(','),\r\n        labels: searchParams.labelIDs?.join(','),\r\n        teams: searchParams.teamId?.toString(),\r\n        limit: searchParams.limit ?? 20,\r\n        offset: searchParams.offset ?? 0,\r\n        query: searchParams.searchTerm,\r\n        sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\r\n        excludePSets: searchParams.practisSetId?.toString(),\r\n        companies: searchParams.companyId?.toString(),\r\n    } as SearchUsersParams;\r\n};\r\n\r\nexport const useSearchAssignUsersService = () => {\r\n    const dispatch = useDispatch();\r\n    const showMessage = useShowMessage();\r\n    const searchAssignUsers = useSearchUsersApi();\r\n\r\n    return useCallback(\r\n        (searchParams: SearchParams, isRefreshed?: boolean) => {\r\n            dispatch(searchInvitationUsersStart());\r\n            const params = getAssignUsersSearchParams(searchParams);\r\n            return searchAssignUsers(params)\r\n                .then(data => {\r\n                    dispatch(\r\n                        searchInvitationUsersSuccess(\r\n                            data,\r\n                            params.offset,\r\n                            isRefreshed\r\n                        )\r\n                    );\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchInvitationUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, searchAssignUsers, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGetPractisSetService = () => {\r\n    const dispatch = useDispatch();\r\n    const getPractisSet = useGetPractisSetApi();\r\n    return useCallback(\r\n        (practisSetId: number) => {\r\n            dispatch(getPractisSetStart());\r\n            return getPractisSet(practisSetId)\r\n                .then(data => {\r\n                    dispatch(getPractisSetSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(getPractisSetFailure(error.message));\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, getPractisSet]\r\n    );\r\n};\r\n\r\nexport const useResetPractisSetDetailsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(resetPractisSetDetails());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useEnrollPractisSetsToUsersService = () => {\r\n    const createInvitationApi = useEnrollPractisSetsToUserApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        async (enrollments: EnrollmentType[]) => {\r\n            try {\r\n                await createInvitationApi(enrollments);\r\n            } catch (error: any) {\r\n                showMessage(error?.message, 'error');\r\n                throw error;\r\n            }\r\n            showMessage(\r\n                `${enrollments.length} Users ${\r\n                    enrollments.length > 1 ? 'have' : 'has'\r\n                } been assigned`,\r\n                'success'\r\n            );\r\n        },\r\n        [createInvitationApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useRemindToStartService = () => {\r\n    const dispatch = useDispatch();\r\n    const remindToStart = useRemindToStartApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (enrollmentIds: number[]) => {\r\n            dispatch(sendTraineeInvitationStart());\r\n\r\n            const enrollments = enrollmentIds.map(\r\n                enrollmentId =>\r\n                    ({\r\n                        enrollmentId,\r\n                        type: ENROLLMENT_REMIND_TO_START,\r\n                    } as RemindToStartEnrollment)\r\n            );\r\n\r\n            return remindToStart(enrollments)\r\n                .then(data => {\r\n                    if (enrollments.length === 1) {\r\n                        dispatch(\r\n                            sendTraineeInvitationSuccess(\r\n                                enrollments as unknown as Enrollments,\r\n                                'reInvite'\r\n                            )\r\n                        );\r\n                        showMessage(`Reminder Sent to User`, 'success');\r\n                    }\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(sendTraineeInvitationFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, remindToStart, showMessage]\r\n    );\r\n};\r\n\r\nexport const usePractisSetReportService = () => {\r\n    const dispatch = useDispatch();\r\n    const getEnrollmentApi = useGetEnrollmentApi();\r\n    const getEnrollmentProgressApi = useGetEnrollmentProgressApi();\r\n    const getEnrollmentDailyTrainingApi = useGetEnrollmentDailyTrainingApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (enrollmentId: number) => {\r\n            dispatch(getPractisSetReportStart());\r\n            return Promise.all([\r\n                getEnrollmentApi(enrollmentId),\r\n                getEnrollmentProgressApi(enrollmentId),\r\n                getEnrollmentDailyTrainingApi(enrollmentId),\r\n            ])\r\n                .then(data => {\r\n                    const enrollment = data[0] as EnrollmentInterface;\r\n                    const progress = data[1] as ListResult<EnrollmentProgress>;\r\n                    const dailyTraining = data[2] as EnrollmentDailyTraining[];\r\n                    dispatch(\r\n                        getPractisSetReportSuccess(\r\n                            enrollment,\r\n                            progress,\r\n                            dailyTraining\r\n                        )\r\n                    );\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(getPractisSetReportFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [\r\n            dispatch,\r\n            getEnrollmentApi,\r\n            getEnrollmentProgressApi,\r\n            getEnrollmentDailyTrainingApi,\r\n            showMessage,\r\n        ]\r\n    );\r\n};\r\n\r\nexport const useResetPractisSetReportService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(resetPractisSetReport());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useCheckAllProgressService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (progressIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(checkAllProgress(progressIds, checked, partial));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useCheckSingleProgressService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (progressId: number) => {\r\n            dispatch(checkSingleProgress(progressId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\n/**\r\n * @description deletes team practis set label including children labels\r\n * @function useDeleteTeamPractisSetLabelService\r\n * @param { number } practisSetId\r\n * @param { number } labelId\r\n * @returns { void }\r\n */\r\nexport const useDeleteTeamPractisSetLabelService = () => {\r\n    const dispatch = useDispatch();\r\n    const deletePractisSetLabelsApi = useDeletePractisSetLabelsApi();\r\n    const showMessage = useShowMessage();\r\n    const labels = usePortableLabelsState();\r\n    return useCallback(\r\n        (practisSetId: number, labelId: number) => {\r\n            const payload: { practisSetId: number; labelId: number }[] = [\r\n                { practisSetId, labelId },\r\n            ];\r\n            const children: any[] = [];\r\n            findAllChildIds(labels.data.items, labelId, children);\r\n            if (children.length > 0)\r\n                children.forEach(item =>\r\n                    payload.push({ practisSetId, labelId: item.id })\r\n                );\r\n            deletePractisSetLabelsApi(payload)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updatedProgressActionSuccess(\r\n                            { id: practisSetId } as PractisSets,\r\n                            'labels'\r\n                        )\r\n                    );\r\n                    showMessage('Label removed successfully', 'success');\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [labels, showMessage, deletePractisSetLabelsApi, dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllSelectedInvitationTraineesStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (userIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(\r\n                updateAllSelectedInvitationTraineesState(\r\n                    userIds,\r\n                    checked,\r\n                    partial\r\n                )\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateSelectedInvitationTraineesStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (userId: number) => {\r\n            dispatch(updateSelectedInvitationTraineesState(userId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useNudgeUsersService = () => {\r\n    const nudgeUsersApi = useNudgeUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (nudgeUserData: NudgeData[], successCallback?: () => void) => {\r\n            nudgeUsersApi(nudgeUserData)\r\n                .then(() => {\r\n                    showMessage(`Message was sent successfully`, 'success');\r\n                    successCallback?.();\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [nudgeUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useToggleCollapseLabelFieldService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labelId: number) => {\r\n            dispatch(toggleCollapseLabelFieldAction(labelId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSetLabelFilterActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (labels: number[]) => {\r\n            dispatch(setLabelFilterAction(labels));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useClearLabelFilterActionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(clearLabelFilterAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSaveSelectedInvitationLabelsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(saveSelectedInvitationLabels());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useUnenrollEnrollmentService = () => {\r\n    const unenrollEnrollmentApi = useDeleteEnrollmentsApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    return useCallback(\r\n        (enrollmentIds: number[], successCallback?: () => void) => {\r\n            return unenrollEnrollmentApi(enrollmentIds)\r\n                .then(() => {\r\n                    showMessage(\r\n                        `${\r\n                            enrollmentIds.length > 1 ? 'Users have' : 'User has'\r\n                        }  been unassigned`,\r\n                        'success'\r\n                    );\r\n                    successCallback?.();\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [unenrollEnrollmentApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGetMembersReportService = () => {\r\n    const getMembersReportApi = useGetMembersReportApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (userIds: number[] | null, teamId: string, sp: SearchParams) => {\r\n            const overdueFilter = sp.filters?.find(\r\n                f => f.field === 'hasOverdue'\r\n            );\r\n            const params: ReportMembersParams = {\r\n                userStatus: sp.filterByRegistrationStatus?.join(','),\r\n                enrollmentStatus: sp.filterByStatus?.join(','),\r\n                isOverdue: overdueFilter?.value ? true : undefined,\r\n                labels: sp.labelIDs?.join(','),\r\n                limit: userIds?.length ? undefined : sp.limit ?? 20,\r\n                offset: sp.offset ?? 0,\r\n                query: sp.searchTerm,\r\n                sort: getSearchSortingValue(sp.orderBy, 'name', true),\r\n                users: userIds?.join(','),\r\n            };\r\n            return getMembersReportApi(teamId, params)\r\n                .then((data: any) => {\r\n                    fileDownload(data, 'report.csv');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [getMembersReportApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGetTraineesReportService = () => {\r\n    const getEnrollmentsReportApi = useGetEnrollmentsReportApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (\r\n            enrollmentIds: number[] | null,\r\n            practisSetId: number,\r\n            search: SearchParams,\r\n            teamId: number\r\n        ) => {\r\n            const params = {\r\n                ...createSearchPractisSetDetailsParams(search),\r\n                enrollments: enrollmentIds?.join(','),\r\n                limit: undefined,\r\n                offset: undefined,\r\n            };\r\n            return getEnrollmentsReportApi(params, teamId, practisSetId)\r\n                .then((data: any) => {\r\n                    fileDownload(data, 'report.xlsx');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [getEnrollmentsReportApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useGetPractisSetsReportService = () => {\r\n    const getPractisSetsReportApi = useGetPractisSetsReportApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (sp: SearchParams, practisSetIds: number[] | null, teamId: string) => {\r\n            const overdueFilter = sp.filters?.find(\r\n                f => f.field === 'hasOverdue'\r\n            );\r\n            const params: ReportTrainingPractisSetsParams = {\r\n                enrollmentStatus: sp.filterByStatus?.join(','),\r\n                isOverdue: overdueFilter?.value ? true : undefined,\r\n                labels: sp.labelIDs?.join(','),\r\n                limit: practisSetIds?.length ? undefined : sp.limit ?? 20,\r\n                offset: sp.offset ?? 0,\r\n                query: sp.searchTerm,\r\n                sort: getSearchSortingValue(sp.orderBy, 'name', true),\r\n                psets: practisSetIds?.join(','),\r\n            };\r\n            return getPractisSetsReportApi(params, teamId)\r\n                .then((data: any) => {\r\n                    fileDownload(data, 'practis-set-reports.csv');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [getPractisSetsReportApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useUpdateAllSelectedPractisSetsStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (setIds: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(\r\n                updateAllSelectedPractisSetsState(setIds, checked, partial)\r\n            );\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useUpdateSelectedPractisSetStateService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (setId: number) => {\r\n            dispatch(updateSelectedPractisSetState(setId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useMarkTeamAsViewedService = () => {\r\n    const dispatch = useDispatch();\r\n    const markTeamAsViewedApi = useMarkTeamAsViewedApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (teamId: any) => {\r\n            markTeamAsViewedApi(teamId)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateTeamActionSuccess(\r\n                            { id: teamId } as Team,\r\n                            'update'\r\n                        )\r\n                    );\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [showMessage, markTeamAsViewedApi, dispatch]\r\n    );\r\n};\r\n\r\nexport const useSearchTeamMembersService = (teamId: number | string) => {\r\n    const teamMembersApi = useSearchTeamMembersApi();\r\n    const dispatch = useDispatch();\r\n\r\n    return useCallback(\r\n        (sp: SearchParams) => {\r\n            dispatch(searchTeamMembersStartAction());\r\n            teamMembersApi(teamId, createSearchTeamMembersParams(sp))\r\n                .then(data => {\r\n                    dispatch(\r\n                        setSearchState(\r\n                            SEARCH_STATE.MEMBERS.name,\r\n                            SEARCH_STATE.MEMBERS.childrenKeys,\r\n                            sp\r\n                        )\r\n                    );\r\n                    dispatch(searchTeamMembersSuccessAction(data));\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchTeamMembersFailureAction(error.message));\r\n                });\r\n        },\r\n        [teamMembersApi, teamId, dispatch]\r\n    );\r\n};\r\n\r\nexport const useSearchTeamsLeadersService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchTeamLeadersApi = useSearchTeamLeadersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (sp?: SearchParams) => {\r\n            dispatch(searchTeamLeadersStartAction());\r\n            searchTeamLeadersApi(sp)\r\n                .then(data => {\r\n                    dispatch(searchTeamLeadersSuccessAction(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchTeamLeadersFailureAction(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, searchTeamLeadersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useSelectTeamLeaderService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (leaderId: number) => {\r\n            dispatch(selectTeamLeaderAction(leaderId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSelectMultipleTeamLeadersService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (leaderId: number[]) => {\r\n            dispatch(selectMultipleTeamLeaderAction(leaderId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useResetTeamLeadersSelection = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(resetTeamLeadersSelectionAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useDeselectAllTeamLeadersSelection = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(deselectAllTeamLeadersSelectionAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSaveTeamLeaderSelection = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(saveTeamLeaderSelection());\r\n    }, [dispatch]);\r\n};","import { NEW_PERMISSIONS } from '../../constants/enums/permissions';\nimport { usePermissionsState } from '../../features/permissions/store/state';\nimport { useHistory } from '../../tools/router';\nimport ROUTES from '../../routes/routes';\nimport { useCallback } from 'react';\n\nexport function useHandleAccessPage() {\n    const permissionList = usePermissionsState();\n    const history = useHistory();\n    return useCallback(\n        (permissions: NEW_PERMISSIONS[]) => {\n            if (permissionList.length < 1) return true;\n            const hasPermission = permissions.some(r =>\n                permissionList.includes(r)\n            );\n            if (hasPermission) {\n                return true;\n            } else {\n                history.push(ROUTES.PROFILE.replace(':userId', 'me'));\n            }\n        },\n        [permissionList, history]\n    );\n}\n","import { UserInfo } from './UserInfo';\n\nexport interface TeamMember {\n    id: number;\n    teamId: number;\n    user: UserInfo;\n    userStatus: string;\n    labels: number[];\n    accuracy?: number\n    isOverdue: boolean\n    lastTraining: null | Date;\n    trainingTime?: number\n    enrollmentCompleted: number;\n    enrollmentEnrolled: number;\n    enrollmentNotStarted: number;\n    isTeamLead?: boolean;\n}\n\nexport enum TeamMemberStatusEnum {\n    PENDING = 'PENDING',\n    ACTIVE = 'ACTIVE'\n}","import React, {\n    createRef,\n    CSSProperties,\n    FC,\n    ReactNode,\n    RefObject,\n    useMemo,\n} from 'react';\nimport styled, { css } from 'styled-components';\nimport { NavLink } from 'react-router-dom';\nimport { kebabCase } from 'lodash';\n\nimport { Popup } from '../Popup';\nimport { NavigationHint } from './Navigation';\n\n//region Styles\nconst StyledNavigationItemContainer = styled.div<{\n    isActive: boolean;\n    height?: number;\n    widthPercent?: number;\n    url?: string;\n    disablehovereffect?: boolean;\n    fontSize?: string;\n}>`\n    height: ${props => (props.height ? `${props.height}px` : '32px')};\n    padding: 0 15px 0 15px;\n    padding-bottom: 12px;\n    margin-right: 32px;\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '13px')};\n    font-weight: 600;\n    position: relative;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    cursor: pointer;\n    color: ${props =>\n        props.isActive\n            ? props.theme.Colors.black\n            : props.theme.Colors.steelGrey};\n    &:before {\n        display: block;\n        position: absolute;\n        content: '';\n        background: ${props =>\n            props.isActive\n                ? props.theme.Colors.mainBlue\n                : props.theme.Colors.mainBlue};\n        height: ${props => (props.disablehovereffect ? '0' : '2px')};\n        border-radius: 1px;\n        bottom: 0;\n        width: 0px;\n        transition: width 0.2s ease-in;\n    }\n    &:hover {\n        &:before {\n            width: ${props => props.widthPercent || 100}%;\n        }\n    }\n    ${props =>\n        props.isActive &&\n        css`\n            &:before {\n                display: block;\n                position: absolute;\n                content: '';\n                background: ${props.theme.Colors.mainBlue};\n                height: ${props.disablehovereffect ? '0' : '2px'};\n                border-radius: 1px;\n                bottom: 0;\n                width: ${props.widthPercent || 100}%;\n                left: 0;\n                right: 0;\n                margin: auto;\n            }\n        `}\n`;\nconst StyledNavigationItemRouteContainer = styled(NavLink)<{\n    height?: number;\n    url?: string;\n    disablehovereffect?: boolean;\n    fontSize?: string;\n}>`\n    height: ${props => (props.height ? `${props.height}px` : '32px')};\n    padding: 0 15px 0 15px;\n    padding-bottom: 12px;\n    margin-right: 32px;\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '13px')};\n    font-weight: 600;\n    position: relative;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    cursor: pointer;\n    text-decoration: none;\n    color: ${props => props.theme.Colors.steelGrey};\n    &:before {\n        display: block;\n        position: absolute;\n        content: '';\n        background: ${props => props.theme.Colors.mainBlue};\n        height: ${props => (props.disablehovereffect ? '0' : '2px')};\n        border-radius: 1px;\n        bottom: 0;\n        width: 0px;\n        transition: width 0.2s ease-in;\n    }\n    &:hover {\n        &:before {\n            width: 100%;\n        }\n    }\n    &.is-active {\n        color: ${props => props.theme.Colors.black};\n        &:before {\n            display: block;\n            position: absolute;\n            content: '';\n            background: ${props => props.theme.Colors.mainBlue};\n            height: ${props => (props.disablehovereffect ? '0' : '2px')};\n            border-radius: 1px;\n            bottom: 0;\n            width: 100%;\n            left: 0;\n            right: 0;\n            margin: auto;\n        }\n    }\n`;\n\nconst StyledDot = styled.div<{ isShrink?: boolean }>`\n    height: 8px;\n    width: 8px;\n    background-color: ${props => props.theme.Colors.tomato};\n    border-radius: 50%;\n    margin-top: -10px;\n    position: absolute;\n    margin-left: 6px;\n    right: 4px;\n`;\n//endregion\n\nconst HintWrapper: FC<{\n    firstTime?: boolean;\n    content?: NavigationHint;\n    storageKey: string;\n    children: (ref: RefObject<any>) => ReactNode;\n}> = ({ children, content, storageKey, firstTime }) => {\n    if (content) {\n        return (\n            <Popup<HTMLDivElement>\n                content={({ hide }, { dismiss }) =>\n                    content({ dismiss: firstTime ? dismiss : hide })\n                }\n                dismissKey={firstTime ? storageKey : undefined}\n                anchorOrigin={{\n                    vertical: 'bottom',\n                    horizontal: 'left',\n                }}\n                transformOrigin={{\n                    vertical: 'top',\n                    horizontal: 'left',\n                }}\n                arrow={true}\n                padding={'28px 24px 28px 24px'}\n                verticalOffset={3}\n                horizontalOffset={16}\n            >\n                {ref => <>{children(ref)}</>}\n            </Popup>\n        );\n    }\n\n    return <>{children(createRef())}</>;\n};\n\nconst NavigationItem: FC<{\n    title: string;\n    action?: () => void;\n    active?: boolean;\n    height?: number;\n    widthPercent?: number;\n    url?: string;\n    navigationItemStyles?: CSSProperties;\n    activeNavigationItemStyles?: CSSProperties;\n    disableHoverEffect?: boolean;\n    fontSize?: string;\n    hint?: NavigationHint;\n    hintFirstTime?: boolean;\n    name: string;\n    notReviewedCount?: number;\n    dataTest?: string;\n}> = ({\n    title,\n    action,\n    active,\n    height,\n    widthPercent,\n    url,\n    navigationItemStyles,\n    activeNavigationItemStyles,\n    disableHoverEffect,\n    fontSize,\n    hint,\n    hintFirstTime,\n    name,\n    notReviewedCount,\n    dataTest\n}) => {\n    const storageKey = useMemo(() => {\n        if (url) {\n            return name;\n        }\n        return name;\n    }, [name, url]);\n\n    if (!url) {\n        return (\n            <HintWrapper\n                content={hint}\n                firstTime={hintFirstTime}\n                storageKey={storageKey}\n            >\n                {ref => (\n                    <StyledNavigationItemContainer\n                        ref={ref}\n                        onClick={action}\n                        isActive={!!active}\n                        height={height}\n                        widthPercent={widthPercent}\n                        disablehovereffect={disableHoverEffect}\n                        fontSize={fontSize}\n                        style={\n                            active\n                                ? {\n                                      ...navigationItemStyles,\n                                      ...activeNavigationItemStyles,\n                                  }\n                                : {\n                                      ...navigationItemStyles,\n                                  }\n                        }\n                        data-test={dataTest && `${dataTest}-${kebabCase(title)}`}\n                    >\n                        {title}  {!!notReviewedCount && <StyledDot />}\n                    </StyledNavigationItemContainer>\n                )}\n            </HintWrapper>\n        );\n    } else {\n        return (\n            <HintWrapper\n                content={hint}\n                firstTime={hintFirstTime}\n                storageKey={storageKey}\n            >\n                {ref => (\n                    <StyledNavigationItemRouteContainer\n                        ref={ref}\n                        to={url}\n                        height={height}\n                        activeClassName={'is-active'}\n                        disablehovereffect={disableHoverEffect}\n                        style={\n                            active\n                                ? {\n                                      ...navigationItemStyles,\n                                      ...activeNavigationItemStyles,\n                                  }\n                                : {\n                                      ...navigationItemStyles,\n                                  }\n                        }\n                        fontSize={fontSize}\n                        data-test={dataTest && `${dataTest}-${kebabCase(title)}`}\n                    >\n                   \n                        {title} {!!notReviewedCount && <StyledDot />}\n                    </StyledNavigationItemRouteContainer>\n                )}\n            </HintWrapper>\n        );\n    }\n};\n\nexport default NavigationItem;\n","import React, { CSSProperties, ReactNode } from 'react';\nimport styled from 'styled-components';\nimport NavigationItem from './NavigationItem';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport { CheckPermission } from '../../../features/permissions';\n\nexport type NavigationHint = (props: { dismiss: () => void }) => ReactNode;\n\nexport type MenuInterface = {\n    key: string;\n    title: string;\n    url?: string;\n    permissions?: NEW_PERMISSIONS[];\n    hint?: NavigationHint;\n    hintFirstTime?: boolean;\n    notReviewedCount?: number\n};\n\ntype NavigationInterface = {\n    menu: Array<MenuInterface>;\n    active?: string;\n    setActive?: (key: string) => void;\n    height?: number;\n    widthPercent?: number;\n    url?: string;\n    navigationItemStyles?: CSSProperties;\n    activeNavigationItemStyles?: CSSProperties;\n    disableHoverEffect?: boolean;\n    fontSize?: string;\n    dataTest?: string;\n};\n\nconst StyledNavigationContainer = styled.div`\n    display: flex;\n`;\n\nconst Navigation: React.FC<NavigationInterface> = ({\n    menu,\n    active,\n    setActive,\n    height,\n    widthPercent,\n    navigationItemStyles,\n    activeNavigationItemStyles,\n    disableHoverEffect,\n    fontSize,\n    dataTest\n}) => {\n    let menuItems;\n    menuItems = menu.map((menu: MenuInterface) => {\n        if (!menu.url) {\n            return (\n                <CheckPermission key={menu.key} permissions={menu.permissions}>\n                    <NavigationItem\n                        title={menu.title}\n                        action={() => setActive && setActive(menu.key)}\n                        active={active === menu.key}\n                        height={height}\n                        widthPercent={widthPercent}\n                        navigationItemStyles={navigationItemStyles}\n                        activeNavigationItemStyles={activeNavigationItemStyles}\n                        disableHoverEffect={disableHoverEffect}\n                        fontSize={fontSize}\n                        name={menu.key}\n                        notReviewedCount={menu.notReviewedCount}\n                        dataTest={dataTest}\n                    />  \n                </CheckPermission>\n            );\n        } else {\n            return (\n                <CheckPermission key={menu.key} permissions={menu.permissions}>\n                    <NavigationItem\n                        title={menu.title}\n                        url={menu.url}\n                        height={height}\n                        navigationItemStyles={navigationItemStyles}\n                        activeNavigationItemStyles={activeNavigationItemStyles}\n                        disableHoverEffect={disableHoverEffect}\n                        fontSize={fontSize}\n                        hint={menu.hint}\n                        hintFirstTime={menu.hintFirstTime}\n                        name={menu.key}\n                        notReviewedCount={menu.notReviewedCount}\n                        dataTest={dataTest}\n                    />\n                </CheckPermission>\n            );\n        }\n    });\n\n    return <StyledNavigationContainer>{menuItems}</StyledNavigationContainer>;\n};\n\nexport default Navigation;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { Button } from '../../../../../ui/components/Button';\n\nconst StyledTutorialContent = styled.div`\n    width: 288px;\n`;\n\nconst StyledTitle = styled.div`\n    font-size: 13px;\n    font-weight: bold;\n    width: 100%;\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst StyledContent = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    margin-top: 18px;\n    width: 100%;\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst StyledActions = styled.div`\n    width: 100%;\n    display: flex;\n    justify-content: flex-end;\n    margin-top: 20px;\n    align-self: flex-end;\n`;\n\nconst StyledButtonContainer = styled(Button)`\n    width: 120px;\n    height: 40px;\n`;\n\nexport const TrainingTutorial: FC<{\n    onDismiss: () => void;\n    teamName?: string;\n}> = ({ onDismiss, teamName }) => {\n    return (\n        <StyledTutorialContent>\n            <StyledTitle data-test=\"training-tutorial-title\">\n                Keep track of members' training progress\n            </StyledTitle>\n            <StyledContent>\n                <StyledDescription data-test=\"training-tutorial-description\">\n                    See the progress of all Practis Sets being worked on by\n                    {` ${teamName} `} team and access detailed reports for each\n                    Practis Set\n                </StyledDescription>\n            </StyledContent>\n            <StyledActions>\n                <StyledButtonContainer>\n                    <Button\n                        width=\"120px\"\n                        height=\"40px\"\n                        action={() => onDismiss()}\n                        dataTest=\"got-it-button\"\n                    >\n                        Got it\n                    </Button>\n                </StyledButtonContainer>\n            </StyledActions>\n        </StyledTutorialContent>\n    );\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    margin-left: 4px;\n`;\n\n","import { FC } from 'react';\nimport { useParams } from 'react-router';\n\nimport ROUTES from '../../../../routes/routes';\nimport Navigation from '../../../../ui/components/Navigation/Navigation';\nimport { TrainingTutorial } from '../../pages/Training/components/TrainingTutorial';\nimport { getPageUrl } from '../../../../routes/helpers';\nimport { Container } from './styles';\n\nexport const TeamsPageNavigation: FC<{ teamName?: string }> = ({\n    teamName,\n}) => {\n    const params = useParams<{ teamId?: string }>();\n    return (\n        <Container>\n            <Navigation\n                fontSize=\"13px\"\n                dataTest=\"team\"\n                menu={[\n                    {\n                        key: 'training',\n                        title: 'Training',\n                        url: getPageUrl(ROUTES.TEAMS_PAGES.TRAINING, {\n                            teamId: params.teamId,\n                        }),\n                        hint: ({ dismiss }) => (\n                            <TrainingTutorial\n                                teamName={teamName || ''}\n                                onDismiss={dismiss}\n                            />\n                        ),\n                        hintFirstTime: true,\n                    },\n                    {\n                        key: 'members',\n                        title: 'Members',\n                        url: getPageUrl(ROUTES.TEAMS_PAGES.MEMBERS, {\n                            teamId: params.teamId,\n                        }),\n                    },\n                ]}\n            />\n        </Container>\n    );\n};\n","import ROUTES from '../../../../routes/routes';\nimport Navigation from '../../../../ui/components/Navigation/Navigation';\nimport { getPageUrl } from '../../../../routes/helpers';\nimport { Container } from './styles';\n\nexport const TeamsLearnersNavigation = () => {\n    return (\n        <Container>\n            <Navigation\n                fontSize=\"13px\"\n                dataTest=\"team\"\n                menu={[\n                    {\n                        key: 'teams',\n                        title: 'Teams',\n                        url: ROUTES.TEAMS_PAGES.LIST_OF_TEAMS\n                    },\n                    {\n                        key: 'overdueLearners',\n                        title: 'Overdue Learners',\n                        url: getPageUrl(ROUTES.OVERDUE_LEARNERS),\n                    },\n                ]}\n            />\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoTrainings = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 48 48\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.2%\"\n                            x=\"-14.3%\"\n                            y=\"-1.2%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M866 571.202V596.8c0 1.766-1.343 3.2-3 3.2h-36c-1.657 0-3-1.434-3-3.2v-25.598c-1.658 0-3-1.434-3-3.202v-12.8c0-1.768 1.343-3.2 3-3.2h42c1.657 0 3 1.432 3 3.2V568c0 1.769-1.344 3.202-3 3.202zM827 595.2c0 .884.672 1.6 1.5 1.6h33c.828 0 1.5-.716 1.5-1.6v-22.4c0-.883-.672-1.598-1.5-1.598H854v6.398c0 1.769-1.343 3.2-3 3.2h-12c-1.657 0-3-1.431-3-3.2v-6.398h-7.5c-.828 0-1.5.715-1.5 1.597V595.2zm24-19.2v-4.798h-12v4.799c0 .883.671 1.599 1.5 1.599h9c.828 0 1.5-.717 1.5-1.6zm15-19.2c0-.882-.672-1.6-1.5-1.6h-39c-.828 0-1.5.717-1.5 1.6v9.6c0 .884.671 1.6 1.5 1.6h39c.828 0 1.5-.716 1.5-1.6v-9.6z\"\n                                transform=\"translate(-821 -552)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoTrainings;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoTrainingsFiltering = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 50 50\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.2%\"\n                            x=\"-14.3%\"\n                            y=\"-1.2%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M27.428 0v3.576c3.912.79 6.857 4.222 6.857 8.338 0 4.116-2.945 7.548-6.857 8.338v27.4H24v-27.4c-3.912-.79-6.857-4.222-6.857-8.338 0-4.116 2.945-7.55 6.857-8.338V.001h3.428zM10.286 0v20.595c3.911.788 6.857 4.22 6.857 8.338 0 4.115-2.946 7.548-6.857 8.337v10.382h-3.43V37.27C2.946 36.48 0 33.047 0 28.933c0-4.118 2.945-7.551 6.856-8.338V0h3.43zM8.57 23.828c-2.84 0-5.142 2.285-5.142 5.106 0 2.818 2.302 5.104 5.142 5.104 2.84 0 5.143-2.286 5.143-5.104 0-2.82-2.303-5.106-5.143-5.106zM44.57 0l-.001 27.152h-3.427V0h3.428zM25.714 6.808c-2.84 0-5.143 2.286-5.143 5.106 0 2.819 2.302 5.104 5.143 5.104 2.84 0 5.143-2.284 5.143-5.104 0-2.82-2.304-5.106-5.143-5.106zM38.5 48L36 45.765 41.147 40.554 36 35.341 38.5 33.109 43.5 38.172 48.5 33.109 51 35.341 45.852 40.554 51 45.765 48.5 48 43.5 42.937z\"\n                                transform=\"translate(-818 -574) translate(759 574) translate(59)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoTrainingsFiltering;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const FiltersIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 17 15\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M1305.248 146.813v1.12h-1.067v-1.12c-1.217-.247-2.133-1.323-2.133-2.613s.916-2.366 2.133-2.613V133h1.067v8.587c1.217.247 2.133 1.323 2.133 2.613s-.916 2.366-2.133 2.613zm-.533-4.213c-.884 0-1.6.717-1.6 1.6 0 .884.716 1.6 1.6 1.6.883 0 1.6-.716 1.6-1.6 0-.883-.717-1.6-1.6-1.6zm-4.8-3.253v8.587h-1.067v-8.587c-1.217-.248-2.133-1.324-2.133-2.613 0-1.29.916-2.366 2.133-2.613V133h1.067v1.12c1.217.247 2.133 1.323 2.133 2.613s-.916 2.365-2.133 2.613zm-.534-4.213c-.884 0-1.6.716-1.6 1.6 0 .883.716 1.6 1.6 1.6.884 0 1.6-.717 1.6-1.6 0-.884-.716-1.6-1.6-1.6zm-4.8 9.546v3.254h-1.067v-3.254c-1.217-.247-2.133-1.323-2.133-2.613s.916-2.366 2.133-2.613V133h1.067v6.454c1.217.247 2.134 1.323 2.134 2.613s-.917 2.366-2.134 2.613zm-.533-4.213c-.884 0-1.6.716-1.6 1.6 0 .883.716 1.6 1.6 1.6.883 0 1.6-.717 1.6-1.6 0-.884-.717-1.6-1.6-1.6z\"\n                            transform=\"translate(-1291 -133)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default FiltersIcon;\n","import styled from 'styled-components';\n\ninterface RootProps {\n    open?: boolean;\n    disabled?: boolean;\n}\n\nexport const Root = styled.button<RootProps>`\n    width: 40px;\n    height: 40px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 4px;\n    position: relative;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    color: ${props => props.theme.Colors.cloudyBlue};\n    background: ${({ theme }) => theme.Colors.whiteFive};\n    box-shadow: inset 0 0 0 ${({ open }) => (open ? 1 : 0)}px\n        ${({ theme }) => theme.Colors.cloudyBlue};\n    border: none;\n`;\n\nexport const IconContainer = styled.div`\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nexport const IconHolder = styled.div<{ disabled?: boolean }>`\n    width: 16px;\n    height: 15px;\n    color: ${({ theme, disabled }) =>\n        disabled ? theme.Colors.cloudyBlue : theme.Colors.steelGrey};\n`;\nexport const StyledAssignAction = styled.button<{\n    open?: boolean;\n    disabled?: boolean;\n    hasFilters: boolean;\n}>`\n    width: 40px;\n    height: 40px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 4px;\n    position: relative;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    color: ${props => props.theme.Colors.cloudyBlue};\n    background: ${({ theme }) => theme.Colors.whiteFive};\n    box-shadow: inset 0 0 0 ${({ open }) => (open ? 1 : 0)}px\n        ${({ theme }) => theme.Colors.cloudyBlue};\n    border: none;\n`;\n\nexport const FiltersDotContainer = styled.div`\n    position: absolute;\n    top: -8px;\n    right: -8px;\n    width: 12px;\n    height: 12px;\n    border-radius: 100%;\n    background: var(--ps-white-1);\n    padding: 9px;\n`;\n\nexport const FiltersDot = styled.div`\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 12px;\n    height: 12px;\n    border-radius: 100%;\n    background: var(--ps-blue-main);\n`;\n","import { forwardRef } from 'react';\n\nimport FiltersIcon from '../../icons/FiltersIcon';\nimport { Tooltip } from '../Tooltip';\nimport {\n    FiltersDot,\n    FiltersDotContainer,\n    IconContainer,\n    IconHolder,\n    StyledAssignAction,\n} from './styles';\n\nconst TeamMembersFilterHandler = forwardRef<\n    HTMLButtonElement,\n    {\n        toggleOpen: () => void;\n        open: boolean;\n        disabled?: boolean;\n        filtersCount?: number;\n        dataTest?: string;\n    }\n>(({ toggleOpen, open, disabled = false, filtersCount = 0, dataTest }, ref) => {\n    return (\n        <StyledAssignAction\n            ref={ref}\n            onClick={() => !disabled && toggleOpen()}\n            open={open}\n            disabled={disabled}\n            hasFilters={filtersCount > 0}\n            data-test={dataTest && `${dataTest}-button`}\n        >\n            <Tooltip label={'Filters'} preset={'button-icon'} dataTest=\"filters-tooltip\">\n                <IconContainer>\n                    <IconHolder disabled={disabled}>\n                        <FiltersIcon />\n                    </IconHolder>\n                    {filtersCount > 0 && (\n                        <FiltersDotContainer>\n                            <FiltersDot\n                                data-test={dataTest && `${dataTest}-counter`}\n                            />\n                        </FiltersDotContainer>\n                    )}\n                </IconContainer>\n            </Tooltip>\n        </StyledAssignAction>\n    );\n});\n\nexport default TeamMembersFilterHandler;\n","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const countAppliedFiltersCount = (searchParams: SearchParams) => {\n    let total = 0;\n\n    if (searchParams?.filterByStatus?.length) {\n        total = total + searchParams.filterByStatus.length;\n    }\n\n    if (searchParams?.filterByRegistrationStatus?.length) {\n        total = total + searchParams.filterByRegistrationStatus.length;\n    }\n\n    if (searchParams?.labelIDs?.length) {\n        total = total + searchParams.labelIDs.filter((id: number) => id > 0).length;\n    }\n\n    if(searchParams?.filters?.some(item => item.field === 'hasOverdue' && item.value === true)) {\n        total += 1;\n    }\n\n    if(searchParams?.filterByDueDate?.length) {\n        total+=searchParams?.filterByDueDate?.length;\n    }\n\n    return total;\n};\n\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const OverdueFlag = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                data-test={dataTest}\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M2.5 7.13v7.33h2.514V16H2.5A1.5 1.5 0 0 1 1 14.5v-11A1.5 1.5 0 0 1 2.5 2h1.25V.75A.76.76 0 0 1 4.5 0a.76.76 0 0 1 .75.71V2h5.5V.75A.76.76 0 0 1 11.5 0a.76.76 0 0 1 .75.71V2h1.25A1.5 1.5 0 0 1 15 3.46V5h-1.5V3.46h-11v2.17H8v1.5H2.5z\"\n                    fill=\"#EC513D\"\n                />\n                <path\n                    d=\"M11.62 6c-1.051.283-2.356 2.59-1.288 4.77.211.431.175.764.001.94-.284.29-1.728-.164-2.235-1.7C7.42 10.424 7 11.314 7 12.234 7 14.438 8.845 16 11 16c2.154 0 4-1.57 4-3.767 0-1.342-.694-2.046-1.422-2.786-.758-.77-1.865-1.845-1.957-3.447z\"\n                    fill=\"#EC513D\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default OverdueFlag;\n","import React, {\n    ChangeEvent,\n    FC,\n    useCallback,\n    useEffect,\n    useState,\n} from 'react';\nimport styled from 'styled-components';\nimport { EnrollmentStatus } from '../../../../../../constants/interfaces/Enrollments';\nimport { Variables } from '../../../../../../theme/variables';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../ui/components/Fieldset';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { PortableLabelsWithStore } from '../../../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport OverdueFlag from '../../../../../../ui/icons/OverdueFlag';\nimport { statusesMap } from '../../../../../../constants/variables/general';\n\n//region Styles\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    height: 100%;\n\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst StatusContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 152px;\n    background-color: inherit;\n`;\n\nconst StatusItem = styled.div`\n    margin-bottom: 8px;\n    display: flex;\n    align-items: center;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nconst OverdueFlagWrapped = styled(OverdueFlag)`\n    margin-left: 4px;\n`;\n\n//endregion\n\nexport const TrainingFilters: FC<{\n    preSelectedLabels: number[];\n    status: EnrollmentStatus[];\n    onLabelsChange: (ids: number[]) => void;\n    onStatusChange: (status: EnrollmentStatus[]) => void;\n    onSuccessApply: () => void;\n    onOverdueChange: (hasOverdue: boolean) => void;\n    overdue?: boolean;\n}> = ({\n    preSelectedLabels,\n    onLabelsChange,\n    onStatusChange,\n    status,\n    onSuccessApply,\n    onOverdueChange,\n    overdue,\n}) => {\n    const [statuses, setStatuses] = useState(status);\n    const labels = useLabelsState();\n    const saveLabels = useSaveLabels();\n    const selectLabels = useSelectLabels();\n    const [hasOverdue, setHasOverdue] = useState(!!overdue);\n\n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(preSelectedLabels);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        preSelectedLabels,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    \n\n    const onStatusChangeHandler = useCallback(\n        (statusIn: EnrollmentStatus, e: ChangeEvent<HTMLInputElement>) => {\n            if (e.target.checked) {\n                setStatuses([...statuses, statusIn]);\n            } else {\n                setStatuses(statuses.filter(item => item !== statusIn));\n            }\n        },\n        [setStatuses, statuses]\n    );\n\n    const onApplyHandler = useCallback(() => {\n        onStatusChange(statuses);\n        onLabelsChange(labels.selected);\n        saveLabels();\n        onSuccessApply();\n        onOverdueChange(hasOverdue);\n    }, [\n        onStatusChange,\n        statuses,\n        onLabelsChange,\n        labels.selected,\n        onSuccessApply,\n        saveLabels,\n        onOverdueChange,\n        hasOverdue\n    ]);\n\n    const totalFiltersSelected =\n        labels?.selected.filter(id => id > 0).length + statuses.length + (hasOverdue ? 1 : 0);\n\n    const deselectLabels = useDeselectAllLabels();\n\n        \n    const onClearHandler = () => {\n        deselectLabels();\n        setStatuses([]);\n        setHasOverdue(false);\n    }\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset\n                    title={'Team Member Status'}\n                    dataTest=\"team-member-status\"\n                >\n                    <StatusContainer>\n                        {(Object.keys(statusesMap) as EnrollmentStatus[]).map(\n                            item => (\n                                <StatusItem key={item} data-test=\"team-member-status-item-container\">\n                                    <Checkbox\n                                        checked={statuses.includes(item)}\n                                        handleChange={e =>\n                                            onStatusChangeHandler(item, e)\n                                        }\n                                        label={statusesMap[item].title}\n                                        border={Variables.Colors.steelGrey}\n                                        size={12}\n                                        fontColor={Variables.Colors.black}\n                                        dataTest={statusesMap[item]?.dataTest}\n                                    />\n                                </StatusItem>\n                            )\n                        )}\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Overdue'} dataTest=\"overdue\">\n                    <StatusContainer>\n                        <StatusItem>\n                            <Checkbox\n                                checked={hasOverdue}\n                                handleChange={e =>\n                                    setHasOverdue(e.target.checked)\n                                }\n                                label=\"Overdue\"\n                                border={Variables.Colors.steelGrey}\n                                size={12}\n                                fontColor={Variables.Colors.black}\n                                dataTest=\"overdue-check-box\"\n                            />\n                            <OverdueFlagWrapped dataTest=\"overdue-flag-icon\" />\n                        </StatusItem>\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-filters-counter\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant=\"inverse\"\n                        width={'122px'}\n                        action={() => onClearHandler()}\n                        dataTest=\"clear-filters-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={() => onApplyHandler()}\n                    dataTest=\"apply-filters-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n\nexport default TrainingFilters;\n","import { FC, useCallback, useRef } from 'react';\r\nimport {\r\n    ActionButton,\r\n    ActionItem,\r\n} from '../../../../../../ui/components/ActionButton';\r\nimport { CheckPermission } from '../../../../../permissions';\r\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\r\nimport { isTeamLeader } from '../../../../../../constants/enums';\r\nimport ROUTES from '../../../../../../routes/routes';\r\nimport { TeamV2 } from '../../../../../../constants/interfaces/Team';\r\nimport { pushModal, useHistory } from '../../../../../../tools/router';\r\nimport { UserProfile } from '../../../../../../constants/interfaces/User';\r\nimport { TrainingPractisSet } from '../../../../../../constants/interfaces/TrainingPractisSet';\r\n\r\nconst ListActions: FC<{\r\n    practisSet: TrainingPractisSet;\r\n    profile?: UserProfile;\r\n    team?: TeamV2;\r\n    handleRedirection: (id?: number) => void;\r\n    onExportSinglePractisClicked: (id?: number) => void;\r\n    isHidden?: boolean;\r\n}> = ({\r\n    practisSet,\r\n    team,\r\n    profile,\r\n    handleRedirection,\r\n    onExportSinglePractisClicked,\r\n    isHidden,\r\n}) => {\r\n\r\n    const history = useHistory();\r\n    const triggerRef = useRef(null);\r\n\r\n    const handleViewAssignUsers = useCallback(\r\n        (id?: number) => {\r\n            if (!id || !team || (team && !team.id)) return;\r\n\r\n            pushModal(\r\n                history,\r\n                ROUTES.TEAMS_PAGES.TRAINING_PAGES.TRAINEE_INVITATION.replace(\r\n                    ':teamId',\r\n                    team.id ? team.id.toString() : ''\r\n                ).replace(':practisSetId', id.toString())\r\n            );\r\n        },\r\n        [history, team]\r\n    );\r\n\r\n    return (\r\n        <span>\r\n            <div ref={triggerRef}>\r\n                <ActionButton customWidth={168} isHidden={isHidden} dataTest=\"action-menu\">\r\n                    <CheckPermission\r\n                        permissions={[\r\n                            NEW_PERMISSIONS.VIEW_PRACTIS_SET_PROGRESS,\r\n                        ]}\r\n                    >\r\n                        <ActionItem\r\n                            onClick={() =>\r\n                                handleRedirection(practisSet.practisSetId)\r\n                            }\r\n                            dataTest=\"view-progress-action-item\"\r\n                        >\r\n                            View Progress\r\n                        </ActionItem>\r\n                    </CheckPermission>\r\n                    <CheckPermission\r\n                        permissions={[NEW_PERMISSIONS.ASSIGN_ENROLLMENT]}\r\n                    >\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                if (\r\n                                    practisSet.practisSetId &&\r\n                                    team &&\r\n                                    team.id\r\n                                ) {\r\n                                    handleViewAssignUsers(\r\n                                        practisSet.practisSetId\r\n                                    );\r\n                                }\r\n                            }}\r\n                            dataTest=\"assign-users-action-item\"\r\n                        >\r\n                            Assign Users\r\n                        </ActionItem>\r\n                    </CheckPermission>\r\n                    <CheckPermission\r\n                        permissions={[NEW_PERMISSIONS.EXPORT_LIST_PRACTIS_SET]}\r\n                    >\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                onExportSinglePractisClicked(\r\n                                    practisSet.practisSetId\r\n                                );\r\n                            }}\r\n                            dataTest=\"export-report-action-item\"\r\n                        >\r\n                            Export Report\r\n                        </ActionItem>\r\n                    </CheckPermission>\r\n                    {isTeamLeader(profile?.role?.name) ? (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                if (practisSet.practisSetId)\r\n                                    history.push(\r\n                                        ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE.replace(\r\n                                            ':practisSetId',\r\n                                            practisSet.practisSetId.toString()\r\n                                        )\r\n                                    );\r\n                            }}\r\n                            dataTest=\"view-practisset-action-item\"\r\n                        >\r\n                            View Practis Set\r\n                        </ActionItem>\r\n                    ) : (\r\n                        <CheckPermission\r\n                            permissions={[NEW_PERMISSIONS.UPDATE_PRACTIS_SET]}\r\n                        >\r\n                            <ActionItem\r\n                                onClick={e => {\r\n                                    e.stopPropagation();\r\n                                    if (practisSet.practisSetId)\r\n                                        history.push(\r\n                                            ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE.replace(\r\n                                                ':practisSetId',\r\n                                                practisSet.practisSetId.toString()\r\n                                            )\r\n                                        );\r\n                                }}\r\n                                dataTest=\"edit-practisset-action-item\"\r\n                            >\r\n                                Edit Practis Set\r\n                            </ActionItem>\r\n                        </CheckPermission>\r\n                    )}\r\n                </ActionButton>\r\n            </div>\r\n        </span>\r\n    );\r\n};\r\n\r\nexport default ListActions;\r\n","import { Reducer } from 'redux';\nimport { SearchStateInterface, SecondarySearchStateInterface } from './states';\nimport {\n    ACTIONS,\n    setSearchState,\n    deleteSearchState,\n    setSecondarySearchState,\n    deleteSecondarySearchState\n} from './actions';\nimport { AppState } from '../../../store/reducers';\n\n\nexport const getSearchState = (state: AppState) => state.searchState;\n\nexport type Action =\n    | ReturnType<typeof setSearchState>\n    | ReturnType<typeof deleteSearchState>;\n\nexport const SearchStateReducer: Reducer<SearchStateInterface, Action> = (\n    state = {\n        key: '',\n        params: undefined,\n        childrenKeys: []\n    },\n    action: Action\n): SearchStateInterface => {\n    switch (action.type) {\n        case ACTIONS.SET_SEARCH_STATE:\n            return {\n                key: action.key,\n                params: action.params,\n                childrenKeys: action.childrenKeys\n            };\n        case ACTIONS.DELETE_SEARCH_STATE: {\n            return {\n                key: '',\n                params: undefined,\n                childrenKeys: []\n            };\n        }\n        default:\n            return state;\n    }\n};\n\nexport const getSecondarySearchState = (state: AppState) => state.secondarySearchState;\n\nexport type SecondaryAction =\n    | ReturnType<typeof setSecondarySearchState>\n    | ReturnType<typeof deleteSecondarySearchState>;\n\nexport const secondarySearchStateReducer: Reducer<SecondarySearchStateInterface, SecondaryAction> = (\n    state = {\n        key: '',\n        params: undefined\n    },\n    action: SecondaryAction\n): SecondarySearchStateInterface => {\n    switch (action.type) {\n        case ACTIONS.SET_SECONDARY_SEARCH_STATE:\n            return {\n                key: action.key,\n                params: action.params\n            };\n        case ACTIONS.DELETE_SECONDARY_SEARCH_STATE: {\n            return {\n                key: '',\n                params: undefined\n            };\n        }\n        default:\n            return state;\n    }\n};\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\nimport { Variables } from '../../../../theme/variables';\n\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { TableCell } from '../../../../ui/components/table-wrapper/table/table-cell';\nimport OverdueFlag from '../../../../ui/icons/OverdueFlag';\nimport { Loading } from '../../../../ui/components/LoadingCopmonent';\n\nexport const InvitationHeader = styled.div`\n    padding: 40px 0 23px 16px;\n    display: flex;\n    flex-shrink: 0;\n    justify-content: start;\n`;\n\nexport const QuickAssignmentInvitationFooter = styled.div`\n    padding: 22px 30px 32px 32px;\n    display: flex;\n    justify-content: flex-end;\n    align-items: center;\n`;\n\nexport const InvitationHeaderWrapper = styled.div`\n    display: flex;\n`;\n\nexport const QuickAssignmentInvitationHeaderText = styled.div`\n    font-size: 24px;\n    font-weight: 800;\n    max-width: 400px;\n    color: ${props => props.theme.Colors.black};\n    line-height: 1.2;\n    margin-bottom: 16px;\n`;\n\nexport const IconWrapper = styled.div`\n    width: 24px;\n    height: 24px;\n    color: ${props => props.theme.Colors.topaz};\n    margin-left: 12px;\n`;\n\nexport const InvitationHeaderSubText = styled.div`\n    font-size: 15px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    margin-bottom: 2px;\n`;\n\nexport const CancelWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nexport const AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n`;\n\nexport const Avatar = styled(AvatarPlaceholder)<{ marginRight: number }>`\n    width: 24px;\n    height: 24px;\n    margin-right: ${({ marginRight }) =>\n        marginRight ? `${marginRight}px` : '8px'};\n`;\n\nexport const StyledProgressContainer = styled.div`\n    max-width: 268px;\n`;\n\nexport const ProgressBarContainer = styled.div`\n    width: 128px;\n`;\n\nexport const StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    min-width: 200px;\n`;\n\nexport const DueDateWrapper = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nexport const DueDateIcon = styled.span`\n    display: flex;\n`;\n\nexport const OverdueFlagWrapped = styled(OverdueFlag)`\n    margin-left: 8px;\n`;\n\nexport const WrapperTableCell = styled.div<{ isTeamMembers?: boolean }>`\n    width: 70%;\n    margin: 0 auto;\n    display: flex;\n    flex-wrap: no-wrap;\n\n    td {\n        display: inline-flex;\n        align-items: center;\n        justify-content: flex-center;\n    }\n\n    td:nth-child(1) {\n        padding-left: 0px !important;\n        margin-left: -2px;\n    }\n\n    td:nth-child(2) {\n        padding-left: 6px !important;\n    }\n\n    td:nth-child(3) {\n        padding-left: 8px !important;\n    }\n\n    @media (max-width: 1680px) {\n        width: 76%;\n    }\n\n    @media (max-width: 1441px) {\n        width: 90%;\n        td:nth-child(1) {\n            padding-left: 10px !important;\n        }\n\n        td:nth-child(2) {\n            padding-left: 8px !important;\n            span {\n                width: 92px;\n            }\n        }\n\n        td:nth-child(3) {\n            padding-left: 2px !important;\n        }\n    }\n`;\n\nexport const WrapperTableCellUsers = styled.div`\n    width: 70%;\n    margin: 0 auto;\n    display: flex;\n    flex-wrap: no-wrap;\n\n    td {\n        display: inline-flex;\n        align-items: center;\n        justify-content: flex-start;\n    }\n\n    td:nth-child(1) {\n        padding-left: 1px !important;\n        span {\n            width: 55px;\n            text-align: center;\n        }\n    }\n\n    td:nth-child(2) {\n        justify-content: center;\n        span {\n            width: 70px;\n            margin-left: -9px;\n        }\n    }\n\n    @media (max-width: 1441px) {\n        td:nth-child(1) {\n            padding-left: 10px !important;\n            span {\n                text-align: left;\n                margin-left: -8px;\n            }\n        }\n\n        td:nth-child(2) {\n            padding-left: 0px !important;\n            span {\n                margin-left: -3px;\n            }\n        }\n    }\n`;\n\nexport const StyledTraineeInvitationContainer = styled.div`\n    padding: 0 30px;\n    height: 100%;\n    overflow: auto;\n    background: ${props => props.theme.Colors.white};\n    display: flex;\n    flex-direction: column;\n    border-top-left-radius: 8px;\n    border-bottom-left-radius: 8px;\n`;\n\nexport const InvitationFooter = styled.div`\n    padding: 22px 0 32px 32px;\n    display: flex;\n    justify-content: flex-end;\n    align-items: center;\n    position: sticky;\n    bottom: 0;\n    background: ${props => props.theme.Colors.white};\n    width: 100%;\n`;\n\nexport const InvitationHeaderText = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-bottom: 2px;\n`;\n\nexport const StyledInvitationTitle = styled.div`\n    color: ${Variables.Colors.black};\n    font-size: 20px;\n    font-weight: 800;\n`;\n\nexport const StyledTableCell = styled(TableCell)`\n    font-size: 13px;\n    height: 45px;\n    padding: 0;\n`;\n\nexport const StyledFirstTableItemContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    min-width: 200px;\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: '0px !important',\n    },\n    multiHeaderContainer: {\n        justifyContent: 'space-between !important',\n\n        width: '70% !important',\n        '@media(min-width:960px)': {\n            width: '71% !important',\n        },\n\n        '@media(min-width: 1280px)': {\n            width: '70% !important',\n        },\n\n        '@media(min-width: 1441px)': {\n            width: '55% !important',\n        },\n    },\n\n    teamMemberHeaderContainer: {\n        width: '45% !important',\n        \n        '@media(max-width:1680px)': {\n            width: '80% !important',\n        },\n\n        '@media(max-width: 1441px)': {\n            width: '100% !important',\n        },\n\n        '@media(min-width:1681px)': {\n            width: '70% !important',\n        },\n\n        '@media(min-width: 2041px)': {\n            width: '57% !important',\n        },\n    },\n\n    scrollWrapperStyle: {\n        height: '100% !important',\n        position: 'relative',\n        display: 'flex',\n        flexDirection: 'column',\n        flex: 1,\n    },\n\n    tableWrapperStyle: {\n        height: '100% !important',\n    },\n\n    tableBodyContainerStyleForInvitation: {\n        maxHeight: 'calc(100vh - 358px)',\n    },\n\n    tableBodyContainerStyleForAssignment: {\n        maxHeight: 'calc(100vh - 368px)',\n    },\n\n    customCellStyle: {\n        fontSize: '13px',\n        height: '45px',\n        padding: 0,\n    },\n\n    labelsCellStyle: {\n        justifyContent: 'flex-end !important',\n    },\n}));\n\nexport const TeamMemberStatusCell = styled(TableCell)`\n    justify-content: center;\n`;\n\nexport const StyledTraineeDetailsContainer = styled.div`\n    height: 100%;\n    background: ${props => props.theme.Colors.white};\n    display: flex;\n    flex-direction: column;\n`;\n\nexport const StyledLoading = styled(Loading)`\n    height: calc(100vh - 115px);\n`;\n\nexport const StyledDetailsHeader = styled.div`\n    padding: 24px 0;\n    display: flex;\n    flex-shrink: 0;\n    justify-content: space-between;\n`;\n\nexport const ProfileSection = styled.div`\n    display: flex;\n`;\n\nexport const DetailsStatus = styled.div`\n    color: ${props => props.theme.Colors.coral};\n    font-size: 13px;\n    font-weight: normal;\n    height: 24px;\n    padding: 0px 12px;\n    border-radius: 4px;\n    align-self: flex-end;\n    border-radius: 100px;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n`;\n\nexport const DetailsStatusPending = styled(DetailsStatus)`\n    color: #3a3a3a;\n    background: #ebebeb;\n`;\n\nexport const DetailsStatusInProgress = styled(DetailsStatus)`\n    color: #015895;\n    background: rgba(74, 169, 226, 0.15);\n`;\n\nexport const DetailsStatusCompleted = styled(DetailsStatus)`\n    background: #d6f7e8;\n    color: #066150;\n`;\n\nexport const StyledDetailsAvatar = styled.div`\n    width: 48px;\n    height: 48px;\n    border-radius: 4px;\n    overflow: hidden;\n`;\n\nexport const StyledUserInfo = styled.div`\n    display: flex;\n    flex-direction: column;\n    margin-left: 12px;\n`;\n\nexport const StyledName = styled.div<{ isFlex?: boolean }>`\n    ${props => !!props.isFlex && `display: flex; align-items: center;`}\n    font-size: 15px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    margin-top: 4px;\n`;\n\nexport const StyledEmail = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const GraphSection = styled.div`\n    padding: 24px 0;\n`;\n\nexport const GraphRow = styled.div`\n    display: flex;\n    justify-content: space-between;\n`;\n\nexport const StyledAdditionalInfo = styled.span`\n    font-size: 15px;\n    font-weight: 600;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-right: 4px;\n`;\n\nexport const StatusContainer = styled.div`\n    display: flex;\n    flex-shrink: 0;\n`;\n\nexport const StyledPendingTitle = styled.span`\n    font-size: 13px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.brown};\n`;\n\nexport const StyledPendingInvitationLabel = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    height: 24px;\n    border-radius: 20px;\n    background-color: ${props => props.theme.Colors.macaroniAndCheeseOpaque};\n    padding: 4px 12px;\n    margin-left: 10px;\n`;\n\nexport const SubHeaderContainer = styled.div`\n    display: flex;\n    align-items: center;\n    gap: 15px;\n    margin-bottom: 10px;\n    margin-left: -8px;\n`;\n\nexport const WarningTitle = styled.span`\n    display: flex;\n    align-items: center;\n    color: ${props => props.theme.Colors.black};\n`;\n\nexport const DueDateSubTitle = styled.span`\n    margin-top: 1px;\n    font-size: 13px;\n    color: ${props => props.theme.Colors.black};\n`;\n\nexport const StyledOverdueFlag = styled(OverdueFlag)`\n    margin-left: 8px;\n`;\n\nexport const DueDateSkeletonContainer = styled.div`\n    margin-left: 7px;\n    width: 195px;\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n`","import { useCallback } from 'react';\n\nimport { TableHeaderCellProps } from './type';\n\nexport const useOrderBy = <T extends Object = {}>(\n    field: keyof T | string,\n    state: { field?: string; asc?: boolean } | undefined | null,\n    onChange: (field: string) => void\n): Partial<TableHeaderCellProps> => {\n    const asc = state && state.field === field ? state.asc : undefined;\n    const onClick = useCallback(() => onChange(field as string), [\n        field,\n        onChange,\n    ]);\n    return {\n        asc,\n        onClick: onClick,\n    };\n};\n\n","import { useCallback } from 'react';\n\nimport { TableStateHelper, TableStateValues } from './types';\n\nexport const useTableStateHelper = () =>\n    useCallback((params: TableStateHelper) => {\n        const {\n            itemsCount,\n            appliedFilters,\n            searchTerm,\n            startDate,\n            endDate,\n            filtersAreAlwaysEnabled\n        } = params;\n\n        let tableState: TableStateValues = {\n            disableFilters: true,\n            disableSearch: true,\n            disableSorting: true,\n            showEmptyState: true,\n            showNoEntriesState: true,\n            showNoSearchResultsState: true,\n            showNoFilterResultsState: true,\n            showNoCalendarResultsState: true,\n        };\n\n        const noItems = !itemsCount || itemsCount < 1;\n        const noSearchTerm = !searchTerm || searchTerm.length < 1;\n        const noFilters = !appliedFilters || appliedFilters < 1;\n        const noCalendarFilters = !startDate && !endDate;\n\n        if (noItems && noSearchTerm && noFilters && noCalendarFilters) {\n            tableState.disableFilters = true;\n            tableState.disableSearch = true;\n            tableState.disableSorting = true;\n            tableState.showEmptyState = true;\n            tableState.showNoEntriesState = true;\n            tableState.showNoSearchResultsState = false;\n            tableState.showNoFilterResultsState = false;\n            tableState.showNoCalendarResultsState = false;\n        } else if (noItems && !noSearchTerm && noFilters && noCalendarFilters) {\n            tableState.disableFilters = true;\n            tableState.disableSearch = false;\n            tableState.disableSorting = true;\n            tableState.showEmptyState = true;\n            tableState.showNoEntriesState = false;\n            tableState.showNoSearchResultsState = true;\n            tableState.showNoFilterResultsState = false;\n            tableState.showNoCalendarResultsState = false;\n        } else if (noItems && noSearchTerm && noFilters && !noCalendarFilters) {\n            tableState.disableFilters = true;\n            tableState.disableSearch = true;\n            tableState.disableSorting = true;\n            tableState.showEmptyState = true;\n            tableState.showNoEntriesState = false;\n            tableState.showNoSearchResultsState = false;\n            tableState.showNoFilterResultsState = false;\n            tableState.showNoCalendarResultsState = true;\n        } else if (noItems && noSearchTerm && !noFilters && !noCalendarFilters) {\n            tableState.disableFilters = false;\n            tableState.disableSearch = true;\n            tableState.disableSorting = true;\n            tableState.showEmptyState = true;\n            tableState.showNoEntriesState = false;\n            tableState.showNoSearchResultsState = false;\n            tableState.showNoFilterResultsState = false;\n            tableState.showNoCalendarResultsState = true;\n        } else if (noItems && noSearchTerm && !noFilters && noCalendarFilters) {\n            tableState.disableFilters = false;\n            tableState.disableSearch = true;\n            tableState.disableSorting = true;\n            tableState.showEmptyState = true;\n            tableState.showNoEntriesState = false;\n            tableState.showNoSearchResultsState = false;\n            tableState.showNoFilterResultsState = true;\n            tableState.showNoCalendarResultsState = false;\n        } else if (noItems && !noSearchTerm && (!noFilters || !noCalendarFilters)) {\n            tableState.disableFilters = false;\n            tableState.disableSearch = false;\n            tableState.disableSorting = true;\n            tableState.showEmptyState = true;\n            tableState.showNoEntriesState = false;\n            tableState.showNoSearchResultsState = true;\n            tableState.showNoFilterResultsState = false;\n            tableState.showNoCalendarResultsState = false;\n        } else {\n            tableState.disableFilters = false;\n            tableState.disableSearch = false;\n            tableState.disableSorting = false;\n            tableState.showEmptyState = false;\n            tableState.showNoEntriesState = false;\n            tableState.showNoSearchResultsState = false;\n            tableState.showNoFilterResultsState = false;\n            tableState.showNoCalendarResultsState = false;\n        }\n        if (filtersAreAlwaysEnabled) {\n            tableState.disableFilters = false;\n        }\n        return tableState;\n    }, []);\n\n","import { SearchParams } from \"../../constants/interfaces/filters\";\n\nexport const normalizeSP = (\n    searchParams: SearchParams,\n    totalCount: number | undefined,\n    teamId?: any,\n    practisSetId?: any,\n    userId?: any\n) => {\n    let newParams = {...searchParams};\n    newParams.offset = 0;\n    newParams.limit = totalCount;\n\n    if (teamId) {\n        newParams.teamId = parseInt(teamId)\n    }\n    if (practisSetId) {\n        newParams.practisSetId = parseInt(practisSetId)\n    }\n\n    if (userId) {\n        newParams.userId = parseInt(userId)\n    }\n\n    return newParams;\n}\n\n","import { History } from 'history';\r\nimport { FC, useCallback, useEffect, useState } from 'react';\r\nimport { isEmpty as lodashIsEmpty } from 'lodash';\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../constants/interfaces/filters';\r\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport { PractisSets } from '../../../../constants/interfaces/PractisSets';\r\nimport { TrainingPractisSet } from '../../../../constants/interfaces/TrainingPractisSet';\r\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport {\r\n    useDeleteTeamPractisSetLabelService,\r\n    useGetPractisSetsReportService,\r\n    useGetTeamInfoTrainingService,\r\n    useSearchTrainingPractisSets,\r\n    useUpdateAllSelectedPractisSetsStateService,\r\n    useUpdateSelectedPractisSetStateService,\r\n} from '../../store/services';\r\nimport {\r\n    useTeamMembersState,\r\n    useTrainerPractisSetState,\r\n    useUpdatedProgressState,\r\n} from '../../store/states';\r\nimport { formatDate } from '../../../../helpers/functions/date-convert';\r\nimport {\r\n    UpdatedLabelsState,\r\n    useLabelsState,\r\n    useUpdatedLabelsState,\r\n} from '../../../labels/store/states';\r\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\r\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\r\nimport { usePermissionsState } from '../../../permissions/store/state';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\r\nimport { clearSelectedItemIfNotLoaded } from '../../../labels/tools';\r\nimport {\r\n    useSaveUserFiltersService,\r\n    useSetAssignLabelsActionService,\r\n} from '../../../labels/store/services';\r\nimport { WithLabelsContext } from '../../../portableLabels';\r\nimport { TeamsPageNavigation } from '../../components/TeamsPageNavigation';\r\nimport { TeamV2 } from '../../../../constants/interfaces/Team';\r\nimport { UserProfile } from '../../../../constants/interfaces/User';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport NoTrainings from '../../../../ui/icons/NoTrainings';\r\nimport NoTrainingsFiltering from '../../../../ui/icons/NoTrainingsFiltering';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { EnrollmentStatus } from '../../../../constants/interfaces/Enrollments';\r\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\r\nimport { countAppliedFiltersCount } from '../TeamMembers/tools';\r\nimport TrainingFilters from './components/Filters/TrainingFilters';\r\nimport ListActions from './components/ListActions/ListActions';\r\nimport { SecondarySearchStateInterface } from '../../../searchState/store/states';\r\nimport { SEARCH_STATE } from '../../../searchState/constants';\r\nimport { isEmpty } from '../../../../helpers/functions/object-helpers';\r\nimport { getSecondarySearchState } from '../../../searchState/store/reducer';\r\nimport OverdueFlag from '../../../../ui/icons/OverdueFlag';\r\nimport { useStyles, WrapperTableCell, TeamMemberStatusCell } from './styles';\r\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\r\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\r\nimport { EmptyCellDash } from '../../../../ui/components/table-wrapper/table/EmptyCellDash';\r\nimport { Subheader } from '../../components/SubHeader';\r\nimport { normalizeSP } from '../../../../helpers/functions/searchparams-normalize';\r\nimport {\r\n    onListenEvent,\r\n    onRemoveEvent,\r\n} from '../../../../helpers/functions/Events';\r\nimport { EventNameList, REFRESH_TRAINING_PAGE } from '../../../../helpers/functions/Events/types';\r\n\r\nconst qs = require('query-string');\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nexport const PractisSetProgress: FC<{\r\n    profile?: UserProfile;\r\n    history: History<any>;\r\n    params: { teamId?: string };\r\n    updatedProgress?: PractisSets;\r\n    searchPractisSets(searchParams: SearchParams): void;\r\n    practisSets?: ListResult<TrainingPractisSet>;\r\n    team?: TeamV2;\r\n    company?: CompanyInterface;\r\n    selectedLabels?: number[];\r\n    deleteTeamPractisSetLabel: (practisSetId: number, labelId: number) => void;\r\n    loading?: boolean;\r\n    selectedPractisSets?: number[];\r\n    updateSelectedPractisSet(setId: number): void;\r\n    assignedLabels?: number[];\r\n    updateAllSelectedPractisSets(\r\n        setIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    setAssignLabelsAction(labels: number[]): void;\r\n    getPractisSetReports(\r\n        searchParams: SearchParams,\r\n        practisSetIds: number[] | null,\r\n        teamId: string\r\n    ): void;\r\n    getSingleTeam(teamId: any): void;\r\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\r\n    updatedLabels?: UpdatedLabelsState;\r\n    searchState: SecondarySearchStateInterface;\r\n}> = ({\r\n    profile,\r\n    history,\r\n    params,\r\n    practisSets,\r\n    team,\r\n    updatedProgress,\r\n    searchPractisSets,\r\n    company,\r\n    selectedLabels,\r\n    deleteTeamPractisSetLabel,\r\n    loading,\r\n    selectedPractisSets,\r\n    updateSelectedPractisSet,\r\n    updateAllSelectedPractisSets,\r\n    getPractisSetReports,\r\n    saveGlobalLabelFilters,\r\n    updatedLabels,\r\n    searchState,\r\n}) => {\r\n    const canAccessPage = useHandleAccessPage();\r\n    const classes = useStyles();\r\n\r\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\r\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\r\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\r\n        null\r\n    );\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        orderBy: { field: 'name', asc: true },\r\n        labelIDs: selectedLabels,\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        filterByStatus: [],\r\n    };\r\n\r\n    const usableParams: SearchParams =\r\n        !isEmpty(searchState) &&\r\n        !!searchState?.params &&\r\n        searchState.key === SEARCH_STATE.TRAINING.name\r\n            ? searchState.params\r\n            : initialSearchParams;\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setLabelIDs,\r\n        setOffset,\r\n        setCustom,\r\n        refreshSearchParams,\r\n        setFilter,\r\n    } = useSearchParamsState(usableParams);\r\n    const ifSearchParamsChanged = useIfChanged(searchParams);\r\n    const ifCompanyChanged = useIfChanged(company && company.id, true);\r\n\r\n    const location = history.location;\r\n    const pageIndex = parseInt(qs.parse(location.search).page);\r\n    const initialOffset = pageIndex\r\n        ? pageIndex === 1\r\n            ? 0\r\n            : (pageIndex - 1) * ITEMS_PER_PAGE\r\n        : 0;\r\n\r\n    const isCheckboxPartiallySelected =\r\n        practisSets &&\r\n        practisSets.items &&\r\n        selectedPractisSets &&\r\n        selectedPractisSets.length < practisSets.items.length;\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const hcName = useOrderBy('name', orderBy, setOrderBy);\r\n    const hcOverdue = useOrderBy('overdue', orderBy, setOrderBy);\r\n    const hcPending = useOrderBy('enrollment_not_started', orderBy, setOrderBy);\r\n    const hcInProgress = useOrderBy(\r\n        'enrollment_in_progress',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n    const hcCompleted = useOrderBy('enrollment_completed', orderBy, setOrderBy);\r\n    const hcLastTrainingAt = useOrderBy('last_training', orderBy, setOrderBy);\r\n    const permissions = usePermissionsState();\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: countAppliedFiltersCount(searchParams),\r\n        itemsCount: practisSets?.items.length || 0,\r\n    });\r\n\r\n    const handleRedirection = useCallback(\r\n        (id?: number) => {\r\n            if (!id || !team || (team && !team.id)) return;\r\n\r\n            if (\r\n                permissions.includes(NEW_PERMISSIONS.VIEW_PRACTIS_SET_PROGRESS)\r\n            ) {\r\n                history.push(\r\n                    ROUTES.TEAMS_PAGES.TRAINING_PAGES.PRACTIS_SETS_DETAILS.replace(\r\n                        ':teamId',\r\n                        team.id ? team.id.toString() : ''\r\n                    ).replace(':practisSetId', id.toString()),\r\n                    {\r\n                        useGoBack: true,\r\n                    }\r\n                );\r\n            }\r\n        },\r\n        [history, permissions, team]\r\n    );\r\n\r\n    const handleAssignedLabelDelete = (labelId: number, setId: number) => {\r\n        deleteTeamPractisSetLabel(setId, labelId);\r\n    };\r\n\r\n    const handlePractisSetCheck = (e: any, set: TrainingPractisSet) => {\r\n        e.stopPropagation();\r\n        if (!!set.practisSetId) {\r\n            updateSelectedPractisSet(set.practisSetId);\r\n        }\r\n    };\r\n\r\n    const updateAllPractisSetsCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const setIds =\r\n                (practisSets &&\r\n                    practisSets.items.map((set: TrainingPractisSet) =>\r\n                        Number(set.practisSetId)\r\n                    )) ||\r\n                [];\r\n            updateAllSelectedPractisSets(\r\n                setIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [practisSets, isCheckboxPartiallySelected, updateAllSelectedPractisSets]\r\n    );\r\n\r\n    const handleToggleLabels = (itemId?: number) => {\r\n        if (!itemId) return;\r\n        if (labelsOpen === itemId) {\r\n            setLabelsOpen(null);\r\n        } else {\r\n            setLabelsOpen(itemId);\r\n        }\r\n    };\r\n\r\n    const onExportSinglePractisClicked = useCallback(\r\n        (practisSetId: any) => {\r\n            if (params && params.teamId) {\r\n                getPractisSetReports(\r\n                    searchParams,\r\n                    [practisSetId],\r\n                    params.teamId\r\n                );\r\n            }\r\n        },\r\n        [getPractisSetReports, params, searchParams]\r\n    );\r\n\r\n    const onExportClicked = useCallback(() => {\r\n        if (selectedPractisSets && params && params.teamId) {\r\n            getPractisSetReports(\r\n                isSelectAll\r\n                        ? normalizeSP(searchParams, practisSets?.count)\r\n                        : searchParams,\r\n                !isSelectAll ? selectedPractisSets : null,\r\n                params.teamId\r\n            );\r\n        }\r\n    }, [\r\n        selectedPractisSets,\r\n        params,\r\n        getPractisSetReports,\r\n        isSelectAll,\r\n        searchParams,\r\n        practisSets?.count\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        canAccessPage([NEW_PERMISSIONS.LIST_PRACTIS_SET]);\r\n    }, [canAccessPage]);\r\n\r\n    useEffect(() => {\r\n        if (ifSearchParamsChanged) {\r\n            searchParams.limit = ITEMS_PER_PAGE;\r\n            searchPractisSets(searchParams);\r\n        }\r\n    }, [ifSearchParamsChanged, searchParams, searchPractisSets]);\r\n\r\n    useEffect(() => {\r\n        if (ifCompanyChanged) {\r\n            history.push(ROUTES.TEAMS);\r\n        }\r\n    }, [ifCompanyChanged, history]);\r\n\r\n    useEffect(() => {\r\n        if (updatedProgress) refreshSearchParams();\r\n    }, [updatedProgress, refreshSearchParams]);\r\n\r\n    const refreshData = useCallback(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchPractisSets(searchParams);\r\n        setLastRefreshed(new Date());\r\n        updateAllSelectedPractisSets([], true, isCheckboxPartiallySelected);\r\n    }, [\r\n        searchPractisSets,\r\n        searchParams,\r\n        updateAllSelectedPractisSets,\r\n        isCheckboxPartiallySelected,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        selectedLabels && setLabelIDs(selectedLabels);\r\n    }, [selectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            selectedPractisSets?.length &&\r\n            selectedPractisSets.length === practisSets?.count\r\n        ) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [practisSets?.count, selectedPractisSets]);\r\n\r\n    useEffect(() => {\r\n        const filteredPractisSets = practisSets\r\n            ? practisSets.items.map(set => Number(set.practisSetId))\r\n            : [];\r\n        const practisSetsToClear = clearSelectedItemIfNotLoaded(\r\n            selectedPractisSets,\r\n            filteredPractisSets\r\n        );\r\n        if (practisSetsToClear && practisSetsToClear.length > 0) {\r\n            updateAllSelectedPractisSets(practisSetsToClear, false);\r\n        }\r\n    }, [selectedPractisSets, practisSets, updateAllSelectedPractisSets]);\r\n\r\n    useEffect(() => {\r\n        return () =>\r\n            updateAllSelectedPractisSets([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        updateAllSelectedPractisSets([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [practisSets]);\r\n\r\n    useEffect(() => {\r\n        if (pageIndex > 1) {\r\n            setTimeout(() => {\r\n                setOffset(initialOffset);\r\n            }, 200);\r\n        } else if (pageIndex === 1) {\r\n            setTimeout(() => {\r\n                setOffset(0);\r\n            }, 100);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [pageIndex]);\r\n\r\n    useEffect(() => {\r\n        selectedLabels && setLabelIDs(selectedLabels);\r\n    }, [selectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (updatedLabels && updatedLabels.updateType === 'delete')\r\n            refreshSearchParams();\r\n    }, [updatedLabels, refreshSearchParams]);\r\n\r\n    const labelChangeHandler = (ids: number[]) => {\r\n        saveGlobalLabelFilters(ids);\r\n    };\r\n\r\n    const filterStatusHandler = (status: EnrollmentStatus[]) => {\r\n        setCustom('filterByStatus', status);\r\n    };\r\n\r\n    const filterOverdueHandler = (hasOverdue: boolean) => {\r\n        setFilter({\r\n            field: 'hasOverdue',\r\n            value: hasOverdue,\r\n        });\r\n    };\r\n\r\n    const isListEmpty =\r\n        !practisSets || (practisSets && !practisSets.items.length);\r\n\r\n    const isFilteredByOverdue = searchParams.filters?.some(\r\n        item => item.field === 'hasOverdue' && item.value === true\r\n    );\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        updateAllSelectedPractisSets([], true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        updateAllPractisSetsCheck(true);\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        updateAllPractisSetsCheck(event.target.checked);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked =\r\n        !!selectedPractisSets && !!selectedPractisSets.length;\r\n\r\n    const isMasterCheckBoxDisabled =\r\n        !practisSets || (practisSets && practisSets.items.length < 1);\r\n\r\n    /**\r\n     * @function onRowClick\r\n     * @param { TrainingPractisSet } set\r\n     * @returns { void }\r\n     */\r\n    const onRowClick = (set: TrainingPractisSet) => {\r\n        handleRedirection(set.practisSetId);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { TrainingPractisSet } set\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (set: TrainingPractisSet): boolean =>\r\n        !!selectedPractisSets &&\r\n        !!set.practisSetId &&\r\n        selectedPractisSets.includes(set.practisSetId);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { TrainingPractisSet } set\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, set: TrainingPractisSet) => {\r\n        handlePractisSetCheck(event, set);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsLabelTagsOpen\r\n     * @param { TrainingPractisSet } set\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsLabelTagsOpen = (set: TrainingPractisSet): boolean => {\r\n        return labelsOpen === set.practisSetId;\r\n    };\r\n\r\n    /**\r\n     * @function onDeleteLabelHandler\r\n     * @param { number } labelId\r\n     * @param { TrainingPractisSet } set\r\n     * @returns { void }\r\n     */\r\n    const onDeleteLabelHandler = (\r\n        labelId: number,\r\n        set: TrainingPractisSet\r\n    ): void => {\r\n        handleAssignedLabelDelete(labelId, set.practisSetId);\r\n    };\r\n\r\n    // Listen To Assign Users And Due Date -- Refresh the page after assign users\r\n    useEffect(() => {\r\n        onListenEvent(EventNameList[REFRESH_TRAINING_PAGE], refreshData);\r\n\r\n        return () => {\r\n            onRemoveEvent(EventNameList[REFRESH_TRAINING_PAGE], refreshData);\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n        <MainWrapper\r\n            title=\"Team\"\r\n            tabs={<TeamsPageNavigation teamName={team?.name} />}\r\n            subHeader={\r\n                <Subheader\r\n                    practisSetsCount={team?.countPractisSets}\r\n                    usersCount={team?.countMembers}\r\n                    teamLeadersCount={team?.leaders?.length}\r\n                />\r\n            }\r\n            goBackUrl={ROUTES.TEAMS_PAGES.LIST_OF_TEAMS}\r\n            useGoBack={!!history.location.state?.useGoBack}\r\n            subTitle={team?.name}\r\n            htmlPageTitle={`Teams ${team ? `- ${team.name}` : ''} - Practis`}\r\n            dataTest=\"team\"\r\n        >\r\n            {loading && !isSelectAll && <LoadingComponent />}\r\n\r\n            <TableWrapper\r\n                tableStates={tableStates}\r\n                data={practisSets?.items}\r\n                selectedLabels={selectedLabels}\r\n                cornered={selectedLabels && !!selectedLabels.length}\r\n                tableRefreshConfigurations={{\r\n                    lastRefreshed: lastRefreshed,\r\n                    refreshData: refreshData,\r\n                    dataTest: \"team-timestamp\",\r\n                }}\r\n                tableToolsOptions={{\r\n                    pagingOptions: {\r\n                        totalCount: practisSets?.count ?? 0,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onPageChange: () => {}, // pageIndex change automatically renders next/prev page data\r\n                        searchOrFiltersApplied:\r\n                            searchParams.searchTerm.length ||\r\n                            countAppliedFiltersCount(searchParams),\r\n                        dataTest: \"team-paging\",\r\n                    },\r\n                    searchInputOptions: {\r\n                        initialValue: searchParams.searchTerm,\r\n                        onSearchChange: setSearchTerm,\r\n                        isSearchInputDisabled:\r\n                            isListEmpty && !searchParams.searchTerm.length,\r\n                        dataTest: \"team-search\",\r\n                    },\r\n                    isSelectedItemOptionsVisible:\r\n                        !lodashIsEmpty(selectedPractisSets) &&\r\n                        !lodashIsEmpty(practisSets),\r\n                    selectedItemOptions: {\r\n                        isSelectAll: isSelectAll,\r\n                        selectedLength: selectedPractisSets?.length,\r\n                        totalCount: practisSets?.count,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onClearSelection: onClearSelection,\r\n                        onSelectAll: onSelectAll,\r\n                        bulkActionsConfig: {\r\n                            disabled:\r\n                                !selectedPractisSets ||\r\n                                (selectedPractisSets &&\r\n                                    !selectedPractisSets.length),\r\n                            onExportClicked: onExportClicked,\r\n                            showExportPermissions: [\r\n                                NEW_PERMISSIONS.EXPORT_LIST_PRACTIS_SET,\r\n                            ],\r\n                        },\r\n                    },\r\n                    filterOptions: {\r\n                        filterComponent: (\r\n                            <Popup<HTMLButtonElement>\r\n                                content={({ hide }) => (\r\n                                    <TrainingFilters\r\n                                        preSelectedLabels={selectedLabels || []}\r\n                                        onStatusChange={filterStatusHandler}\r\n                                        status={\r\n                                            searchParams.filterByStatus as EnrollmentStatus[]\r\n                                        }\r\n                                        onLabelsChange={labelChangeHandler}\r\n                                        onSuccessApply={() => hide()}\r\n                                        onOverdueChange={filterOverdueHandler}\r\n                                        overdue={isFilteredByOverdue}\r\n                                    />\r\n                                )}\r\n                                anchorOrigin={{\r\n                                    vertical: 'bottom',\r\n                                    horizontal: 'right',\r\n                                }}\r\n                                horizontalOffset={256}\r\n                            >\r\n                                {(ref, { toggleShown, shown }) => (\r\n                                    <FilterByHandler\r\n                                        ref={ref}\r\n                                        open={shown}\r\n                                        toggleOpen={toggleShown}\r\n                                        filtersCount={countAppliedFiltersCount(\r\n                                            searchParams\r\n                                        )}\r\n                                        disabled={\r\n                                            (searchParams.searchTerm.length >\r\n                                                0 ||\r\n                                                countAppliedFiltersCount(\r\n                                                    searchParams\r\n                                                ) === 0) &&\r\n                                            isListEmpty\r\n                                        }\r\n                                        dataTest=\"team-filters\"\r\n                                    />\r\n                                )}\r\n                            </Popup>\r\n                        ),\r\n                    },\r\n                }}\r\n                tableEmptyStateConfigurations={{\r\n                    shouldShowEmptyState:\r\n                        !loading && practisSets?.items?.length === 0,\r\n                    noEntriesOptions: {\r\n                        icon: NoTrainings,\r\n                        text: 'No Trainings Yet',\r\n                        dataTest: 'no-trainings-yet',\r\n                    },\r\n                    noSearchResultsOptions: {\r\n                        entityName: 'Trainings',\r\n                        dataTest: 'no-trainings-found',\r\n                    },\r\n                    noFilterResultsOptions: {\r\n                        icon: NoTrainingsFiltering,\r\n                        width: '160px',\r\n                        dataTest: 'no-filtering-criteria',\r\n                    },\r\n                }}\r\n                configurations={{\r\n                    masterCheckBoxConfig: {\r\n                        checked: isMasterCheckBoxChecked,\r\n                        disabled: isMasterCheckBoxDisabled,\r\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\r\n                        handleCheck: onCheckMasterCheckbox,\r\n                        dataTest: 'training-master-checkbox'\r\n                    },\r\n                    columns: [\r\n                        {\r\n                            title: 'Practis Sets',\r\n                            width: 16.5,\r\n                            ...(isListEmpty ? null : hcName),\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'practis-sets-column',\r\n                        },\r\n                        {\r\n                            title: 'Overdue',\r\n                            width: 8,\r\n                            ...(isListEmpty ? null : hcOverdue),\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'overdue-column',\r\n                        },\r\n                        {\r\n                            width: 25,\r\n                            title: 'Team Member Status',\r\n                            multiHeaderContainerClassName:\r\n                                classes.teamMemberHeaderContainer,\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'team-member-status-column',\r\n                            subColumns: [\r\n                                {\r\n                                    title: 'Not Started',\r\n                                    ...(isListEmpty ? null : hcPending),\r\n                                    disabled: isListEmpty,\r\n                                    dataTest: 'not-started-column',\r\n                                    width: 28.5,\r\n                                },\r\n                                {\r\n                                    title: 'In Progress',\r\n                                    ...(isListEmpty ? null : hcInProgress),\r\n                                    disabled: isListEmpty,\r\n                                    dataTest: 'in-progress-column',\r\n                                    width: 28.5,\r\n                                },\r\n                                {\r\n                                    title: 'Completed',\r\n                                    ...(isListEmpty ? null : hcCompleted),\r\n                                    disabled: isListEmpty,\r\n                                    dataTest: 'completed-column',\r\n                                    width: 28.5,\r\n                                },\r\n                            ],\r\n                        },\r\n                        {\r\n                            title: 'Last Training',\r\n                            width: 10.3,\r\n                            ...(isListEmpty ? null : hcLastTrainingAt),\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'last-training-column',\r\n                        },\r\n                        {\r\n                            width: 9,\r\n                        },\r\n                        {\r\n                            width: 3,\r\n                        },\r\n                    ],\r\n                    rowConfig: {\r\n                        onRowClick: onRowClick,\r\n                        onRowCheckHandler: onRowCheckHandler,\r\n                        isRowChecked: checkIsRowChecked,\r\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\r\n                        getLabelTagsProps: (set: TrainingPractisSet) => ({\r\n                            selectedLabels: set.labels || [],\r\n                            deletePermissions: [\r\n                                NEW_PERMISSIONS.REMOVE_PRACTIS_SET_LABEL,\r\n                            ],\r\n                            onDeleteLabel: (labelId: any) =>\r\n                                onDeleteLabelHandler(labelId, set),\r\n                        }),\r\n                        dataTest: 'practis-set-item',\r\n                        cells: [\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    set: TrainingPractisSet\r\n                                ) => !set?.name,\r\n                                fieldProps: {\r\n                                    isOverFlowText: true,\r\n                                    renderTitle: (set: TrainingPractisSet) =>\r\n                                        set.name,\r\n                                    dataTest: 'practis-set-name',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    set: TrainingPractisSet\r\n                                ) => !set.isOverdue,\r\n                                fieldProps: {\r\n                                    renderTitle: (set: TrainingPractisSet) =>\r\n                                        set.isOverdue && <span data-test=\"overdue-icon\"><OverdueFlag /></span>,\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'CUSTOM_FIELD',\r\n                                getCustomFieldComponent: (\r\n                                    set: TrainingPractisSet\r\n                                ) => (\r\n                                    <WrapperTableCell isTeamMembers={true}>\r\n                                        <TeamMemberStatusCell width={33}>\r\n                                            {set?.pendingEnrollmentCount ? (\r\n                                                <span data-test=\"not-started-count\">\r\n                                                    {\r\n                                                        set?.pendingEnrollmentCount\r\n                                                    }\r\n                                                </span>\r\n                                            ) : (\r\n                                                <EmptyCellDash />\r\n                                            )}\r\n                                        </TeamMemberStatusCell>\r\n                                        <TeamMemberStatusCell width={33}>\r\n                                            {set?.inProgressEnrollmentCount ? (\r\n                                                <span data-test=\"in-progress-count\">\r\n                                                    {\r\n                                                        set?.inProgressEnrollmentCount\r\n                                                    }\r\n                                                </span>\r\n                                            ) : (\r\n                                                <EmptyCellDash />\r\n                                            )}\r\n                                        </TeamMemberStatusCell>\r\n                                        <TeamMemberStatusCell width={33}>\r\n                                            {set?.completedEnrollmentCount ? (\r\n                                                <span data-test=\"completed-count\">\r\n                                                    {\r\n                                                        set?.completedEnrollmentCount\r\n                                                    }\r\n                                                </span>\r\n                                            ) : (\r\n                                                <EmptyCellDash />\r\n                                            )}\r\n                                        </TeamMemberStatusCell>\r\n                                    </WrapperTableCell>\r\n                                ),\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    set: TrainingPractisSet\r\n                                ) => !set.lastTraining,\r\n                                fieldProps: {\r\n                                    renderTitle: (set: TrainingPractisSet) =>\r\n                                        formatDate(set.lastTraining),\r\n                                    dataTest: 'last-training-date',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LABEL_TAGS',\r\n                                fieldProps: {\r\n                                    getLabelTagsProps: (\r\n                                        set: TrainingPractisSet\r\n                                    ) => ({\r\n                                        open: labelsOpen === set.practisSetId,\r\n                                        toggleOpen: () =>\r\n                                            handleToggleLabels(\r\n                                                set.practisSetId\r\n                                            ),\r\n                                        selectedLabels: set.labels,\r\n                                        dataTest: 'practis-set-labels',\r\n                                    }),\r\n                                    className: classes.labelsCellStyle,\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LIST_ACTIONS',\r\n                                fieldProps: {\r\n                                    getListActionsComponent: (\r\n                                        set: TrainingPractisSet\r\n                                    ) => (\r\n                                        <WithLabelsContext.Provider\r\n                                            value={{\r\n                                                reducerName:\r\n                                                    'practisSetsTraining',\r\n                                                scope: 'assignLabels',\r\n                                            }}\r\n                                        >\r\n                                            <ListActions\r\n                                                practisSet={set}\r\n                                                handleRedirection={\r\n                                                    handleRedirection\r\n                                                }\r\n                                                onExportSinglePractisClicked={\r\n                                                    onExportSinglePractisClicked\r\n                                                }\r\n                                                profile={profile}\r\n                                                team={team}\r\n                                                isHidden={\r\n                                                    !!selectedPractisSets?.length\r\n                                                }\r\n                                            />\r\n                                        </WithLabelsContext.Provider>\r\n                                    ),\r\n                                },\r\n                            },\r\n                        ],\r\n                    },\r\n                }}\r\n            />\r\n        </MainWrapper>\r\n    );\r\n};\r\n\r\nexport const PractisSetProgressContainer: FC = () => {\r\n    const state = useTrainerPractisSetState();\r\n    const profile = useSelector(getProfileState);\r\n    const history = useHistory();\r\n    const company = useSelector(getCompanyState);\r\n    const params: { teamId: string } = useParams();\r\n    const searchTrainingPractisSets = useSearchTrainingPractisSets(\r\n        params.teamId\r\n    );\r\n    const { data: teamData } = useTeamMembersState();\r\n\r\n    const labels = useLabelsState();\r\n    const deleteTeamPractisSetLabel = useDeleteTeamPractisSetLabelService();\r\n    const updatedProgress = useUpdatedProgressState();\r\n    const updateAllSelectedPractisSets =\r\n        useUpdateAllSelectedPractisSetsStateService();\r\n    const updateSelectedPractisSet = useUpdateSelectedPractisSetStateService();\r\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\r\n    const getPractisSetReports = useGetPractisSetsReportService();\r\n    const getTeamInfo = useGetTeamInfoTrainingService();\r\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\r\n    const updatedLabels = useUpdatedLabelsState();\r\n    const searchState = useSelector(getSecondarySearchState);\r\n\r\n    return (\r\n        <WithLabelsContext.Provider\r\n            value={{\r\n                reducerName: 'practisSetsTraining',\r\n            }}\r\n        >\r\n            <PractisSetProgress\r\n                profile={profile}\r\n                history={history}\r\n                params={params}\r\n                company={company}\r\n                searchPractisSets={searchTrainingPractisSets}\r\n                practisSets={state.data}\r\n                team={teamData}\r\n                selectedPractisSets={state.selectedPractisSets}\r\n                selectedLabels={labels.selected}\r\n                deleteTeamPractisSetLabel={deleteTeamPractisSetLabel}\r\n                updatedProgress={updatedProgress.data}\r\n                loading={state.loading}\r\n                updateAllSelectedPractisSets={updateAllSelectedPractisSets}\r\n                updateSelectedPractisSet={updateSelectedPractisSet}\r\n                assignedLabels={labels.assignedLabels}\r\n                setAssignLabelsAction={setAssignLabelsAction}\r\n                getPractisSetReports={getPractisSetReports}\r\n                getSingleTeam={getTeamInfo}\r\n                saveGlobalLabelFilters={saveGlobalLabelFilters}\r\n                updatedLabels={updatedLabels}\r\n                searchState={searchState}\r\n            />\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n\r\nexport default PractisSetProgressContainer;\r\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const User = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 48 48\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M43.616 35.906c-1.337-1.203-12.154-3.808-14.258-4.306 5.428-2.856 8.786-9.77 8.787-16.286C38.145 6.857 35.572 0 23.996 0 12.421 0 9.848 6.857 9.848 15.314c0 6.542 3.388 13.48 8.855 16.315-2.436.565-12.923 3.054-14.288 4.277C1.957 38.104.962 44.701 3.42 48l20.678-.005 20.49.005c2.437-3.3 1.466-9.896-.971-12.094zM13.006 15.37c0-6.836 1.831-12.38 10.99-12.38s10.99 5.543 10.99 12.38c0 5.688-2.97 11.973-7.844 13.944v5.194h1.493c5.925 1.242 11.343 2.958 12.96 3.718 1.01 1.14 1.647 4.506 1.014 6.775l-18.514-.005-18.706.005c-.637-2.269.02-5.645 1.046-6.777 1.61-.772 7.12-2.486 13.117-3.716h1.306v-5.19c-4.88-1.967-7.853-8.257-7.853-13.948z\" clipRule=\"evenodd\"/>\n            </svg>\n        );\n    }\n);\n\nexport default User;\n","const secondsToMin = (tt?: number | null): string => {\n    if (!tt) return '0m 0s';\n    const time = Number(tt.toFixed());\n    const min = ~~(time / 60);\n    const sec = time % 60;\n    let sec_min = '';\n    sec_min += '' + min + 'm ' + (sec < 10 ? '' : '');\n    sec_min += '' + sec + 's';\n    return sec_min;\n};\n\nexport const secondsToMinSimple = (tt?: number | null): string => {\n    if (!tt) return '0 Min';\n\n    if (tt < 60) {\n        return `1 min`;\n    } else {\n        return `${Math.round((tt / 60)).toFixed()} min`;\n    }\n};\n\nexport const secondsToMinFormatted = (tt?: number | null): string => {\n    if (!tt) return '00:00';\n    const time = Number(tt.toFixed());\n    const hr = ~~(time / 3600);\n    const min = ~~((time % 3600) / 60);\n    const sec = time % 60;\n    let sec_min = '';\n    if (hr > 0) {\n        sec_min += hr + ':';\n    }\n    sec_min += `${min < 10 ? '0' : ''}` + min + ':' + (sec < 10 ? '0' : '');\n    sec_min += '' + sec + '';\n    return sec_min;\n};\n\nexport default secondsToMin;\n","import { SearchParams } from '../../../../constants/interfaces/filters';\n\n/**\n * @function countAppliedFiltersCount\n * @param { SearchParams } searchParams\n * @returns { number }\n */\nexport const countAppliedFiltersCount = (\n    searchParams: SearchParams\n): number => {\n    let total = 0;\n\n    if (searchParams?.filterByRegistrationStatus?.length) {\n        total = total + searchParams.filterByRegistrationStatus.length;\n    }\n\n    if (searchParams?.labelIDs?.length) {\n        total =\n            total + searchParams.labelIDs.filter((id: number) => id > 0).length;\n    }\n\n    if (\n        searchParams?.filters?.some(\n            item => item.field === 'hasOverdue' && item.value === true\n        )\n    ) {\n        total += 1;\n    }\n\n    return total;\n};\n\n\n/**\n * @function countPractisSetDetailsAppliedFiltersCount\n * @param { SearchParams } searchParams \n * @returns { number }\n */\nexport const countPractisSetDetailsAppliedFiltersCount = (searchParams: SearchParams) => {\n    let total = 0;\n\n    if (searchParams?.filterByStatus?.length) {\n        total = total + searchParams.filterByStatus.length;\n    }\n\n    if (searchParams?.filterByRegistrationStatus?.length) {\n        total = total + searchParams.filterByRegistrationStatus.length;\n    }\n\n    if(searchParams?.filterByDueDate?.length) {\n        total+=searchParams?.filterByDueDate?.length;\n    }\n\n    return total;\n};\n\n","import React, { ChangeEvent, FC, useCallback, useState } from 'react';\nimport { kebabCase } from 'lodash';\nimport styled from 'styled-components';\nimport { EnrollmentStatusEnum } from '../../../../../../constants/interfaces/Enrollments';\nimport { Variables } from '../../../../../../theme/variables';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../ui/components/Fieldset';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { TeamMemberStatusEnum } from '../../../../../../constants/interfaces/TeamMember';\nimport OverdueFlag from '../../../../../../ui/icons/OverdueFlag';\nimport { DueDateFilters } from '../../../../../../constants/interfaces/DueDates';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nconst StatusContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 166px;\n    background-color: inherit;\n`;\n\nconst StatusItem = styled.div`\n    margin-bottom: 8px;\n    display: flex;\n    align-items: center;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst OverdueFlagWrapped = styled(OverdueFlag)`\n    margin-left: 6px;\n`;\n\nconst overduesMap: Record<DueDateFilters, { title: string }> = {\n    [DueDateFilters.ASSIGNED]: { title: 'Assigned' },\n    [DueDateFilters.NO_DUEDATE]: { title: 'No Due Date' },\n    [DueDateFilters.OVERDUE]: { title: 'Overdue' },\n};\n\nconst statusesMap: Record<EnrollmentStatusEnum, { title: string }> = {\n    [EnrollmentStatusEnum.PENDING]: { title: 'Not Started' },\n    [EnrollmentStatusEnum.IN_PROGRESS]: { title: 'In Progress' },\n    [EnrollmentStatusEnum.COMPLETED]: { title: 'Completed' },\n};\n\nconst regStatusesMap: Record<any, { title: string }> = {\n    [TeamMemberStatusEnum.PENDING]: { title: 'Pending' },\n    [TeamMemberStatusEnum.ACTIVE]: { title: 'Active' }\n};\n\nexport const TrainingDetailsFilters: FC<{\n    status: EnrollmentStatusEnum[];\n    registrationStatus: any;\n    onStatusChange: (status: EnrollmentStatusEnum[]) => void;\n    onSuccessApply: () => void;\n    onRegistrationStatusChange: (status: any) => void;\n    onOverdueChange: (dueDate: DueDateFilters[]) => void;\n    dueDate: DueDateFilters[];\n}> = ({ onStatusChange, status, registrationStatus, onSuccessApply, onRegistrationStatusChange, onOverdueChange, dueDate }) => {\n    const [statuses, setStatuses] = useState(status);\n    const [overdues, setOverdues] = useState(dueDate);\n    const [registrationStatuses, setRegistrationStatuses] = useState<any>(registrationStatus)\n\n    const onStatusChangeHandler = useCallback(\n        (statusIn: EnrollmentStatusEnum, e: ChangeEvent<HTMLInputElement>) => {\n            if (e.target.checked) {\n                setStatuses([...statuses, statusIn]);\n            } else {\n                setStatuses(statuses.filter(item => item !== statusIn));\n            }\n        },\n        [setStatuses, statuses]\n    );\n\n    const onOverdueChangeHandler = useCallback(\n        (dueDateIn: DueDateFilters, e: ChangeEvent<HTMLInputElement>) => {\n            if (e.target.checked) {\n                setOverdues([...overdues, dueDateIn]);\n            } else {\n                setOverdues(overdues.filter(item => item !== dueDateIn));\n            }\n        },\n        [overdues, setOverdues]\n    );\n\n    const onRegistrationStatusChangeHandler = useCallback(\n        (statusIn: TeamMemberStatusEnum, e: ChangeEvent<HTMLInputElement>) => {\n           \n            if (e.target.checked) {\n                setRegistrationStatuses([...registrationStatuses, statusIn]);\n            } else {\n                setRegistrationStatuses(registrationStatuses.filter((item: any) => item !== statusIn));\n            }\n        },\n        [setRegistrationStatuses, registrationStatuses]\n    );\n\n    const onApplyHandler = useCallback(() => {\n        onStatusChange(statuses);\n        onRegistrationStatusChange(registrationStatuses)\n        onSuccessApply();\n        onOverdueChange(overdues);\n    }, [onStatusChange, statuses, onRegistrationStatusChange, registrationStatuses, onSuccessApply, onOverdueChange, overdues]);\n\n    const onClearHandler = () => {\n        setStatuses([]);\n        setRegistrationStatuses([]);\n        setOverdues([]);\n    }\n\n    const totalFiltersSelected = statuses.length + \n    registrationStatuses.length + overdues.length;\n\n    return (\n        <Container>\n            <Wrapper>\n            <Fieldset title={'Registration Status'} dataTest=\"registration-status-section-title\">\n                    <StatusContainer>\n                        {(Object.keys(\n                            regStatusesMap\n                        ) as TeamMemberStatusEnum[]).map(item => (\n                            <StatusItem data-test=\"registration-status-item-container\">\n                                <Checkbox\n                                    key={item}\n                                    checked={registrationStatuses && registrationStatuses.includes(item)}\n                                    handleChange={e =>\n                                        onRegistrationStatusChangeHandler(item, e)\n                                    }\n                                    label={regStatusesMap[item].title}\n                                    border={Variables.Colors.steelGrey}\n                                    size={12}\n                                    fontColor={Variables.Colors.black}\n                                    dataTest={`${regStatusesMap[item].title.toLowerCase()}-status-checkbox`}\n                                />\n                            </StatusItem>\n                        ))}\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Progress Status'} dataTest=\"progress-status-section-title\">\n                    <StatusContainer>\n                        {(Object.keys(\n                            statusesMap\n                        ) as EnrollmentStatusEnum[]).map(item => (\n                            <StatusItem data-test=\"progress-status-item-container\">\n                                <Checkbox\n                                    key={item}\n                                    checked={statuses.includes(item)}\n                                    handleChange={e =>\n                                        onStatusChangeHandler(item, e)\n                                    }\n                                    label={statusesMap[item].title}\n                                    border={Variables.Colors.steelGrey}\n                                    size={12}\n                                    fontColor={Variables.Colors.black}\n                                    dataTest={`${kebabCase(statusesMap[item].title)}-status-checkbox`}\n                                />\n                            </StatusItem>\n                        ))}\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Due Date'} dataTest=\"due-date-section-title\">\n                    <StatusContainer>\n                        {(Object.keys(\n                            overduesMap\n                        ) as DueDateFilters[]).map(item => (\n                            <StatusItem>\n                                <Checkbox\n                                    key={item}\n                                    checked={overdues.includes(item)}\n                                    handleChange={e =>\n                                        onOverdueChangeHandler(item, e)\n                                    }\n                                    label={overduesMap[item].title}\n                                    border={Variables.Colors.steelGrey}\n                                    size={12}\n                                    fontColor={Variables.Colors.black}\n                                    dataTest={`${kebabCase(overduesMap[item].title)}-checkbox`}\n                                />\n                                {item === DueDateFilters.OVERDUE && <span data-test=\"overdue-checkbox-icon\"><OverdueFlagWrapped /></span>}\n                            </StatusItem>\n                        ))}\n                    </StatusContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant={'inverse'}\n                        width={'122px'}\n                        action={() => onClearHandler()}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={() => onApplyHandler()}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n\nexport default TrainingDetailsFilters;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { rgba } from 'polished';\n\nimport { Variables } from '../../../../theme/variables';\n\nconst Container = styled.div`\n    border-radius: 100px;\n    overflow: hidden;\n    display: block;\n`;\n\nconst Tray = styled.div<{\n    value: number;\n    completed?: boolean;\n    full?: boolean;\n    color: string;\n    completedColor: string;\n    newProgressBar?: boolean\n}>`\n\n    height: ${props => props.newProgressBar ? '4px' : '24px'};\n    width: 100%;\n    position: relative;\n    background: ${props => props.newProgressBar ? props.theme.Colors.whiteThree : props.theme.Colors.whiteFive};\n    border-radius: 12px;\n    border: solid 1px ${props => !props.newProgressBar ? props.theme.Colors.cloudyBlue : 'transparent'};\n    &&:before {\n        background: none repeat scroll 0 0\n            ${props =>\n                !!props.completed\n                    ? rgba(props.completedColor, props.newProgressBar ? 1 : 0.15)\n                    : rgba(props.color, props.newProgressBar ? 1 :0.15)};\n        content: '';\n        position: absolute;\n        top: -1px;\n        bottom: -1px;\n        left: -1px;\n        right: -1px;\n        ${props =>\n            props.value  && !props.newProgressBar &&\n            `border: solid 1px ${\n                !!props.completed ? props.completedColor : props.color\n            };`}\n        ${props =>\n            props.full || props.completed\n                ? `\n                    border-radius: 12px;`\n                : `\n                    border-top-left-radius: 0px;\n                    border-bottom-left-radius: 0px;\n                  `};\n        ${props =>\n            (!props.full && !props.completed) && ` width: ${props.value ? props.value : 0}%;`}\n\n        ${props =>\n            props.newProgressBar && props.value === 0 && `width: 4px !important;`}\n    }\n`;\n\nconst ValueLabel = styled.div<{\n    color?: string;\n    isSmallerScreen?: boolean;\n    completed?: boolean;\n}>`\n    font-size: 11px;\n    color: ${props =>\n        props.completed ? props.color : props.theme.Colors.steelGrey};\n    height: 100%;\n    top: 0;\n    z-index: 1;\n    ${props => !props.isSmallerScreen && 'position: absolute; right: 16px;'}\n    display: flex;\n    ${props => !!props.isSmallerScreen && 'justify-content: center;'}\n    align-items: center;\n    padding: 0 5px;\n    font-weight: 500;\n`;\n\nexport const ProgressBar: FC<{\n    value: number;\n    text?: string;\n    color?: string;\n    isCompleted?: boolean;\n    isFull?: boolean;\n    completedColor?: string;\n    isSmallerScreen?: boolean;\n    newProgressBar?: boolean\n}> = ({\n    value,\n    text,\n    color,\n    isCompleted,\n    isFull,\n    completedColor,\n    isSmallerScreen,\n    newProgressBar \n}) => {\n    return (\n        <Container>\n            <Tray\n                value={value}\n                color={color || Variables.Colors.skyBlueTwo}\n                completed={isCompleted}\n                full={isFull}\n                completedColor={completedColor || Variables.Colors.topaz}\n                newProgressBar={newProgressBar}\n            >\n                <ValueLabel\n                    color={completedColor || Variables.Colors.topaz}\n                    isSmallerScreen={isSmallerScreen}\n                    completed={isCompleted}\n                >\n                    {newProgressBar ? null : text\n                        ? text\n                        : isCompleted\n                        ? `Completed on ${value}%`\n                        : `${value}%`}\n                </ValueLabel>\n            </Tray>\n        </Container>\n    );\n};\n","import { memo } from 'react';\n\nimport { StripedProgressBarInterface } from './types';\n\nfunction StripedProgressBarView(props: StripedProgressBarInterface) {\n    const { percentage = 0, dataTest } = props;\n\n    return (\n        <div className=\"progress-container\">\n            <div className=\"progress-title\" data-test={dataTest && `${dataTest}-completed-value`}>Completed {percentage}%</div>\n            <div className=\"progress progress-striped active\">\n                <div\n                    style={{ width: `${percentage}%` }}\n                    className=\"progress-bar\"\n                    data-test={dataTest && `${dataTest}-bar`}\n                ></div>\n            </div>\n        </div>\n    );\n}\n\nexport default memo(StripedProgressBarView);\n","import React, { FC } from 'react';\nimport { formatMMDDYY } from '../../../../../../helpers/functions/date-convert';\nimport styled from 'styled-components';\nimport { ProgressBar } from '../../../../../../ui/components/ProgressBar';\nimport { EnrollmentStatus, EnrollmentStatusEnum } from '../../../../../../constants/interfaces/Enrollments';\nimport { Variables } from '../../../../../../theme/variables';\nimport { statusesMap } from '../../../../../../constants/variables/general';\n\n\nconst ProgressBarContainer = styled.div`\n    width: 100%;\n`;\n\nconst InfoWrapper = styled.div<{calculatePercent?: number}>`\n    display: flex;\n    align-items: center;\n    color: ${props => props.calculatePercent === 100  ? props.theme.Colors.darkGreen : 'auto'};\n`;\n\nconst CompletedAtWrapper = styled.div`\n   color: ${props => props.theme.Colors.darkGreen};\n  \n`;\n\nconst GreenDot = styled.div`\n    background: ${props => props.theme.Colors.darkGreen};\n    width: 4px;\n    height: 4px;\n    border-radius: 50%;\n    margin: 0 5px 0 6px;\n`;\n\nconst GeneralProgressCol: FC<{\n    count?: number;\n    max?: number;\n    passedScenarios?: number;\n    totalScenarios?: number;\n    status?: string | '';\n    completedAt?: any,\n    dataTest?: string,\n}> = ({ count, max, status, completedAt, dataTest }) => {\n    \n    if (status === EnrollmentStatus.PENDING) {\n        return <>{statusesMap[EnrollmentStatus.PENDING]?.title}</>;\n    }\n    \n    if (!max || count === 0) {\n        return (\n            <ProgressBarContainer data-test={dataTest}>\n                   <InfoWrapper>\n                <span data-test={dataTest && `${dataTest}-count`}>0%</span>\n            </InfoWrapper>\n                <ProgressBar newProgressBar value={0} color={Variables.Colors.mainBlue}  />\n            </ProgressBarContainer>\n        );\n    }\n\n    return (\n        <ProgressBarContainer>\n            <InfoWrapper calculatePercent={count || 0} data-test={dataTest}>\n                <span data-test={dataTest && `${dataTest}-count`}>{count || 0}%</span>\n                {completedAt && <GreenDot></GreenDot>}\n                <CompletedAtWrapper>\n                    {formatMMDDYY(completedAt)}\n                </CompletedAtWrapper>\n            </InfoWrapper>\n            <ProgressBar\n                newProgressBar\n                color={Variables.Colors.mainBlue}\n                completedColor={Variables.Colors.topaz}\n                value={count || 0}\n                isFull={(count || 0) >= max}\n                isCompleted={\n                    status === EnrollmentStatusEnum.COMPLETED\n                        ? true\n                        : count === max\n                }\n            />\n        </ProgressBarContainer>\n    );\n};\n\nexport default GeneralProgressCol;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PlusInCircleIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                fill=\"none\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M2.343 2.343a8 8 0 1 0 11.314 11.314A8 8 0 0 0 2.343 2.343zm1.06 10.253a6.5 6.5 0 1 1 9.193-9.192 6.5 6.5 0 0 1-9.192 9.192z\"\n                    fill=\"currentColor\"\n                />\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M7.25 7.25V4h1.5v3.25H12v1.5H8.75V12h-1.5V8.75H4v-1.5h3.25z\"\n                    fill=\"currentColor\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default PlusInCircleIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ViewPractisSetIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                fill=\"none\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M1.573 2.573A.25.25 0 0 1 1.75 2.5h12.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25H1.75a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .073-.177zM1.75 1A1.75 1.75 0 0 0 0 2.75v1.5A1.75 1.75 0 0 0 1.75 6h12.5A1.75 1.75 0 0 0 16 4.25v-1.5A1.75 1.75 0 0 0 14.25 1H1.75zm0 6h.75v6.25c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V7H15v6.25A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25V7h.75zm8 2.5H11V8H5v1.5h4.75z\"\n                    fill=\"currentColor\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default ViewPractisSetIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ExportReportIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M4.893 1.6a.316.316 0 0 0-.195.075.307.307 0 0 0-.076.192v12.266a.272.272 0 0 0 .27.267h9.194a.262.262 0 0 0 .253-.163.254.254 0 0 0 .017-.104V6.4h-2.974a1.904 1.904 0 0 1-1.342-.544 1.855 1.855 0 0 1-.55-1.323V1.6H4.892zm6.218.597v2.336a.272.272 0 0 0 .27.267h2.37l-2.64-2.603zM3 1.867c0-.495.2-.97.554-1.32C3.91.197 4.391 0 4.893 0h5.526a1.883 1.883 0 0 1 1.33.544l3.7 3.648A1.845 1.845 0 0 1 16 5.504v8.63a1.834 1.834 0 0 1-.559 1.33 1.885 1.885 0 0 1-1.355.536H4.893a1.905 1.905 0 0 1-1.342-.544A1.856 1.856 0 0 1 3 14.133V1.867z\"\n                    fill=\"currentColor\"\n                />\n                <path\n                    d=\"M1.048 5h5.904A1.048 1.048 0 0 1 8 6.048v5.903A1.048 1.048 0 0 1 6.952 13H1.258A1.258 1.258 0 0 1 0 11.742V6.048A1.048 1.048 0 0 1 1.048 5z\"\n                    fill=\"currentColor\"\n                />\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M4.055 9.584 2.758 12H1l2.085-3.017L1.23 6h1.806l1.019 2.315L5.388 6H7L5.048 8.983 7 11.933 5.303 12 4.055 9.584z\"\n                    fill=\"#fff\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default ExportReportIcon;\n","export const DEFAULT_LIMIT = 20;\nexport const MAX_SELECTED_ALL_ITEMS = 20;\nexport const MIN_ITEMS_TO_SHOW_MODAL = 30;\nexport const UPDATE_LABEL_ACTION = 'UPDATE_LABEL_ACTION';\nexport const UPDATE_MULTIPLE_LABEL_ACTION = 'UPDATE_MULTIPLE_LABEL_ACTION';\nexport const NUDGE_USERS_ACTION = 'NUDGE_USERS_ACTION';","import { useCallback } from 'react';\nimport { isEmpty } from 'lodash';\nimport dayjs from 'dayjs';\n\nimport { DATE_TIME_FORMAT } from '../../ui/components/Calendar/constants';\nimport { SearchParams } from '../../constants/interfaces/filters';\nimport { SearchUsersParams } from '../../api/users/types';\nimport { getSearchSortingValue } from '../../helpers/functions/search-params-helpers';\nimport { UserStatus } from '../../features/users/store/costants';\nimport {\n    useNudgeUsersApi,\n    useSearchPractisSetDetailsUsersApi,\n    useSearchUsersApi,\n    useGetOverdueLearners\n} from '../../api';\nimport { useShowMessage } from '../../ui/components/ErrorMessages/ErrorMessages';\nimport { ErrorResult } from '../../constants/interfaces/ErrorResult';\nimport { NudgeData, NudgeDateType } from '../../api/alert/types';\nimport { NudgeUserSenderData, SearchUsersFunctionParams } from './types';\nimport { createSearchPractisSetDetailsParams } from '../../features/teams/tools';\n\n/**\n * @function generateCopyOfEntityName\n * @param { string } entityName\n * @returns { string }\n */\nexport const generateCopyOfEntityName = (entityName: string): string => {\n    const newDataTimeFormatPrefix = `[${dayjs(new Date()).format(\n        DATE_TIME_FORMAT\n    )}]`;\n\n    const splittedTeamName = entityName.split('-');\n\n    // It already contains DateTime prefix.\n    if (\n        splittedTeamName?.[0].includes('AM') ||\n        splittedTeamName?.[0].includes('PM')\n    ) {\n        const newTeamName = splittedTeamName.pop();\n        return `${newDataTimeFormatPrefix} - ${newTeamName}`;\n    }\n\n    return `${newDataTimeFormatPrefix} - ${entityName}`;\n};\n\n/**\n * @function useSearchUsersWithEnrollmentAndNudge\n * @returns { CallableFunction }\n */\nconst useSearchUsersWithEnrollmentAndNudge = () => {\n    const searchPractisSetDetailsUsers = useSearchPractisSetDetailsUsersApi();\n    const nudgeUsers = useNudgeUsersApi();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            teamId: string,\n            practisSetId: string,\n            senderData: NudgeUserSenderData,\n            onSuccessCallback: () => void\n        ) => {\n            const searchPractisSetDetailsParams =\n                createSearchPractisSetDetailsParams(searchParams);\n\n            await searchPractisSetDetailsUsers(teamId, practisSetId, {\n                ...searchPractisSetDetailsParams,\n            })\n                .then(async response => {\n                    if (!isEmpty(response.items)) {\n                        const nudgeUsersData = response.items.map(\n                            item =>\n                                ({\n                                    type: 'enrollment',\n                                    enrollmentId: item.id,\n                                    receiverId: item.user.id,\n                                    ...senderData,\n                                } as NudgeData)\n                        );\n\n                        await nudgeUsers(nudgeUsersData)\n                            .then(onSuccessCallback)\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [nudgeUsers, searchPractisSetDetailsUsers, showMessage]\n    );\n};\n\n/**\n * @function useSearchCommonUsersAndNudge\n * @returns { CallableFunction }\n */\nconst useSearchCommonUsersAndNudge = () => {\n    const searchUsersApi = useSearchUsersApi();\n    const nudgeUsers = useNudgeUsersApi();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            companyId: number,\n            senderData: NudgeUserSenderData,\n            onSuccessCallback: () => void\n        ) => {\n            const searchRegisteredUsersParams: SearchUsersParams = {\n                status: UserStatus.ACTIVE,\n                roles: searchParams.roleIDs?.join(','),\n                labels: searchParams.labelIDs?.join(','),\n                teams: searchParams.teamIds?.join(','),\n                companies: companyId.toString(),\n                limit: searchParams.limit ?? 20,\n                offset: searchParams.offset,\n                query: searchParams.searchTerm,\n                sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\n            };\n\n            await searchUsersApi({ ...searchRegisteredUsersParams })\n                .then(async response => {\n                    if (!isEmpty(response.items)) {\n                        const nudgeUsersData = response.items.map(\n                            item =>\n                                ({\n                                    type: 'common',\n                                    enrollmentId: null,\n                                    receiverId: item.id,\n                                    ...senderData,\n                                } as NudgeData)\n                        );\n\n                        await nudgeUsers(nudgeUsersData)\n                            .then(onSuccessCallback)\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [nudgeUsers, searchUsersApi, showMessage]\n    );\n};\n\n/**\n * @function useSearchOverdueLearnersAndNudge\n * @returns { CallableFunction }\n */\nconst useSearchOverdueLearnersAndNudge = () => {\n    const searchOverdueLearnersApi = useGetOverdueLearners();\n    const nudgeUsers = useNudgeUsersApi();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            companyId: number,\n            senderData: NudgeUserSenderData,\n            onSuccessCallback: () => void\n        ) => {\n            const sp = {\n                teams: searchParams.teamIds?.join(','),\n                labels: searchParams.labelIDs?.join(','),\n                limit: searchParams.limit ?? 20,\n                offset: searchParams.offset,\n                query: searchParams.searchTerm,\n                sort: getSearchSortingValue(searchParams.orderBy, 'user_name', true),\n                companies: companyId.toString()\n            }\n            await searchOverdueLearnersApi(sp)\n                .then(async response => {\n                    if (!isEmpty(response.items)) {\n                        const nudgeUsersData = response.items.map(\n                            item =>\n                                ({\n                                    type: 'overdue',\n                                    enrollmentId: null,\n                                    receiverId: item.id,\n                                    ...senderData,\n                                } as NudgeData)\n                        );\n\n                        await nudgeUsers(nudgeUsersData)\n                            .then(onSuccessCallback)\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [nudgeUsers, searchOverdueLearnersApi, showMessage]\n    );\n};\n\n/**\n * @function useHandleSearchUsersAndNudge\n * @param { NudgeDateType } type\n * @returns { CallableFunction }\n */\nexport const useHandleSearchUsersAndNudge = (type: NudgeDateType) => {\n    const searchCommonUsersAndNudge = useSearchCommonUsersAndNudge();\n    const searchUsersWithEnrollmentAndNudge =\n        useSearchUsersWithEnrollmentAndNudge();\n    const searchOverdueLearnersAndNudge = useSearchOverdueLearnersAndNudge();\n\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            searchUsersFunctionParams: SearchUsersFunctionParams<typeof type>,\n            senderData: NudgeUserSenderData,\n            onSuccessCallback: () => void\n        ) => {\n            if (type === 'common') {\n                const { companyId } =\n                    searchUsersFunctionParams as SearchUsersFunctionParams<'common'>;\n\n                await searchCommonUsersAndNudge(\n                    searchParams,\n                    companyId,\n                    senderData,\n                    onSuccessCallback\n                );\n            } else if (type === 'overdue') {\n                const { companyId } =\n                    searchUsersFunctionParams as SearchUsersFunctionParams<'overdue'>;\n\n                await searchOverdueLearnersAndNudge(\n                    searchParams,\n                    companyId,\n                    senderData,\n                    onSuccessCallback);\n            } else {\n                const { teamId, practisSetId } =\n                    searchUsersFunctionParams as SearchUsersFunctionParams<'enrollment'>;\n                await searchUsersWithEnrollmentAndNudge(\n                    searchParams,\n                    teamId,\n                    practisSetId,\n                    senderData,\n                    onSuccessCallback\n                );\n            } \n        },\n        [searchCommonUsersAndNudge, searchUsersWithEnrollmentAndNudge, type, searchOverdueLearnersAndNudge]\n    );\n};","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { flatten, isEmpty } from 'lodash';\n\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../ui/components/ModalDialogs/store/actions';\nimport { useChunkRequestsService } from '../ChunkRequestService/hooks';\nimport { ChunkRequestActionInterface } from '../ChunkRequestService/hooks/types';\nimport {\n    NudgeUsersChunkRequestParameters,\n    NudgeUserSenderData,\n    SearchUsersFunctionParams,\n    UpdateLabelEntityType,\n    updateLabelFetchEntityActionFunctionParametersType,\n    UpdateLabelMultipleEntityType,\n    UpdateLabelsParametersType,\n} from './types';\nimport { GeneralBulkActionModalInterface } from '../../ui/components/ModalDialogs/types';\nimport { MIN_ITEMS_TO_SHOW_MODAL, NUDGE_USERS_ACTION, UPDATE_LABEL_ACTION } from './constants';\nimport { ErrorResult } from '../../constants/interfaces/ErrorResult';\nimport { useShowMessage } from '../../ui/components/ErrorMessages/ErrorMessages';\nimport { SearchParams } from '../../constants/interfaces/filters';\nimport { NudgeDateType } from '../../api/alert/types';\nimport { useHandleSearchUsersAndNudge } from './helpers';\nimport { ITEM_PER_CHUNK_SIZE } from '../ChunkRequestService/hooks/constants';\n\n/**\n * @function useUpdateLabelsBulkActionService\n * @param { Function } addLabelActionFunction\n * @param { Function } deleteLabelActionFunction\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @param { Function } onStartCallback\n * @returns { void }\n */\nexport function useUpdateLabelsBulkActionService(\n    addLabelActionFunction: Function,\n    deleteLabelActionFunction: Function,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void,\n    onStartCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n    const hideModalDialog = useHideModalDialog();\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const entityRef = useRef<UpdateLabelEntityType | null>(null);\n    const { entityName = '', entityId = 0 } = entityRef.current! || {};\n\n    const assignedLabelIdsRef = useRef<number[]>([]);\n    const deletedLabelIdsRef = useRef<number[]>([]);\n\n    const assignedLabelIds = assignedLabelIdsRef?.current;\n    const deletedLabelIds = deletedLabelIdsRef.current;\n\n    const shouldShowModals =\n        assignedLabelIds.length + deletedLabelIds.length >=\n        MIN_ITEMS_TO_SHOW_MODAL;\n\n    const assignedLabels = assignedLabelIds?.map(labelId => ({\n        [`${entityName}Id`]: entityId,\n        labelId,\n    }));\n\n    const deletedLabels = deletedLabelIds?.map(labelId => ({\n        [`${entityName}Id`]: entityId,\n        labelId,\n    }));\n\n    const assignLabelsToEntityOptions = {\n        parameters: {\n            labels: assignedLabels,\n        },\n        fieldName: 'labels',\n    };\n\n    const deleteLabelsFromEntityOptions = {\n        parameters: {\n            labels: deletedLabels,\n        },\n        fieldName: 'labels',\n    };\n\n    const actionList: ChunkRequestActionInterface<UpdateLabelsParametersType>[] =\n        [];\n\n    if (!isEmpty(assignedLabelIds)) {\n        actionList.push({\n            actionName: UPDATE_LABEL_ACTION,\n            actionFunction: addLabelActionFunction,\n            actionFunctionOptions: assignLabelsToEntityOptions,\n        });\n    }\n\n    if (!isEmpty(deletedLabelIds)) {\n        actionList.push({\n            actionName: UPDATE_LABEL_ACTION,\n            actionFunction: deleteLabelActionFunction,\n            actionFunctionOptions: deleteLabelsFromEntityOptions,\n        });\n    }\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        if (shouldShowModals) {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: 'Processing Labels',\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n        }\n\n        setIsRunning(false);\n        onErrorCallback?.();\n    }, [dispatch, hideModalDialog, onErrorCallback, shouldShowModals]);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n            }\n\n            hideModalDialog();\n            isRunning && setIsRunning(false);\n\n            onSuccessCallback?.();\n        });\n\n        showMessage('Changes have been saved', 'success');\n    }, [\n        dispatch,\n        hideModalDialog,\n        isRunning,\n        onSuccessCallback,\n        shouldShowModals,\n    ]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopBulkActionService\n     * @returns { void }\n     */\n    const handleStopBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (!isEmpty(assignedLabelIds)) {\n                setIsStopped(true);\n            }\n\n            isRunning && setIsRunning(false);\n            hideModalDialog();\n\n            onSuccessCallback?.();\n        });\n    }, [assignedLabelIds, hideModalDialog, isRunning, setIsStopped, dispatch]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle: 'Processing Labels',\n                            onStopBulkActionService:\n                                handleStopBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n            onStartCallback?.();\n        });\n    }, [\n        dispatch,\n        handleStopBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n        shouldShowModals,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(\n        (\n            entity: UpdateLabelEntityType,\n            assignedLabelIds: number[],\n            deletedLabelIds: number[]\n        ) => {\n            entityRef.current = entity;\n            assignedLabelIdsRef.current = assignedLabelIds;\n            deletedLabelIdsRef.current = deletedLabelIds;\n\n            setIsRunning(true);\n        },\n        []\n    );\n}\n\n/**\n * @dev Use this hook to assign labels to multiple users/practisSets/teams.\n * @function useUpdateMultipleEntityLabelsBulkActionService\n * @param { Function } addLabelActionFunction\n * @param { Function } deleteLabelActionFunction\n * @param { boolean } isSelectAll\n * @param { Function } fetchEntityActionFunction\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { void }\n */\nexport function useUpdateMultipleEntityLabelsBulkActionService(\n    addLabelActionFunction: Function,\n    deleteLabelActionFunction: Function,\n    isSelectAll: boolean,\n    fetchEntityAction: ChunkRequestActionInterface<updateLabelFetchEntityActionFunctionParametersType>,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n    const hideModalDialog = useHideModalDialog();\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    let actionList: ChunkRequestActionInterface<\n        | UpdateLabelsParametersType\n        | updateLabelFetchEntityActionFunctionParametersType\n    >[] = [];\n\n    const entityRef = useRef<UpdateLabelMultipleEntityType | null>(null);\n    const { entityName = '', entityIds = [] } = entityRef.current! || {};\n    const totalCompletedItems = useRef<number>(0);\n\n    const assignedLabelIdsRef = useRef<number[]>([]);\n    const deletedLabelIdsRef = useRef<number[]>([]);\n\n    const assignedLabelIds = assignedLabelIdsRef?.current;\n    const deletedLabelIds = deletedLabelIdsRef.current;\n\n    const shouldShowModals =\n        isSelectAll ||\n        (!isSelectAll &&\n            (assignedLabelIds.length + deletedLabelIds.length) *\n                entityIds.length >=\n                MIN_ITEMS_TO_SHOW_MODAL);\n\n    const assignedLabels = entityIds.map(entityId => {\n        return assignedLabelIds.map(labelId => ({\n            [`${entityName}Id`]: entityId,\n            labelId,\n        }));\n    });\n\n    const deletedLabels = entityIds.map(entityId => {\n        return deletedLabelIds.map(labelId => ({\n            [`${entityName}Id`]: entityId,\n            labelId,\n        }));\n    });\n\n    const assignLabelsToEntityOptions = {\n        parameters: {\n            labels: flatten(assignedLabels),\n        },\n        fieldName: 'labels',\n    };\n\n    const deleteLabelsFromEntityOptions = {\n        parameters: {\n            labels: flatten(deletedLabels),\n            entityIds: [],\n        },\n        fieldName: 'labels',\n    };\n\n    /**\n     * @function assignLabelsToEntityService\n     * @param { { id: number, labels: number[] }[] } entityData\n     * @returns { Promise<void> }\n     */\n    const assignLabelsToEntityService = useCallback(\n        async (\n            labels: number[],\n            entityData: { id: number; labels: number[] }[]\n        ) => {\n            const entityIds = entityData?.map(entity => entity.id);\n            const entityLabelIds = entityData?.map(\n                entity => entity.labels\n            )?.[0];\n\n            const filteredAssignedLabelIds = labels.filter(\n                labelId => !entityLabelIds.includes(labelId)\n            );\n\n            if (!isEmpty(entityIds) && !isEmpty(filteredAssignedLabelIds)) {\n                const processedAssignedLabelIds = entityIds.map(entityId => {\n                    return filteredAssignedLabelIds.map(labelId => ({\n                        [`${entityName}Id`]: entityId,\n                        labelId,\n                    }));\n                });\n\n                if (!isEmpty(processedAssignedLabelIds)) {\n                    await addLabelActionFunction(\n                        flatten(processedAssignedLabelIds)\n                    ).then(\n                        () => (totalCompletedItems.current += entityIds.length)\n                    );\n                }\n            }\n        },\n        [addLabelActionFunction, entityName]\n    );\n\n    /**\n     * @function deleteLabelsFromEntityService\n     * @param { { id: number, labels: number[] }[] } entityData\n     * @returns { Promise<void> }\n     */\n    const deleteLabelsFromEntityService = useCallback(\n        async (\n            labels: number[],\n            entityData: { id: number; labels: number[] }[]\n        ) => {\n            const entityIds = entityData?.map(entity => entity.id);\n            const entityLabelIds = entityData?.map(\n                entity => entity.labels\n            )?.[0];\n\n            const filteredDeletedLabelIds = labels.filter(labelId =>\n                entityLabelIds.includes(labelId)\n            );\n\n            if (!isEmpty(entityIds) && !isEmpty(filteredDeletedLabelIds)) {\n                const processedDeletedLabelIds = entityIds.map(entityId => {\n                    return filteredDeletedLabelIds.map(labelId => ({\n                        [`${entityName}Id`]: entityId,\n                        labelId,\n                    }));\n                });\n\n                if (!isEmpty(processedDeletedLabelIds)) {\n                    await deleteLabelActionFunction(\n                        flatten(processedDeletedLabelIds)\n                    ).then(\n                        () => (totalCompletedItems.current += entityIds.length)\n                    );\n                }\n            }\n        },\n        [deleteLabelActionFunction, entityName]\n    );\n\n    /**\n     * @function handleShowCompletedItemsMessage\n     * @returns { void }\n     */\n    const handleShowCompletedItemsMessage = () => {\n        const numberOfCompletedItems = isSelectAll\n            ? totalCompletedItems.current\n            : entityIds.length;\n\n        const isSingleItem = numberOfCompletedItems === 1;\n\n        showMessage(\n            `Changes ${\n                isSingleItem ? 'has' : 'have'\n            } been saved for ${numberOfCompletedItems} item${\n                !isSingleItem ? 's' : ''\n            }`,\n            'success'\n        );\n    };\n\n    if (isSelectAll) {\n        const childActionList: ChunkRequestActionInterface<UpdateLabelsParametersType>[] =\n            [];\n\n        if (!isEmpty(assignedLabelIds)) {\n            const assignLabelsToEntityServiceOptions = {\n                parameters: {\n                    labels: assignedLabelIds,\n                    entityIds: [],\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityIds',\n            };\n\n            childActionList.push({\n                actionName: UPDATE_LABEL_ACTION,\n                actionFunction: assignLabelsToEntityService,\n                actionFunctionOptions:\n                    assignLabelsToEntityServiceOptions as any,\n            });\n        }\n\n        if (!isEmpty(deletedLabelIds)) {\n            const deleteLabelsFromEntityServiceOptions = {\n                parameters: {\n                    labels: deletedLabelIds,\n                    entityIds: [],\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityIds',\n            };\n\n            childActionList.push({\n                actionName: UPDATE_LABEL_ACTION,\n                actionFunction: deleteLabelsFromEntityService,\n                actionFunctionOptions:\n                    deleteLabelsFromEntityServiceOptions as any,\n            });\n        }\n\n        actionList.push({\n            ...fetchEntityAction,\n            childActionList: childActionList,\n        });\n    } else {\n        if (!isEmpty(assignedLabelIds)) {\n            actionList.push({\n                actionName: UPDATE_LABEL_ACTION,\n                actionFunction: addLabelActionFunction,\n                actionFunctionOptions: assignLabelsToEntityOptions,\n            });\n        }\n\n        if (!isEmpty(deletedLabelIds)) {\n            actionList.push({\n                actionName: UPDATE_LABEL_ACTION,\n                actionFunction: deleteLabelActionFunction,\n                actionFunctionOptions: deleteLabelsFromEntityOptions,\n            });\n        }\n    }\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(\n        (error?: ErrorResult) => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_FAILED_MODAL',\n                        modalProps: {\n                            modalTitle: 'Processing Labels',\n                            onClose: hideModalDialog,\n                        } as GeneralBulkActionModalInterface,\n                    })\n                );\n            }\n\n            setIsRunning(false);\n\n            actionList = [];\n            handleShowCompletedItemsMessage();\n\n            totalCompletedItems.current = 0;\n\n            onErrorCallback?.();\n        },\n        [dispatch, hideModalDialog, onErrorCallback, shouldShowModals]\n    );\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n            }\n\n            hideModalDialog();\n            isRunning && setIsRunning(false);\n\n            actionList = [];\n            \n            onSuccessCallback?.();\n        });\n        \n        handleShowCompletedItemsMessage();\n\n        totalCompletedItems.current = 0;\n    }, [hideModalDialog, isRunning, onSuccessCallback, shouldShowModals]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopBulkActionService\n     * @returns { void }\n     */\n    const handleStopBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n\n            isRunning && setIsRunning(false);\n            hideModalDialog();\n\n            actionList = [];\n            \n            onSuccessCallback?.();\n        });\n\n        handleShowCompletedItemsMessage();\n\n        totalCompletedItems.current = 0;\n    }, [\n        assignedLabelIds,\n        isRunning,\n        hideModalDialog,\n        onSuccessCallback,\n        setIsStopped,\n    ]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle: 'Processing Labels',\n                            onStopBulkActionService:\n                                handleStopBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n        shouldShowModals,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(\n        (\n            entity: UpdateLabelMultipleEntityType,\n            assignedLabelIds: number[],\n            deletedLabelIds: number[]\n        ) => {\n            entityRef.current = entity;\n            assignedLabelIdsRef.current = assignedLabelIds;\n            deletedLabelIdsRef.current = deletedLabelIds;\n\n            setIsRunning(true);\n        },\n        []\n    );\n}\n\n/**\n *\n * @description Custom hook to nudge users with chunk service\n * when all items are selected.\n * @function useNudgeUsersBulkActionService\n * @param { NudgeDateType } type\n * @param { SearchParams } searchParams\n * @param { number } totalUsersCount\n * @param { number } companyId\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useNudgeUsersBulkActionService(\n    type: NudgeDateType,\n    searchUsersFunctionParams: SearchUsersFunctionParams<typeof type>,\n    searchParams: SearchParams,\n    totalUsersCount: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const handleSearchUsersAndNudge = useHandleSearchUsersAndNudge(type);\n\n    const senderDataRef = useRef<NudgeUserSenderData>({\n        senderName: '',\n        text: '',\n    });\n\n    const shouldShowModals = totalUsersCount > 20;\n\n    const totalCompletedNudgedUsers = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<\n        NudgeUsersChunkRequestParameters<typeof type>\n    >[] = [\n        {\n            actionName: NUDGE_USERS_ACTION,\n            actionFunction: handleSearchUsersAndNudge,\n            actionFunctionOptions: {\n                parameters: {\n                    searchParams: {\n                        ...searchParams,\n                        offset: totalUsersCount,\n                    },\n                    searchUsersFunctionParams,\n                    senderData: senderDataRef.current,\n                    onSuccessCallback: () =>\n                        (totalCompletedNudgedUsers.current =\n                            totalCompletedNudgedUsers.current + 1),\n                },\n                fieldName: 'searchParams.offset',\n            },\n        },\n    ];\n\n    /**\n     * @function clearTotalCompletedNudgedUsers\n     * @returns { void }\n     */\n    const clearTotalCompletedNudgedUsers = () =>\n        (totalCompletedNudgedUsers.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n            }\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedNudgedUsers();\n\n            showMessage('Messages were sent successfully', 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_FAILED_MODAL',\n                        modalProps: {\n                            modalTitle: 'Nudge Users',\n                            onClose: hideModalDialog,\n                        } as GeneralBulkActionModalInterface,\n                    })\n                );\n            }\n\n            clearTotalCompletedNudgedUsers();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopNudgeUsersBulkActionService\n     * @returns { void }\n     */\n    const handleStopNudgeUsersBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(\n                `${\n                    totalCompletedNudgedUsers.current * ITEM_PER_CHUNK_SIZE\n                } Messages were sent successfully`,\n                'success'\n            );\n\n            clearTotalCompletedNudgedUsers();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartNudgeUsersBulkActionService\n     * @returns { void }\n     */\n    const handleStartNudgeUsersBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle: 'Nudge Users',\n                            onStopBulkActionService:\n                                handleStopNudgeUsersBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopNudgeUsersBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartNudgeUsersBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    /**\n     * @param { NudgeUserSenderData } senderData\n     */\n    return useCallback((senderData: NudgeUserSenderData) => {\n        senderDataRef.current = senderData;\n        setIsRunning(true);\n    }, []);\n}","export const DEFAULT_LIMIT = 20;\nexport const MAX_SELECTED_ALL_ITEMS = 20;\nexport const MIN_ITEMS_TO_SHOW_MODAL = 30;\nexport const UPDATE_TEAM_ACTION = 'UPDATE_TEAM_ACTION';\nexport const REMIND_TO_START_ACTION = 'REMIND_TO_START_ACTION';","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isEmpty } from 'lodash';\n\nimport {\n    useAssignMembersToTeamsApi,\n    useDeleteMembersFromTeamsApi,\n    useSearchTeamMembersApi,\n    useDeleteTeamsApi,\n    useSearchTeamsApi,\n    useCreateNewTeamApi,\n    useAssignLabelsToTeamsApi,\n    useSearchUsersApi,\n} from '../../../../api';\nimport {\n    AssignedMemberToTeamType,\n    DeletedMemberToTeamType,\n    SearchTeamMembersParams,\n} from '../../../../api/teams/types';\nimport { SearchParams } from '../../../../constants/interfaces/filters';\n\nimport { useChunkRequestsService } from '../../../../services/ChunkRequestService/hooks';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../ui/components/ModalDialogs/store/actions';\nimport { GeneralBulkActionModalInterface } from '../../../../ui/components/ModalDialogs/types';\nimport {\n    bulkActionFunctionParametersType,\n    RemindToStartChunkRequestParameters,\n} from './types';\nimport { ChunkRequestActionInterface } from '../../../../services/ChunkRequestService/hooks/types';\nimport {\n    createSearchTeamMembersParams,\n    createSearchTeamsParams,\n} from '../../tools';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { TeamMember } from '../../../../constants/interfaces/TeamMember';\nimport {\n    updateSingleTeamStart,\n    updateSingleTeamSuccess,\n    updateSingleTeamFailure,\n    updateSingleTeamStop,\n} from '../../store/actions';\nimport {\n    DEFAULT_LIMIT,\n    MAX_SELECTED_ALL_ITEMS,\n    MIN_ITEMS_TO_SHOW_MODAL,\n    REMIND_TO_START_ACTION,\n    UPDATE_TEAM_ACTION,\n} from './constants';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { CLIENT_SIDE_ERROR_MESSAGE } from '../../../../ui/components/ErrorMessages/constants';\nimport { Team } from '../../../../constants/interfaces/Team';\nimport { generateCopyOfEntityName } from '../../../../services/GeneralBulkActionServices/helpers';\nimport { useHandleSearchEnrollmentsAndRemind } from './helpers';\nimport { SearchUsersParams } from '../../../../api/users/types';\nimport { getSearchSortingValue } from '../../../../helpers/functions/search-params-helpers';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport { UserStatus } from '../../../users/store/costants';\n\n/**\n * @function useUpdateTeamMembersBulkActionService\n * @param { string } actionName\n * @param { Function } actionFunction\n * @param { Record<string, unknown>} actionFunctionOptions\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns\n */\nexport function useUpdateTeamMembersBulkActionService(\n    action: ChunkRequestActionInterface<bulkActionFunctionParametersType>,\n    modalTitle: string,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const { actionFunction, actionFunctionOptions } = action;\n\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n\n    const {\n        parameters: { selectedItemIds = null, itemsCount = 0 },\n    } = actionFunctionOptions;\n\n    const shouldShowModals =\n        (!selectedItemIds && itemsCount >= MAX_SELECTED_ALL_ITEMS) ||\n        (selectedItemIds && selectedItemIds.length >= MIN_ITEMS_TO_SHOW_MODAL);\n\n    /**\n     * @function handleSuccessBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessBulkActionServiceCallback = useCallback(() => {\n        if (shouldShowModals) {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n        }\n        dispatch(updateSingleTeamSuccess());\n\n        onSuccessCallback?.();\n    }, [hideModalDialog, onSuccessCallback, shouldShowModals, dispatch]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        if (shouldShowModals) {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle,\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n        }\n        dispatch(updateSingleTeamFailure());\n\n        onErrorCallback?.();\n    }, [\n        dispatch,\n        hideModalDialog,\n        modalTitle,\n        onErrorCallback,\n        shouldShowModals,\n    ]);\n\n    const { setIsStopped } =\n        useChunkRequestsService<bulkActionFunctionParametersType>(\n            [\n                {\n                    actionName: UPDATE_TEAM_ACTION,\n                    actionFunction,\n                    actionFunctionOptions,\n                },\n            ],\n            handleSuccessBulkActionServiceCallback,\n            handleFailedBulkActionServiceCallback\n        );\n\n    /**\n     * @function handleStopBulkActionService\n     * @returns { void }\n     */\n    const handleStopBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            hideModalDialog();\n            dispatch(updateSingleTeamStop());\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, dispatch]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle,\n                            onStopBulkActionService:\n                                handleStopBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n            dispatch(updateSingleTeamStart());\n        });\n    }, [\n        dispatch,\n        handleStopBulkActionService,\n        hideModalDialog,\n        modalTitle,\n        setIsStopped,\n        shouldShowModals,\n    ]);\n\n    return {\n        handleStartBulkActionService,\n        handleStopBulkActionService,\n    };\n}\n\n/**\n * @description function to duplicate a selected team.\n * Create new team by selected team's name at first then assign labels and members to\n * new created team by using chunk service if needed.\n * @function useDuplicateTeamBulActionService\n * @param { Function | undefined } onSuccessCallback\n * @param { Function | undefined } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useDuplicateTeamBulActionService(\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const actionList = useRef<any>([]);\n    const newTeamDataRef = useRef<Team | null>(null);\n    const { countMembers = 0, labels = [] } = newTeamDataRef.current || {};\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const createNewTeam = useCreateNewTeamApi();\n    const assignLabelsToTeam = useAssignLabelsToTeamsApi();\n    const getCurrentTeamMembers = useSearchTeamMembersApi();\n    const assignMembersToTeam = useAssignMembersToTeamsApi();\n\n    const shouldShowModals = countMembers > 0 || !isEmpty(labels);\n\n    /**\n     * @description fetch current team 'members' data and immediately\n     * assign them to the new created (duplicated) team 20 by 20.\n     * @function getCurrentTeamMembersAndAssignToNewTeam\n     * @returns { void }\n     */\n    const getCurrentTeamMembersAndAssignToNewTeam = useCallback(\n        async (\n            currentTeamId: number,\n            newTeamId: number,\n            searchParams: SearchTeamMembersParams\n        ) => {\n            if (currentTeamId && newTeamId) {\n                await getCurrentTeamMembers(currentTeamId, searchParams)\n                    .then(async (response: ListResult<TeamMember>) => {\n                        const members = response?.items?.map(item => ({\n                            userId: item.user.id,\n                            isTeamLead: item.isTeamLead ?? false,\n                            teamId: newTeamId,\n                        }));\n                        if (!isEmpty(members)) {\n                            await assignMembersToTeam(members).catch(\n                                (error: unknown) => {\n                                    throw error;\n                                }\n                            );\n                        }\n                    })\n                    .catch((error: unknown) => {\n                        throw error;\n                    });\n            }\n        },\n        [assignMembersToTeam, getCurrentTeamMembers]\n    );\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        if (shouldShowModals) {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: 'Duplicate Team',\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n        }\n\n        isRunning && setIsRunning(false);\n\n        actionList.current = [];\n        onErrorCallback?.();\n    }, [\n        dispatch,\n        hideModalDialog,\n        isRunning,\n        onErrorCallback,\n        shouldShowModals,\n    ]);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n            }\n\n            hideModalDialog();\n            isRunning && setIsRunning(false);\n\n            showMessage('1 Team has been copied', 'success');\n\n            actionList.current = [];\n            onSuccessCallback?.();\n        });\n    }, [\n        hideModalDialog,\n        isRunning,\n        onSuccessCallback,\n        shouldShowModals,\n        showMessage,\n    ]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList.current,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopDuplicateTeamBulkActionService\n     * @returns { void }\n     */\n    const handleStopDuplicateTeamBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            hideModalDialog();\n            onSuccessCallback?.();\n            actionList.current = [];\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped]);\n\n    /**\n     * @description add assignMembers action item to main action list\n     * @function handleAddAssignMembersActionToActionList\n     * @param { number } currentTeamId\n     * @param { number } newTeamId\n     * @returns { void }\n     */\n    const handleAddAssignMembersActionToActionList = useCallback(\n        (currentTeamId: number, newTeamId: number) => {\n            const assignMembersToTeamOptions = {\n                parameters: {\n                    currentTeamId,\n                    newTeamId,\n                    searchParams: {\n                        sort: 'name_asc',\n                        limit: DEFAULT_LIMIT,\n                        offset: countMembers,\n                    },\n                },\n                fieldName: 'searchParams.offset',\n            };\n\n            const AssignMembersToTeamAction = {\n                actionFunction: getCurrentTeamMembersAndAssignToNewTeam,\n                actionFunctionOptions: assignMembersToTeamOptions,\n            };\n\n            actionList.current.push(AssignMembersToTeamAction);\n        },\n        [countMembers, getCurrentTeamMembersAndAssignToNewTeam]\n    );\n\n    /**\n     * @description add assignLabels action item to main action list\n     * @function handleAddAssignLabelsActionToActionList\n     * @returns { void }\n     */\n    const handleAddAssignLabelsActionToActionList = useCallback(\n        (currentTeamLabelIds: number[], newTeamId: number) => {\n            const assignedLabelList = currentTeamLabelIds?.map(labelId => ({\n                teamId: newTeamId,\n                labelId,\n            }));\n\n            const assignLabelsToTeamOptions = {\n                parameters: {\n                    labels: assignedLabelList,\n                },\n                fieldName: 'labels',\n            };\n\n            const AssignLabelsToTeamAction = {\n                actionFunction: assignLabelsToTeam,\n                actionFunctionOptions: assignLabelsToTeamOptions,\n            };\n\n            actionList.current.push(AssignLabelsToTeamAction);\n        },\n        [assignLabelsToTeam]\n    );\n\n    /**\n     * @description show progress modal and start chunk service action\n     * @function handleStartActionModal\n     * @returns { void }\n     */\n    const handleStartActionModal = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'Duplicate Team',\n                        onStopBulkActionService:\n                            handleStopDuplicateTeamBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopDuplicateTeamBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    /**\n     * @function handleAssignRelationsToNewTeam\n     * @param { number } newTeamId\n     * @returns { void }\n     */\n    const handleAssignRelationsToNewTeam = useCallback(\n        (newTeamId: number) => {\n            const {\n                id: currentTeamId = 0,\n                countMembers = 0,\n                labels: currentTeamLabelIds = [],\n            } = newTeamDataRef.current!;\n\n            if (shouldShowModals) {\n                if (countMembers > 0) {\n                    handleAddAssignMembersActionToActionList(\n                        currentTeamId,\n                        newTeamId\n                    );\n                }\n\n                if (!isEmpty(currentTeamLabelIds)) {\n                    handleAddAssignLabelsActionToActionList(\n                        currentTeamLabelIds,\n                        newTeamId\n                    );\n                }\n\n                handleStartActionModal();\n            }\n            // There is nothing to assign so stop the runner\n            else {\n                Promise.resolve().then(() => {\n                    onSuccessCallback?.();\n                    setIsRunning(false);\n                });\n            }\n        },\n        [\n            handleAddAssignLabelsActionToActionList,\n            handleAddAssignMembersActionToActionList,\n            handleStartActionModal,\n            onSuccessCallback,\n            shouldShowModals,\n        ]\n    );\n\n    /**\n     * @function handleStartDuplicateTeamBulkActionService\n     * @returns { void }\n     */\n    const handleStartDuplicateTeamBulkActionService = useCallback(() => {\n        const { name = '' } = newTeamDataRef.current!;\n\n        const generatedCopyOfTeamName = generateCopyOfEntityName(name);\n\n        createNewTeam(generatedCopyOfTeamName)\n            .then(response => {\n                const { id: newTeamId } = response;\n\n                if (newTeamId) {\n                    handleAssignRelationsToNewTeam(newTeamId);\n                }\n            })\n            .catch((error: ErrorResult) => {\n                if (error.message) {\n                    const errorMessage =\n                        CLIENT_SIDE_ERROR_MESSAGE[error.message] ??\n                        error.message;\n\n                    showMessage(errorMessage, 'error');\n                    setIsRunning(false);\n                    throw error;\n                }\n            });\n    }, [createNewTeam, handleAssignRelationsToNewTeam, showMessage]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartDuplicateTeamBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    /**\n     * @description Call the service runner.\n     * @function callback\n     * @param { Team } teamData\n     * @returns { void }\n     */\n    return useCallback((teamData: Team) => {\n        newTeamDataRef.current = teamData;\n\n        setIsRunning(true);\n    }, []);\n}\n\n/**\n * @function useSearchAndAssignMembersToTeam\n * @returns { void }\n */\nconst useSearchAndAssignMembersToTeam = () => {\n    const searchAllUsers = useSearchUsersApi();\n    const assignMembersToTeams = useAssignMembersToTeamsApi();\n    const profile = useSelector(getProfileState);\n\n    return useCallback(\n        async (teamId: number, searchParams: SearchParams) => {\n            if (!profile?.companyId) return;\n            const searchAllUsersParams: SearchUsersParams = {\n                status:\n                    searchParams.filters?.reduce((statuses, filter) => {\n                        if (filter.field === 'status') {\n                            statuses = String(filter.value);\n                        }\n\n                        return statuses;\n                    }, '') || `${UserStatus.ACTIVE},${UserStatus.PENDING}`,\n                labels: searchParams.labelIDs?.join(','),\n                roles: searchParams.roleIDs?.join(','),\n                teams: searchParams.teamIds?.join(','),\n                companies: profile?.companyId?.toString(),\n                limit: searchParams.limit ?? 20,\n                offset: 0,\n                query: searchParams.searchTerm,\n                sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\n                excludeTeamId: searchParams.teamId?.toString(),\n            };\n            await searchAllUsers(searchAllUsersParams)\n                .then(async (response: Record<string, any>) => {\n                    const members = response?.items?.map(\n                        (item: { id: number }) => ({\n                            userId: item?.id,\n                            isTeamLead: false,\n                            teamId: teamId,\n                        })\n                    );\n                    if (!isEmpty(members)) {\n                        await assignMembersToTeams(members).catch(\n                            (error: unknown) => {\n                                throw error;\n                            }\n                        );\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [assignMembersToTeams, profile?.companyId, searchAllUsers]\n    );\n};\n\n/**\n * @function useAssignMembersToTeam\n * @returns { void }\n */\nconst useAssignMembersToTeam = () => {\n    const assignMembersToTeams = useAssignMembersToTeamsApi();\n\n    return useCallback(\n        async (teamId: number, selectedItemIds: number[]) => {\n            const members = selectedItemIds.map((userId: number) => ({\n                userId,\n                isTeamLead: false,\n                teamId,\n            })) as AssignedMemberToTeamType[];\n\n            await assignMembersToTeams(members)\n                .then(res => {})\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [assignMembersToTeams]\n    );\n};\n\n/**\n * @function useAssignMembersToTeamService\n * @returns { void }\n */\nexport const useAssignMembersToTeamService = () => {\n    const assignMembersToTeam = useAssignMembersToTeam();\n    const searchAndAssignMembersToTeam = useSearchAndAssignMembersToTeam();\n\n    return useCallback(\n        async (\n            teamId: number,\n            searchParams: SearchParams,\n            selectedItemIds?: number[]\n        ) => {\n            if (selectedItemIds) {\n                await assignMembersToTeam(teamId, selectedItemIds);\n            } else {\n                await searchAndAssignMembersToTeam(teamId, searchParams);\n            }\n        },\n        [assignMembersToTeam, searchAndAssignMembersToTeam]\n    );\n};\n\n/**\n * @function useSearchAndDeleteMembersFromTeam\n * @returns { void }\n */\nconst useSearchAndDeleteMembersFromTeam = () => {\n    const searchTeamsMembersApi = useSearchTeamMembersApi();\n    const deleteMembersFromTeams = useDeleteMembersFromTeamsApi();\n\n    return useCallback(\n        async (teamId: number, searchParams: SearchParams) => {\n            await searchTeamsMembersApi(\n                teamId,\n                createSearchTeamMembersParams({ ...searchParams, offset: 0 })\n            )\n                .then(async (response: ListResult<TeamMember>) => {\n                    const members = response?.items?.map(item => ({\n                        userId: item.user.id,\n                        teamId: teamId,\n                    }));\n\n                    if (!isEmpty(members)) {\n                        await deleteMembersFromTeams(members).catch(\n                            (error: unknown) => {\n                                throw error;\n                            }\n                        );\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteMembersFromTeams, searchTeamsMembersApi]\n    );\n};\n\n/**\n * @function useDeleteMembersFromTeam\n * @returns { void }\n */\nconst useDeleteMembersFromTeam = () => {\n    const deleteMembersFromTeams = useDeleteMembersFromTeamsApi();\n\n    return useCallback(\n        async (teamId: number, selectedItemIds: number[]) => {\n            const members = selectedItemIds.map((userId: number) => ({\n                userId,\n                teamId,\n            })) as DeletedMemberToTeamType[];\n\n            await deleteMembersFromTeams(members)\n                .then(res => {})\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteMembersFromTeams]\n    );\n};\n\n/**\n * @function useDeleteMembersFromTeamService\n * @returns { void }\n */\nexport const useDeleteMembersFromTeamService = () => {\n    const searchAndDeleteMembersFromTeam = useSearchAndDeleteMembersFromTeam();\n    const deleteMembersFromTeam = useDeleteMembersFromTeam();\n\n    return useCallback(\n        async (\n            teamId: number,\n            searchParams?: SearchParams,\n            selectedItemIds?: number[]\n        ) => {\n            if (selectedItemIds) {\n                await deleteMembersFromTeam(teamId, selectedItemIds);\n            } else {\n                searchParams &&\n                    (await searchAndDeleteMembersFromTeam(\n                        teamId,\n                        searchParams\n                    ));\n            }\n        },\n        [deleteMembersFromTeam, searchAndDeleteMembersFromTeam]\n    );\n};\n\n/**\n * @function useUpdateTeamsBulkActionService\n * @param { string } actionName\n * @param { Function } actionFunction\n * @param { Record<string, unknown>} actionFunctionOptions\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useUpdateTeamsBulkActionService(\n    action: ChunkRequestActionInterface<bulkActionFunctionParametersType>,\n    modalTitle: string,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const { actionFunction, actionFunctionOptions } = action;\n\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n\n    const {\n        parameters: { selectedItemIds = null, itemsCount = 0 },\n    } = actionFunctionOptions;\n\n    const shouldShowModals =\n        (!selectedItemIds && itemsCount >= MAX_SELECTED_ALL_ITEMS) ||\n        (selectedItemIds && selectedItemIds.length >= MIN_ITEMS_TO_SHOW_MODAL);\n    /**\n     * @function handleSuccessBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessBulkActionServiceCallback = useCallback(() => {\n        if (shouldShowModals) {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n        }\n        dispatch(updateSingleTeamSuccess());\n\n        onSuccessCallback?.();\n    }, [hideModalDialog, onSuccessCallback, shouldShowModals, dispatch]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        if (shouldShowModals) {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle,\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n        }\n        dispatch(updateSingleTeamFailure());\n\n        onErrorCallback?.();\n    }, [\n        dispatch,\n        hideModalDialog,\n        modalTitle,\n        onErrorCallback,\n        shouldShowModals,\n    ]);\n\n    const { setIsStopped } =\n        useChunkRequestsService<bulkActionFunctionParametersType>(\n            [\n                {\n                    actionName: UPDATE_TEAM_ACTION,\n                    actionFunction,\n                    actionFunctionOptions,\n                },\n            ],\n            handleSuccessBulkActionServiceCallback,\n            handleFailedBulkActionServiceCallback\n        );\n\n    /**\n     * @function handleStopBulkActionService\n     * @returns { void }\n     */\n    const handleStopBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            hideModalDialog();\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle,\n                            onStopBulkActionService:\n                                handleStopBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n            dispatch(updateSingleTeamStart());\n        });\n    }, [\n        dispatch,\n        handleStopBulkActionService,\n        hideModalDialog,\n        modalTitle,\n        setIsStopped,\n        shouldShowModals,\n    ]);\n\n    return {\n        handleStartBulkActionService,\n        handleStopBulkActionService,\n    };\n}\n\n/**\n * @function useDeleteTeamsService\n * @returns { void }\n */\nexport const useDeleteTeamsService = () => {\n    const searchAndDeleteTeams = useSearchAndDeleteTeams();\n    const deleteSelectedTeams = useDeleteSelectedTeams();\n    return useCallback(\n        async (searchParams: SearchParams, selectedItemIds?: number[]) => {\n            if (selectedItemIds) {\n                await deleteSelectedTeams(selectedItemIds);\n            } else {\n                await searchAndDeleteTeams(searchParams);\n            }\n        },\n        [deleteSelectedTeams, searchAndDeleteTeams]\n    );\n};\n\n/**\n * @function useDeleteSelectedTeams\n * @returns { void }\n */\nconst useDeleteSelectedTeams = () => {\n    const deleteTeams = useDeleteTeamsApi();\n\n    return useCallback(\n        async (selectedItemIds: number[]) => {\n            await deleteTeams(selectedItemIds)\n                .then(res => {})\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteTeams]\n    );\n};\n\n/**\n * @function useSearchAndDeleteTeams\n * @returns { void }\n */\nconst useSearchAndDeleteTeams = () => {\n    const searchTeamsApi = useSearchTeamsApi();\n    const deleteSelectedTeams = useDeleteSelectedTeams();\n\n    return useCallback(\n        async (searchParams: SearchParams) => {\n            await searchTeamsApi(\n                createSearchTeamsParams({ ...searchParams, offset: 0 })\n            )\n                .then(async (response: ListResult<Team>) => {\n                    const teamIds = [] as number[];\n                    response?.items?.forEach(item => {\n                        if (!item.isDefault && item.id) {\n                            teamIds.push(item.id);\n                        }\n                    });\n\n                    if (!isEmpty(teamIds)) {\n                        await deleteSelectedTeams(teamIds).catch(\n                            (error: unknown) => {\n                                throw error;\n                            }\n                        );\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteSelectedTeams, searchTeamsApi]\n    );\n};\n\n/**\n *\n * @description Custom hook to remind to start with chunk service\n * when all items are selected.\n * @function useRemindToStartBulkActionService\n * @param { string } teamId\n * @param { string } practisSetId\n * @param { SearchParams } searchParams\n * @param { number } totalUsersCount\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useRemindToStartBulkActionService(\n    teamId: string,\n    practisSetId: string,\n    searchParams: SearchParams,\n    totalUsersCount: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const handleSearchEnrollmentsAndRemind =\n        useHandleSearchEnrollmentsAndRemind();\n\n    const shouldShowModals = totalUsersCount > 20;\n\n    const totalCompletedRemindToStartItems = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<RemindToStartChunkRequestParameters>[] =\n        [\n            {\n                actionName: REMIND_TO_START_ACTION,\n                actionFunction: handleSearchEnrollmentsAndRemind,\n                actionFunctionOptions: {\n                    parameters: {\n                        teamId,\n                        practisSetId,\n                        searchParams: {\n                            ...searchParams,\n                            offset: totalUsersCount,\n                        },\n                        onSuccessCallback: (numberOfDoneItems: number) =>\n                            (totalCompletedRemindToStartItems.current =\n                                totalCompletedRemindToStartItems.current +\n                                numberOfDoneItems),\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n        ];\n\n    /**\n     * @function clearTotalCompletedRemindedUsers\n     * @returns { void }\n     */\n    const clearTotalCompletedRemindedUsers = () =>\n        (totalCompletedRemindToStartItems.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n            }\n\n            isRunning && setIsRunning(false);\n\n            showMessage(\n                `Reminders Sent to ${totalCompletedRemindToStartItems.current} Users`,\n                'success'\n            );\n\n            clearTotalCompletedRemindedUsers();\n            onSuccessCallback?.();\n        });\n    }, [\n        hideModalDialog,\n        isRunning,\n        onSuccessCallback,\n        shouldShowModals,\n        showMessage,\n    ]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_FAILED_MODAL',\n                        modalProps: {\n                            modalTitle: 'Remind Users',\n                            onClose: hideModalDialog,\n                        } as GeneralBulkActionModalInterface,\n                    })\n                );\n            }\n\n            clearTotalCompletedRemindedUsers();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [\n        dispatch,\n        hideModalDialog,\n        isRunning,\n        onErrorCallback,\n        shouldShowModals,\n    ]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopRemindUsersBulkActionService\n     * @returns { void }\n     */\n    const handleStopRemindUsersBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(\n                `Reminders Sent to ${totalCompletedRemindToStartItems.current} Users`,\n                'success'\n            );\n\n            clearTotalCompletedRemindedUsers();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartRemindUsersBulkActionService\n     * @returns { void }\n     */\n    const handleStartRemindUsersBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle: 'Remind Users',\n                            onStopBulkActionService:\n                                handleStopRemindUsersBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopRemindUsersBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n        shouldShowModals,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartRemindUsersBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n}","import { useCallback } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport {\n    useRemindToStartApi,\n    useSearchPractisSetDetailsUsersApi,\n} from '../../../../api';\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { createSearchPractisSetDetailsParams } from '../../tools';\nimport { RemindToStartEnrollment } from '../../../../api/alert/types';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { UserStatus } from '../../../users/store/costants';\nimport { ENROLLMENT_REMIND_TO_START } from '../../../../api/alert/constants';\n\n/**\n * @function useHandleSearchEnrollmentsAndRemind\n * @returns { CallableFunction }\n */\nexport const useHandleSearchEnrollmentsAndRemind = () => {\n    const searchPractisSetDetailsUsers = useSearchPractisSetDetailsUsersApi();\n    const remindToStart = useRemindToStartApi();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        async (\n            teamId: string,\n            practisSetId: string,\n            searchParams: SearchParams,\n            onSuccessCallback: (numberOdDoneItems: number) => void\n        ) => {\n            const searchPractisSetDetailsParams =\n                createSearchPractisSetDetailsParams({\n                    ...searchParams,\n                    filterByStatus: searchParams.filterByStatus?.length\n                        ? searchParams.filterByStatus\n                        : ['PENDING', 'IN_PROGRESS'],\n                });\n\n            await searchPractisSetDetailsUsers(teamId, practisSetId, {\n                ...searchPractisSetDetailsParams,\n            })\n                .then(async response => {\n                    if (!isEmpty(response.items)) {\n                        const enrollments = response.items\n                            // Pending users can't be reminded.\n                            .filter(\n                                item => item.user.status === UserStatus.ACTIVE\n                            )\n                            .map(\n                                item =>\n                                    ({\n                                        enrollmentId: item.id,\n                                        type: ENROLLMENT_REMIND_TO_START,\n                                    } as RemindToStartEnrollment)\n                            );\n\n                        await remindToStart(enrollments)\n                            .then(() => {\n                                onSuccessCallback(enrollments.length);\n                            })\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [remindToStart, searchPractisSetDetailsUsers, showMessage]\n    );\n};","export const CREATE_ENROLLMENT_ACTION = 'CREATE_ENROLLMENT_ACTION';\nexport const DELETE_ENROLLMENT_ACTION = 'DELETE_ENROLLMENT_ACTION';\nexport const UPDATE_ENROLLMENT_ACTION = 'UPDATE_ENROLLMENT_ACTION';","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { SearchParams } from '../../../../../../constants/interfaces/filters';\n\nimport { useChunkRequestsService } from '../../../../../../services/ChunkRequestService/hooks';\nimport { ITEM_PER_CHUNK_SIZE } from '../../../../../../services/ChunkRequestService/hooks/constants';\nimport { ChunkRequestActionInterface } from '../../../../../../services/ChunkRequestService/hooks/types';\nimport { useShowMessage } from '../../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../../../ui/components/ModalDialogs/store/actions';\nimport { GeneralBulkActionModalInterface } from '../../../../../../ui/components/ModalDialogs/types';\nimport { CREATE_ENROLLMENT_ACTION, DELETE_ENROLLMENT_ACTION, UPDATE_ENROLLMENT_ACTION } from './constants';\nimport { useSearchEnrollmentsAndDelete, useSearchEnrollmentsAndUpdate, useSearchPsetEnrollmentsAndDelete, useSearchUsersAndCreateEnrollment } from './helpers';\nimport { CreateEnrollmentChunkRequestParameters, CreateEnrollmentsParams, DeleteEnrollmentChunkRequestParameters, DeleteEnrollmentsParams, UpdateEnrollmentChunkRequestParameters } from './types';\n\n/**\n *\n * @description Custom hook to create enrollments with chunk service\n * @function useCreateEnrollmentBulkActionService\n * @param { createEnrollmentsParams } CreateEnrollmentsParams\n * @param { Number } totalUsersCount\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { Void }\n */\n export function useCreateEnrollmentBulkActionService(\n     createEnrollmentsParams: CreateEnrollmentsParams,\n     totalUsersCount?: number,\n     onSuccessCallback?: () => void,\n     onErrorCallback?: () => void\n ) {\n     const dispatch = useDispatch();\n     const searchUsersAndCreateEnrollment = useSearchUsersAndCreateEnrollment();\n     const hideModalDialog = useHideModalDialog();\n     const showMessage = useShowMessage();\n\n     const totalCompletedEnrollments = useRef<number>(0);\n\n     const [isRunning, setIsRunning] = useState<boolean>(false);\n\n     const actionList: ChunkRequestActionInterface<CreateEnrollmentChunkRequestParameters>[] =\n         [\n             {\n                 actionName: CREATE_ENROLLMENT_ACTION,\n                 actionFunction: searchUsersAndCreateEnrollment,\n                 actionFunctionOptions: {\n                    parameters: {\n                         searchParams: {\n                             ...createEnrollmentsParams,\n                             offset: totalUsersCount\n                         },\n                         onSuccessCallback: () =>\n                             (totalCompletedEnrollments.current =\n                                totalCompletedEnrollments.current + 1),\n                     },\n                     fieldName: 'searchParams.offset',\n                 },\n             },\n         ];\n\n     /**\n      * @function clearTotalCompletedEnrollments\n      * @returns { void }\n      */\n     const clearTotalCompletedEnrollments = () =>\n         (totalCompletedEnrollments.current = 0);\n\n     /**\n      * @function handleSuccessServiceCallback\n      * @returns { void }\n      */\n     const handleSuccessServiceCallback = useCallback(() => {\n         Promise.resolve().then(() => {\n             setTimeout(() => {\n                 hideModalDialog();\n             }, 900);\n\n             isRunning && setIsRunning(false);\n             clearTotalCompletedEnrollments();\n\n             showMessage('All Users have been assigned', 'success');\n             onSuccessCallback?.();\n         });\n     }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n     /**\n      * @function handleFailedBulkActionServiceCallback\n      * @returns { void }\n      */\n     const handleFailedBulkActionServiceCallback = useCallback(() => {\n         Promise.resolve().then(() => {\n             dispatch(\n                 showModalDialog({\n                     modalType: 'BULK_ACTION_FAILED_MODAL',\n                     modalProps: {\n                         modalTitle: 'Assign Users',\n                         onClose: hideModalDialog,\n                     } as GeneralBulkActionModalInterface,\n                 })\n             );\n\n             clearTotalCompletedEnrollments();\n\n             isRunning && setIsRunning(false);\n\n             onErrorCallback?.();\n         });\n     }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n     const { setIsStopped } = useChunkRequestsService(\n         actionList,\n         handleSuccessServiceCallback,\n         handleFailedBulkActionServiceCallback\n     );\n\n     /**\n      * @function handleStopCreateEnrollmentsBulkActionService\n      * @returns { void }\n      */\n     const handleStopCreateEnrollmentsBulkActionService = useCallback(() => {\n         Promise.resolve().then(() => {\n             setIsStopped(true);\n             setIsRunning(false);\n             hideModalDialog();\n\n             showMessage(\n                 `${\n                    totalCompletedEnrollments.current *\n                     ITEM_PER_CHUNK_SIZE\n                 } Users have been assigned`,\n                 'success'\n             );\n\n             clearTotalCompletedEnrollments();\n\n             onSuccessCallback?.();\n         });\n     }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n     /**\n      * @function handleStartCreateEnrollmentBulkActionService\n      * @returns { void }\n      */\n     const handleStartCreateEnrollmentBulkActionService = useCallback(() => {\n         Promise.resolve().then(() => {\n             dispatch(\n                 showModalDialog({\n                     modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                     modalProps: {\n                         modalTitle: 'Assign Users',\n                         onStopBulkActionService:\n                             handleStopCreateEnrollmentsBulkActionService,\n                         onClose: hideModalDialog,\n                     },\n                 })\n             );\n\n             setIsStopped(false);\n         });\n     }, [\n         dispatch,\n         handleStopCreateEnrollmentsBulkActionService,\n         hideModalDialog,\n         setIsStopped,\n     ]);\n\n     useEffect(() => {\n         if (isRunning) {\n             handleStartCreateEnrollmentBulkActionService();\n         }\n         // eslint-disable-next-line react-hooks/exhaustive-deps\n     }, [isRunning]);\n\n     return useCallback(() => {\n         setIsRunning(true);\n     }, []);\n}\n\n\n/**\n *\n * @description Custom hook to get enrollments and delete with chunk service\n * @function useDeleteEnrollmentBulkActionService\n * @param { deleteEnrollmentsParams } DeleteEnrollmentsParams\n * @param { Number } totalEnrollmentsCount\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { Void }\n */\n export function useDeleteEnrollmentBulkActionService(\n    deleteEnrollmentsParams: DeleteEnrollmentsParams,\n    entityType: string,\n    totalEnrollmentsCount?: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const searchEnrollmentsAndDelete = useSearchEnrollmentsAndDelete();\n    const searchPsetEnrollmentsAndDelete = useSearchPsetEnrollmentsAndDelete();\n    const actionFunction = entityType === 'practisSet' ? searchEnrollmentsAndDelete : searchPsetEnrollmentsAndDelete;\n    const entityExpression =  entityType === 'practisSet' ? 'Practis Sets' : 'Users';\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const totalCompletedEnrollments = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<DeleteEnrollmentChunkRequestParameters>[] =\n        [\n            {\n                actionName: DELETE_ENROLLMENT_ACTION,\n                actionFunction,\n                actionFunctionOptions: {\n                   parameters: {\n                        searchParams: {\n                            ...deleteEnrollmentsParams,\n                            offset: totalEnrollmentsCount\n                        },\n                        onSuccessCallback: () =>\n                            (totalCompletedEnrollments.current =\n                               totalCompletedEnrollments.current + 1),\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n        ];\n\n    /**\n     * @function clearTotalCompletedEnrollments\n     * @returns { void }\n     */\n    const clearTotalCompletedEnrollments = () =>\n        (totalCompletedEnrollments.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedEnrollments();\n\n            showMessage(`All ${entityExpression} have been unassigned`, 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage, entityExpression]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: `Unassign ${entityExpression}`,\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n\n            clearTotalCompletedEnrollments();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onErrorCallback, entityExpression]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopDeleteEnrollmentsBulkActionService\n     * @returns { void }\n     */\n    const handleStopDeleteEnrollmentsBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(\n                `${\n                   totalCompletedEnrollments.current *\n                    ITEM_PER_CHUNK_SIZE\n                } ${entityExpression} have been unassigned`,\n                'success'\n            );\n\n            clearTotalCompletedEnrollments();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage, entityExpression]);\n\n    /**\n     * @function handleStartDeleteEnrollmentBulkActionService\n     * @returns { void }\n     */\n    const handleStartDeleteEnrollmentBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: `Unassign ${entityExpression}`,\n                        onStopBulkActionService:\n                        handleStopDeleteEnrollmentsBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopDeleteEnrollmentsBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n        entityExpression\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartDeleteEnrollmentBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n}\n\n/**\n *\n * @description Custom hook to get enrollments and update with chunk service\n * @function useUpdateEnrollmentBulkActionService\n * @param { UpdateEnrollmentsParams }  { searchParams: SearchParams }\n * @param { Number } totalEnrollmentsCount\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { Void }\n */\nexport function useUpdateEnrollmentBulkActionService(\n    updateEnrollmentsParams: { searchParams: SearchParams },\n    totalEnrollmentsCount?: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const searchEnrollmentsAndUpdate = useSearchEnrollmentsAndUpdate();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n    const dueDateRef = useRef<string | null>(null);\n\n    const totalCompletedEnrollments = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n    const actionList: ChunkRequestActionInterface<UpdateEnrollmentChunkRequestParameters>[] =\n        [\n            {\n                actionName: UPDATE_ENROLLMENT_ACTION,\n                actionFunction: searchEnrollmentsAndUpdate,\n                actionFunctionOptions: {\n                   parameters: {\n                        searchParams: {\n                            ...updateEnrollmentsParams,\n                            dueDate: dueDateRef.current,\n                            offset: totalEnrollmentsCount as number\n                        },\n                        onSuccessCallback: () =>\n                            (totalCompletedEnrollments.current =\n                               totalCompletedEnrollments.current + 1),\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n        ];\n\n    /**\n     * @function clearTotalCompletedEnrollments\n     * @returns { void }\n     */\n    const clearTotalCompletedEnrollments = () =>\n        (totalCompletedEnrollments.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedEnrollments();\n\n            showMessage(`Due Date has changed`, 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: `Change Due Date`,\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n\n            clearTotalCompletedEnrollments();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopUpdateEnrollmentsBulkActionService\n     * @returns { void }\n     */\n    const handleStopUpdateEnrollmentsBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(\n                `Due Date has changed`,\n                'success'\n            );\n\n            clearTotalCompletedEnrollments();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartUpdateEnrollmentBulkActionService\n     * @returns { void }\n     */\n    const handleStartUpdateEnrollmentBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: `Change Due Date`,\n                        onStopBulkActionService:\n                        handleStopUpdateEnrollmentsBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopUpdateEnrollmentsBulkActionService,\n        hideModalDialog,\n        setIsStopped\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartUpdateEnrollmentBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback((dueDate: string | null) => {\n        dueDateRef.current = dueDate;\n        setIsRunning(true);\n    }, []);\n}","import { useCallback } from 'react';\nimport { useShowMessage } from '../../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { CreateEnrollmentsParams, DeleteEnrollmentsParams, UpdateEnrollmentsParams } from './types';\nimport { EnrollmentsDueDateType, EnrollmentType } from '../../../../../../api/enrollments/types';\nimport { getSearchUserPractisSetsParams } from '../../../../../users/store/helpers';\nimport { getAssignUsersSearchParams } from '../../../../store/services';\nimport { useCreateUpdateEnrollmentDueDate, useDeleteEnrollmentsApi, useEnrollPractisSetsToUserApi, useSearchPractisSetDetailsUsersApi, useSearchUserEnrollmentsApi, useSearchUsersApi } from '../../../../../../api';\nimport { createSearchPractisSetDetailsParams } from '../../../../tools';\n\n/**\n * @function useSearchUsersAndCreateEnrollment\n * @returns { CallableFunction }\n */\n export const useSearchUsersAndCreateEnrollment = () => {\n    const searchUsersApi = useSearchUsersApi();\n    const enrollPractisSetsToUser = useEnrollPractisSetsToUserApi();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } CreateEnrollmentsParams\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            { search, practisSetId, dueDate, enrollments: selectedEnrollments }: CreateEnrollmentsParams,\n            onSuccessCallback: () => void\n        ) => {\n            const params = { ...getAssignUsersSearchParams(search), offset: 0 };\n            await searchUsersApi(params)\n                .then(async (response) => {\n                    const enrollments: EnrollmentType[] = response.items.map((item) => {\n                        return {\n                            userId: item.id, \n                            practisSetId: practisSetId as number, \n                            dueDate: dueDate\n                                || selectedEnrollments.find(e => e.userId === item.id)?.dueDate\n                                || null\n                        }\n                    });\n\n                    if (enrollments.length) {\n                        await enrollPractisSetsToUser(enrollments).catch(error => {\n                            error?.message &&\n                                showMessage(error.message, 'error');\n                            throw error;\n                        })\n                        onSuccessCallback();\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [enrollPractisSetsToUser, searchUsersApi, showMessage]\n    );\n};\n\n/**\n * @function useSearchEnrollmentsAndDelete\n * @returns { CallableFunction }\n */\n export const useSearchEnrollmentsAndDelete = () => {\n    const searchUserEnrollmentsApi = useSearchUserEnrollmentsApi();\n    const deleteEnrollments = useDeleteEnrollmentsApi();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } DeleteEnrollmentsParams\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            { userId, searchParams }: DeleteEnrollmentsParams,\n            onSuccessCallback: () => void\n        ) => {\n            const params = getSearchUserPractisSetsParams(searchParams);\n            userId && await searchUserEnrollmentsApi(userId, params)\n                .then(async (response) => {\n                    const enrollmentIds: number[] = response?.items.map((item) => item.id) || [];\n\n                    if (enrollmentIds.length) {\n                        await deleteEnrollments(enrollmentIds).catch(error => {\n                            error?.message &&\n                                showMessage(error.message, 'error');\n                            throw error;\n                        })\n                        onSuccessCallback();\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteEnrollments, searchUserEnrollmentsApi, showMessage]\n    );\n};\n\n/**\n * @function useSearchPsetEnrollmentsAndDelete\n * @returns { CallableFunction }\n */\nexport const useSearchPsetEnrollmentsAndDelete = () => {\n    const searchUserEnrollmentsApi = useSearchPractisSetDetailsUsersApi();\n    const deleteEnrollments = useDeleteEnrollmentsApi();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } DeleteEnrollmentsParams\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            { searchParams }: DeleteEnrollmentsParams,\n            onSuccessCallback: () => void\n        ) => {\n            const params = createSearchPractisSetDetailsParams(searchParams);\n            const { teamId, practisSetId } = searchParams;\n\n            teamId && practisSetId && await searchUserEnrollmentsApi(\n                teamId.toString(), \n                practisSetId.toString(),\n                params\n                ).then(async (response) => {\n                    const enrollmentIds: number[] = response?.items.map((item) => item.id) || [];\n\n                    if (enrollmentIds.length) {\n                        await deleteEnrollments(enrollmentIds).catch(error => {\n                            error?.message &&\n                                showMessage(error.message, 'error');\n                            throw error;\n                        })\n                        onSuccessCallback();\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteEnrollments, searchUserEnrollmentsApi, showMessage]\n    );\n};\n\n/**\n * @function useSearchEnrollmentsAndUpdate\n * @returns { CallableFunction }\n */\nexport const useSearchEnrollmentsAndUpdate = () => {\n    const searchUserEnrollmentsApi = useSearchPractisSetDetailsUsersApi();\n    const updateEnrollmentsDueDate = useCreateUpdateEnrollmentDueDate();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } UpdateEnrollmentsParams\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            { searchParams, dueDate, offset }: UpdateEnrollmentsParams,\n            onSuccessCallback: () => void\n        ) => {\n            const params = createSearchPractisSetDetailsParams({...searchParams, offset});\n            const { teamId, practisSetId } = searchParams;\n\n            teamId && practisSetId && await searchUserEnrollmentsApi(\n                teamId.toString(), \n                practisSetId.toString(),\n                params\n                ).then(async (response) => {\n                    const enrollments: EnrollmentsDueDateType[] = response?.items.map((item) => ({ enrollmentId: item.id, dueDate })) || [];\n\n                    if (enrollments.length) {\n                        await updateEnrollmentsDueDate(enrollments).catch(error => {\n                            error?.message &&\n                                showMessage(error.message, 'error');\n                            throw error;\n                        })\n                        onSuccessCallback();\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [updateEnrollmentsDueDate, searchUserEnrollmentsApi, showMessage]\n    );\n}","export enum ACTIONS {\n    SOCKET_PROGRESS_SHOW = 'SOCKET_PROGRESS_SHOW',\n    SOCKET_PROGRESS_HIDE = 'SOCKET_PROGRESS_HIDE',\n}\n\nexport function SocketProgressShow() {\n    return {\n        type: ACTIONS.SOCKET_PROGRESS_SHOW as ACTIONS.SOCKET_PROGRESS_SHOW,\n    };\n}\n\nexport function SocketProgressHide() {\n    return {\n        type: ACTIONS.SOCKET_PROGRESS_HIDE as ACTIONS.SOCKET_PROGRESS_HIDE,\n    };\n}\n","import { History } from 'history';\r\nimport { FC, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport { isEmpty as lodashIsEmpty } from 'lodash';\r\n\r\nimport User from '../../../../ui/icons/User';\r\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\r\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\r\nimport {\r\n    EnrollmentStatus,\r\n    EnrollmentStatusEnum,\r\n} from '../../../../constants/interfaces/Enrollments';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../constants/interfaces/filters';\r\nimport { PaginationResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport { PractisSets } from '../../../../constants/interfaces/PractisSets';\r\nimport { EnrollmentInterface } from '../../../../constants/interfaces/Enrollments';\r\nimport {\r\n    formatDate,\r\n    formatDateWithTimeZone,\r\n} from '../../../../helpers/functions/date-convert';\r\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport { pushModal } from '../../../../tools/router';\r\nimport {\r\n    useCheckAllProgressService,\r\n    useCheckSingleProgressService,\r\n    useGetPractisSetService,\r\n    useGetTraineesReportService,\r\n    useNudgeUsersService,\r\n    useRemindToStartService,\r\n    useResetPractisSetDetailsService,\r\n    useSearchPractisSetDetailsUsersService,\r\n    useUnenrollEnrollmentService,\r\n} from '../../store/services';\r\nimport {\r\n    useCreateUpdateEnrollmentDueDate,\r\n} from '../../../../api';\r\nimport {\r\n    selectSelectedProgresses,\r\n    useEnrollmentState,\r\n    useTrainerPractisSetState,\r\n} from '../../store/states';\r\nimport { useLabelsState } from '../../../labels/store/states';\r\nimport { clearSelectedItemIfNotLoaded } from '../../../labels/tools';\r\nimport {\r\n    ActionItem,\r\n    ActionButton,\r\n} from '../../../../ui/components/ActionButton';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\r\nimport { secondsToMinSimple } from '../../../../helpers/functions/convert-time';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\r\nimport { countPractisSetDetailsAppliedFiltersCount } from './tools';\r\nimport TrainingDetailsFilters from './components/Filters/TrainingDetailsFilters';\r\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\r\nimport {\r\n    useProgressActionsHelper,\r\n    ProgressActionsHelper,\r\n    ProgressActions,\r\n} from '../../tools';\r\nimport GeneralProgressCol from './components/ProgressDetails/GeneralProgressCol';\r\nimport PlusInCircleIcon from '../../../../ui/icons/PlusInCircleIcon';\r\nimport ViewPractisSetIcon from '../../../../ui/icons/ViewPractisSetIcon';\r\nimport { getSearchState } from '../../../searchState/store/reducer';\r\nimport { SearchStateInterface } from '../../../searchState/store/states';\r\nimport { SEARCH_STATE } from '../../../searchState/constants';\r\nimport { isEmpty } from '../../../../helpers/functions/object-helpers';\r\nimport { DueDateFilters } from '../../../../constants/interfaces/DueDates';\r\nimport ExportReportIcon from '../../../../ui/icons/ExportReportIcon';\r\nimport { DueDateCalendar } from '../../../../ui/components/DueDateCalendar';\r\nimport { usePreviousData } from '../../../../helpers/hooks/usePreviousData';\r\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\r\nimport {\r\n    Avatar,\r\n    AvatarTile,\r\n    DueDateWrapper,\r\n    DueDateIcon,\r\n    OverdueFlagWrapped,\r\n    ProgressBarContainer,\r\n    StyledFirstTableContent,\r\n    StyledProgressContainer,\r\n    useStyles,\r\n} from './styles';\r\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { DueDateCalendarParams } from '../../../../constants/interfaces/dueDate';\r\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\r\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport TableTitleOverflowText from '../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\r\nimport { NudgeUser } from '../../../../ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser';\r\nimport { EmptyCellDash } from '../../../../ui/components/table-wrapper/table/EmptyCellDash';\r\nimport { UserProfile } from '../../../../constants/interfaces/User';\r\nimport { NudgeData } from '../../../../api/alert/types';\r\nimport { useNudgeUsersBulkActionService } from '../../../../services/GeneralBulkActionServices';\r\nimport { useRemindToStartBulkActionService } from '../../services/TeamBulkActionsService';\r\nimport { UserStatus } from '../../../users/store/costants';\r\nimport {\r\n    useDeleteEnrollmentBulkActionService,\r\n    useUpdateEnrollmentBulkActionService,\r\n} from './services/EnrollmentBulkActionsService';\r\nimport {\r\n    onListenEvent,\r\n    onRemoveEvent,\r\n} from '../../../../helpers/functions/Events';\r\nimport {\r\n    EventNameList,\r\n    REFRESH_TRAINING_PAGE,\r\n} from '../../../../helpers/functions/Events/types';\r\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\r\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\r\n\r\nconst qs = require('query-string');\r\n\r\nexport const RenderStarted: FC<{\r\n    enrollment?: EnrollmentInterface;\r\n    onResendInvitation?: (enrollmentIds: number[]) => Promise<any>;\r\n}> = ({ enrollment, onResendInvitation }) => {\r\n    if (\r\n        !enrollment ||\r\n        !enrollment.startedAt ||\r\n        !enrollment.user ||\r\n        !onResendInvitation\r\n    ) {\r\n        return <EmptyCellDash />;\r\n    }\r\n\r\n    if (enrollment.status !== EnrollmentStatusEnum.PENDING) {\r\n        return (\r\n            <StyledProgressContainer data-test=\"training-item-start-date\">\r\n                {formatDate(enrollment.startedAt)}\r\n            </StyledProgressContainer>\r\n        );\r\n    } else {\r\n        return <EmptyCellDash />;\r\n    }\r\n};\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nexport const ProgressDetails: FC<{\r\n    history: History<any>;\r\n    profile?: UserProfile;\r\n    loading?: boolean;\r\n    params: { teamId: string; practisSetId: string };\r\n    updateTrainees?: Array<any>;\r\n    searchPractisSetDetailsUsers(searchParams: SearchParams): void;\r\n    practisSetsEnrollments?: PaginationResult<EnrollmentInterface>;\r\n    practisSet?: PractisSets;\r\n    company?: CompanyInterface;\r\n    onResendInvitation: (enrollmentIds: number[]) => Promise<any>;\r\n    onGetPractisSet: (practisSetId: number) => void;\r\n    selectedLabels?: number[];\r\n    checkAllProgress(\r\n        progressIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    checkSingleProgress(progressId: number): void;\r\n    selectedProgressIds: number[];\r\n    selectedProgresses?: EnrollmentInterface[];\r\n    actionsHelper: ProgressActionsHelper;\r\n    onNudgeUsers: (\r\n        nudgeUserDate: NudgeData[],\r\n        successCallback?: () => void\r\n    ) => void;\r\n    onUnenrollEnrollment: (\r\n        enrollmentIds: number[],\r\n        successCallback?: () => void\r\n    ) => void;\r\n    getTraineesReportService?(\r\n        userIds: number[] | null,\r\n        practisSetId: number,\r\n        searchParams: SearchParams,\r\n        teamId: number,\r\n        selectAll?: boolean\r\n    ): void;\r\n    searchState?: SearchStateInterface;\r\n    locationState: any;\r\n}> = ({\r\n    profile,\r\n    practisSetsEnrollments,\r\n    loading,\r\n    searchPractisSetDetailsUsers,\r\n    params,\r\n    history,\r\n    updateTrainees,\r\n    company,\r\n    onResendInvitation,\r\n    onGetPractisSet,\r\n    practisSet,\r\n    selectedLabels,\r\n    checkAllProgress,\r\n    checkSingleProgress,\r\n    selectedProgressIds,\r\n    selectedProgresses,\r\n    actionsHelper,\r\n    onNudgeUsers,\r\n    onUnenrollEnrollment,\r\n    getTraineesReportService,\r\n    searchState,\r\n    locationState,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\r\n    const [isSelectAll, setIsSelectAll] = useState<any>(false);\r\n\r\n    const [dueDateCalendarParams, setDueDateCalendarParams] =\r\n        useState<DueDateCalendarParams>({\r\n            isOpen: false,\r\n            data: null,\r\n        });\r\n\r\n    const [showNudgeDialogProgressId, setShowNudgeDialogProgressId] =\r\n        useState<any>(null);\r\n\r\n    const canAccessPage = useHandleAccessPage();\r\n    const updateEnrollmentsDueDate = useCreateUpdateEnrollmentDueDate();\r\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\r\n\r\n    const prevCompany = usePreviousData(company);\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        orderBy: { field: 'enrollment.lastTraining', asc: false },\r\n        filterByStatus: [],\r\n        filters: [],\r\n        filterByRegistrationStatus: [],\r\n        labelIDs: selectedLabels,\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        filterByDueDate: [],\r\n    };\r\n\r\n    const usableParams: SearchParams =\r\n        !isEmpty(searchState) &&\r\n        !!searchState?.params &&\r\n        searchState?.key === SEARCH_STATE.PRACTIS_SET_DETAILS.name\r\n            ? searchState.params\r\n            : initialSearchParams;\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setOffset,\r\n        setLabelIDs,\r\n        refreshSearchParams,\r\n        setCustom,\r\n    } = useSearchParamsState(usableParams);\r\n\r\n    const isCheckboxPartiallySelected =\r\n        practisSetsEnrollments &&\r\n        practisSetsEnrollments.items &&\r\n        selectedProgressIds &&\r\n        selectedProgressIds.length < practisSetsEnrollments.items.length;\r\n\r\n    const location = history.location;\r\n    const pageIndex = parseInt(qs.parse(location.search).page);\r\n    const initialOffset = pageIndex\r\n        ? pageIndex === 1\r\n            ? 0\r\n            : (pageIndex - 1) * ITEMS_PER_PAGE\r\n        : 0;\r\n\r\n    const refreshData = useCallback(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchPractisSetDetailsUsers(searchParams);\r\n        setLastRefreshed(new Date());\r\n        setIsSelectAll(false);\r\n        checkAllProgress([], true, isCheckboxPartiallySelected);\r\n    }, [\r\n        searchParams,\r\n        initialOffset,\r\n        searchPractisSetDetailsUsers,\r\n        checkAllProgress,\r\n        isCheckboxPartiallySelected,\r\n    ]);\r\n\r\n    const handleAddTrainees = () => {\r\n        pushModal(\r\n            history,\r\n            ROUTES.TEAMS_PAGES.TRAINING_PAGES.TRAINEE_INVITATION.replace(\r\n                ':teamId',\r\n                params.teamId.toString()\r\n            ).replace(':practisSetId', params.practisSetId.toString())\r\n        );\r\n    };\r\n\r\n    const handleEditPractisSet = () => {\r\n        if (!params.practisSetId || !params.teamId) return;\r\n        pushModal(\r\n            history,\r\n            ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE.replace(\r\n                ':practisSetId',\r\n                params.practisSetId.toString()\r\n            )\r\n        );\r\n    };\r\n\r\n    const handleViewPractisSetReport = (userId: number, enrollmentId: number) => {\r\n        history.push(ROUTES.TRAINEE_DETAILS\r\n            .replace(\r\n                ':userId',\r\n                userId.toString()\r\n            )\r\n            .replace(\r\n                ':enrollmentId',\r\n                enrollmentId.toString()\r\n            ),\r\n            { useGoBack: true }\r\n        );\r\n    };\r\n\r\n    const filterOverdueHandler = (dueDates: DueDateFilters[]) => {\r\n        setCustom('filterByDueDate', dueDates);\r\n    };\r\n\r\n    const handleViewProfile = (userId: number) => {\r\n        history.push(\r\n            ROUTES.USER_PERFORMANCE.replace(':userId', userId.toString()),\r\n            { useGoBack: true }\r\n        );\r\n    };\r\n\r\n    const updateAllProgressCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const practisSetIds =\r\n                (practisSetsEnrollments &&\r\n                    practisSetsEnrollments.items.map(\r\n                        (practisSetsEnrollment: EnrollmentInterface) =>\r\n                            Number(practisSetsEnrollment.id)\r\n                    )) ||\r\n                [];\r\n            checkAllProgress(\r\n                practisSetIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [practisSetsEnrollments, isCheckboxPartiallySelected, checkAllProgress]\r\n    );\r\n\r\n    const handleProgressCheck = (e: any, trainee: EnrollmentInterface) => {\r\n        e.stopPropagation();\r\n        if (!!trainee.id) {\r\n            checkSingleProgress(trainee.id);\r\n        }\r\n    };\r\n\r\n    const onNudgeSingleUserSuccessCallback = () => {\r\n        setShowNudgeDialogProgressId(null);\r\n    };\r\n\r\n    const handleNudgeSingleUser = useCallback(\r\n        (data: any) => {\r\n            const { text, name: senderName } = data;\r\n\r\n            if (showNudgeDialogProgressId) {\r\n                const enrollmentId = practisSetsEnrollments?.items.find(\r\n                    item => item.user.id === showNudgeDialogProgressId\r\n                )?.id;\r\n\r\n                if (enrollmentId) {\r\n                    const nudgeUserData: NudgeData = {\r\n                        type: 'enrollment',\r\n                        enrollmentId,\r\n                        receiverId: showNudgeDialogProgressId,\r\n                        text,\r\n                        senderName,\r\n                    };\r\n                    onNudgeUsers(\r\n                        [nudgeUserData],\r\n                        onNudgeSingleUserSuccessCallback\r\n                    );\r\n                }\r\n            }\r\n        },\r\n        [onNudgeUsers, practisSetsEnrollments?.items, showNudgeDialogProgressId]\r\n    );\r\n\r\n    const onNudgeMultipleUserSuccessCallback = useCallback(() => {\r\n        checkAllProgress([], true, isCheckboxPartiallySelected);\r\n    }, [checkAllProgress, isCheckboxPartiallySelected]);\r\n\r\n    const nudgeUsersBulkActionService = useNudgeUsersBulkActionService(\r\n        'enrollment',\r\n        {\r\n            teamId: params.teamId,\r\n            practisSetId: params.practisSetId,\r\n        },\r\n        searchParams,\r\n        practisSetsEnrollments?.count ?? 0,\r\n        refreshData\r\n    );\r\n\r\n    const handleNudgeMultipleUser = useCallback(\r\n        (data: any) => {\r\n            const { text, name: senderName } = data;\r\n\r\n            if (isSelectAll) {\r\n                nudgeUsersBulkActionService({ ...{ text }, ...{ senderName } });\r\n            } else {\r\n                const users = [] as { id: number; enrollmentId: number }[];\r\n                practisSetsEnrollments?.items.forEach(element => {\r\n                    if (selectedProgressIds.includes(element.id)) {\r\n                        users.push({\r\n                            id: element.user.id,\r\n                            enrollmentId: element.id,\r\n                        });\r\n                    }\r\n                });\r\n                if (selectedProgressIds) {\r\n                    const nudgeUsersDate = users.map(\r\n                        user =>\r\n                            ({\r\n                                type: 'enrollment',\r\n                                enrollmentId: user.enrollmentId,\r\n                                receiverId: user.id,\r\n                                text,\r\n                                senderName,\r\n                            } as NudgeData)\r\n                    );\r\n\r\n                    onNudgeUsers(\r\n                        nudgeUsersDate,\r\n                        onNudgeMultipleUserSuccessCallback\r\n                    );\r\n                }\r\n            }\r\n        },\r\n        [\r\n            isSelectAll,\r\n            nudgeUsersBulkActionService,\r\n            practisSetsEnrollments?.items,\r\n            selectedProgressIds,\r\n            onNudgeUsers,\r\n            onNudgeMultipleUserSuccessCallback,\r\n        ]\r\n    );\r\n\r\n    const showMessage = useShowMessage();\r\n\r\n    const handleSingleRemind = useCallback(\r\n        (progressId?: any) => {\r\n            if (\r\n                !!onResendInvitation &&\r\n                !!practisSetsEnrollments &&\r\n                !!practisSetsEnrollments.items &&\r\n                !!practisSetsEnrollments.items.length\r\n            ) {\r\n                const selectedEnrollmentId = [progressId];\r\n\r\n                onResendInvitation(selectedEnrollmentId).then(() => {\r\n                    showMessage(`Reminder Sent to User`, 'success');\r\n                });\r\n            }\r\n        },\r\n        [onResendInvitation, practisSetsEnrollments, showMessage]\r\n    );\r\n\r\n    const remindToStartBulkActionService = useRemindToStartBulkActionService(\r\n        params.teamId,\r\n        params.practisSetId,\r\n        searchParams,\r\n        practisSetsEnrollments?.count ?? 0,\r\n        refreshData\r\n    );\r\n\r\n    const handleBulkRemind = useCallback(() => {\r\n        if (isSelectAll) {\r\n            remindToStartBulkActionService();\r\n        } else {\r\n            if (\r\n                !!onResendInvitation &&\r\n                !!selectedProgressIds?.length &&\r\n                !!practisSetsEnrollments?.items?.length\r\n            ) {\r\n                const enrollmentIds = practisSetsEnrollments?.items\r\n                    .filter(\r\n                        enrollment =>\r\n                            selectedProgressIds.includes(enrollment.id) &&\r\n                            enrollment.user.status === UserStatus.ACTIVE &&\r\n                            (enrollment.status === EnrollmentStatus.PENDING ||\r\n                                enrollment.status === EnrollmentStatus.ENROLLED)\r\n                    )\r\n                    .map(enrollment => enrollment.id);\r\n\r\n                onResendInvitation(enrollmentIds).then(() => {\r\n                    showMessage(\r\n                        `Reminder(s) Sent to ${\r\n                            selectedProgressIds.length > 1 ? 'Users' : 'User'\r\n                        }`,\r\n                        'success'\r\n                    );\r\n                });\r\n            }\r\n        }\r\n    }, [\r\n        isSelectAll,\r\n        remindToStartBulkActionService,\r\n        selectedProgressIds,\r\n        practisSetsEnrollments,\r\n        onResendInvitation,\r\n        showMessage,\r\n    ]);\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const enFirstName = useOrderBy('firstName', orderBy, setOrderBy);\r\n    const enAssigned = useOrderBy('enrollment.createdAt', orderBy, setOrderBy);\r\n    const enStarted = useOrderBy('enrollment.enrolledAt', orderBy, setOrderBy);\r\n    const enDueDate = useOrderBy('enrollment.dueDate', orderBy, setOrderBy);\r\n    const enTime = useOrderBy('enrollment.trainingTime', orderBy, setOrderBy);\r\n    const enLastTrainingAt = useOrderBy(\r\n        'enrollment.lastTraining',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n    const enProgressValue = useOrderBy(\r\n        'enrollment.progressValue',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n\r\n    const enAccuracyAvg = useOrderBy(\r\n        'enrollment.averageAccuracy',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: countPractisSetDetailsAppliedFiltersCount(searchParams),\r\n        itemsCount: practisSetsEnrollments?.items.length || 0,\r\n    });\r\n\r\n    /**\r\n     * @function onExportReportButtonClick\r\n     * @returns { void }\r\n     */\r\n    const onExportReportButtonClick = useCallback(() => {\r\n        history.push(\r\n            `${ROUTES.REPORTS.PRACTIS_SET_SUMMARY_REPORT}?team=${params.teamId}&practisSet=${params.practisSetId}`);\r\n    }, [history, params]);\r\n\r\n    const filterStatusHandler = (status: EnrollmentStatusEnum[]) => {\r\n        setCustom('filterByStatus', status);\r\n    };\r\n\r\n    const registrationStatusHandler = (values: string[]) => {\r\n        setCustom('filterByRegistrationStatus', values);\r\n    };\r\n\r\n    const isListEmpty = lodashIsEmpty(practisSetsEnrollments?.items);\r\n\r\n    const headersDisabled =\r\n        !practisSetsEnrollments ||\r\n        (practisSetsEnrollments && practisSetsEnrollments.items.length < 1);\r\n\r\n    const bulkActions = useMemo(\r\n        () => actionsHelper.getBulkActions(selectedProgresses),\r\n        [selectedProgresses, actionsHelper]\r\n    );\r\n\r\n    const isExportButtonDisabled: boolean =\r\n        !practisSetsEnrollments ||\r\n        isEmpty(practisSetsEnrollments) ||\r\n        practisSetsEnrollments?.count === 0;\r\n\r\n    /**\r\n     * @function openDueDatePopup\r\n     * @param { number | undefined } enrollmentId\r\n     * @returns { Promise<void> }\r\n     */\r\n    const openDueDatePopup = async (enrollmentId?: number) => {\r\n        const enrollmentIds = enrollmentId\r\n            ? [enrollmentId]\r\n            : selectedProgresses?.map(item => item?.id || 0) || [];\r\n\r\n        //temporary solution for calendar data \r\n\r\n        let dueDateDataManual: any  = {}\r\n        if (isSelectAll) {\r\n            dueDateDataManual = {\"type\":\"MULTIPLE\", \"dueDate\": null , \"count\": practisSetsEnrollments?.count}\r\n        } else if (enrollmentIds.length > 1 ) {\r\n            dueDateDataManual = {\"type\":\"MULTIPLE\", \"dueDate\": null , \"count\": enrollmentIds.length}\r\n        } else if (enrollmentIds.length === 1) {\r\n            const dueDate = practisSetsEnrollments ? practisSetsEnrollments.items.find((item) => item.id === enrollmentIds[0])?.dueDate : null;\r\n            dueDateDataManual = {\"type\" : \"SINGLE\", \"dueDate\": dueDate, \"count\": 1}\r\n        } \r\n        \r\n        setDueDateCalendarParams(prev => ({\r\n            isOpen: true,\r\n            data: {\r\n                ...dueDateDataManual,\r\n                enrollmentIds,\r\n                isSubTitleVisible: !enrollmentId && true,\r\n            },\r\n        }));\r\n    };\r\n\r\n    /**\r\n     * @function onCloseDueDateCalendar\r\n     * @returns { void }\r\n     */\r\n    const onCloseDueDateCalendar = (): void => {\r\n        setDueDateCalendarParams(prev => ({ isOpen: false, data: null }));\r\n    };\r\n\r\n    const updateSuccessCallback = () => {\r\n        setDueDateCalendarParams(prev => ({ ...prev, isOpen: false }));\r\n        refreshData();\r\n    };\r\n\r\n    const handleUpdateEnrollmentsBulkActionService =\r\n        useUpdateEnrollmentBulkActionService(\r\n            {\r\n                searchParams: {\r\n                    ...searchParams,\r\n                    teamId: params.teamId,\r\n                    practisSetId: +params.practisSetId,\r\n                },\r\n            },\r\n            practisSetsEnrollments?.count,\r\n            updateSuccessCallback\r\n        );\r\n\r\n    const updateDueDate = async (dueDate: string | null) => {\r\n        const { enrollmentIds, type } = dueDateCalendarParams?.data!;\r\n\r\n        const updateDueDateSuccessMessage =\r\n            type === 'NO_DUEDATE'\r\n                ? 'Due date assigned'\r\n                : dueDate\r\n                ? 'Due date changed'\r\n                : 'Due date removed';\r\n\r\n        const enrollments = enrollmentIds.map(enrollmentId => ({\r\n            enrollmentId,\r\n            dueDate,\r\n        }));\r\n\r\n        if (isSelectAll) {\r\n            handleUpdateEnrollmentsBulkActionService(dueDate);\r\n        } else {\r\n            await updateEnrollmentsDueDate(enrollments);\r\n            showMessage(updateDueDateSuccessMessage, 'success');\r\n        }\r\n\r\n        updateSuccessCallback();\r\n    };\r\n\r\n    useEffect(() => {\r\n        canAccessPage([NEW_PERMISSIONS.VIEW_PRACTIS_SET_PROGRESS]);\r\n    }, [canAccessPage]);\r\n\r\n    useEffect(() => {\r\n        params.practisSetId && onGetPractisSet(+params.practisSetId);\r\n    }, [onGetPractisSet, params.practisSetId]);\r\n\r\n    useEffect(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchParams.labelIDs = selectedLabels;\r\n        searchPractisSetDetailsUsers(searchParams);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [searchPractisSetDetailsUsers, searchParams]);\r\n\r\n    useEffect(() => {\r\n        if (!company?.id || !prevCompany?.id) return;\r\n        if (company?.id !== prevCompany?.id) {\r\n            history.push(ROUTES.TEAMS_PAGES.TRAINING);\r\n        }\r\n    }, [company, prevCompany, history]);\r\n\r\n    useEffect(() => {\r\n        if (updateTrainees && updateTrainees.length > 0) {\r\n            refreshSearchParams();\r\n        }\r\n    }, [updateTrainees, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        selectedLabels && setLabelIDs(selectedLabels);\r\n    }, [selectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (pageIndex > 1) {\r\n            setTimeout(() => {\r\n                setOffset(initialOffset);\r\n            }, 200);\r\n        } else if (pageIndex === 1) {\r\n            setTimeout(() => {\r\n                setOffset(0);\r\n            }, 100);\r\n        }\r\n    }, [initialOffset, pageIndex, setOffset]);\r\n\r\n    // NOTE: no need to add second parameter for this useEffect hook.\r\n    // We need to clear selectedProgressIds when the component did mount\r\n    useEffect(() => {\r\n        if (selectedProgressIds && selectedProgressIds.length) {\r\n            checkAllProgress(selectedProgressIds, false, false);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        return () => checkAllProgress([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        checkAllProgress([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [practisSetsEnrollments]);\r\n\r\n    useEffect(() => {\r\n        const filteredPractisSetsEnrollments = practisSetsEnrollments\r\n            ? practisSetsEnrollments.items.map(enrollment =>\r\n                  Number(enrollment.id)\r\n              )\r\n            : [];\r\n        const enrollmentsToClear = clearSelectedItemIfNotLoaded(\r\n            selectedProgressIds,\r\n            filteredPractisSetsEnrollments\r\n        );\r\n        if (enrollmentsToClear && enrollmentsToClear.length > 0) {\r\n            checkAllProgress(enrollmentsToClear, false);\r\n        }\r\n    }, [selectedProgressIds, practisSetsEnrollments, checkAllProgress]);\r\n\r\n    const handleDeleteEnrollmentsBulkActionService =\r\n        useDeleteEnrollmentBulkActionService(\r\n            {\r\n                searchParams: {\r\n                    ...searchParams,\r\n                    teamId: params.teamId,\r\n                    practisSetId: +params.practisSetId,\r\n                },\r\n            },\r\n            'user',\r\n            practisSetsEnrollments?.count,\r\n            refreshData\r\n        );\r\n\r\n    /**\r\n     * @function onConfirmUnassign\r\n     * @param { number[] } unAssignedPractisSetIds\r\n     * @returns { void }\r\n     */\r\n    const onConfirmUnassign = (unAssignedPractisSetIds: number[]): void => {\r\n        isSelectAll &&\r\n        practisSetsEnrollments?.count !== unAssignedPractisSetIds.length\r\n            ? handleDeleteEnrollmentsBulkActionService()\r\n            : onUnenrollEnrollment(unAssignedPractisSetIds, refreshData);\r\n    };\r\n\r\n    /**\r\n     * @function handleUnassign\r\n     * @param { number[] } ids\r\n     * @returns { void }\r\n     */\r\n    const handleUnassign = (ids: number[]) => {\r\n        showConfirmationModalDialog({\r\n            modalTitle: 'Are you sure?',\r\n            description:\r\n                selectedProgressIds.length > 1\r\n                    ? 'Users will get notified about this change.'\r\n                    : 'User will get notified about this change.',\r\n            onConfirm: () => onConfirmUnassign(ids),\r\n        });\r\n    };\r\n\r\n    /**\r\n     * @function handleMultipleUserUnassign\r\n     * @returns { void }\r\n     */\r\n    const handleMultipleUserUnassign = (): void => {\r\n        if (!practisSetsEnrollments || !selectedProgressIds) return;\r\n        const selectedEntities = practisSetsEnrollments.items.filter(\r\n            item => item.id && selectedProgressIds.includes(item.id)\r\n        );\r\n\r\n        const selectedEntityIds: number[] = selectedEntities.map(entity =>\r\n            entity ? entity.id || 0 : 0\r\n        );\r\n\r\n        handleUnassign(selectedEntityIds);\r\n    };\r\n\r\n    /**\r\n     * @function handlePageChange\r\n     * @param { number } limit\r\n     * @param { number } offset\r\n     * @returns { void }\r\n     */\r\n    const handlePageChange = (offset: number) => {\r\n        setOffset(offset);\r\n    };\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        checkAllProgress([], true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        const practisSetIds =\r\n            (practisSetsEnrollments &&\r\n                practisSetsEnrollments.items.map(\r\n                    (practisSetsEnrollment: EnrollmentInterface) =>\r\n                        Number(practisSetsEnrollment.id)\r\n                )) ||\r\n            [];\r\n        checkAllProgress(practisSetIds, true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        updateAllProgressCheck(event.target.checked);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked =\r\n        !!selectedProgressIds && !!selectedProgressIds.length;\r\n\r\n    const isMasterCheckBoxDisabled = headersDisabled;\r\n\r\n    /**\r\n     * @function onRowClick\r\n     * @param { EnrollmentInterface } trainee\r\n     * @returns { void }\r\n     */\r\n    const onRowClick = (trainee: EnrollmentInterface) => {\r\n        handleViewPractisSetReport(trainee.user.id, trainee.id);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { EnrollmentInterface } trainee\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (trainee: EnrollmentInterface): boolean =>\r\n        !!selectedProgressIds &&\r\n        !!trainee.id &&\r\n        selectedProgressIds.includes(trainee.id);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { EnrollmentInterface } set\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, trainee: EnrollmentInterface) => {\r\n        handleProgressCheck(event, trainee);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    // Listen To Assign Users And Due Date -- Refresh the page after assign users\r\n    useEffect(() => {\r\n        onListenEvent(EventNameList[REFRESH_TRAINING_PAGE], refreshData);\r\n\r\n        return () => {\r\n            onRemoveEvent(EventNameList[REFRESH_TRAINING_PAGE], refreshData);\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            practisSetsEnrollments?.items.length &&\r\n            selectedProgressIds.length === practisSetsEnrollments?.count\r\n        ) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [practisSetsEnrollments?.count, practisSetsEnrollments?.items.length, selectedProgressIds.length]);\r\n\r\n    return (\r\n        <>\r\n            <MainWrapper\r\n                title=\"Practis Set Details\"\r\n                goBackUrl={ROUTES.TEAMS_PAGES.TRAINING_PAGES.PRACTIS_SETS.replace(\r\n                    ':teamId',\r\n                    params && params.teamId ? params.teamId.toString() : ''\r\n                )}\r\n                subTitle={practisSet?.name ?? ''}\r\n                useGoBack={locationState?.useGoBack}\r\n                htmlPageTitle={`Practis Set Details ${\r\n                    practisSet ? `- ${practisSet?.name}` : ''\r\n                } - Practis`}\r\n                dataTest=\"training-details\"\r\n            >\r\n                {!!showNudgeDialogProgressId && (\r\n                    <DialogWrapper\r\n                        customization={{\r\n                            width: 480,\r\n                            padding: '49px 32px 32px 32px',\r\n                        }}\r\n                    >\r\n                        <NudgeUser\r\n                            practisSetName={\r\n                                practisSet && practisSet.name\r\n                                    ? practisSet.name\r\n                                    : ''\r\n                            }\r\n                            fromUser={\r\n                                !!profile\r\n                                    ? `${profile.firstName} ${profile.lastName}`\r\n                                    : ''\r\n                            }\r\n                            onSend={handleNudgeSingleUser}\r\n                            onClose={() => setShowNudgeDialogProgressId(null)}\r\n                        />\r\n                    </DialogWrapper>\r\n                )}\r\n                {loading && !isSelectAll && (\r\n                    <LoadingComponent />\r\n                )}\r\n\r\n                <TableWrapper\r\n                    tableStates={tableStates}\r\n                    data={practisSetsEnrollments?.items}\r\n                    selectedLabels={selectedLabels}\r\n                    cornered={selectedLabels && !!selectedLabels.length}\r\n                    tableRefreshConfigurations={{\r\n                        lastRefreshed: lastRefreshed,\r\n                        refreshData: refreshData,\r\n                        dataTest: 'training-timestamp',\r\n                        buttons: [\r\n                            {\r\n                                name: 'Assign Users',\r\n                                icon: <PlusInCircleIcon />,\r\n                                onPress: handleAddTrainees,\r\n                                permissions: [\r\n                                    NEW_PERMISSIONS.ASSIGN_ENROLLMENT,\r\n                                ],\r\n                                dataTest: 'assign-users',\r\n                            },\r\n                            {\r\n                                name: 'Generate Report',\r\n                                icon: <ExportReportIcon />,\r\n                                onPress: onExportReportButtonClick,\r\n                                permissions:\r\n                                    [\r\n                                        NEW_PERMISSIONS.EXPORT_LIST_PRACTIS_SET_USER,\r\n                                    ] || [],\r\n                                disabled: isExportButtonDisabled,\r\n                                dataTest: 'export-report',\r\n                            },\r\n                            {\r\n                                name: 'View Practis Set',\r\n                                icon: <ViewPractisSetIcon />,\r\n                                onPress: handleEditPractisSet,\r\n                                permissions: [\r\n                                    NEW_PERMISSIONS.UPDATE_PRACTIS_SET,\r\n                                ],\r\n                                dataTest: 'view-practis-set',\r\n                            },\r\n                        ],\r\n                    }}\r\n                    tableToolsOptions={{\r\n                        pagingOptions: {\r\n                            totalCount: practisSetsEnrollments?.count ?? 0,\r\n                            itemsPerPage: ITEMS_PER_PAGE,\r\n                            onPageChange: handlePageChange,\r\n                            searchOrFiltersApplied:\r\n                                searchParams.searchTerm.length ||\r\n                                searchParams.labelIDs?.length,\r\n                            dataTest: 'training-paging',\r\n                        },\r\n                        searchInputOptions: {\r\n                            initialValue: searchParams.searchTerm,\r\n                            onSearchChange: setSearchTerm,\r\n                            isSearchInputDisabled: isListEmpty && lodashIsEmpty(searchParams.searchTerm),\r\n                            dataTest: 'training-search'\r\n                        },\r\n                        isSelectedItemOptionsVisible:\r\n                            !lodashIsEmpty(selectedProgresses) &&\r\n                            !lodashIsEmpty(practisSetsEnrollments),\r\n                        selectedItemOptions: {\r\n                            isSelectAll: isSelectAll,\r\n                            selectedLength: selectedProgresses?.length,\r\n                            totalCount: practisSetsEnrollments?.count,\r\n                            itemsPerPage: ITEMS_PER_PAGE,\r\n                            onClearSelection: onClearSelection,\r\n                            onSelectAll: onSelectAll,\r\n                            bulkActionsConfig: {\r\n                                disabled: bulkActions.areBulkActionsDisabled(),\r\n                                disabledLabel: bulkActions.areItemsEmpty()\r\n                                    ? undefined\r\n                                    : \"Bulk actions can't be applied\",\r\n                                practisSetName: practisSet?.name || '',\r\n                                nudgeTitle: 'Nudge Users',\r\n                                showNudgeWarning: false,\r\n                                onNudgeSendButtonClicked:\r\n                                    handleNudgeMultipleUser,\r\n                                sendNudgePermissions:\r\n                                    bulkActions.isBulkActionVisible(\r\n                                        ProgressActions.NUDGE_USER\r\n                                    )\r\n                                        ? [NEW_PERMISSIONS.SEND_NUDGE]\r\n                                        : [],\r\n                                nudgeButtonDisabled:\r\n                                    bulkActions.isBulkActionDisabled(\r\n                                        ProgressActions.NUDGE_USER\r\n                                    ),\r\n                                showRemindPermission:\r\n                                    bulkActions.isBulkActionVisible(\r\n                                        ProgressActions.REMIND_TO_START\r\n                                    )\r\n                                        ? [NEW_PERMISSIONS.RESEND_INVITATION]\r\n                                        : [],\r\n                                onRemindSubmit: handleBulkRemind,\r\n                                remindDisabled:\r\n                                    bulkActions.isBulkActionDisabled(\r\n                                        ProgressActions.REMIND_TO_START\r\n                                    ),\r\n                                removeItemTitle: 'Unassign Users',\r\n                                removeItemPermissions:\r\n                                    bulkActions.isBulkActionVisible(\r\n                                        ProgressActions.UNASSIGN_USER\r\n                                    )\r\n                                        ? [NEW_PERMISSIONS.UNASSIGN_ENROLLMENT]\r\n                                        : [],\r\n                                onRemoveItemsSubmit: handleMultipleUserUnassign,\r\n                                removeItemsDisabled:\r\n                                    bulkActions.isBulkActionDisabled(\r\n                                        ProgressActions.UNASSIGN_USER\r\n                                    ),\r\n                                dueDatesPermissions:\r\n                                    bulkActions.isBulkActionVisible(\r\n                                        ProgressActions.SET_DUEDATE\r\n                                    )\r\n                                        ? [NEW_PERMISSIONS.SET_DUE_DATE]\r\n                                        : [],\r\n                                isDueDatesDisabled:\r\n                                    bulkActions.isBulkActionDisabled(\r\n                                        ProgressActions.SET_DUEDATE\r\n                                    ),\r\n                                isSelectAll: isSelectAll,\r\n                                totalCount: practisSetsEnrollments?.count,\r\n                                onUpdateDueDatesSubmit: openDueDatePopup,\r\n                            },\r\n                        },\r\n                        filterOptions: {\r\n                            filterComponent: (\r\n                                <Popup<HTMLButtonElement>\r\n                                    content={({ hide }) => (\r\n                                        <TrainingDetailsFilters\r\n                                            onStatusChange={filterStatusHandler}\r\n                                            status={\r\n                                                searchParams.filterByStatus as EnrollmentStatusEnum[]\r\n                                            }\r\n                                            onSuccessApply={() => hide()}\r\n                                            registrationStatus={\r\n                                                searchParams.filterByRegistrationStatus ||\r\n                                                []\r\n                                            }\r\n                                            onRegistrationStatusChange={\r\n                                                registrationStatusHandler\r\n                                            }\r\n                                            onOverdueChange={\r\n                                                filterOverdueHandler\r\n                                            }\r\n                                            dueDate={\r\n                                                searchParams.filterByDueDate as DueDateFilters[]\r\n                                            }\r\n                                        />\r\n                                    )}\r\n                                    padding={'40px 32px 32px 32px'}\r\n                                    horizontalOffset={256}\r\n                                >\r\n                                    {(ref, { toggleShown, shown }) => (\r\n                                        <FilterByHandler\r\n                                            ref={ref}\r\n                                            open={shown}\r\n                                            toggleOpen={toggleShown}\r\n                                            filtersCount={countPractisSetDetailsAppliedFiltersCount(\r\n                                                searchParams\r\n                                            )}\r\n                                            disabled={\r\n                                                searchParams.searchTerm.length > 0 &&\r\n                                                isListEmpty\r\n                                            }\r\n                                            dataTest=\"training-filters\"\r\n                                        />\r\n                                    )}\r\n                                </Popup>\r\n                            ),\r\n                        },\r\n                    }}\r\n                    tableEmptyStateConfigurations={{\r\n                        shouldShowEmptyState:\r\n                            !loading &&\r\n                            practisSetsEnrollments?.items?.length === 0,\r\n                        noEntriesOptions: {\r\n                            icon: User,\r\n                            text: 'No Users Yet',\r\n                            dataTest: 'training-no-entries',\r\n                        },\r\n                        noSearchResultsOptions: {\r\n                            entityName: <>Users</>,\r\n                            dataTest: 'training-no-found-entries',\r\n                        },\r\n                        noFilterResultsOptions: {\r\n                            dataTest: 'training-no-filtered-entries',\r\n                        },\r\n                    }}\r\n                    configurations={{\r\n                        masterCheckBoxConfig: {\r\n                            checked: isMasterCheckBoxChecked,\r\n                            disabled: isMasterCheckBoxDisabled,\r\n                            partial:\r\n                                isCheckboxPartiallySelected || !isSelectAll,\r\n                            handleCheck: onCheckMasterCheckbox,\r\n                            dataTest: 'training-master-checkbox',\r\n                        },\r\n                        columns: [\r\n                            {\r\n                                title: 'Users',\r\n                                width: 20,\r\n                                ...enFirstName,\r\n                                disabled: headersDisabled,\r\n                                dataTest: 'training-user-name-column',\r\n                            },\r\n                            {\r\n                                title: 'Due Date',\r\n                                width: 10,\r\n                                ...enDueDate,\r\n                                disabled: headersDisabled,\r\n                                dataTest: 'training-due-date-column',\r\n                            },\r\n                            {\r\n                                title: 'Progress',\r\n                                width: 10,\r\n                                ...enProgressValue,\r\n                                disabled: headersDisabled,\r\n                                withTooltip: true,\r\n                                tooltipText:\r\n                                    'The percentage completion of all the items in a Practis Set.',\r\n                                dataTest: 'training-progress-column',\r\n                            },\r\n                            {\r\n                                title: 'Accuracy',\r\n                                width: 10,\r\n                                ...enAccuracyAvg,\r\n                                disabled: headersDisabled,\r\n                                withTooltip: true,\r\n                                tooltipText:\r\n                                    'The accuracy scores for all submitted scenario accuracy tests.',\r\n                                dataTest: 'training-accuracy-column',\r\n                            },\r\n                            {\r\n                                title: 'Training Time',\r\n                                width: 10,\r\n                                ...enTime,\r\n                                disabled: headersDisabled,\r\n                                withTooltip: true,\r\n                                tooltipText:\r\n                                    'The total time spent by a user learning material.',\r\n                                dataTest: 'training-time-column',\r\n                            },\r\n                            {\r\n                                title: 'Assigned',\r\n                                width: 10,\r\n                                ...enAssigned,\r\n                                disabled: headersDisabled,\r\n                                dataTest: 'assign-date-column',\r\n                            },\r\n                            {\r\n                                title: 'Started',\r\n                                width: 10,\r\n                                ...enStarted,\r\n                                disabled: headersDisabled,\r\n                                dataTest: 'start-date-column',\r\n                            },\r\n                            {\r\n                                title: 'Last Training',\r\n                                width: 10,\r\n                                ...enLastTrainingAt,\r\n                                disabled: headersDisabled,\r\n                                dataTest: 'last-training-column',\r\n                            },\r\n                            {\r\n                                width: 5,\r\n                            },\r\n                        ],\r\n\r\n                        rowConfig: {\r\n                            onRowClick: onRowClick,\r\n                            onRowCheckHandler: onRowCheckHandler,\r\n                            isRowChecked: checkIsRowChecked,\r\n                            dataTest: 'training-item',\r\n\r\n                            cells: [\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    cellClassName: classes.customTableCellStyle,\r\n                                    getCustomFieldComponent: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => (\r\n                                        <StyledFirstTableContent>\r\n                                            <AvatarTile>\r\n                                                <Avatar\r\n                                                    profile={{\r\n                                                        ...trainee.user,\r\n                                                        picture:\r\n                                                            trainee.user\r\n                                                                .imageUrl,\r\n                                                    }}\r\n                                                    size=\"sm\"\r\n                                                    marginRight={15}\r\n                                                    dataTest=\"training-item-user-avatar\"\r\n                                                />\r\n                                                <TableTitleOverflowText\r\n                                                    isCurrent={\r\n                                                        profile &&\r\n                                                        profile.id ===\r\n                                                            trainee.user.id\r\n                                                    }\r\n                                                    dataTest=\"training-item-user-name\"\r\n                                                >{`${trainee.user.firstName} ${trainee.user.lastName}`}</TableTitleOverflowText>\r\n                                            </AvatarTile>\r\n                                        </StyledFirstTableContent>\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => !trainee?.dueDate,\r\n                                    fieldProps: {\r\n                                        renderTitle: (\r\n                                            trainee: EnrollmentInterface\r\n                                        ) =>\r\n                                            trainee?.dueDate ? (\r\n                                                <DueDateWrapper>\r\n                                                    <span data-test=\"training-item-due-date\">\r\n                                                        {formatDateWithTimeZone(\r\n                                                            trainee?.dueDate\r\n                                                        )}\r\n                                                    </span>\r\n                                                    {trainee.hasOverdue && (\r\n                                                        <DueDateIcon data-test=\"training-item-due-date-icon\">\r\n                                                            <OverdueFlagWrapped />\r\n                                                        </DueDateIcon>\r\n                                                    )}\r\n                                                </DueDateWrapper>\r\n                                            ) : (\r\n                                                ''\r\n                                            ),\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    getCustomFieldComponent: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => (\r\n                                        <ProgressBarContainer>\r\n                                            <GeneralProgressCol\r\n                                                count={Math.round(\r\n                                                    trainee?.progress * 100\r\n                                                )}\r\n                                                max={100}\r\n                                                completedAt={\r\n                                                    trainee?.completedAt\r\n                                                }\r\n                                                status={trainee.status}\r\n                                                dataTest=\"training-item-progress\"\r\n                                            />\r\n                                        </ProgressBarContainer>\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => !trainee?.averageAccuracy,\r\n                                    fieldProps: {\r\n                                        renderTitle: (\r\n                                            trainee: EnrollmentInterface\r\n                                        ) =>\r\n                                            `${Math.floor(\r\n                                                trainee?.averageAccuracy * 100\r\n                                            )}%`,\r\n                                        dataTest: 'training-item-accuracy',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => !trainee?.trainingTime,\r\n                                    fieldProps: {\r\n                                        renderTitle: (\r\n                                            trainee: EnrollmentInterface\r\n                                        ) =>\r\n                                            secondsToMinSimple(\r\n                                                trainee!.trainingTime\r\n                                            ),\r\n                                        dataTest: 'training-item-time',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => !trainee?.createdAt,\r\n                                    fieldProps: {\r\n                                        renderTitle: (\r\n                                            trainee: EnrollmentInterface\r\n                                        ) => formatDate(trainee?.createdAt),\r\n                                        dataTest: 'training-item-assign-date',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    getCustomFieldComponent: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => (\r\n                                        <RenderStarted\r\n                                            onResendInvitation={\r\n                                                onResendInvitation\r\n                                            }\r\n                                            enrollment={trainee}\r\n                                        />\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (\r\n                                        trainee: EnrollmentInterface\r\n                                    ) => !trainee?.lastTrainingAt,\r\n\r\n                                    fieldProps: {\r\n                                        renderTitle: (\r\n                                            trainee: EnrollmentInterface\r\n                                        ) =>\r\n                                            formatDate(trainee?.lastTrainingAt),\r\n                                        dataTest: 'training-item-last-date',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'LIST_ACTIONS',\r\n                                    fieldProps: {\r\n                                        getListActionsComponent: (\r\n                                            trainee: EnrollmentInterface\r\n                                        ) => (\r\n                                            <ActionButton\r\n                                                customWidth={224}\r\n                                                isHidden={\r\n                                                    !!selectedProgresses?.length\r\n                                                }\r\n                                                dataTest=\"training-item-menu\"\r\n                                            >\r\n                                                {actionsHelper.canViewPractisSetReport() && (\r\n                                                    <ActionItem\r\n                                                        onClick={e => {\r\n                                                            e.stopPropagation();\r\n                                                            handleViewPractisSetReport(\r\n                                                                trainee.user.id,\r\n                                                                trainee.id\r\n                                                            );\r\n                                                        }}\r\n                                                        dataTest=\"view-practis-set-report-item-action\"\r\n                                                    >\r\n                                                        View Practis Set Report\r\n                                                    </ActionItem>\r\n                                                )}\r\n                                                {actionsHelper.canViewProfile() && (\r\n                                                    <ActionItem\r\n                                                        onClick={e => {\r\n                                                            e.stopPropagation();\r\n                                                            handleViewProfile(\r\n                                                                trainee.user.id!\r\n                                                            );\r\n                                                        }}\r\n                                                        dataTest=\"view-profile-item-action\"\r\n                                                    >\r\n                                                        View Profile\r\n                                                    </ActionItem>\r\n                                                )}\r\n\r\n                                                {actionsHelper.canChangeDueDate() && (\r\n                                                    <ActionItem\r\n                                                        onClick={() =>\r\n                                                            openDueDatePopup(\r\n                                                                trainee?.id //enroll id\r\n                                                            )\r\n                                                        }\r\n                                                        dataTest=\"due-date-item-action\"\r\n                                                    >\r\n                                                        Due Date\r\n                                                    </ActionItem>\r\n                                                )}\r\n\r\n                                                {actionsHelper.canNudgeUser(\r\n                                                    trainee.user\r\n                                                ) && (\r\n                                                    <ActionItem\r\n                                                        onClick={e => {\r\n                                                            e.stopPropagation();\r\n                                                            setShowNudgeDialogProgressId(\r\n                                                                trainee.user.id!\r\n                                                            );\r\n                                                        }}\r\n                                                        dataTest=\"nudge-user-item-action\"\r\n                                                    >\r\n                                                        Nudge User\r\n                                                    </ActionItem>\r\n                                                )}\r\n\r\n                                                {actionsHelper.canRemindToStart(\r\n                                                    trainee\r\n                                                ) && (\r\n                                                    <ActionItem\r\n                                                        onClick={e => {\r\n                                                            handleSingleRemind(\r\n                                                                trainee.id!\r\n                                                            );\r\n                                                        }}\r\n                                                        dataTest=\"remind-to-start-item-action\"\r\n                                                    >\r\n                                                        Remind to Start\r\n                                                    </ActionItem>\r\n                                                )}\r\n                                                {actionsHelper.canUnassignUser() && (\r\n                                                    <ActionItem\r\n                                                        destructive={true}\r\n                                                        onClick={e => {\r\n                                                            e.stopPropagation();\r\n                                                            trainee &&\r\n                                                                handleUnassign([\r\n                                                                    trainee.id!,\r\n                                                                ]);\r\n                                                        }}\r\n                                                        dataTest=\"unassign-user-item-action\"\r\n                                                    >\r\n                                                        Unassign User\r\n                                                    </ActionItem>\r\n                                                )}\r\n                                            </ActionButton>\r\n                                        ),\r\n                                    },\r\n                                },\r\n                            ],\r\n                        },\r\n                    }}\r\n                />\r\n            </MainWrapper>\r\n            {dueDateCalendarParams.isOpen && dueDateCalendarParams?.data && (\r\n                <DueDateCalendar\r\n                    data={dueDateCalendarParams?.data}\r\n                    onCancel={onCloseDueDateCalendar}\r\n                    onApply={updateDueDate}\r\n                />\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport const ProgressDetailsContainer: FC = () => {\r\n    const state = useEnrollmentState();\r\n    const profile = useSelector(getProfileState);\r\n    const practisSetsState = useTrainerPractisSetState();\r\n    const history = useHistory();\r\n    const params: { teamId: string; practisSetId: string } = useParams();\r\n    const company = useSelector(getCompanyState);\r\n    const searchPractisSetDetailsUsers = useSearchPractisSetDetailsUsersService(\r\n        params.teamId,\r\n        params.practisSetId\r\n    );\r\n    const searchPractisSetDetailsUsersDebounced = useSearchDebounced(\r\n        searchPractisSetDetailsUsers\r\n    );\r\n    const resendInvitation = useRemindToStartService();\r\n    const getPractisSet = useGetPractisSetService();\r\n    const resetPractisSetDetails = useResetPractisSetDetailsService();\r\n    const labels = useLabelsState();\r\n    const checkAllProgress = useCheckAllProgressService();\r\n    const checkSingleProgress = useCheckSingleProgressService();\r\n    const nudgeUsers = useNudgeUsersService();\r\n    const unenrollEnrollment = useUnenrollEnrollmentService();\r\n    const getTraineesReportService = useGetTraineesReportService();\r\n    const actionsHelper = useProgressActionsHelper();\r\n\r\n    const selectedProgresses = useMemo(\r\n        () => selectSelectedProgresses(state, practisSetsState.checked),\r\n        [practisSetsState.checked, state]\r\n    );\r\n    const searchState = useSelector(getSearchState);\r\n\r\n    const locationState: any = history.location.state;\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetPractisSetDetails();\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n        <ProgressDetails\r\n            history={history}\r\n            profile={profile}\r\n            params={params}\r\n            company={company}\r\n            searchPractisSetDetailsUsers={searchPractisSetDetailsUsersDebounced}\r\n            practisSetsEnrollments={state.data}\r\n            updateTrainees={state.update}\r\n            loading={state.loading}\r\n            practisSet={state.practisSet}\r\n            onResendInvitation={resendInvitation}\r\n            onGetPractisSet={getPractisSet}\r\n            selectedLabels={labels.selected}\r\n            checkAllProgress={checkAllProgress}\r\n            checkSingleProgress={checkSingleProgress}\r\n            selectedProgressIds={practisSetsState.checked}\r\n            selectedProgresses={selectedProgresses}\r\n            actionsHelper={actionsHelper}\r\n            onNudgeUsers={nudgeUsers}\r\n            onUnenrollEnrollment={unenrollEnrollment}\r\n            getTraineesReportService={getTraineesReportService}\r\n            locationState={locationState}\r\n            searchState={searchState}\r\n        />\r\n    );\r\n};\r\n\r\nexport default ProgressDetailsContainer;","import React, { FC } from 'react';\nimport { Redirect, Switch } from 'react-router-dom';\nimport PrivateRoute from '../../../../routes/PrivateRouter';\nimport ROUTES from '../../../../routes/routes';\nimport PractisSetProgressContainer from './PractisSetProgress';\nimport ProgressDetailsContainer from './ProgressDetails';\nimport { useHistory, useLocations } from '../../../../tools/router';\n\nexport const Progress: FC = () => {\n    let { rootLocation } = useLocations();\n    const history = useHistory();\n    return (\n        <React.Fragment>\n            <Switch location={rootLocation}>\n                <Redirect\n                    from={ROUTES.TEAMS_PAGES.TRAINING}\n                    exact\n                    to={{\n                        pathname: ROUTES.TEAMS_PAGES.TRAINING_PAGES.PRACTIS_SETS,\n                        state: history.location.state\n                    }}\n                />\n                <PrivateRoute\n                    path={ROUTES.TEAMS_PAGES.TRAINING_PAGES.PRACTIS_SETS}\n                    exact\n                    component={PractisSetProgressContainer}\n                />\n                <PrivateRoute\n                    path={\n                        ROUTES.TEAMS_PAGES.TRAINING_PAGES.PRACTIS_SETS_DETAILS\n                    }\n                    exact\n                    component={ProgressDetailsContainer}\n                />\n            </Switch>\n        </React.Fragment>\n    );\n};\n\nexport default Progress;\n","import { UserInterface } from '../../../../constants/interfaces/User';\r\nimport { Dispatch } from 'redux';\r\nimport { ThunkContext } from '../../../../tools/thunk/ThunkContext';\r\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\r\nimport { useCallback } from 'react';\r\nimport {\r\n    useAddStagingUsersApi,\r\n    useAssignFiltersToStagingUsersApi,\r\n    useCreateUserStagingApi,\r\n    useDeleteStagingUsersApi,\r\n    useInviteStagingUsersApi,\r\n    useSearchStagingUsersApi,\r\n    useUpdateStagingUsersApi,\r\n} from '../../../../api';\r\nimport { NewUserValues } from '../models/NewUserValues';\r\nimport { DraftUser, PractisSetWithDueDate } from '../../../../constants/interfaces/Draft';\r\nimport { useDispatch } from 'react-redux';\r\nimport { SearchParams } from '../../../../constants/interfaces/filters';\r\nimport { PaginationResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport {\r\n    modifyDraftUsersAction,\r\n    modifyDraftUsersWithoutValidationAction,\r\n    resetDraftsPageAction,\r\n    searchDraftUsersFailure,\r\n    searchDraftUsersStart,\r\n    searchDraftUsersSuccess,\r\n    updateDraftUsersFailure,\r\n    updateDraftUsersStart,\r\n    updateDraftUsersSuccess,\r\n} from './actions';\r\nimport { SocketProgressShow } from '../../../../features/socketProgress(api1)/store/actions';\r\nimport { AssignFiltersToStagingUsersParams } from '../../../../api/users/types';\r\nimport { handleMessage, useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\r\n\r\nconst uuid = require('uuid/v1');\r\nexport const MAX_DRAFT_USERS_INVITE = 10;\r\nexport interface SendInvitationParams {\r\n    id?: number | string;\r\n    email: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    roleId?: number | null;\r\n    labelIDs?: any[];\r\n    practisSetIDs?: PractisSetWithDueDate[];\r\n    teamIDs?: any[];\r\n}\r\n\r\nexport const sendInvitation = (\r\n    data: DraftUser[],\r\n    assignedPractisSets?: number[]\r\n) => {\r\n    return (dispatch: Dispatch<any>, getState: any, context: ThunkContext) => {\r\n        return context.http\r\n            .post('invitations', {\r\n                items: data,\r\n                practisSets: [...(assignedPractisSets || [])],\r\n            })\r\n            .then((res: any) => {\r\n                let sentEmails: Array<UserInterface> = [];\r\n                let failedEmails: Array<string> = [];\r\n                res.map((response: any) => {\r\n                    if (response.error) {\r\n                        return failedEmails.push(response.error.message);\r\n                    } else {\r\n                        return sentEmails.push(response);\r\n                    }\r\n                });\r\n\r\n                if (failedEmails.length < 1) {\r\n                    handleMessage(\r\n                        dispatch,\r\n                        data.length > 1\r\n                            ? 'Invitations sent!'\r\n                            : 'Invitation sent!',\r\n                        'success'\r\n                    );\r\n                } else {\r\n                    handleMessage(dispatch, failedEmails, 'error');\r\n                }\r\n                return sentEmails;\r\n            })\r\n            .catch((error: ErrorResult) => {\r\n                let errorMessage;\r\n                if (error && error.message && error.message.includes('role')) {\r\n                    errorMessage = 'Role is required';\r\n                } else {\r\n                    errorMessage = error.message;\r\n                }\r\n                handleMessage(dispatch, errorMessage, 'error');\r\n                throw error;\r\n            });\r\n    };\r\n};\r\n\r\nexport const assignLabelsToInvitedUsers = (\r\n    labels: number[],\r\n    entities: number[]\r\n) => {\r\n    return (dispatch: Dispatch<any>, getState: any, context: ThunkContext) => {\r\n        return context.http\r\n            .post(`labels/assign`, {\r\n                labels,\r\n                entities,\r\n                entityType: 'INVITATION',\r\n                deleted: [],\r\n            })\r\n            .then((res: any) => {\r\n                return res;\r\n            })\r\n            .catch((error: ErrorResult) => {\r\n                handleMessage(dispatch, error.message, 'error');\r\n                throw error;\r\n            });\r\n    };\r\n};\r\n\r\nexport const useSearchStagingUsersService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchStagingUsersApi = useSearchStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (draftId: number, sp: SearchParams) => {\r\n            dispatch(searchDraftUsersStart());\r\n            return searchStagingUsersApi(draftId, sp)\r\n                .then(data => {\r\n                    dispatch(searchDraftUsersSuccess(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchDraftUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, searchStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useCreateUserStagingService = () => {\r\n    const dispatch = useDispatch();\r\n    const createStagingApi = useCreateUserStagingApi();\r\n    return useCallback(\r\n        (name: string, users: NewUserValues[]) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return createStagingApi(name, users)\r\n                .then((res: any) => {\r\n                    dispatch(\r\n                        updateDraftUsersSuccess({ id: uuid() }, 'draft-created')\r\n                    );\r\n                    return res;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    return error;\r\n                });\r\n        },\r\n        [dispatch, createStagingApi]\r\n    );\r\n};\r\n\r\nexport const useAddStagingUserService = () => {\r\n    const dispatch = useDispatch();\r\n    const addStagingUsersApi = useAddStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (stagingId: number, user: DraftUser) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return addStagingUsersApi(stagingId, [user])\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateDraftUsersSuccess({ id: uuid() }, 'draft-updated')\r\n                    );\r\n                    return true;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return false;\r\n                });\r\n        },\r\n        [dispatch, addStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useAddMultipleStagingUsersService = () => {\r\n    const dispatch = useDispatch();\r\n    const addStagingUsersApi = useAddStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (stagingId: number, user: DraftUser[]) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return addStagingUsersApi(stagingId, user)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateDraftUsersSuccess({ id: uuid() }, 'draft-updated')\r\n                    );\r\n                    return true;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return false;\r\n                });\r\n        },\r\n        [dispatch, addStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useUpdateStagingUserService = () => {\r\n    const dispatch = useDispatch();\r\n    const updateStagingUsersApi = useUpdateStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (stagingId: number, stagingUserId: number, user: DraftUser) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return updateStagingUsersApi(stagingId, stagingUserId, user)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateDraftUsersSuccess({ id: uuid() }, 'draft-updated')\r\n                    );\r\n                    return true;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return false;\r\n                });\r\n        },\r\n        [dispatch, updateStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useDeleteStagingUserService = () => {\r\n    const dispatch = useDispatch();\r\n    const deleteStagingUsersApi = useDeleteStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (stagingId: number, stagingUserIds: number[]) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return deleteStagingUsersApi(stagingId, stagingUserIds)\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateDraftUsersSuccess({ id: uuid() }, 'draft-updated')\r\n                    );\r\n                    return true;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return false;\r\n                });\r\n        },\r\n        [dispatch, deleteStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useInviteStagingUserService = () => {\r\n    const dispatch = useDispatch();\r\n    const inviteStagingUsersApi = useInviteStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (stagingId: number, stagingUserIds: number[], selectAll: boolean, search: SearchParams) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return inviteStagingUsersApi(stagingId, stagingUserIds, selectAll, search)\r\n                .then(data => {\r\n                    dispatch(\r\n                        updateDraftUsersSuccess({ id: uuid() }, 'user-invited')\r\n                    );\r\n\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    showMessage('Something went wrong', 'error');\r\n                    throw error;\r\n                });\r\n        },\r\n        [dispatch, inviteStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useAssignFiltersToStagingUsersService = () => {\r\n    const dispatch = useDispatch();\r\n    const assignFiltersToStagingUsersApi = useAssignFiltersToStagingUsersApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (\r\n            stagingId: number,\r\n            assignFilters: AssignFiltersToStagingUsersParams\r\n        ) => {\r\n            dispatch(updateDraftUsersStart());\r\n            return assignFiltersToStagingUsersApi(stagingId, assignFilters)\r\n                .then(data => {\r\n                    if (assignFilters.selectAll) {\r\n                        dispatch(SocketProgressShow());\r\n                    } else { \r\n                        dispatch(\r\n                            updateDraftUsersSuccess({ id: uuid() }, 'draft-updated')\r\n                        );\r\n                    }\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateDraftUsersFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                    return error;\r\n                });\r\n        },\r\n        [dispatch, assignFiltersToStagingUsersApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useModifyDraftUsersService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (users: PaginationResult<DraftUser>) => {\r\n            dispatch(modifyDraftUsersAction(users));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useModifyDraftUsersWithoutValidationService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (users: PaginationResult<DraftUser>) => {\r\n            dispatch(modifyDraftUsersWithoutValidationAction(users));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useResetDraftsPageService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(() => {\r\n        dispatch(resetDraftsPageAction());\r\n    }, [dispatch]);\r\n};\r\n","import React, { FC, CSSProperties, ChangeEventHandler } from 'react';\nimport styled from 'styled-components';\n\nimport { Variables } from '../../../theme/variables';\n\nconst radioButtonSize = 20;\n\nconst COLORS = {\n    background: Variables.Colors.white,\n    checkedBackground: Variables.Colors.white,\n    checkedColor: Variables.Colors.white,\n    borderColor: Variables.Colors.iconGrayBg,\n    disabled: {\n        background: Variables.Colors.steelGrey,\n        checkedBackground: Variables.Colors.iconGrayBg,\n        checkedColor: Variables.Colors.white,\n    },\n};\n\nconst StyledWrapper = styled.label<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    ${props => props.disabled && 'pointer-events: none'};\n    margin-bottom: 8px;\n    cursor: pointer;\n`;\n\nconst StyledLabel = styled.div<{\n    color?: string;\n    size?: number;\n    disabled?: boolean;\n}>`\n    font-size: ${props => (!!props.size ? props.size : 13)}px;\n    margin-left: 8px;\n    font-weight: 500;\n    color: ${props => (\n        props.color\n            ? props.color\n            : props.disabled\n                ? Variables.Colors.steelGrey\n                : Variables.Colors.black)};\n    cursor: pointer;\n`;\n\nconst HiddenRadioButton = styled.input`\n    visibility: hidden;\n    position: absolute;\n`;\n\nconst StyledRadioButton = styled.div<{\n    color?: string;\n    background?: string;\n    size: number;\n    checked?: boolean;\n    partial?: boolean;\n    borderWidth?: number;\n    disabled?: boolean;\n}>`\n    cursor: pointer;\n    height: ${props => props.size}px;\n    width: ${props => props.size}px;\n    border: ${props =>\n            !!props.checked && !!props.borderWidth ? props.borderWidth : 1}px\n        solid\n        ${props =>\n            props.checked\n                ? props.disabled\n                    ? Variables.Colors.cloudyBlue\n                    : props.partial\n                        ? Variables.Colors.cloudyBlue\n                        : Variables.Colors.darkSkyBlue\n                : Variables.Colors.cloudyBlue};\n    background: ${props => props.background};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    flex-shrink: 0;\n    border-radius: 50%;\n`;\n\nexport const RadioButton: FC<{\n    checked: boolean;\n    partial?: boolean;\n    handleChange: ChangeEventHandler<HTMLInputElement>;\n    disabled?: boolean;\n    label?: string;\n    color?: string;\n    background?: string;\n    size?: number;\n    fontColor?: string;\n    fontSize?: number;\n    className?: string;\n    labelStyles?: CSSProperties;\n    checkedBackground?: string;\n    dataTest?: string;\n}> = ({\n    checked,\n    partial,\n    disabled,\n    handleChange,\n    label,\n    background,\n    size,\n    fontColor,\n    fontSize,\n    className,\n    labelStyles,\n    checkedBackground,\n    dataTest,\n}) => {\n    return (\n        <StyledWrapper className={className} disabled={disabled}>\n            <HiddenRadioButton\n                type=\"checkbox\"\n                onChange={e => {\n                    handleChange(e);\n                }}\n                data-test={\n                    dataTest\n                    && `${dataTest}${partial ? '-partially-checked' : (checked ? '-checked' : '')}`\n                }\n            />\n            <StyledRadioButton\n                size={size ? size : radioButtonSize}\n                checked={checked}\n                disabled={disabled}\n                partial={partial}\n                background={\n                    checked\n                        ? !!checkedBackground\n                            ? checkedBackground\n                            : COLORS.checkedBackground\n                        : background || COLORS.background\n                }\n                borderWidth={size ? size / 3 : 4}\n                data-test={dataTest && `${dataTest}-view`}\n            />\n            {label && (\n                <StyledLabel\n                    color={fontColor}\n                    size={fontSize}\n                    style={labelStyles}\n                    data-test={dataTest && `${dataTest}-label`}\n                    disabled={disabled}\n                >\n                    {label}\n                </StyledLabel>\n            )}\n        </StyledWrapper>\n    );\n};\n\nexport default RadioButton;\n","import React, { FC, useState } from 'react';\nimport { kebabCase } from 'lodash';\nimport {\n    filterInvitationRolesByPermissions,\n    getUserRoleNameById,\n} from '../tools';\nimport styled from 'styled-components';\nimport { motion } from 'framer-motion';\nimport { ClickAwayListener } from '@material-ui/core';\nimport { usePermissionsState } from '../../../../features/permissions/store/state';\nimport { Variables } from '../../../../theme/variables';\nimport { useUserRolesState } from '../../../../features/roles/store/states';\nimport RadioButton from '../../../../ui/components/RadioButton';\nimport OutsideActionBox from '../../../../ui/components/OutsideActionBox/OutsideActionBox';\n\nconst StyledSelectForm = styled.div<{\n    disabled?: boolean;\n    minWidth?: string;\n    height?: number;\n    error?: boolean;\n    border?: boolean;\n}>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: 4px;\n    width: 129px;\n    cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n    padding-right: 15px;\n    height: ${props => (props.height ? `${props.height}px` : '100%')};\n    background: ${props => props.theme.Colors.white};\n    color: ${props => props.theme.Colors.black};\n    &.is-disabled {\n        color: ${props => props.theme.Colors.cloudyBlue};\n        pointer-events: none;\n    }\n`;\n\nconst StyledLabelWrapper = styled.div`\n    display: flex;\n    height: 100%;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n`;\n\nconst SelectContainer = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst SelectTitle = styled.div`\n    pointer-events: none;\n    font-size: 11px;\n    -webkit-transition: all 0.18s ease;\n    transition: all 0.18s ease;\n    display: block;\n    align-items: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    font-weight: 600;\n    margin-left: 15px;\n`;\n\nconst SelectLabelWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    width: 100%;\n`;\n\nconst SelectLabel = styled.div<{ color?: string }>`\n    pointer-events: none;\n    font-size: 13px;\n    -webkit-transition: all 0.18s ease;\n    transition: all 0.18s ease;\n    display: flex;\n    align-items: center;\n    height: 100%;\n    color: ${props =>\n        props.color ? props.color : props.theme.Colors.cloudyBlue};\n    font-weight: 500;\n    margin-left: 15px;\n    margin-bottom: 1px;\n`;\n\nconst RolesContainer = styled(motion.div)`\n    padding: 24px 24px 16px 24px;\n    width: 129px;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    top: 8px;\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n    position: absolute;\n`;\n\nconst StyledRolesList = styled.div``;\n\nconst ScrollableRoleContainer = styled.div``;\n\nconst RoleItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    height: 24px;\n    margin-bottom: 8px;\n`;\n\nconst ANIMATION_SCALE = 5;\nconst ROLE_PLACEHOLDER = 'Role*';\n\nexport const AssignRoles: FC<{\n    disabled?: boolean;\n    assignedRole: number | null;\n    handleRoleCheck: any;\n    dataTest: string;\n}> = ({ disabled, assignedRole, handleRoleCheck, dataTest }) => {\n    const [show, setShow] = useState(false);\n    const permissions = usePermissionsState();\n    const userRoles = useUserRolesState();\n    const roles = filterInvitationRolesByPermissions(\n        userRoles.list,\n        permissions\n    );\n    const assignedRoleName = getUserRoleNameById(assignedRole, userRoles.list);\n\n    const updateCheckedRole = (value: number) => {\n        setShow(false);\n        handleRoleCheck(value);\n    };\n\n    return (\n        <ClickAwayListener onClickAway={() => setShow(false)}>\n            <StyledSelectForm\n                disabled={disabled}\n                border={show || !!assignedRole}\n            >\n                <StyledLabelWrapper\n                    onClick={() => setShow(!show)}\n                    data-test={dataTest}\n                >\n                    {assignedRoleName && (\n                        <SelectTitle>{ROLE_PLACEHOLDER}</SelectTitle>\n                    )}\n                    <SelectLabelWrapper>\n                        <SelectLabel\n                            color={\n                                !assignedRoleName || disabled\n                                    ? Variables.Colors.cloudyBlue\n                                    : Variables.Colors.black\n                            }\n                        >\n                            {assignedRoleName || ROLE_PLACEHOLDER}\n                        </SelectLabel>\n                    </SelectLabelWrapper>\n                </StyledLabelWrapper>\n                <SelectContainer open={show && !disabled}>\n                    <RolesContainer\n                        initial={{ scale: 1 / ANIMATION_SCALE }}\n                        animate={{ scale: 1 }}\n                        exit={{ scale: 0 }}\n                    >\n                        <StyledRolesList>\n                            <ScrollableRoleContainer>\n                                {roles &&\n                                    (roles || []).map(role => (\n                                        <RoleItemWrapper\n                                            key={role.name}\n                                            onClick={() =>\n                                                updateCheckedRole(role.value)\n                                            }\n                                        >\n                                            <RadioButton\n                                                checked={\n                                                    assignedRole === role.value\n                                                }\n                                                size={12}\n                                                handleChange={() =>\n                                                    updateCheckedRole(\n                                                        role.value\n                                                    )\n                                                }\n                                                label={role.name}\n                                                dataTest={`${kebabCase(role.name.toLowerCase())}-role-radio`}\n                                            />\n                                        </RoleItemWrapper>\n                                    ))}\n                            </ScrollableRoleContainer>\n                        </StyledRolesList>\n                    </RolesContainer>\n                </SelectContainer>\n            </StyledSelectForm>\n        </ClickAwayListener>\n    );\n};\n","import React, { FC, useCallback, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { Fieldset } from '../../../ui/components/Fieldset';\r\nimport { PortableLabelsWithStore } from '../../portableLabels';\r\nimport { useSaveLabels } from '../store/hors/withLabels/services';\r\nimport { useLabelsState } from '../store/hors/withLabels/states';\r\n\r\nconst Container = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Wrapper = styled.div<{ withBorder?: boolean }>`\r\n    width: ${({withBorder}) => withBorder ? `272px` : '208px'};\r\n    max-height: 432px;\r\n    min-height: 200px;\r\n    display: flex;\r\n    ${({withBorder}) => withBorder && `padding: 16px 8px 0 8px;`};\r\n    background-color: inherit;\r\n`;\r\n\r\nconst LabelsContainer = styled.div`\r\n    width: 208px;\r\n    height: 100%;\r\n    overflow: auto;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Actions = styled.div<{ withBorder?: boolean }>`\r\n    width: ${({withBorder}) => withBorder ? `272px` : '208px'};\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    flex-shrink: 0;\r\n    margin-top: 16px;\r\n    ${({withBorder}) => withBorder && `padding: 0 8px;`};\r\n`;\r\n\r\nexport const AssignLabels: FC<{\r\n    onLabelsChange?: (ids: number[]) => void;\r\n    onSuccessApply: () => void;\r\n    withBorder?: boolean;\r\n}> = ({ onLabelsChange, onSuccessApply, withBorder }) => {\r\n    const saveLabels = useSaveLabels();\r\n    const labels = useLabelsState();\r\n\r\n    const [labelIds, setLabelIds] = useState<number[]>(labels.selected);\r\n    const [applyDisabled, setApplyDisabled] = useState(true);\r\n\r\n    const onLabelChangeHandler = useCallback(\r\n        (ids: number[]) => {\r\n            setLabelIds(ids);\r\n            setApplyDisabled(false);\r\n        },\r\n        [setLabelIds]\r\n    );\r\n\r\n    const onApplyHandler = useCallback(() => {\r\n        onLabelsChange?.(labelIds);\r\n        saveLabels();\r\n        onSuccessApply();\r\n    }, [onLabelsChange, labelIds, onSuccessApply, saveLabels]);\r\n\r\n    return (\r\n        <Container>\r\n            <Wrapper withBorder={withBorder}>\r\n                <Fieldset\r\n                    withoutBorder={!withBorder}\r\n                    title={withBorder ? 'Labels' : ''}\r\n                    dataTest=\"labels-section-title\"\r\n                >\r\n                    <LabelsContainer>\r\n                        <PortableLabelsWithStore\r\n                            onSetSelected={onLabelChangeHandler}\r\n                            showSave={false}\r\n                            showSelectActions\r\n                            showSearch\r\n                        />\r\n                    </LabelsContainer>\r\n                </Fieldset>\r\n            </Wrapper>\r\n            <Actions withBorder={withBorder}>\r\n                <Button\r\n                    width={withBorder ? '120px' : '96px'}\r\n                    action={onSuccessApply}\r\n                    variant=\"inverse\"\r\n                    dataTest=\"cancel-button\"\r\n                >\r\n                    Cancel\r\n                </Button>\r\n                <Button\r\n                    width={withBorder ? '120px' : '96px'}\r\n                    action={onApplyHandler}\r\n                    disabled={applyDisabled}\r\n                    dataTest=\"apply-button\"\r\n                >\r\n                    Apply\r\n                </Button>\r\n            </Actions>\r\n        </Container>\r\n    );\r\n};\r\n","import React, { FC, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { Variables } from '../../../../theme/variables';\r\nimport { useLabelsState } from '../../../../features/portableLabels/store/hors/withLabels/states';\r\nimport { usePortableLabelsState } from '../../../../features/portableLabels/store/states';\r\nimport { AssignLabels } from '../../../../features/portableLabels/templates/AssignLabels';\r\nimport {\r\n    useResetLabels,\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../../features/portableLabels/store/hors/withLabels/services';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { Tooltip } from '../../../../ui/components/Tooltip';\r\n\r\n//region Styles\r\nconst Container = styled.div`\r\n    position: relative;\r\n    height: 100%;\r\n`;\r\n\r\nconst SelectHead = styled.div<{ disabled?: boolean }>`\r\n    cursor: ${({ disabled }) => disabled ? 'default' : 'pointer'};\r\n    display: flex;\r\n    height: 100%;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    justify-content: center;\r\n`;\r\n\r\nconst SelectTitle = styled.div`\r\n    pointer-events: none;\r\n    font-size: 11px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: block;\r\n    align-items: center;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n    font-weight: 600;\r\n    margin-left: 15px;\r\n`;\r\n\r\nconst SelectLabelWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-start;\r\n    width: 100%;\r\n`;\r\n\r\nconst SelectLabel = styled.div<{ color?: string; disabled?: boolean }>`\r\n    pointer-events: none;\r\n    font-size: 13px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    color: ${props =>\r\n        props.disabled ? props.theme.Colors.lightBlueGray : props.color};\r\n    font-weight: 500;\r\n    margin-left: 15px;\r\n    margin-bottom: 1px;\r\n`;\r\n\r\n//endregion\r\n\r\nexport const SelectedUserLabels: FC<{\r\n    selectedLabels: number[];\r\n    onSelectLabels(labelIds?: number[]): void;\r\n    dataTest: string;\r\n}> = ({ selectedLabels, onSelectLabels, dataTest }) => {\r\n    const { saved } = useLabelsState();\r\n    const { data } = usePortableLabelsState();\r\n    const saveLabels = useSaveLabels();\r\n    const selectLabels = useSelectLabels();\r\n    const resetLabels = useResetLabels();\r\n\r\n    useEffect(() => {\r\n        selectLabels(selectedLabels);\r\n        saveLabels();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [selectLabels, saveLabels]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetLabels();\r\n        };\r\n    }, [resetLabels]);\r\n\r\n    useEffect(() => {\r\n        onSelectLabels(saved);\r\n    }, [onSelectLabels, saved]);\r\n\r\n    const labelsDisabled = !data || data.items.length < 1;\r\n    const selectedUserLabelsCount = selectedLabels.filter(id => id > 0).length;\r\n\r\n    return (\r\n        <Container>\r\n            <Popup<HTMLDivElement>\r\n                content={({ hide }) => (\r\n                    <AssignLabels\r\n                        onSuccessApply={() => {\r\n                            hide();\r\n                        }}\r\n                    />\r\n                )}\r\n                horizontalOffset={64}\r\n            >\r\n                {(ref, { toggleShown }) => (\r\n                    <span ref={ref}>\r\n                        <Tooltip\r\n                            label={'No labels added yet'}\r\n                            preset={'dropdown'}\r\n                            disabled={!labelsDisabled}\r\n                            dataTest={`${dataTest}-no-result`}\r\n                        >\r\n                            <SelectHead\r\n                                onClick={() => !labelsDisabled && toggleShown()}\r\n                                disabled={labelsDisabled}\r\n                                data-test={dataTest}\r\n                            >\r\n                                {!!selectedUserLabelsCount && (\r\n                                    <SelectTitle>Labels</SelectTitle>\r\n                                )}\r\n                                <SelectLabelWrapper>\r\n                                    <SelectLabel\r\n                                        color={\r\n                                            selectedUserLabelsCount < 1\r\n                                                ? Variables.Colors.cloudyBlue\r\n                                                : Variables.Colors.black\r\n                                        }\r\n                                        disabled={labelsDisabled}\r\n                                    >\r\n                                        {selectedUserLabelsCount < 1\r\n                                            ? 'Labels'\r\n                                            : `${selectedUserLabelsCount} ${\r\n                                                  selectedUserLabelsCount > 1\r\n                                                      ? 'Labels'\r\n                                                      : 'Label'\r\n                                              }`}\r\n                                    </SelectLabel>\r\n                                </SelectLabelWrapper>\r\n                            </SelectHead>\r\n                        </Tooltip>\r\n                    </span>\r\n                )}\r\n            </Popup>\r\n        </Container>\r\n    );\r\n};\r\n","import React, { FC, useCallback, useState } from 'react';\nimport { PractisSetWithDueDate } from '../../../constants/interfaces/Draft';\nimport styled from 'styled-components';\nimport { Button } from '../../../ui/components/Button';\nimport { Fieldset } from '../../../ui/components/Fieldset';\nimport { PortablePractisSetsWithStore } from '../index';\nimport { useSavePractisSets } from '../store/hors/withPractisSets/services';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nconst PractisSetsContainer = styled.div`\n    width: 348px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: flex-end;\n    justify-content: flex-end;\n    flex-shrink: 0;\n    margin-top: 16px;\n    width: 100%;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 16px;\n`;\n\nexport const AssignPractisSets: FC<{\n    onSuccessApply: () => void;\n}> = ({ onSuccessApply }) => {\n    const savePractisSets = useSavePractisSets();\n    const [, setPractisSetIds] = useState<PractisSetWithDueDate[]>([]);\n    const [applyDisabled, setApplyDisabled] = useState(true);\n\n    const onPractissetHandler = useCallback(\n        (ids: PractisSetWithDueDate[]) => {\n            setPractisSetIds(ids);\n            setApplyDisabled(false);\n        },\n        [setPractisSetIds]\n    );\n\n\n    const onApplyHandler = useCallback(() => {\n        savePractisSets();\n        onSuccessApply();\n    }, [onSuccessApply, savePractisSets]);\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset withoutBorder>\n                    <PractisSetsContainer>\n                        <PortablePractisSetsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                            onSetSelected={onPractissetHandler}\n                        />\n                    </PractisSetsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <ButtonWrapper>\n                    <Button\n                        width=\"96px\"\n                        action={() => onSuccessApply()}\n                        variant={'inverse'}\n                        dataTest=\"cancel-button\"\n                    >\n                        Cancel\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width=\"96px\"\n                    disabled={applyDisabled}\n                    action={() => onApplyHandler()}\n                    dataTest=\"apply-button\"\n                >\n                    Apply\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { FC, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Variables } from '../../../../theme/variables';\r\n\r\nimport {\r\n    useResetPractisSets,\r\n    useSavePractisSets,\r\n    useSelectMultiplePractisSets,\r\n} from '../../../../features/portablePractisSets/store/hors/withPractisSets/services';\r\nimport { AssignPractisSets } from '../../../../features/portablePractisSets/templates/AssignPractisSets';\r\nimport { usePractisSetsState } from '../../../../features/portablePractisSets/store/hors/withPractisSets/states';\r\nimport { usePortablePractisSetsState } from '../../../../features/portablePractisSets/store/states';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { Tooltip } from '../../../../ui/components/Tooltip';\r\nimport { PractisSetWithDueDate } from '../../../../constants/interfaces/Draft';\r\nimport { PractisSetStatuses } from '../../../../constants/interfaces/PractisSets';\r\n\r\n\r\nconst Container = styled.div`\r\n    position: relative;\r\n    height: 100%;\r\n`;\r\n\r\nconst SelectHead = styled.div<{ disabled?: boolean }>`\r\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\r\n    display: flex;\r\n    height: 100%;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    justify-content: center;\r\n`;\r\n\r\nconst SelectTitle = styled.div`\r\n    pointer-events: none;\r\n    font-size: 11px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: block;\r\n    align-items: center;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n    font-weight: 600;\r\n    margin-left: 15px;\r\n`;\r\n\r\nconst SelectButtonWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-start;\r\n    width: 100%;\r\n`;\r\n\r\nconst SelectLabel = styled.div<{ color?: string; disabled?: boolean }>`\r\n    pointer-events: none;\r\n    font-size: 13px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    color: ${props =>\r\n        props.disabled ? props.theme.Colors.lightBlueGray : props.color};\r\n    font-weight: 500;\r\n    margin-left: 15px;\r\n    margin-bottom: 1px;\r\n`;\r\n\r\nconst SelectedUserPractisSetsComponent: FC<{\r\n    selectedPractisSets: PractisSetWithDueDate[];\r\n    onSelectPractisSets(practisSetIds?: PractisSetWithDueDate[]): void;\r\n    dataTest: string;\r\n}> = ({ selectedPractisSets, onSelectPractisSets, dataTest }) => {\r\n    const { saved } = usePractisSetsState();\r\n    const { data } = usePortablePractisSetsState();\r\n    const savePractisSets = useSavePractisSets();\r\n    const selectMultiplePractisSets = useSelectMultiplePractisSets();\r\n    const resetPractisSets = useResetPractisSets();\r\n\r\n    useEffect(() => {\r\n        selectMultiplePractisSets(selectedPractisSets);\r\n        savePractisSets();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [selectMultiplePractisSets]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetPractisSets();\r\n        };\r\n    }, [resetPractisSets]);\r\n\r\n    useEffect(() => {\r\n        onSelectPractisSets(saved);\r\n    }, [onSelectPractisSets, saved]);\r\n\r\n    const practisSetsDisabled = !data || data.items.filter(item => item.status === PractisSetStatuses.ACTIVE).length < 1;\r\n\r\n    return (\r\n        <Container>\r\n            <Popup<HTMLDivElement>\r\n                content={({ hide }) => (\r\n                    <AssignPractisSets\r\n                        onSuccessApply={() => {\r\n                            hide();\r\n                        }}\r\n                    />\r\n                )}\r\n            >\r\n                {(ref, { toggleShown }) => (\r\n                    <span ref={ref}>\r\n                        <Tooltip\r\n                            label={'No practis sets added yet'}\r\n                            preset={'table-item'}\r\n                            disabled={!practisSetsDisabled}\r\n                            dataTest={`${dataTest}-no-result`}\r\n                        >\r\n                            <SelectHead\r\n                                onClick={() =>\r\n                                    !practisSetsDisabled && toggleShown()\r\n                                }\r\n                                disabled={practisSetsDisabled}\r\n                                data-test={dataTest}\r\n                            >\r\n                                {selectedPractisSets &&\r\n                                    !!selectedPractisSets.length && (\r\n                                        <SelectTitle>Practis Sets</SelectTitle>\r\n                                    )}\r\n                                <SelectButtonWrapper>\r\n                                    <SelectLabel\r\n                                        color={\r\n                                            selectedPractisSets.length < 1\r\n                                                ? Variables.Colors.cloudyBlue\r\n                                                : Variables.Colors.black\r\n                                        }\r\n                                        disabled={practisSetsDisabled}\r\n                                    >\r\n                                        {selectedPractisSets.length < 1\r\n                                            ? 'Practis Sets'\r\n                                            : `${selectedPractisSets.length} ${\r\n                                                  selectedPractisSets.length > 1\r\n                                                      ? 'Practis Sets'\r\n                                                      : 'Practis Set'\r\n                                              }`}\r\n                                    </SelectLabel>\r\n                                </SelectButtonWrapper>\r\n                            </SelectHead>\r\n                        </Tooltip>\r\n                    </span>\r\n                )}\r\n            </Popup>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default SelectedUserPractisSetsComponent;\r\n","import { createContext } from 'react';\n\nimport { AppState } from '../../../../../../store/reducers';\nimport { DEFAULT_TEAMS_SCOPE, Scope } from '../scopes';\n\nexport type WithTeamsContextProps<T = keyof AppState, K = Scope> = {\n    reducerName?: T;\n    scope?: K;\n};\n\nexport const WithTeamsContext = createContext<WithTeamsContextProps>({\n    reducerName: 'portableTeams',\n    scope: DEFAULT_TEAMS_SCOPE,\n});\n","import { useContext } from 'react';\n\nimport { WithTeamsContextProps, WithTeamsContext } from './context';\n\nexport const useWithTeamsContext = (): WithTeamsContextProps => {\n    const context = useContext(WithTeamsContext);\n\n    if (!context) {\n        throw new Error(\n            'Cannot find WithTeams context provider. Please make a sure that you are located on the children of WithTeamsProvider'\n        );\n    }\n    return context;\n};\n","import { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\n\nimport { useWithTeamsContext } from '../context/useWithTeamsContext';\nimport { encapsulateAction } from '../../../../../../store/helpers/encapsulateAction';\nimport { ActionTeam } from '../actions';\nimport { DEFAULT_TEAMS_SCOPE, Scope, WithTeamsScopes } from '../scopes';\n\nexport const useEncapsulatedDispatch = () => {\n    const dispatch = useDispatch();\n    const { reducerName, scope } = useWithTeamsContext();\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithTeamsContext.Provider props'\n        );\n    }\n\n    const targetScope = (scope || DEFAULT_TEAMS_SCOPE) as Scope;\n    if (\n        targetScope !== DEFAULT_TEAMS_SCOPE &&\n        !WithTeamsScopes[reducerName]?.includes(targetScope)\n    ) {\n        throw new Error(\n            `Undefined \"${targetScope}\" scope of portableTeams. Please check config (WithTeamsScopes) for \"${reducerName}\" reducer`\n        );\n    }\n\n    return useCallback(\n        <T extends ActionTeam>(action: T) => {\n            action._scope = targetScope;\n            dispatch(encapsulateAction(`${reducerName}/teams/`, action));\n        },\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [dispatch]\n    );\n};\n","import { useCallback } from 'react';\r\n\r\nimport { useSearchTeamsApi } from './api';\r\nimport {\r\n    clearAction,\r\n    saveAction,\r\n    searchFailureAction,\r\n    searchSuccessAction,\r\n    selectAllAction,\r\n    deselectAllAction,\r\n    selectTeamsAction,\r\n    searchStartAction,\r\n    resetSelectedAction,\r\n    resetAction,\r\n    selectMultipleTeamsAction,\r\n} from './actions';\r\n\r\nimport { useEncapsulatedDispatch } from './helpers/useEncapsulatedDispatch';\r\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\r\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\r\nimport { useDispatch } from 'react-redux';\r\nimport { NOT_AUTHORIZED_ERROR_MESSAGE } from '../../../../../ui/components/ErrorMessages/constants';\r\n\r\nexport const useSearchTeamsService = () => {\r\n    const dispatch = useDispatch();\r\n    const showMessage = useShowMessage();\r\n    const searchTeams = useSearchTeamsApi();\r\n\r\n    return useCallback(\r\n        (sp?: SearchParams) => {\r\n            dispatch(searchStartAction());\r\n\r\n            return searchTeams(sp)\r\n                .then(data => {\r\n                    dispatch(searchSuccessAction(data));\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchFailureAction(error.message));\r\n                    error?.message !== NOT_AUTHORIZED_ERROR_MESSAGE &&\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, showMessage, searchTeams]\r\n    );\r\n};\r\n\r\nexport const useClearTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(clearAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSaveTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(saveAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useSelectTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n    return useCallback(\r\n        (ids: number) => {\r\n            dispatch(selectTeamsAction(ids));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSelectMultipleTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n    return useCallback(\r\n        (ids: number[]) => {\r\n            dispatch(selectMultipleTeamsAction(ids));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useSelectAllTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(\r\n        (processedTeams: number[]) => {\r\n            dispatch(selectAllAction(processedTeams));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useDeselectAllTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(deselectAllAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useResetSelectedTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(resetSelectedAction());\r\n    }, [dispatch]);\r\n};\r\n\r\nexport const useResetTeams = () => {\r\n    const dispatch = useEncapsulatedDispatch();\r\n\r\n    return useCallback(() => {\r\n        dispatch(resetAction());\r\n    }, [dispatch]);\r\n};\r\n","import { useCallback } from 'react';\n\nimport { useHttp } from '../../../../../tools/http/Http';\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { TeamBasic } from '../../../../../constants/interfaces/TeamBasic';\n\nexport const useSearchTeamsApi = () => {\n    const http = useHttp();\n    return useCallback(\n        (sp?: SearchParams): Promise<PaginationResult<TeamBasic>> =>\n            http.post('teams/search/basic', sp),\n        [http]\n    );\n};\n","import { Action } from 'redux';\r\n\r\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\r\nimport { Scope } from './scopes';\r\nimport { TeamBasic } from '../../../../../constants/interfaces/TeamBasic';\r\n\r\n//region Types\r\ntype ReturnTypeTeamAction<T extends (...args: any) => any> = ReturnType<T> &\r\n    ActionPayload;\r\n\r\ntype ActionPayload = { _scope?: Scope };\r\n\r\nexport type ActionTeam<T = any> = Action<T> & ActionPayload;\r\n\r\nexport type Actions =\r\n    | ReturnTypeTeamAction<typeof selectAllAction>\r\n    | ReturnTypeTeamAction<typeof deselectAllAction>\r\n    | ReturnTypeTeamAction<typeof resetSelectedAction>\r\n    | ReturnTypeTeamAction<typeof selectTeamsAction>\r\n    | ReturnTypeTeamAction<typeof selectMultipleTeamsAction>\r\n    | ReturnTypeTeamAction<typeof clearAction>\r\n    | ReturnTypeTeamAction<typeof saveAction>\r\n    | ReturnTypeTeamAction<typeof resetAction>;\r\n\r\n//endregion\r\n\r\nexport const searchStartAction = (): ActionTeam<'searchStartTeams'> => ({\r\n    type: 'searchStartTeams',\r\n});\r\n\r\nexport const searchSuccessAction = (\r\n    result: PaginationResult<TeamBasic>\r\n): ActionTeam<'searchSuccessTeams'> & {\r\n    result: PaginationResult<TeamBasic>;\r\n} => ({\r\n    type: 'searchSuccessTeams',\r\n    result,\r\n});\r\n\r\nexport const searchFailureAction = (\r\n    message: string\r\n): ActionTeam<'searchFailureTeams'> & { message: string } => ({\r\n    type: 'searchFailureTeams',\r\n    message,\r\n});\r\n\r\nexport const selectAllAction = (\r\n    allTeams: number[]\r\n): ActionTeam<'selectAllTeams'> & { allTeams: number[] } => ({\r\n    type: 'selectAllTeams',\r\n    allTeams,\r\n});\r\n\r\nexport const deselectAllAction = (): ActionTeam<'deselectAllTeams'> => ({\r\n    type: 'deselectAllTeams',\r\n});\r\n\r\nexport const resetSelectedAction = (): ActionTeam<'resetSelectedTeams'> => ({\r\n    type: 'resetSelectedTeams',\r\n});\r\n\r\nexport const selectTeamsAction = (\r\n    id: number\r\n): ActionTeam<'selectTeams'> & { id: number } => ({\r\n    type: 'selectTeams',\r\n    id,\r\n});\r\n\r\nexport const selectMultipleTeamsAction = (\r\n    ids: number[]\r\n): ActionTeam<'selectMultipleTeams'> & { ids: number[] } => ({\r\n    type: 'selectMultipleTeams',\r\n    ids,\r\n});\r\n\r\nexport const clearAction = (): ActionTeam<'clearTeams'> => ({\r\n    type: 'clearTeams',\r\n});\r\n\r\nexport const saveAction = (): ActionTeam<'saveTeams'> => ({\r\n    type: 'saveTeams',\r\n});\r\n\r\nexport const resetAction = (): ActionTeam<'resetTeams'> => ({\r\n    type: 'resetTeams',\r\n});\r\n","import { useSelector } from 'react-redux';\n\nimport { useWithTeamsContext } from './context/useWithTeamsContext';\nimport { TeamsState } from './reducer';\nimport { DEFAULT_LABELS_SCOPE } from '../../../../portableLabels/store/hors/withLabels/scopes';\n\nexport const useTeamsState = (): TeamsState => {\n    const { reducerName, scope } = useWithTeamsContext();\n    const appState = useSelector(state => state);\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithTeamsContext.Provider props'\n        );\n    }\n\n    const labelsState: TeamsState | undefined =\n        // @ts-ignore\n        // TODO implement `_teams?: TeamsState` field into each reducer (create general type)\n        // interface GeneralReducer {\n        //     ...\n        //     _teams?: StateWithTeams;\n        // }\n        appState[reducerName]?._teams?.[scope || DEFAULT_LABELS_SCOPE];\n    if (!labelsState) {\n        throw new Error(\n            `Wrap your reducer ${reducerName} via \"withTeamsReducer\" HOR`\n        );\n    }\n\n    return labelsState;\n};\n","import React, { FC, useCallback } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport Checkbox from '../../../ui/components/Checkbox';\r\nimport { TeamBasic } from '../../../constants/interfaces/TeamBasic';\r\nimport { handleToggleSelectedItems } from '../../../pages/ActionPages/NewUser/tools';\r\nimport { Tooltip } from '../../../ui/components/Tooltip';\r\nimport Star from '../../../ui/icons/Star';\r\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\r\n\r\nconst StyledTeamsList = styled.div`\r\n    overflow: auto;\r\n    height: 100%;\r\n`;\r\n\r\nconst TopSideList = styled.span``;\r\n\r\nconst GeneralList = styled.span``;\r\n\r\nconst TeamsItemWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    margin: 10px 0;\r\n`;\r\n\r\nconst DefaultTeamIconHolderWrapper = styled.div`\r\n    width: 12px;\r\n    display: flex;\r\n    justify-content: center;\r\n    border-radius: 2px;\r\n    background-color: ${props => props.theme.Colors.macaroniAndCheese};\r\n`;\r\n\r\nconst DefaultTeamIconHolder = styled.div`\r\n    width: 10px;\r\n    height: 12px;\r\n    display: block;\r\n    color: ${props => props.theme.Colors.white};\r\n`;\r\n\r\nconst TeamsItem = styled.div<{ disabled?: boolean }>`\r\n    color: ${props => props.theme.Colors.black};\r\n    cursor: ${props => props.disabled ? `default` : `pointer`};\r\n    border-radius: 8px;\r\n    font-weight: 500;\r\n    font-size: 13px;\r\n    padding: 0 12px;\r\n    align-items: center;\r\n    background: ${props => props.theme.Colors.white};\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    display: inline-block;\r\n    ${props => props.disabled && 'pointer-events: none'}\r\n    &:active {\r\n        opacity: 0.7;\r\n    }\r\n`;\r\nexport const PortableTeamsList: FC<{\r\n    teams?: TeamBasic[];\r\n    selectedTeams: number[];\r\n    disabled?: boolean;\r\n    showDefaultMembers?: boolean\r\n    setTeamFilters?: (teamIds: number[]) => void;\r\n}> = ({ teams, selectedTeams, showDefaultMembers, setTeamFilters  }) => {\r\n    const isChecked = useCallback(\r\n        (setId?: number) => {\r\n            return !!selectedTeams && !!setId && selectedTeams.includes(setId);\r\n        },\r\n        [selectedTeams]\r\n    );\r\n\r\n    const isPartiallyChecked = useCallback(\r\n        (teamId?: number) => {\r\n            return (\r\n                !!selectedTeams &&\r\n                !!teamId &&\r\n                selectedTeams.includes(-Number(teamId))\r\n            );\r\n        },\r\n        [selectedTeams]\r\n    );\r\n\r\n    const changeHandler = (teamId?: number) => {\r\n        if (teamId && setTeamFilters) {\r\n            setTeamFilters(handleToggleSelectedItems(selectedTeams, teamId));\r\n        }\r\n    };\r\n\r\n    if (!teams || (teams && teams.length === 0)) return null;\r\n\r\n    const topListTeams = teams.filter(\r\n        team => team.isDefault || (team.id && selectedTeams.map(id => Math.abs(id)).includes(team.id))\r\n    );\r\n\r\n    const bottomListTeams = teams.filter(\r\n        team => !team.isDefault && team.id && !selectedTeams.map(id => Math.abs(id)).includes(team.id)\r\n    );\r\n\r\n    const processedTopListTeams = showDefaultMembers ? topListTeams.filter(team => !team.isDefault) : topListTeams;\r\n\r\n    return (\r\n        <StyledTeamsList>\r\n            {topListTeams.length > 0 && (\r\n                <TopSideList>\r\n                    {showDefaultMembers &&\r\n                        topListTeams\r\n                            .filter(team => team.isDefault)\r\n                            .map(team => (\r\n                                <TeamsItemWrapper\r\n                                    key={team.id}\r\n                                    data-test=\"all-members-container\"\r\n                                >\r\n                                    <Tooltip\r\n                                        label=\"This team cannot be modified\"\r\n                                        preset=\"checkbox-icon\"\r\n                                    >\r\n                                        <DefaultTeamIconHolderWrapper data-test=\"all-members-icon\">\r\n                                            <DefaultTeamIconHolder>\r\n                                                <Star viewBox=\"-1 1 10 12\" />\r\n                                            </DefaultTeamIconHolder>\r\n                                        </DefaultTeamIconHolderWrapper>\r\n                                    </Tooltip>\r\n                                    <TeamsItem\r\n                                        disabled\r\n                                        data-test=\"all-members-item\"\r\n                                    >\r\n                                        {team.name}\r\n                                    </TeamsItem>\r\n                                </TeamsItemWrapper>\r\n                            ))}\r\n                    {processedTopListTeams.map(team => {\r\n                        return (\r\n                            <TeamsItemWrapper\r\n                                key={team.id}\r\n                                data-test=\"team-item-container\"\r\n                            >\r\n                                <Checkbox\r\n                                    size={12}\r\n                                    checked={\r\n                                        isChecked(team.id) ||\r\n                                        isPartiallyChecked(team.id)\r\n                                    }\r\n                                    partial={isPartiallyChecked(team.id)}\r\n                                    handleChange={() => changeHandler(team.id)}\r\n                                    dataTest=\"team-item-checkbox\"\r\n                                />\r\n                                <TeamsItem\r\n                                    onClick={() => changeHandler(team.id)}\r\n                                    data-test=\"team-item-title\"\r\n                                >\r\n                                    {team.name}\r\n                                </TeamsItem>\r\n                            </TeamsItemWrapper>\r\n                        );\r\n                    })}\r\n                    {topListTeams.length < teams.length && <TableDivider width=\"98%\" />}\r\n                </TopSideList>\r\n            )}\r\n            <GeneralList>\r\n                {bottomListTeams.map(team => {\r\n                    return (\r\n                        <TeamsItemWrapper\r\n                            key={team.id}\r\n                            data-test=\"team-item-container\"\r\n                        >\r\n                            <Checkbox\r\n                                size={12}\r\n                                checked={\r\n                                    isChecked(team.id) ||\r\n                                    isPartiallyChecked(team.id)\r\n                                }\r\n                                partial={isPartiallyChecked(team.id)}\r\n                                handleChange={() => changeHandler(team.id)}\r\n                                dataTest=\"team-item-checkbox\"\r\n                            />\r\n                            <TeamsItem\r\n                                onClick={() => changeHandler(team.id)}\r\n                                data-test=\"team-item-title\"\r\n                            >\r\n                                {team.name}\r\n                            </TeamsItem>\r\n                        </TeamsItemWrapper>\r\n                    );\r\n                })}\r\n            </GeneralList>\r\n        </StyledTeamsList>\r\n    );\r\n};","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport EmptyBox from '../../../ui/icons/EmptyBox';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\nimport NoSearchResult from '../../../ui/icons/NoSearchResult';\n\nconst StyledEmptyLabels = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst StyledEmptyLabelsContent = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst IconWrapper = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoTeamsTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst EmptyTeams: FC<{ loading?: boolean; isEmpty?: boolean }> = ({\n    loading,\n    isEmpty,\n}) => {\n    if (loading) {\n        return (\n            <StyledEmptyLabels>\n                <Loading />\n            </StyledEmptyLabels>\n        );\n    }\n\n    return (\n        <StyledEmptyLabels>\n            <StyledEmptyLabelsContent>\n                <IconWrapper data-test=\"teams-searchbox-empty-result-icon\">\n                    {isEmpty ? <EmptyBox /> : <NoSearchResult />}\n                </IconWrapper>\n                <NoTeamsTitle data-test=\"teams-searchbox-empty-result-label\">\n                    {isEmpty ? 'No Teams yet' : 'No Teams found'}\n                </NoTeamsTitle>\n            </StyledEmptyLabelsContent>\n        </StyledEmptyLabels>\n    );\n};\n\nexport default EmptyTeams;\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { PaginationResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { TeamBasic } from '../../../constants/interfaces/TeamBasic';\r\nimport { PortableTeamsList } from './PortableTeamsList';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { Variables } from '../../../theme/variables';\r\nimport EmptyTeams from './EmptyTeams';\r\nimport { sortBy } from 'lodash';\r\nimport { TableSearchInput } from '../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\n//region Types\r\ntype Action = 'clear' | 'select';\r\n\r\nexport type PortableTeamsProps = {\r\n    teams?: PaginationResult<TeamBasic>;\r\n    selectedList: number[];\r\n    onSave?: () => void;\r\n    onSelectAll?: (processedTeams: number[]) => void;\r\n    onDeselectAll?: () => void;\r\n    onClearSelected?: () => void;\r\n    onSetSelected?: (teamIds: number[]) => void;\r\n    filtersTitle?: string;\r\n    disabled?: boolean;\r\n    loading?: boolean;\r\n    showSelectActions?: boolean;\r\n    showSearch?: boolean;\r\n    showSave?: boolean;\r\n    showDefaultMembers?: boolean;\r\n};\r\n//endregion\r\n\r\n//region Styles\r\nconst StyledCreateTeams = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst CreateTeamsBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst FiltersHeader = styled.div`\r\n    padding: 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    height: 24px;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst FiltersSavePanel = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst FilterTitle = styled.p`\r\n    margin: 0;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.black};\r\n    font-weight: 600;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n\r\nconst StyledPlainActionsWrapper = styled.div`\r\n    padding-right: 15px;\r\n`;\r\n//endregion\r\n\r\nconst PortableTeams: FC<PortableTeamsProps> = ({\r\n    teams,\r\n    selectedList,\r\n    disabled,\r\n    loading,\r\n    onSave,\r\n    onClearSelected,\r\n    onDeselectAll,\r\n    onSelectAll,\r\n    onSetSelected,\r\n    filtersTitle,\r\n    showSelectActions,\r\n    showSearch,\r\n    showDefaultMembers,\r\n    showSave = true,\r\n}) => {\r\n    const actionConfig: Record<\r\n        Action,\r\n        {\r\n            color: string;\r\n            colorHover: string;\r\n            colorActive: string;\r\n        }\r\n    > = {\r\n        clear: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n        select: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n    };\r\n\r\n    const clearHandler = useCallback(() => {\r\n        onClearSelected?.();\r\n    }, [onClearSelected]);\r\n\r\n    const [processedSelectedList, setProcessedSelectedList] = useState<\r\n        number[]\r\n    >([]);\r\n\r\n    const [searchTerm, setSearchTerm] = useState<string | undefined>(undefined);\r\n    const searchHandler = (value: string) => setSearchTerm(value);\r\n    const [, setAllSelected] = useState<boolean>(false);\r\n    const defaultTeam = teams?.items.find(item => item.isDefault);\r\n    const hasAllMembers = !!defaultTeam;\r\n    \r\n    const processedTeams = useMemo(() => {\r\n        let result = teams?.items || [];\r\n        if (!!searchTerm) {\r\n            result = result.filter(\r\n                item =>\r\n                    item.name\r\n                        .toLowerCase()\r\n                        .indexOf(searchTerm.toLowerCase()) !== -1\r\n            );\r\n        }\r\n        if (result.length > 0) {\r\n            result = sortBy(result, t => t.isDefault ? '' : t.name?.toLowerCase());\r\n            const processedDataIds = result.map(item => item.id!);\r\n        \r\n            setProcessedSelectedList(\r\n                selectedList.filter(item =>\r\n                    processedDataIds.includes(Math.abs(item))\r\n                )\r\n            );\r\n        }\r\n        return result;\r\n    }, [teams?.items, searchTerm, selectedList]);\r\n\r\n    const isAllSelected = useMemo(\r\n        () =>\r\n            selectedList.length === teams?.items?.length &&\r\n            !(teams?.items.length === 1 && hasAllMembers),\r\n        [selectedList.length, teams?.items.length, hasAllMembers]\r\n    );\r\n\r\n    //TODO: [MM]: Refactor: Use `deSelectAllHandler` either for both `Select All` and `Unselect All` buttons and delete `clearHandler`\r\n    //or rename confusing `deSelectAllHandler` to `handleClickSelectAll` and get rid of `if (isAllSelected && onDeselectAll` statement.\r\n    const toggleAllHandler = useCallback(() => {\r\n        if (isAllSelected && onDeselectAll) {\r\n            onDeselectAll();\r\n            setAllSelected(false)\r\n        } else if (onSelectAll) {\r\n            setAllSelected(true)\r\n            onSelectAll(processedTeams.map(item => item.id!));\r\n        }\r\n    }, [onDeselectAll, onSelectAll, isAllSelected, processedTeams]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            !!searchTerm &&\r\n            processedSelectedList.length !== selectedList.length\r\n        ) {\r\n            // toggleAllHandler();\r\n        }\r\n    }, [searchTerm, processedSelectedList, selectedList, processedTeams]);\r\n\r\n    const showNoItems = !teams?.totalCount;\r\n    const showEmptyState = !processedTeams.length || loading;\r\n    const selectedTeamsLength = selectedList?.filter(\r\n        id => id > 0 && id !== defaultTeam?.id)?.length;\r\n\r\n    return (\r\n        <StyledCreateTeams>\r\n            <CreateTeamsBody>\r\n                {filtersTitle && (\r\n                    <FiltersHeader>\r\n                        <FilterTitle>{filtersTitle}</FilterTitle>\r\n                    </FiltersHeader>\r\n                )}\r\n                {showSearch && (\r\n                    <SearchWrapper data-test=\"teams-searchbox-wrapper\">\r\n                        <TableSearchInput\r\n                            onChange={searchHandler}\r\n                            disabled={showNoItems}\r\n                            dataTest=\"teams-searchbox-field\"\r\n                        />\r\n                    </SearchWrapper>\r\n                )}\r\n                {showSelectActions && !showNoItems && (\r\n                    <SelectActions>\r\n                        <div>\r\n                            <SelectedCaption data-test=\"teams-selected-caption\">\r\n                                {selectedTeamsLength > 0\r\n                                    ? `${selectedTeamsLength} ${\r\n                                          selectedTeamsLength > 1\r\n                                              ? ' Teams selected'\r\n                                              : ' Team selected'\r\n                                      }`\r\n                                    : 'No Teams selected'}\r\n                            </SelectedCaption>\r\n                        </div>\r\n                        <StyledPlainActionsWrapper>\r\n                            {isAllSelected ? (\r\n                                <PlainAction\r\n                                    disabled={\r\n                                        selectedList.length === 0 ||\r\n                                        showEmptyState ||\r\n                                        (processedTeams.length < 1 &&\r\n                                            hasAllMembers)\r\n                                    }\r\n                                    color={actionConfig.clear.color}\r\n                                    colorActive={actionConfig.clear.colorActive}\r\n                                    colorHover={actionConfig.clear.colorHover}\r\n                                    onClick={clearHandler}\r\n                                    data-test=\"teams-unselect-all-button\"\r\n                                >\r\n                                    Unselect All\r\n                                </PlainAction>\r\n                            ) : (\r\n                                <PlainAction\r\n                                    disabled={\r\n                                        showEmptyState ||\r\n                                        (processedTeams.length === 1 &&\r\n                                            hasAllMembers &&\r\n                                            !searchTerm)\r\n                                    }\r\n                                    color={actionConfig.select.color}\r\n                                    colorActive={\r\n                                        actionConfig.select.colorActive\r\n                                    }\r\n                                    colorHover={actionConfig.select.colorHover}\r\n                                    onClick={toggleAllHandler}\r\n                                    data-test=\"teams-select-all-button\"\r\n                                >\r\n                                    Select All\r\n                                </PlainAction>\r\n                            )}\r\n                        </StyledPlainActionsWrapper>\r\n                    </SelectActions>\r\n                )}\r\n                {showEmptyState ? (\r\n                    <EmptyTeams\r\n                        loading={loading}\r\n                        isEmpty={!teams?.totalCount}\r\n                    />\r\n                ) : (\r\n                    <>\r\n                        <PortableTeamsList\r\n                            showDefaultMembers={showDefaultMembers}\r\n                            teams={processedTeams}\r\n                            selectedTeams={selectedList}\r\n                            disabled={disabled}\r\n                            setTeamFilters={onSetSelected}\r\n                        />\r\n                        {onSave && showSave && (\r\n                            <FiltersSavePanel>\r\n                                <Button\r\n                                    type={'button'}\r\n                                    label={'Save'}\r\n                                    action={() => onSave()}\r\n                                    height={'48px'}\r\n                                    width={'160px'}\r\n                                />\r\n                            </FiltersSavePanel>\r\n                        )}\r\n                    </>\r\n                )}\r\n            </CreateTeamsBody>\r\n        </StyledCreateTeams>\r\n    );\r\n};\r\n\r\nexport { PortableTeams };\r\n","import { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { TeamBasic } from '../../../constants/interfaces/TeamBasic';\nimport { useSelector } from 'react-redux';\n\ntype PortableTeamsBaseState = {\n    data: PaginationResult<TeamBasic>;\n    loading: boolean;\n};\n\nexport type PortableTeamsState = PortableTeamsBaseState;\n\nexport const initialState = {\n    data: {\n        items: [],\n        limit: 0,\n        offset: 0,\n        numberOfPages: 0,\n        totalCount: 0,\n        lastUpdated: undefined,\n    },\n    loading: false,\n};\n\nexport const usePortableTeamsState = (): PortableTeamsBaseState => {\n    const appState = useSelector(state => state);\n    return appState.portableTeams;\n};\n","import React, { FC, useEffect } from 'react';\r\n\r\nimport {\r\n    useClearTeams,\r\n    useDeselectAllTeams,\r\n    useResetSelectedTeams,\r\n    useSaveTeams,\r\n    useSearchTeamsService,\r\n    useSelectAllTeams,\r\n    useSelectMultipleTeams,\r\n} from '../store/hors/withTeams/services';\r\nimport { useTeamsState } from '../store/hors/withTeams/states';\r\nimport { PortableTeams, PortableTeamsProps } from './PortableTeams';\r\nimport { usePortableTeamsState } from '../store/states';\r\n\r\ntype Props = Pick<\r\n    PortableTeamsProps,\r\n    | 'filtersTitle'\r\n    | 'onSetSelected'\r\n    | 'showSelectActions'\r\n    | 'showSearch'\r\n    | 'showSave'\r\n> & {\r\n    fetchOnMount?: boolean;\r\n    resetSelectedOnUnmount?: boolean;\r\n    showDefaultMembers?: boolean;\r\n    selectedTeams?: number[];\r\n};\r\n\r\nexport const PortableTeamsWithStore: FC<Props> = ({\r\n    onSetSelected,\r\n    selectedTeams,\r\n    fetchOnMount = true,\r\n    resetSelectedOnUnmount = true,\r\n    showDefaultMembers,\r\n    ...rest\r\n}) => {\r\n    const search = useSearchTeamsService();\r\n    const { selected } = useTeamsState();\r\n    const { data, loading } = usePortableTeamsState();\r\n    const clearHandler = useClearTeams();\r\n    const saveHandler = useSaveTeams();\r\n    const select = useSelectMultipleTeams();\r\n    const selectAll = useSelectAllTeams();\r\n    const deselectAll = useDeselectAllTeams();\r\n    const resetSelected = useResetSelectedTeams();\r\n\r\n    useEffect(() => {\r\n        if (fetchOnMount) {\r\n            search();\r\n        }\r\n\r\n        return () => {\r\n            if (resetSelectedOnUnmount) {\r\n                resetSelected();\r\n            }\r\n        };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (selectedTeams) {\r\n            selectAll(selectedTeams);\r\n        }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n        <PortableTeams\r\n            teams={data}\r\n            selectedList={selected}\r\n            loading={loading}\r\n            onClearSelected={() => {\r\n                onSetSelected && onSetSelected([]);\r\n                clearHandler();\r\n            }}\r\n            onSave={saveHandler}\r\n            onSetSelected={(team) => { \r\n                onSetSelected && onSetSelected(team);\r\n                select(team);\r\n             }}\r\n            showDefaultMembers={showDefaultMembers}\r\n            onSelectAll={(teams) => { \r\n                onSetSelected && onSetSelected(teams);\r\n                selectAll(teams);\r\n             }}\r\n            onDeselectAll={deselectAll}\r\n            {...rest}\r\n        />\r\n    );\r\n};\r\n","import React, { FC, useCallback } from 'react';\r\nimport { PortableTeams } from './PortableTeams';\r\nimport { usePortableTeamsState } from '../store/states';\r\n\r\ninterface Props {\r\n    selectedTeams: number[];\r\n    showDefaultMembers?: boolean\r\n    onChangeSelectedTeams(teamIds: number[]): void;\r\n}\r\n\r\nexport const PortableTeamsWithStore2: FC<Props> = props => {\r\n    const { selectedTeams, showDefaultMembers, onChangeSelectedTeams } = props;\r\n    const { data, loading } = usePortableTeamsState();\r\n\r\n    const handleSelectAll = useCallback(\r\n        () => onChangeSelectedTeams(data?.items.map(t => t.id!)),\r\n        [data?.items, onChangeSelectedTeams]\r\n    );\r\n\r\n    const handleDeselectAll = useCallback(\r\n        () => onChangeSelectedTeams([]),\r\n        [onChangeSelectedTeams]\r\n    );\r\n\r\n    return (\r\n        <PortableTeams\r\n            showDefaultMembers={showDefaultMembers}\r\n            teams={data}\r\n            selectedList={selectedTeams}\r\n            loading={loading}\r\n            showSave={false}\r\n            showSelectActions={true}\r\n            showSearch={true}\r\n            onSetSelected={onChangeSelectedTeams}\r\n            onSelectAll={handleSelectAll}\r\n            onClearSelected={handleDeselectAll} //nice interface! :(\r\n        />\r\n    );\r\n};\r\n","import React, { FC, useCallback, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { Fieldset } from '../../../ui/components/Fieldset';\r\nimport { PortableTeamsWithStore } from '../index';\r\nimport {\r\n    useSaveTeams,\r\n    useSelectMultipleTeams,\r\n} from '../store/hors/withTeams/services';\r\nimport { usePortableTeamsState } from '../store/states';\r\nimport { useTeamsState } from '../store/hors/withTeams/states';\r\nimport { useParams } from 'react-router';\r\n\r\n\r\nconst Container = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n    display: flex;\r\n    gap: 16px;\r\n    max-height: 416px;\r\n    flex-grow: 1;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst TeamsContainer = styled.div`\r\n    width: 264px;\r\n    height: 100%;\r\n    overflow: auto;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Actions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-end;\r\n    flex-shrink: 0;\r\n    margin-top: 16px;\r\n    width: 100%;\r\n`;\r\n\r\nexport const AssignTeams: FC<{\r\n    onSuccessApply: (teamIds: number[]) => void;\r\n    onCancel: () => void;\r\n    selectedTeams?: number[];\r\n}> = ({ onSuccessApply, onCancel, selectedTeams }) => {\r\n    const params: any = useParams();\r\n\r\n    const teams = useTeamsState();\r\n    const saveTeams = useSaveTeams();\r\n    const selectMultipleTeams = useSelectMultipleTeams();\r\n    const { data: initialTeams } = usePortableTeamsState();\r\n    const [, setTeamIds] = useState<number[]>(teams.selected);\r\n    const [applyDisabled, setApplyDisabled] = useState(true);\r\n\r\n    const hasAllMembers = initialTeams.items.some(item => item.isDefault);\r\n\r\n    const onApplyHandler = useCallback(() => {\r\n        selectMultipleTeams(teams.selected);\r\n        if (params.draftId) {\r\n            saveTeams();\r\n        }\r\n        onSuccessApply(teams.selected);\r\n    }, [\r\n        onSuccessApply,\r\n        params.draftId,\r\n        saveTeams,\r\n        selectMultipleTeams,\r\n        teams.selected,\r\n    ]); \r\n\r\n    const onTeamChangeHandler = useCallback(\r\n        (ids: number[]) => {\r\n          if(!(initialTeams.totalCount < 1 && hasAllMembers) ){\r\n            setTeamIds(ids);\r\n            setApplyDisabled(false);\r\n          }\r\n        },\r\n        [hasAllMembers, initialTeams.totalCount]\r\n    );\r\n\r\n\r\n\r\n    return (\r\n        <Container>\r\n            <Wrapper>\r\n                <Fieldset withoutBorder>\r\n                    <TeamsContainer>\r\n                        <PortableTeamsWithStore\r\n                            showSave={false}\r\n                            fetchOnMount={false}\r\n                            showSelectActions\r\n                            showSearch\r\n                            selectedTeams={selectedTeams}\r\n                            onSetSelected={onTeamChangeHandler}\r\n                            showDefaultMembers={true}\r\n                        />\r\n                    </TeamsContainer>\r\n                </Fieldset>\r\n            </Wrapper>\r\n            <Actions>\r\n                <Button\r\n                    width={'96px'}\r\n                    action={() => onCancel()}\r\n                    variant={'inverse'}\r\n                    dataTest='cancel-button'\r\n                >\r\n                    Cancel\r\n                </Button>\r\n                <Button\r\n                    disabled={applyDisabled}\r\n                    style={{ marginLeft: 16 }}\r\n                    width={'96px'}\r\n                    action={() => onApplyHandler()}\r\n                    dataTest='apply-button'\r\n                >\r\n                    Apply\r\n                </Button>\r\n            </Actions>\r\n        </Container>\r\n    );\r\n};\r\n","import React, { FC, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Variables } from '../../../../theme/variables';\r\n\r\nimport {\r\n    useResetTeams,\r\n    useSaveTeams,\r\n    useSelectMultipleTeams,\r\n} from '../../../../features/portableTeams/store/hors/withTeams/services';\r\nimport { AssignTeams } from '../../../../features/portableTeams/templates/AssignTeams';\r\nimport { useTeamsState } from '../../../../features/portableTeams/store/hors/withTeams/states';\r\nimport { usePortableTeamsState } from '../../../../features/portableTeams/store/states';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { Tooltip } from '../../../../ui/components/Tooltip';\r\n\r\nconst Container = styled.div`\r\n    position: relative;\r\n    height: 100%;\r\n`;\r\n\r\nconst SelectHead = styled.div<{ disabled?: boolean }>`\r\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\r\n    display: flex;\r\n    height: 100%;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    justify-content: center;\r\n`;\r\n\r\nconst SelectTitle = styled.div`\r\n    pointer-events: none;\r\n    font-size: 11px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: block;\r\n    align-items: center;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n    font-weight: 600;\r\n    margin-left: 15px;\r\n`;\r\n\r\nconst SelectButtonWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-start;\r\n    width: 100%;\r\n`;\r\n\r\nconst SelectLabel = styled.div<{ color?: string; disabled?: boolean }>`\r\n    pointer-events: none;\r\n    font-size: 13px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    color: ${props =>\r\n        props.disabled ? props.theme.Colors.lightBlueGray : props.color};\r\n    font-weight: 500;\r\n    margin-left: 15px;\r\n    margin-bottom: 1px;\r\n`;\r\n\r\nconst SelectedUserTeamsComponent: FC<{\r\n    selectedTeams: number[];\r\n    saveTeams?(): void;\r\n    onSelectTeams(teamIds?: number[]): void;\r\n    dataTest: string\r\n}> = ({ selectedTeams, onSelectTeams, dataTest }) => {\r\n    const { saved } = useTeamsState();\r\n    const { data } = usePortableTeamsState();\r\n    const saveTeams = useSaveTeams();\r\n    const selectMultipleTeams = useSelectMultipleTeams();\r\n    const resetTeams = useResetTeams();\r\n\r\n    useEffect(() => {\r\n        selectMultipleTeams(selectedTeams);\r\n        saveTeams();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [saveTeams, selectMultipleTeams]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetTeams();\r\n        };\r\n    }, [resetTeams]);\r\n\r\n    useEffect(() => {\r\n        onSelectTeams(saved);\r\n    }, [onSelectTeams, saved]);\r\n\r\n    const teamsDisabled = !data || data.items.length < 1;\r\n\r\n    return (\r\n        <Container>\r\n            <Popup<HTMLDivElement>\r\n                content={({ hide }) => (\r\n                    <AssignTeams\r\n                        onSuccessApply={() => {\r\n                            hide();\r\n                        }}\r\n                        onCancel={() => {\r\n                            hide();\r\n                        }}\r\n                        selectedTeams={selectedTeams}\r\n                    />\r\n                )}\r\n            >\r\n                {(ref, { toggleShown, shown }) => (\r\n                    <span ref={ref}>\r\n                        <Tooltip\r\n                            label={'No Teams added yet'}\r\n                            preset={'table-item'}\r\n                            disabled={!teamsDisabled}\r\n                        >\r\n                            <SelectHead\r\n                                onClick={() => !teamsDisabled && toggleShown()}\r\n                                disabled={teamsDisabled}\r\n                                data-test={dataTest}\r\n                            >\r\n                                {selectedTeams && !!selectedTeams.length && (\r\n                                    <SelectTitle>Teams</SelectTitle>\r\n                                )}\r\n                                <SelectButtonWrapper>\r\n                                    <SelectLabel\r\n                                        color={\r\n                                            selectedTeams.length < 1\r\n                                                ? Variables.Colors.cloudyBlue\r\n                                                : Variables.Colors.black\r\n                                        }\r\n                                        disabled={teamsDisabled}\r\n                                    >\r\n                                        {selectedTeams.length < 1\r\n                                            ? 'Teams'\r\n                                            : `${selectedTeams.length} ${\r\n                                                  selectedTeams.length > 1\r\n                                                      ? 'Teams'\r\n                                                      : 'Team'\r\n                                              }`}\r\n                                    </SelectLabel>\r\n                                </SelectButtonWrapper>\r\n                            </SelectHead>\r\n                        </Tooltip>\r\n                    </span>\r\n                )}\r\n            </Popup>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default SelectedUserTeamsComponent;\r\n","import React, { FC, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Field } from 'formik';\r\n\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { CheckPermission } from '../../../../features/permissions';\r\nimport { AssignRoles } from './AssignRoles';\r\nimport { NewUserValues } from '../models/NewUserValues';\r\nimport { SelectedUserLabels } from './SelectedUserLabels';\r\nimport SelectedUserPractisSetsComponent from './SelectedUserPractisSets';\r\nimport { WithLabelsContext } from '../../../../features/portableLabels';\r\nimport { WithPractisSetsContext } from '../../../../features/portablePractisSets';\r\nimport { WithTeamsContext } from '../../../../features/portableTeams';\r\nimport { useResetLabels } from '../../../../features/portableLabels/store/hors/withLabels/services';\r\nimport { useResetPractisSets } from '../../../../features/portablePractisSets/store/hors/withPractisSets/services';\r\nimport SelectedUserTeamsComponent from './SelectedUserTeams';\r\nimport { useResetTeams } from '../../../../features/portableTeams/store/hors/withTeams/services';\r\nimport { FormikField } from '../../../../ui/components/FormikField';\r\nimport Plus from '../../../../ui/icons/Plus';\r\nimport { PractisSetWithDueDate } from '../../../../constants/interfaces/Draft';\r\n\r\n//region Styles\r\nconst StyledUserListItem = styled.div`\r\n    background: ${props => props.theme.Colors.white};\r\n    height: 64px;\r\n    margin-bottom: 16px;\r\n`;\r\n\r\nconst StyledRow = styled.div<{\r\n    hasBlueBorder?: boolean;\r\n    hasNormalBorder?: boolean;\r\n    hasGreyBorder: boolean;\r\n    hasError: boolean;\r\n}>`\r\n    display: flex;\r\n    justify-content: space-between;\r\n    flex-wrap: wrap;\r\n    border-radius: 4px;\r\n    box-shadow: 0 3px 10px 0 rgb(0 0 0 / 5%);\r\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\r\n    ${props =>\r\n        props.hasBlueBorder &&\r\n        `border: solid 2px ${props.theme.Colors.darkSkyBlue};`}\r\n    ${props =>\r\n        props.hasNormalBorder &&\r\n        `border-color: ${props.theme.Colors.paleGrey};`}\r\n    ${props =>\r\n        props.hasGreyBorder &&\r\n        `border-color: ${props.theme.Colors.blueyGreyTwo};`}\r\n    ${props => props.hasError && `border-color: ${props.theme.Colors.tomato};`}\r\n    \r\n    background-color: ${props => props.theme.Colors.white};\r\n`;\r\n\r\nconst StyledField = styled.div<{ flex: number }>`\r\n    flex: ${props => props.flex};\r\n    padding-right: 1px;\r\n`;\r\n\r\nconst AddIconArea = styled.div`\r\n    flex: 5;\r\n    display: flex;\r\n    justify-content: flex-end;\r\n`;\r\n\r\nconst StyledAddUserIconContainer = styled.button<{ disabled?: boolean }>`\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    width: 40px;\r\n    height: 40px;\r\n    align-self: center;\r\n    border-radius: 4px;\r\n    margin-right: 17px;\r\n    background-color: ${props =>\r\n        !!props.disabled\r\n            ? props.theme.Colors.cloudyBlue\r\n            : props.theme.Colors.darkSkyBlue};\r\n    ${props => !!props.disabled && 'pointer-events: none;'}\r\n    outline: none;\r\n    border: none;\r\n    cursor: pointer;\r\n`;\r\n\r\nconst StyledAddUserIconHolder = styled.div<{ disabled?: boolean }>`\r\n    cursor: pointer;\r\n    width: 12px;\r\n    height: 16px;\r\n    color: ${props => props.theme.Colors.white};\r\n    &:active {\r\n        opacity: 0.7;\r\n    }\r\n`;\r\n\r\nconst BorderSeparator = styled.div`\r\n    height: 33px;\r\n    width: 1px;\r\n    align-self: center;\r\n    flex-shrink: 0;\r\n    border-left: 1px solid ${props => props.theme.Colors.paleGrey};\r\n`;\r\n\r\nconst StyledPlusIconContainer = styled.div<{ padding?: string }>`\r\n    padding-left: 20px;\r\n    display: flex;\r\n    align-items: center;\r\n    flex: 1;\r\n`;\r\n\r\nconst PlusIconHolder = styled.div`\r\n    width: 10px;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n`;\r\n\r\nconst ErrorLabel = styled.div`\r\n    font-family: ${props => props.theme.Fonts.manrope};\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    font-stretch: normal;\r\n    font-style: normal;\r\n    line-height: normal;\r\n    letter-spacing: normal;\r\n    padding: 5px 24px;\r\n    color: ${props => props.theme.Colors.tomato};\r\n    position: absolute;\r\n    z-index: 1;\r\n    width: 100%;\r\n`;\r\n//endregion\r\n\r\nexport type AddNewUserProps = {\r\n    handleInputChange: (\r\n        e: React.ChangeEvent<HTMLInputElement>,\r\n        field: string\r\n    ) => void;\r\n    assignedRole: number | null;\r\n    hasError?: boolean;\r\n    selectedUserLabels: number[];\r\n    setSelectedUserLabels: (labelIds: number[]) => void;\r\n    selectedUserPractisSets: PractisSetWithDueDate[];\r\n    setSelectedUserPractisSets: (practisSetIds: PractisSetWithDueDate[]) => void;\r\n    selectedUserTeams: number[];\r\n    setSelectedUserTeams: (teamIds: number[]) => void;\r\n    onAssignRoleCheck(role: number | null): void;\r\n    users: NewUserValues[];\r\n    isSubmitDisabled: boolean;\r\n    errorMessages: any;\r\n    startedToFillInitialUser?: boolean;\r\n    hideNewUserTipDisplayed?: boolean;\r\n    creatingUser: boolean;\r\n    isRoleDisabled: boolean | undefined;\r\n    dataTest: string;\r\n};\r\n\r\nexport const AddNewUser: FC<AddNewUserProps> = ({\r\n    handleInputChange,\r\n    assignedRole,\r\n    onAssignRoleCheck,\r\n    hasError,\r\n    setSelectedUserLabels,\r\n    selectedUserLabels,\r\n    setSelectedUserPractisSets,\r\n    selectedUserPractisSets,\r\n    selectedUserTeams,\r\n    setSelectedUserTeams,\r\n    users,\r\n    isSubmitDisabled,\r\n    errorMessages,\r\n    startedToFillInitialUser,\r\n    hideNewUserTipDisplayed,\r\n    creatingUser,\r\n    isRoleDisabled,\r\n    dataTest\r\n}) => {\r\n    const clearLabels = useResetLabels();\r\n    const clearPractisSets = useResetPractisSets();\r\n    const clearTeams = useResetTeams();\r\n\r\n    useEffect(() => {\r\n        if (creatingUser) {\r\n            clearLabels();\r\n            clearPractisSets();\r\n            clearTeams();\r\n        }\r\n        return () => {\r\n            clearLabels();\r\n            clearPractisSets();\r\n            clearTeams();\r\n        };\r\n    }, [clearLabels, clearPractisSets, clearTeams, creatingUser]);\r\n\r\n    return (\r\n        <StyledUserListItem>\r\n            <StyledRow\r\n                hasBlueBorder={!hideNewUserTipDisplayed}\r\n                hasNormalBorder={!!users.length && !startedToFillInitialUser}\r\n                hasGreyBorder={!!startedToFillInitialUser}\r\n                hasError={!!hasError}\r\n                data-test={`${dataTest}-row`}\r\n            >\r\n                <StyledPlusIconContainer>\r\n                    <PlusIconHolder>\r\n                        <Plus />\r\n                    </PlusIconHolder>\r\n                </StyledPlusIconContainer>\r\n                <StyledField flex={14}>\r\n                    <Field\r\n                        maxLength={100}\r\n                        autoFocus={!startedToFillInitialUser}\r\n                        type=\"text\"\r\n                        component={FormikField}\r\n                        name=\"firstName\"\r\n                        label=\"First Name*\"\r\n                        colorTheme=\"lightTwo\"\r\n                        height=\"64px\"\r\n                        labelFontSize=\"13px\"\r\n                        decreaseLabelFontSize={true}\r\n                        inputPadding=\"27px 13px 14px 13px\"\r\n                        labelFontWeight={600}\r\n                        labelLeftPosition={'12px'}\r\n                        hideError\r\n                        handleChange={(e: any) =>\r\n                            handleInputChange(e, 'firstName')\r\n                        }\r\n                        dataTest={`${dataTest}-first-name`}\r\n                    />\r\n                </StyledField>\r\n                <BorderSeparator />\r\n                <StyledField flex={14}>\r\n                    <Field\r\n                        maxLength={100}\r\n                        type=\"text\"\r\n                        component={FormikField}\r\n                        name=\"lastName\"\r\n                        label=\"Last Name*\"\r\n                        colorTheme=\"lightTwo\"\r\n                        height=\"64px\"\r\n                        labelFontSize=\"13px\"\r\n                        decreaseLabelFontSize={true}\r\n                        inputPadding=\"27px 13px 14px 13px\"\r\n                        labelFontWeight={600}\r\n                        labelLeftPosition={'12px'}\r\n                        hideError={true}\r\n                        handleChange={(e: any) =>\r\n                            handleInputChange(e, 'lastName')\r\n                        }\r\n                        dataTest={`${dataTest}-last-name`}\r\n                    />\r\n                </StyledField>\r\n                <BorderSeparator />\r\n                <StyledField flex={18}>\r\n                    <Field\r\n                        type=\"text\"\r\n                        component={FormikField}\r\n                        name=\"email\"\r\n                        label=\"Email*\"\r\n                        colorTheme=\"lightTwo\"\r\n                        labelFontSize=\"13px\"\r\n                        decreaseLabelFontSize={true}\r\n                        height=\"64px\"\r\n                        inputPadding=\"27px 13px 14px 13px\"\r\n                        labelFontWeight={600}\r\n                        labelLeftPosition={'12px'}\r\n                        hideError={true}\r\n                        handleChange={(e: any) => handleInputChange(e, 'email')}\r\n                        dataTest={`${dataTest}-email`}\r\n                    />\r\n                </StyledField>\r\n                <BorderSeparator />\r\n                <StyledField flex={10}>\r\n                    <CheckPermission\r\n                        permissions={[NEW_PERMISSIONS.ASSIGN_INVITATION_ROLE]}\r\n                    >\r\n                        <AssignRoles\r\n                            disabled={isRoleDisabled}\r\n                            assignedRole={assignedRole}\r\n                            handleRoleCheck={(role: number) =>\r\n                                onAssignRoleCheck(role)\r\n                            }\r\n                            dataTest={`${dataTest}-role`}\r\n                        />\r\n                    </CheckPermission>\r\n                </StyledField>\r\n                <BorderSeparator />\r\n                <StyledField flex={13}>\r\n                    <CheckPermission\r\n                        permissions={[\r\n                            NEW_PERMISSIONS.ASSIGN_INVITATION_PRACTIS_SET,\r\n                        ]}\r\n                    >\r\n                        <SelectedUserTeamsComponent\r\n                            selectedTeams={selectedUserTeams}\r\n                            onSelectTeams={setSelectedUserTeams}\r\n                            dataTest={`${dataTest}-teams`}\r\n                        />\r\n                    </CheckPermission>\r\n                </StyledField>\r\n                <BorderSeparator />\r\n                <StyledField flex={15}>\r\n                    <CheckPermission\r\n                        permissions={[\r\n                            NEW_PERMISSIONS.ASSIGN_INVITATION_PRACTIS_SET,\r\n                        ]}\r\n                    >\r\n                        <SelectedUserPractisSetsComponent\r\n                            selectedPractisSets={selectedUserPractisSets}\r\n                            onSelectPractisSets={setSelectedUserPractisSets}\r\n                            dataTest={`${dataTest}-practis-sets`}\r\n                        />\r\n                    </CheckPermission>\r\n                </StyledField>\r\n                <BorderSeparator />\r\n                <StyledField flex={10}>\r\n                    <CheckPermission\r\n                        permissions={[NEW_PERMISSIONS.ASSIGN_INVITATION_LABEL]}\r\n                    >\r\n                        <SelectedUserLabels\r\n                            selectedLabels={selectedUserLabels}\r\n                            onSelectLabels={setSelectedUserLabels}\r\n                            dataTest={`${dataTest}-labels`}\r\n                        />\r\n                    </CheckPermission>\r\n                </StyledField>\r\n                <AddIconArea>\r\n                    <StyledAddUserIconContainer\r\n                        disabled={\r\n                            creatingUser || !assignedRole || isSubmitDisabled\r\n                        }\r\n                        data-test={`${dataTest}-add`}\r\n                    >\r\n                        <StyledAddUserIconHolder>\r\n                            <Plus />\r\n                        </StyledAddUserIconHolder>\r\n                    </StyledAddUserIconContainer>\r\n                </AddIconArea>\r\n            </StyledRow>\r\n            {!!hasError &&\r\n                (!!errorMessages.email ||\r\n                    !!errorMessages.firstName ||\r\n                    !!errorMessages.lastName) && (\r\n                    <ErrorLabel data-test={`${dataTest}-error`}>\r\n                        {errorMessages.email ||\r\n                            errorMessages.firstName ||\r\n                            errorMessages.lastName}\r\n                    </ErrorLabel>\r\n                )}\r\n        </StyledUserListItem>\r\n    );\r\n};\r\n\r\nexport const AddNewUserContainer: FC<AddNewUserProps> = props => {\r\n    return (\r\n        <WithLabelsContext.Provider\r\n            value={{ reducerName: 'draftEdit', scope: 'addNewUser' }}\r\n        >\r\n            <WithPractisSetsContext.Provider\r\n                value={{ reducerName: 'draftEdit', scope: 'addNewUser' }}\r\n            >\r\n                <WithTeamsContext.Provider\r\n                    value={{\r\n                        reducerName: 'draftEdit',\r\n                        scope: 'addNewUser',\r\n                    }}\r\n                >\r\n                    <AddNewUser {...props} />\r\n                </WithTeamsContext.Provider>\r\n            </WithPractisSetsContext.Provider>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n","import { useCallback } from 'react';\n\ntype Entity = {\n    id: number;\n    practisSetIDs: number[];\n    roleId: number;\n};\n\nexport const useCalculatePreSelectedUserRoles = <T extends Entity>() => {\n    return useCallback((selectedItems: number[], entity: T[]) => {\n        let outputArray: number[] = [];\n        const filteredEntities = entity.filter(entityItem => {\n            return selectedItems.includes(entityItem.id);\n        });\n        for (let entity of filteredEntities) {\n            if (!outputArray.includes(entity.roleId)) {\n                outputArray.push(entity.roleId);\n            }\n        }\n\n        return outputArray;\n    }, []);\n};\n","import React, { FC, useEffect } from 'react';\nimport { kebabCase } from 'lodash';\nimport styled from 'styled-components';\nimport RadioButton from '../../ui/components/RadioButton';\nimport { useUserRolesState } from '../roles/store/states';\nimport { useCalculatePreSelectedUserRoles } from './tools';\nimport { DraftUser } from '../../constants/interfaces/Draft';\nimport { PaginationResult } from '../../constants/interfaces/PaginationResult';\nimport { filterInvitationRolesByPermissions } from '../../pages/ActionPages/NewUser/tools';\nimport { usePermissionsState } from '../permissions/store/state';\n\nconst Container = styled.div`\n    width: 100%;\n`;\n\nconst PortableRoles: FC<{\n    users?: PaginationResult<DraftUser>;\n    selectedUsers?: number[];\n    selectedRoles: number[];\n    setSelectedRoles(value: number[]): void;\n}> = ({ users, selectedUsers, selectedRoles, setSelectedRoles }) => {\n    const permissions = usePermissionsState();\n    const userRoles = useUserRolesState();\n    const roles = filterInvitationRolesByPermissions(\n        userRoles.list,\n        permissions\n    );\n    const calculatePreSelectedUserRoles = useCalculatePreSelectedUserRoles();\n\n    useEffect(() => {\n        if (users && users.items && selectedUsers) {\n            const preSelectedUserRoles = calculatePreSelectedUserRoles(\n                selectedUsers,\n                users.items as any // TODO: ask\n            );\n\n            setSelectedRoles(preSelectedUserRoles);\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [calculatePreSelectedUserRoles, selectedUsers, users]);\n\n    return (\n        <Container>\n            {roles.map(item => {\n                return (\n                    <RadioButton\n                        key={item.value}\n                        handleChange={() => setSelectedRoles([item.value])}\n                        checked={selectedRoles.includes(item.value)}\n                        partial={selectedRoles.length > 1}\n                        size={12}\n                        label={item.name}\n                        dataTest={`${kebabCase(item.name.toLowerCase())}-role-radio`}\n                    />\n                );\n            })}\n        </Container>\n    );\n};\n\nexport default PortableRoles;\n","import React, { FC, useCallback, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { PortableLabelsWithStore } from '../../../../../../../features/portableLabels';\nimport { useCalculatePreSelectedLabels } from '../../../../../../../features/labels/tools';\nimport { PaginationResult } from '../../../../../../../constants/interfaces/PaginationResult';\nimport { DraftUser } from '../../../../../../../constants/interfaces/Draft';\nimport { getCompanyState } from '../../../../../../CompanySettings/store/reducers';\nimport { useIfChanged } from '../../../../../../../helpers/hooks/usePreviousData';\nimport {\n    useResetSelectedLabels,\n    useSelectLabels,\n} from '../../../../../../../features/portableLabels/store/hors/withLabels/services';\nimport { useLabelsState } from '../../../../../../../features/portableLabels/store/hors/withLabels/states';\n\nexport const FilterLabels: FC<{\n    users?: PaginationResult<DraftUser>;\n    selectedUsers?: number[];\n}> = ({ users, selectedUsers }) => {\n    const labelsState = useLabelsState();\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\n    const company = useSelector(getCompanyState);\n    const select = useSelectLabels();\n    const resetSelected = useResetSelectedLabels();\n    const ifCompanyChanged = useIfChanged(company);\n\n    const getPreselectedLabels = useCallback((): number[] | null => {\n        if (users?.items && selectedUsers) {\n            const { preAssignedLabels } = calculatePreSelectedLabels(\n                selectedUsers,\n                users\n            );\n            return preAssignedLabels;\n        }\n\n        return null;\n    }, [selectedUsers, users, calculatePreSelectedLabels]);\n\n    const setDefaultState = useCallback(() => {\n        const preselectedLabels = getPreselectedLabels();\n\n        if (preselectedLabels !== null) {\n            select(preselectedLabels);\n        }\n    }, [select, getPreselectedLabels]);\n\n    useEffect(() => {\n        setDefaultState();\n    }, [users, selectedUsers, setDefaultState]);\n\n    useEffect(() => {\n        setDefaultState();\n    }, [setDefaultState]);\n\n    useEffect(() => {\n        if (ifCompanyChanged) {\n            resetSelected();\n            setDefaultState();\n\n            const preselectedLabels = getPreselectedLabels();\n\n            if (preselectedLabels !== null) {\n                select(preselectedLabels);\n            }\n        }\n    }, [\n        getPreselectedLabels,\n        ifCompanyChanged,\n        labelsState.selected,\n        select,\n        resetSelected,\n        setDefaultState,\n    ]);\n\n    return (\n        <PortableLabelsWithStore\n            showSelectActions\n            showSave={false}\n            showSearch\n        />\n    );\n};\n","import React, { FC, useEffect } from 'react';\nimport { PaginationResult } from '../../../../../../../constants/interfaces/PaginationResult';\nimport { DraftUser } from '../../../../../../../constants/interfaces/Draft';\nimport { useCalculatePreSelectedPractisSets, useFindPractisSetDueDate } from '../../../../../../../features/portablePractisSets/tools';\nimport { PortablePractisSetsWithStore } from '../../../../../../../features/portablePractisSets';\nimport { useSelectMultiplePractisSets } from '../../../../../../../features/portablePractisSets/store/hors/withPractisSets/services';\n\nconst FilterPractisSets: FC<{\n    users?: PaginationResult<DraftUser>;\n    selectedUsers?: number[];\n    setInitialPractisSets?(practisSetId: number[]): void;\n}> = ({ users, selectedUsers, setInitialPractisSets }) => {\n    const setPractisSets = useSelectMultiplePractisSets();\n    const calculatePreSelectedPractisSets = useCalculatePreSelectedPractisSets();\n    const findPractisSetDueDate = useFindPractisSetDueDate()\n\n    useEffect(() => {\n        if (users && users.items && selectedUsers && setInitialPractisSets) {\n            const preSelectedPractisSets = calculatePreSelectedPractisSets(\n                selectedUsers,\n                users.items as any\n            );\n            setInitialPractisSets(preSelectedPractisSets);\n\n            //PSWDD maybe change type\n            setPractisSets(\n                preSelectedPractisSets.map(id => ({\n                    practisSetId: id,\n                    dueDate: findPractisSetDueDate(\n                        selectedUsers,\n                        users.items as any,\n                        id\n                    ),\n                }))\n            );\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [users, selectedUsers, calculatePreSelectedPractisSets]);\n\n    return (\n        <PortablePractisSetsWithStore\n            showSave={false}\n            showSelectActions={true}\n            showSearch={true}\n            resetSelectedOnUnmount={true}\n        />\n    );\n};\n\nexport default FilterPractisSets;\n","import { useCallback } from 'react';\n\ntype Entity = {\n    id: number;\n    teamIDs: number[];\n    roleId: number;\n};\n\nexport const useCalculatePreSelectedTeams = <T extends Entity>() => {\n    return useCallback((selectedItems: number[], entity: T[]) => {\n        let countSelectedItems: Record<number, number> = {};\n        let outputArray: number[] = [];\n\n        const filteredEntities = entity.filter(entityItem => {\n            return selectedItems.includes(entityItem.id);\n        });\n        for (let entity of filteredEntities) {\n            for (let teamId of entity.teamIDs) {\n                countSelectedItems[teamId] =\n                    countSelectedItems[teamId] + 1 || 1;\n            }\n        }\n\n        for (const key in countSelectedItems) {\n            if (countSelectedItems[key] === selectedItems.length) {\n                outputArray.push(Number(key));\n            } else {\n                outputArray.push(-Number(key));\n            }\n        }\n\n        return outputArray;\n    }, []);\n};\n\nexport const useCalculateDeletedTeams = () => {\n    return useCallback((assignedTeams, initialTeams) => {\n        const deletedTeams: number[] = [];\n\n        for (let team of initialTeams) {\n            if (\n                !assignedTeams.includes(team) &&\n                !assignedTeams.includes(-team)\n            ) {\n                deletedTeams.push(team < 0 ? -team : team);\n            }\n        }\n\n        return deletedTeams;\n    }, []);\n};\n","import React, { FC, useEffect } from 'react';\nimport { PaginationResult } from '../../../../../../../constants/interfaces/PaginationResult';\nimport { DraftUser } from '../../../../../../../constants/interfaces/Draft';\nimport { useCalculatePreSelectedTeams } from '../../../../../../../features/portableTeams/tools';\nimport { PortableTeamsWithStore } from '../../../../../../../features/portableTeams';\nimport { useSelectMultipleTeams } from '../../../../../../../features/portableTeams/store/hors/withTeams/services';\n\nconst FilterTeams: FC<{\n    users?: PaginationResult<DraftUser>;\n    selectedUsers?: number[];\n    setInitialTeams?(practisSetId: number[]): void;\n    showDefaultMembers?: boolean\n}> = ({ users, selectedUsers, showDefaultMembers, setInitialTeams }) => {\n    const setTeams = useSelectMultipleTeams();\n    const calculatePreSelectedTeams = useCalculatePreSelectedTeams();\n    \n    useEffect(() => {\n        if (users && users.items && selectedUsers && setInitialTeams) {\n            const preSelectedTeams = calculatePreSelectedTeams(\n                selectedUsers,\n                users.items as any\n            );\n            setInitialTeams(preSelectedTeams);\n            setTeams(preSelectedTeams);\n        }\n    }, [users, selectedUsers, calculatePreSelectedTeams, setInitialTeams, setTeams]);\n\n    return (\n        <PortableTeamsWithStore\n            showSave={false}\n            showSelectActions={true}\n            fetchOnMount={false}\n            showSearch={true}\n            resetSelectedOnUnmount={true}\n            showDefaultMembers={showDefaultMembers}\n        />\n    );\n};\n\nexport default FilterTeams;\n","import React, { FC, useState } from 'react';\nimport styled from 'styled-components';\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { DraftUser, PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\nimport { useCalculateDeletedLabels } from '../../../../../features/labels/tools';\nimport PortableRoles from '../../../../../features/portableRoles/portableRoles';\nimport { FilterLabels } from './components/FilterLabels/FilterLabels';\nimport FilterPractisSets from './components/FilterPractisSets/FilterPractisSets';\nimport { useCalculateDeletedPractisSets } from '../../../../../features/portablePractisSets/tools';\nimport { usePractisSetsState } from '../../../../../features/portablePractisSets/store/hors/withPractisSets/states';\nimport { useLabelsState } from '../../../../../features/portableLabels/store/hors/withLabels/states';\nimport FilterTeams from './components/FilterTeams/FilterTeams';\nimport { useTeamsState } from '../../../../../features/portableTeams/store/hors/withTeams/states';\nimport { useCalculateDeletedTeams } from '../../../../../features/portableTeams/tools';\nimport { Fieldset } from '../../../../../ui/components/Fieldset';\nimport { Button } from '../../../../../ui/components/Button';\n\nconst Container = styled.div`\n    z-index: 2;\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst RolesContainer = styled.div`\n    width: 129px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst PractisSetsContainer = styled.div`\n    width: 312px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst ButtonContainer = styled.div`\n    margin-right: 16px;\n`;\n\nexport const AssignFilters: FC<{\n    users?: PaginationResult<DraftUser>;\n    selectedUsers: number[];\n    assignFilters(\n        assignedLabels: number[],\n        deletedLabels: number[],\n        assignedPractisSets: PractisSetWithDueDate[],\n        deletedPractisSets: number[],\n        assignedTeams: number[],\n        deletedTeams: number[],\n        roleId: null | number\n    ): Promise<boolean>;\n    selectedRoles: number[];\n    setSelectedRoles(value: number[]): void;\n    onSuccessApply: (isCancel?: boolean) => void;\n    isRoleDisabled?: boolean;\n}> = ({\n    users,\n    selectedUsers,\n    assignFilters,\n    selectedRoles,\n    setSelectedRoles,\n    onSuccessApply,\n    isRoleDisabled,\n}) => {\n    const [saving, setSaving] = useState(false);\n\n    const { selected: selectedLabels } = useLabelsState();\n    const { selected: selectedPractisSets } = usePractisSetsState();\n    const { selected: selectedTeams } = useTeamsState();\n    const getDeletedLabels = useCalculateDeletedLabels();\n    const getDeletedPractisSets = useCalculateDeletedPractisSets();\n    const getDeletedTeams = useCalculateDeletedTeams();\n    const [initialPractisSets, setInitialPractisSets] = useState<number[]>([]);\n    const [initialTeams, setInitialTeams] = useState<number[]>([]);\n\n    const handleApplyFilters = () => {\n        const assignedLabels = selectedLabels.filter(x => x > 0);\n        const deletedLabels = getDeletedLabels(selectedLabels);\n        const assignedPractisSets = selectedPractisSets.filter(x => x.practisSetId > 0);\n        const deletedPractisSets = getDeletedPractisSets(\n            selectedPractisSets.map(item => item.practisSetId),\n            initialPractisSets\n        );\n\n        const assignedTeams = selectedTeams.filter(x => x > 0);\n        const deletedTeams = getDeletedTeams(selectedTeams, initialTeams);\n   \n        setSaving(true);\n        assignFilters(\n            assignedLabels,\n            deletedLabels,\n            assignedPractisSets,\n            deletedPractisSets,\n            assignedTeams,\n            deletedTeams,\n            selectedRoles.length > 1 ? null : selectedRoles[0]\n        ).then(updated => {\n            if (updated) {\n                onSuccessApply();\n            }\n            setSaving(false);\n        });\n    };\n\n    return (\n        <Container>\n            <Wrapper>\n                {!isRoleDisabled && (\n                    <Fieldset title={'Roles'} dataTest=\"roles-section-title\">\n                        <RolesContainer>\n                            <PortableRoles\n                                users={users}\n                                selectedUsers={selectedUsers}\n                                selectedRoles={selectedRoles}\n                                setSelectedRoles={setSelectedRoles}\n                            />\n                        </RolesContainer>\n                    </Fieldset>\n                )}\n                <Fieldset title={'Teams'} dataTest=\"teams-section-title\">\n                    <TeamsContainer>\n                        <FilterTeams\n                            showDefaultMembers={true}\n                            users={users}\n                            selectedUsers={selectedUsers}\n                            setInitialTeams={setInitialTeams}\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Practis Sets'} dataTest=\"practis-sets-section-title\">\n                    <PractisSetsContainer>\n                        <FilterPractisSets\n                            users={users}\n                            selectedUsers={selectedUsers}\n                            setInitialPractisSets={setInitialPractisSets}\n                        />\n                    </PractisSetsContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <FilterLabels\n                            users={users}\n                            selectedUsers={selectedUsers}\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <ButtonContainer>\n                    <Button\n                        label={'Cancel'}\n                        variant={'inverse'}\n                        action={() => onSuccessApply(true)}\n                        width={'112px'}\n                        disabled={saving}\n                    />\n                </ButtonContainer>\n                <Button\n                    label={'Apply'}\n                    action={handleApplyFilters}\n                    width={'112px'}\n                    loading={saving}\n                />\n            </Actions>\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const RemoveUser = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M530.681 162l1.18 1.18c.187.187.187.491 0 .679-.188.187-.492.187-.68 0l-1.179-1.18-1.179 1.18c-.187.187-.49.187-.678 0-.188-.188-.188-.492 0-.68l1.178-1.178-1.178-1.179c-.188-.187-.188-.491 0-.679.187-.188.49-.188.678 0l1.18 1.18 1.178-1.18c.188-.188.492-.188.68 0 .187.188.187.492 0 .68L530.68 162zm-4.937-3.835c.514.128 1.265.32 2.01.53-.35.239-.65.54-.908.875-.605-.163-1.24-.325-1.844-.47v-1.584c1.254-.854 1.997-2.708 1.997-4.393 0-2.28-.583-4.127-3.498-4.127-2.916 0-3.499 1.848-3.499 4.127 0 1.686.744 3.542 2 4.395v1.596c-1.89.445-4.086 1.054-4.591 1.33-.327.412-.612 1.733-.41 2.558h9.142c.093.355.233.688.413.998h-10.105c-.782-1.2-.465-3.599.317-4.398.372-.38 3.165-1.1 4.502-1.428-1.412-1.096-2.273-3.13-2.273-5.07 0-2.819.82-5.104 4.504-5.104 3.685 0 4.503 2.285 4.503 5.105 0 1.933-.856 3.961-2.26 5.06z\"\n                            transform=\"translate(-516 -148)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default RemoveUser;\n","import React, { FC, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { useUserRolesState } from '../roles/store/states';\nimport { useCalculatePreSelectedUserRoles } from './tools';\nimport { DraftUser } from '../../constants/interfaces/Draft';\nimport { PaginationResult } from '../../constants/interfaces/PaginationResult';\nimport { invitationRoles } from '../../pages/ActionPages/NewUser/tools';\nimport { Variables } from '../../theme/variables';\nimport Checkbox from '../../ui/components/Checkbox';\n\nconst Container = styled.div`\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-start;\n    align-items: flex-start;\n`;\n\nconst CheckBoxWrapper = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst PortableRolesMultiselect: FC<{\n    users?: PaginationResult<DraftUser>;\n    selectedUsers?: number[];\n    selectedRoles: number[];\n    setSelectedRoles(value: number[]): void;\n}> = ({ users, selectedUsers, selectedRoles, setSelectedRoles }) => {\n    const userRoles = useUserRolesState();\n    const roles = invitationRoles(userRoles.list);\n    const calculatePreSelectedUserRoles = useCalculatePreSelectedUserRoles();\n\n    useEffect(() => {\n        if (users && users.items && selectedUsers) {\n            const preSelectedUserRoles = calculatePreSelectedUserRoles(\n                selectedUsers,\n                users.items as any // TODO: ask\n            );\n\n            setSelectedRoles(preSelectedUserRoles);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [users, selectedUsers, calculatePreSelectedUserRoles]);\n\n    const handleSelectItem = (value: number) => {\n        if (selectedRoles.includes(value)) {\n            setSelectedRoles(selectedRoles.filter(roleId => roleId !== value));\n        } else {\n            const updatedRoles = [...selectedRoles];\n            updatedRoles.push(value);\n            setSelectedRoles(updatedRoles);\n        }\n    };\n\n    return (\n        <Container>\n            {roles.map(item => {\n                return (\n                    <CheckBoxWrapper key={item.value}>\n                        <Checkbox\n                            key={item.value}\n                            handleChange={() => handleSelectItem(item.value)}\n                            checked={selectedRoles.includes(item.value)}\n                            size={12}\n                            label={item.name}\n                            fontSize={13}\n                            fontColor={Variables.Colors.black}\n                            fontWeight={'500'}\n                            dataTest={`${item.name.toLowerCase()}-role-checkbox`}\n                        />\n                    </CheckBoxWrapper>\n                );\n            })}\n        </Container>\n    );\n};\n\nexport default PortableRolesMultiselect;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { useLabelsState } from '../../../../../features/portableLabels/store/hors/withLabels/states';\nimport { PortableTeamsWithStore } from '../../../../../features/portableTeams';\nimport { PortableLabelsWithStore } from '../../../../../features/portableLabels';\nimport PortableRolesWithMultiSelect from '../../../../../features/portableRoles/portableRolesWithMultiSelect';\nimport { useTeamsState } from '../../../../../features/portableTeams/store/hors/withTeams/states';\nimport { usePractisSetsState } from '../../../../../features/portablePractisSets/store/hors/withPractisSets/states';\nimport { useSaveTeams } from '../../../../../features/portableTeams/store/hors/withTeams/services';\nimport { useSaveLabels } from '../../../../../features/portableLabels/store/hors/withLabels/services';\nimport { useSavePractisSets } from '../../../../../features/portablePractisSets/store/hors/withPractisSets/services';\nimport { PortablePractisSetsWithStore } from '../../../../../features/portablePractisSets';\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\nimport { Fieldset } from '../../../../../ui/components/Fieldset';\nimport { Button } from '../../../../../ui/components/Button';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst RolesContainer = styled.div`\n    width: 129px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst PractisSetsContainer = styled.div`\n    width: 312px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ButtonContainer = styled.span`\n    margin-right: 12px;\n`;\n\nexport const ApplyFilters: FC<{\n    applyFilters(\n        assignedLabels: number[],\n        assignedPractisSets: PractisSetWithDueDate[],\n        assignedTeams: number[],\n        roleIds: number[]\n    ): Promise<boolean>;\n    selectedRoles: number[];\n    setSelectedRoles(value: number[]): void;\n    onSuccessApply: () => void;\n    isRoleDisabled?: boolean;\n    hideDueDates?: boolean;\n}> = ({\n    applyFilters,\n    selectedRoles,\n    setSelectedRoles,\n    onSuccessApply,\n    isRoleDisabled,\n    hideDueDates,\n}) => {\n    const { selected: selectedLabels } = useLabelsState();\n    const { selected: selectedTeams } = useTeamsState();\n    const { selected: selectedPractisSets } = usePractisSetsState();\n    const saveLabels = useSaveLabels();\n    const saveTeams = useSaveTeams();\n    const savePractisSets = useSavePractisSets();\n\n    const handleApplyFilters = () => {\n        applyFilters(\n            selectedLabels,\n            selectedPractisSets,\n            selectedTeams,\n            selectedRoles\n        ).then(() => {\n            onSuccessApply();\n            saveTeams();\n            saveLabels();\n            savePractisSets();\n        });\n    };\n\n    const selectedFiltersCount =\n        selectedLabels.filter(id => id > 0).length +\n        selectedPractisSets.length +\n        selectedTeams.length +\n        selectedRoles.length;\n\n    return (\n        <Container>\n            <Wrapper>\n                {!isRoleDisabled && (\n                    <Fieldset title={'Roles'} dataTest=\"roles-section-title\">\n                        <RolesContainer>\n                            <PortableRolesWithMultiSelect\n                                selectedRoles={selectedRoles}\n                                setSelectedRoles={setSelectedRoles}\n                            />\n                        </RolesContainer>\n                    </Fieldset>\n                )}\n                <Fieldset title={'Teams'} dataTest=\"teams-section-title\">\n                    <TeamsContainer>\n                        <PortableTeamsWithStore\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Practis Sets'} dataTest=\"practis-sets-section-title\">\n                    <PractisSetsContainer>\n                        <PortablePractisSetsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                            hideDueDates={hideDueDates}\n                        />\n                    </PractisSetsContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption>\n                    {`${selectedFiltersCount} ${\n                        selectedFiltersCount > 1 ? 'Filters' : 'Filter'\n                    } Selected`}\n                </SummaryCaption>\n                <ButtonContainer>\n                    <Button\n                        label={'Cancel'}\n                        variant={'inverse'}\n                        action={() => onSuccessApply()}\n                        width={'122px'}\n                    />\n                </ButtonContainer>\n                <Button width={'122px'} action={() => handleApplyFilters()}>\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const FileDownload = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 18 18\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <path\n                        fill=\"currentColor\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\".1\"\n                        d=\"M13.082 1c.772 0 1.39.637 1.417 1.422l.001.055v5.428c0 .272-.22.492-.49.492-.26 0-.472-.2-.49-.455l-.002-.037V5.75H10V16.5h-.153v.008c0 .26-.2.472-.454.49L9.356 17H2.418c-.772 0-1.39-.637-1.417-1.422L1 2.477C1 1.686 1.6 1.03 2.365 1L2.418 1h10.664zM14 10c.276 0 .5.22.5.49v4.853l1.667-1.633c.19-.187.5-.187.69 0 .19.187.19.49 0 .676l-2.469 2.42c-.003.005-.009.006-.012.01-.01.013-.006.032-.019.044-.018.018-.046.013-.066.027-.074.058-.16.099-.26.105-.009 0-.015.006-.024.006l-.003.001h-.008c-.01 0-.014-.004-.02-.004-.12-.006-.226-.052-.31-.125-.006-.006-.017-.004-.023-.01-.007-.007-.004-.017-.01-.024-.004-.004-.003-.012-.007-.017l-2.483-2.433c-.19-.186-.19-.49 0-.677.19-.186.5-.186.69 0l1.667 1.634V10.49c0-.27.224-.49.5-.49zM9 16.015V5.75H5.75v10.265h3.249zM4.75 5.75H1.981v9.773c0 .265.184.472.404.49l.033.002H4.75V5.75zm8.332-3.765H2.418c-.223 0-.417.194-.435.453l-.001.039L1.98 4.75h11.537V2.477c0-.265-.183-.472-.403-.49l-.033-.002z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default FileDownload;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Upload = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 18\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <path\n                        fill=\"currentColor\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\".1\"\n                        d=\"M13.923 17H2.077C1.482 17 1 16.552 1 16V6c0-.552.482-1 1.077-1h1.615v1H2.615c-.297 0-.538.224-.538.5v9c0 .276.241.5.538.5h10.77c.297 0 .538-.224.538-.5v-9c0-.276-.241-.5-.538-.5h-1.077V5h1.615C14.518 5 15 5.448 15 6v10c0 .552-.482 1-1.077 1zm-3.61-12.642L8.564 2.69v9.81c0 .275-.234.499-.524.499-.29 0-.525-.224-.525-.5V2.69l-1.75 1.668c-.2.19-.525.19-.725 0-.2-.191-.2-.5 0-.691l2.592-2.47.014-.01c.01-.013.006-.032.019-.044.019-.018.048-.013.069-.027.078-.06.168-.102.274-.108.009 0 .015-.006.024-.006L8.04 1l.008.002c.006 0 .01.003.017.003.125.006.237.053.325.128.007.006.018.003.025.01.007.007.004.017.01.024.005.005.004.012.008.017l2.607 2.483c.2.19.2.5 0 .691-.2.19-.525.19-.725 0z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Upload;\n","/**\n * function getFileExtension - extracts file extension from a file name\n * @param { string } filename\n * @returns { string }\n*/\nexport const getFileExtension = (filename: string): string => {\n    if (!filename)\n        return \"\";\n    const parts: string[] = filename.split(\".\");\n    return parts.length > 1 ? (parts.pop() as string) : \"\";\n}\n\nconst excelExtensions: string[] = ['xls', 'xlt', 'xla', 'xlsx', 'xltx', 'xlsm', 'xltm', 'xlam', 'xlsb'];\n\n/**\n * function isExcelFile - checks if a file name is of Excel file\n * @param { string } filename\n * @returns { boolean }\n*/\nexport const isExcelFile = (filename: string): boolean => {\n    const fileExtension: string = getFileExtension(filename).toLowerCase();\n    return !!fileExtension && excelExtensions.includes(fileExtension);\n}","/**\n * @description to extract email addresses from a string\n * EX: input: 'test \"test@test.com\" it's a test' => output: test@test.com\n * @function extractEmailsFromString\n * @returns { RegExpMatchArray | null }\n */\nexport function extractEmailsFromString(\n    string: string\n): RegExpMatchArray | null {\n    return string.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)/gi);\n}\n\n/**\n * @description Simple function to convert simple present verb to the simple past form.\n * ex: create => created, cry => cried \n * @function convertPresentVerbToPastVerb\n * @param { string } string \n * @returns { string }\n */\nexport function convertPresentVerbToPastVerb(string: string) {\n    return (\n        string\n            .replace(/([^aeiouy])y$/, '$1i')\n            .replace(/([^aeiouy][aeiou])([^aeiouy])$/, '$1$2$2')\n            .replace(/e$/, '') + 'ed'\n    );\n}\n\n/**\n * @description a function which checks if a string is undefined, null, empty or contains white spaces only\n * @function isEmptyOrWhiteSpace\n * @param { string } value \n * @returns { boolean }\n */\nexport function isEmptyOrWhiteSpace(value: string) {\n    return !value || value.trim().length === 0;\n}","import React, { FC, ChangeEvent, useCallback, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\r\nimport { parseXlsFile } from '../../../../../tools/parseXlsx';\r\nimport { DraftUser, PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\r\nimport { CheckPermission } from '../../../../../features/permissions';\r\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\r\nimport { WithLabelsContext } from '../../../../../features/portableLabels';\r\nimport { WithPractisSetsContext } from '../../../../../features/portablePractisSets';\r\nimport { getUserRoleIdByName } from '../../tools';\r\nimport { useUserRolesState } from '../../../../../features/roles/store/states';\r\n\r\nimport { AssignFilters } from '../Filters/AssignFilters';\r\nimport { isTeamLeader } from '../../../../../constants/enums';\r\nimport { UserInterface } from '../../../../../constants/interfaces/User';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../../UserProfile/store/reducers';\r\nimport { Divider } from '@material-ui/core';\r\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { SelectAll } from '../../../../../ui/components/table-wrapper/SelectAll';\r\nimport { Popup } from '../../../../../ui/components/Popup';\r\nimport UpArrow from '../../../../../ui/icons/UpArrow';\r\nimport DownArrow from '../../../../../ui/icons/DownArrow';\r\nimport { Tooltip } from '../../../../../ui/components/Tooltip';\r\nimport Trash from '../../../../../ui/icons/Trash';\r\nimport RemoveUser from '../../../../../ui/icons/RemoveUser';\r\nimport { TableSearchInput } from '../../../../../ui/components/table-wrapper/table-tools/table-search-input';\r\nimport { ApplyFilters } from '../Filters/ApplyFilters';\r\nimport FilterByHandler from '../../../../../ui/components/Filters/FilterByHandler';\r\nimport FileDownload from '../../../../../ui/icons/FileDownload';\r\nimport Upload from '../../../../../ui/icons/Upload';\r\nimport { isExcelFile } from '../../../../../helpers/functions/file-helpers';\r\nimport { isEmptyOrWhiteSpace } from '../../../../../helpers/functions/strings';\r\n\r\nconst uuid = require('uuid/v1');\r\n\r\nconst StyledLabelActionPanel = styled.div<{ isActionPanelOpen?: boolean }>`\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin: ${({ isActionPanelOpen }) => (isActionPanelOpen ? '16px 0 0 0' : '16px 0')};\r\n`;\r\n\r\nconst StyledLabelActionButtons = styled.div`\r\n    display: flex;\r\n`;\r\n\r\nconst StyledIconWrapper = styled.div`\r\n    width: 40px;\r\n    height: 40px;\r\n    padding: 11px;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    background: ${props => props.theme.Colors.whiteFive};\r\n    &:active {\r\n        opacity: 0.7;\r\n    }\r\n`;\r\n\r\nconst ActionDropdownsWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n`;\r\n\r\nconst StyledHeaderActionItems = styled.div`\r\n    margin-left: 8px;\r\n    display: flex;\r\n    align-items: center;\r\n`;\r\n\r\nconst StyledIconContainer = styled.div`\r\n    position: relative;\r\n`;\r\n\r\nconst HeaderToolsItem = styled.div`\r\n    z-index: 1;\r\n`;\r\n\r\nconst IconWrapper = styled.div<{ disabled?: boolean }>`\r\n    height: 40px;\r\n    width: 40px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    border-radius: 4px;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.cloudyBlue\r\n            : props.theme.Colors.steelGrey};\r\n    background: var(--ps-white-1);\r\n    cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\r\n    margin-left: 8px;\r\n    z-index: 1;\r\n    &:active {\r\n        opacity: ${props => (props.disabled ? '1' : '0.7')};\r\n    }\r\n`;\r\n\r\nconst DeleteUsersIcon = styled.div`\r\n    height: 16px;\r\n    width: 14px;\r\n`;\r\n\r\nconst UploadTemplateIcon = styled.div`\r\n    width: 14px;\r\n    height: 16px;\r\n`;\r\n\r\nconst DownloadTemplateIcon = styled.div`\r\n    width: 16px;\r\n    height: 16px;\r\n`;\r\n\r\nconst RemoveUsersIcon = styled.div`\r\n    height: 16px;\r\n    width: 14px;\r\n    color: ${props => props.theme.Colors.tomato};\r\n`;\r\n\r\nconst SearchPanel = styled.div`\r\n    height: 40px;\r\n    width: 224px;\r\n    margin-right: 8px;\r\n`;\r\n\r\ntype UserFromExcelDoc = {\r\n    'First Name': string;\r\n    'Last Name': string;\r\n    Email: string;\r\n    Role: string;\r\n};\r\n\r\nconst StyledAssignAction = styled.div<{ open?: boolean; disabled?: boolean }>`\r\n    display: flex;\r\n    height: 40px;\r\n    width: 152px;\r\n    border-radius: 4px;\r\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\r\n    background: var(--ps-white-1);\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.cloudyBlue\r\n            : props.theme.Colors.steelGrey};\r\n    border: ${props => (props.open ? 1 : 0)}px solid\r\n        ${props => props.theme.Colors.cloudyBlue};\r\n    position: relative;\r\n`;\r\n\r\nconst IconHolder = styled.div<{ disabled: boolean }>`\r\n    width: 8px;\r\n    height: 100%;\r\n    display: flex;\r\n    position: absolute;\r\n    right: 15px;\r\n    top: 0;\r\n    pointer-events: none;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.cloudyBlue\r\n            : props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst Label = styled.div<{ disabled: boolean }>`\r\n    position: absolute;\r\n    top: 0;\r\n    left: 16px;\r\n    pointer-events: none;\r\n    font-size: 13px;\r\n    font-weight: normal;\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.cloudyBlue\r\n            : props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst TEMPLATE_URL_ADMIN =\r\n    'https://docs.google.com/uc?id=15Ojf5QCjC-d0g-_Qzsmho_6gWl2oUMDm&export=download&hl=en_US';\r\nconst TEMPLATE_URL_TEAM_LEADER =\r\n    'https://docs.google.com/uc?id=1dvshvYy5OC6_YgNwmX_jtS9oacNqyIFZ&export=download&hl=en_US';\r\n\r\nconst StyledUserCounterContainer = styled.div`\r\n    font-family: ${props => props.theme.Fonts.manrope};\r\n    font-size: 13px;\r\n    font-weight: normal;\r\n    font-stretch: normal;\r\n    font-style: normal;\r\n    line-height: normal;\r\n    letter-spacing: normal;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    align-self: center;\r\n`;\r\n\r\nexport const NewUserHeader: FC<{\r\n    profile?: UserInterface;\r\n    users?: PaginationResult<DraftUser>;\r\n    localUsers?: any;\r\n    selectedUsers: number[];\r\n    existingUserIds: number[];\r\n    onUsersImported(users: any[]): void;\r\n    onRemoveUsers(): void;\r\n    onRemoveExistingUsers(): void;\r\n    disableFilters: boolean;\r\n    disableSearch: boolean;\r\n    setSearchTerm(value: string): void;\r\n    assignFilters(\r\n        assignedLabels: number[],\r\n        deletedLabels: number[],\r\n        assignedPractisSets: PractisSetWithDueDate[],\r\n        //PSWDD we dont need due date for deleted practis set, because it will be removed anyway\r\n        deletedPractisSets: number[],\r\n        assignedTeams: number[],\r\n        deletedTeams: number[],\r\n        roleId: null | number\r\n    ): Promise<boolean>;\r\n    applyFilters(\r\n        assignedLabels: number[],\r\n        assignedPractisSets: PractisSetWithDueDate[],\r\n        assignedTeams: number[],\r\n        roleIds: number[]\r\n    ): Promise<boolean>;\r\n    selectedRoles: number[];\r\n    setSelectedRoles(value: number[]): void;\r\n    filterRoles: number[];\r\n    setFilterRoles(value: number[]): void;\r\n    filtersCount: number;\r\n    isRoleDisabled: boolean | undefined;\r\n    updateAllUsersCheck(checked: boolean): void;\r\n    userItemsList: DraftUser[] | undefined;\r\n    clearAllUsers: () => void;\r\n    isSelectAll: boolean;\r\n    updateSelectAll: (checked: boolean) => void;\r\n    dataTest: string;\r\n}> = ({\r\n    users,\r\n    localUsers,\r\n    selectedUsers,\r\n    existingUserIds,\r\n    onUsersImported,\r\n    onRemoveUsers,\r\n    onRemoveExistingUsers,\r\n    disableFilters,\r\n    disableSearch,\r\n    setSearchTerm,\r\n    assignFilters,\r\n    applyFilters,\r\n    selectedRoles,\r\n    setSelectedRoles,\r\n    filterRoles,\r\n    setFilterRoles,\r\n    filtersCount,\r\n    isRoleDisabled,\r\n    updateAllUsersCheck,\r\n    userItemsList,\r\n    clearAllUsers,\r\n    isSelectAll,\r\n    updateSelectAll,\r\n    dataTest\r\n}) => {\r\n        let upload: any;\r\n        const showMessage = useShowMessage();\r\n        const userRoles = useUserRolesState();\r\n        const profile = useSelector(getProfileState);\r\n\r\n        const handleDownloadTemplate = useCallback(() => {\r\n            const isUserTeamLeader = isTeamLeader(profile?.role?.name);\r\n\r\n            window.open(\r\n                isUserTeamLeader ? TEMPLATE_URL_TEAM_LEADER : TEMPLATE_URL_ADMIN,\r\n                '_blank'\r\n            );\r\n        }, [profile]);\r\n\r\n        const getRoleId = useCallback( (roleName: string) => {\r\n            return getUserRoleIdByName(roleName, userRoles.list);\r\n        }, [userRoles.list]);\r\n\r\n        /**\r\n         * function showFileFormatErrorMessage - shows invalid file format message\r\n         * @returns { void }\r\n        */\r\n        const showFileFormatErrorMessage = useCallback(() =>\r\n            showMessage('No valid scheme found', 'error')\r\n        , [showMessage]);\r\n\r\n        /**\r\n         * function handleParsedUsersData - filters out parsed data and converts it to user info,\r\n         * shows error if data format is incorrect\r\n         * @param { UserFromExcelDoc[] } data\r\n         * @returns { void }\r\n        */\r\n        const handleParsedUsersData = useCallback(\r\n            (data: UserFromExcelDoc[]) => {\r\n                const parsedResults = data\r\n                    .filter((user: UserFromExcelDoc) =>\r\n                        !(isEmptyOrWhiteSpace(user['First Name'])\r\n                            && isEmptyOrWhiteSpace(user['Last Name'])\r\n                            && isEmptyOrWhiteSpace(user['Email'])\r\n                            && isEmptyOrWhiteSpace(user['Role']))\r\n                    ).map((user: UserFromExcelDoc) => {\r\n                        return {\r\n                            id: uuid(),\r\n                            firstName: user['First Name'],\r\n                            lastName: user['Last Name'],\r\n                            email: user['Email'],\r\n                            roleId: getRoleId(!!user['Role'] ? user['Role'] : ''),\r\n                            practisSetIDs: [],\r\n                            labelIDs: [],\r\n                            practisSets: [],\r\n                            isEntryInvalid: false,\r\n                            teamIDs: [],\r\n                        };\r\n                });\r\n\r\n                if (parsedResults.length > 0) {\r\n                    onUsersImported(parsedResults);\r\n                } else {\r\n                    showFileFormatErrorMessage();\r\n                }\r\n            },\r\n            [showFileFormatErrorMessage, onUsersImported, getRoleId]\r\n        );\r\n\r\n        /**\r\n         * function handleImportUsers - perform file parsing if it's Excel file, otherwise shows error\r\n         * @param { Event } e\r\n         * @returns { void }\r\n        */\r\n        const handleImportUsers = useCallback(\r\n            (e: ChangeEvent<HTMLInputElement>) => {\r\n                const files: FileList | null = e.target.files;\r\n                if (files && files.length > 0) {\r\n                    if (isExcelFile(files[0].name)) {\r\n                        parseXlsFile(files[0], handleParsedUsersData);\r\n                    } else {\r\n                        showFileFormatErrorMessage();\r\n                    }\r\n                }\r\n                 // @ts-ignore\r\n                e.target.value = null;\r\n            },\r\n            [handleParsedUsersData, showFileFormatErrorMessage]\r\n        );\r\n\r\n        useEffect(() => {\r\n            return () => clearAllUsers();\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n        }, []);\r\n\r\n        const isDisabled = selectedUsers.length < 1;\r\n\r\n        const count = (!isEmpty(localUsers?.items) &&\r\n            localUsers.items.filter(\r\n                (item: any) => !item.isEntryInvalid\r\n            ).length);\r\n\r\n        const userItemsText =\r\n            count\r\n            ? `${count} ${\r\n                count > 1 ? 'items' : 'item'\r\n              }`\r\n            : '0 items';\r\n\r\n        return (\r\n            <>\r\n                {isEmpty(selectedUsers) && <Divider />}\r\n                <StyledLabelActionPanel isActionPanelOpen={!isEmpty(selectedUsers)}>\r\n                    {users && selectedUsers && (\r\n                        <SelectAll\r\n                            isSelectAll={isSelectAll}\r\n                            selectedLength={selectedUsers.length}\r\n                            totalCount={\r\n                                users.totalCount ||\r\n                                (localUsers?.items?.length &&\r\n                                    localUsers?.items?.filter(\r\n                                        (item: any) => !item.isEntryInvalid\r\n                                    ).length)\r\n                            }\r\n                            itemsPerPage={20}\r\n                            onClearSelecion={() => {\r\n                                clearAllUsers();\r\n                                updateAllUsersCheck(false);\r\n                                updateSelectAll(false);\r\n                            }}\r\n                            onSelectAll={() => {\r\n                                updateAllUsersCheck(true);\r\n                                updateSelectAll(true);\r\n                            }}\r\n                            style={{\r\n                                position: 'relative',\r\n                                width: '100%',\r\n                            }}\r\n                            dataTest={dataTest}\r\n                        >\r\n                            <ActionDropdownsWrapper>\r\n                                <WithLabelsContext.Provider\r\n                                    value={{\r\n                                        reducerName: 'draftEdit',\r\n                                        scope: 'assignFilters',\r\n                                    }}\r\n                                >\r\n                                    <WithPractisSetsContext.Provider\r\n                                        value={{\r\n                                            reducerName: 'draftEdit',\r\n                                            scope: 'assignFilters',\r\n                                        }}\r\n                                    >\r\n                                        <Popup<HTMLDivElement>\r\n                                            content={({ hide }) => (\r\n                                                <AssignFilters\r\n                                                    onSuccessApply={() =>\r\n                                                        hide()\r\n                                                    }\r\n                                                    users={users}\r\n                                                    selectedUsers={\r\n                                                        selectedUsers\r\n                                                    }\r\n                                                    assignFilters={\r\n                                                        assignFilters\r\n                                                    }\r\n                                                    selectedRoles={\r\n                                                        selectedRoles\r\n                                                    }\r\n                                                    setSelectedRoles={\r\n                                                        setSelectedRoles\r\n                                                    }\r\n                                                    isRoleDisabled={\r\n                                                        isRoleDisabled\r\n                                                    }\r\n                                                />\r\n                                            )}\r\n                                            anchorOrigin={{\r\n                                                vertical: 'bottom',\r\n                                                horizontal: 'left',\r\n                                            }}\r\n                                            transformOrigin={{\r\n                                                vertical: 'top',\r\n                                                horizontal: 'left',\r\n                                            }}\r\n                                        >\r\n                                            {(ref, { toggleShown, shown }) => (\r\n                                                <StyledAssignAction\r\n                                                    ref={ref}\r\n                                                    onClick={() =>\r\n                                                        !isDisabled &&\r\n                                                        toggleShown()\r\n                                                    }\r\n                                                    open={shown}\r\n                                                    disabled={isDisabled}\r\n                                                    data-test={`${dataTest}-assign-selected`}\r\n                                                >\r\n                                                    <Label\r\n                                                        disabled={isDisabled}\r\n                                                    >\r\n                                                        Assign...\r\n                                                    </Label>\r\n                                                    <IconHolder\r\n                                                        disabled={isDisabled}\r\n                                                    >\r\n                                                        {shown ? (\r\n                                                            <UpArrow />\r\n                                                        ) : (\r\n                                                            <DownArrow />\r\n                                                        )}\r\n                                                    </IconHolder>\r\n                                                </StyledAssignAction>\r\n                                            )}\r\n                                        </Popup>\r\n                                    </WithPractisSetsContext.Provider>\r\n                                </WithLabelsContext.Provider>\r\n                                <HeaderToolsItem>\r\n                                    <CheckPermission\r\n                                        permissions={[\r\n                                            NEW_PERMISSIONS.REMOVE_USER_FROM_STAGING,\r\n                                        ]}\r\n                                    >\r\n                                        <Tooltip\r\n                                            label={'Select users to delete'}\r\n                                            preset={'button-icon'}\r\n                                            disabled={!isDisabled}\r\n                                        >\r\n                                            <IconWrapper\r\n                                                onClick={() => {\r\n                                                    !isDisabled &&\r\n                                                        onRemoveUsers();\r\n                                                }}\r\n                                                disabled={isDisabled}\r\n                                                data-test={`${dataTest}-delete-selected`}\r\n                                            >\r\n                                                <DeleteUsersIcon>\r\n                                                    <Trash />\r\n                                                </DeleteUsersIcon>\r\n                                            </IconWrapper>\r\n                                        </Tooltip>\r\n                                    </CheckPermission>\r\n                                </HeaderToolsItem>\r\n                                {existingUserIds.length > 0 && (\r\n                                    <CheckPermission\r\n                                        permissions={[\r\n                                            NEW_PERMISSIONS.REMOVE_USER_FROM_STAGING,\r\n                                        ]}\r\n                                    >\r\n                                        <Tooltip\r\n                                            preset={'button-icon'}\r\n                                            label={'Remove all existing users'}\r\n                                            dataTest=\"remove-existing-users-tooltip\"\r\n                                        >\r\n                                            <IconWrapper\r\n                                                onClick={onRemoveExistingUsers}\r\n                                                data-test={`${dataTest}-delete-existing`}\r\n                                            >\r\n                                                <RemoveUsersIcon>\r\n                                                    <RemoveUser />\r\n                                                </RemoveUsersIcon>\r\n                                            </IconWrapper>\r\n                                        </Tooltip>\r\n                                    </CheckPermission>\r\n                                )}\r\n                            </ActionDropdownsWrapper>\r\n                        </SelectAll>\r\n                    )}\r\n\r\n                    {isEmpty(selectedUsers) && (\r\n                        <StyledLabelActionButtons>\r\n                            <SearchPanel>\r\n                                <TableSearchInput\r\n                                    onChange={setSearchTerm}\r\n                                    disabled={disableSearch}\r\n                                />\r\n                            </SearchPanel>\r\n\r\n                            <Popup<HTMLButtonElement>\r\n                                content={({ hide }) => (\r\n                                    <ApplyFilters\r\n                                        onSuccessApply={() => hide()}\r\n                                        applyFilters={applyFilters}\r\n                                        selectedRoles={filterRoles}\r\n                                        setSelectedRoles={setFilterRoles}\r\n                                        isRoleDisabled={isRoleDisabled}\r\n                                        hideDueDates={true}\r\n                                    />\r\n                                )}\r\n                                transformOrigin={{\r\n                                    horizontal: 272,\r\n                                    vertical: 0,\r\n                                }}\r\n                            >\r\n                                {(ref, { toggleShown, shown }) => (\r\n                                    <FilterByHandler\r\n                                        ref={ref}\r\n                                        open={shown}\r\n                                        disabled={disableFilters}\r\n                                        toggleOpen={toggleShown}\r\n                                        filtersCount={filtersCount}\r\n                                        dataTest={`${dataTest}-filters`}\r\n                                    />\r\n                                )}\r\n                            </Popup>\r\n                            <StyledIconContainer>\r\n                                <StyledHeaderActionItems>\r\n                                    <Tooltip\r\n                                        label={'Download template'}\r\n                                        preset={'button-icon'}\r\n                                        dataTest=\"download-template-tooltip\"\r\n                                    >\r\n                                        <StyledIconWrapper\r\n                                            onClick={() =>\r\n                                                handleDownloadTemplate()\r\n                                            }\r\n                                            data-test={`${dataTest}-download-template`}\r\n                                        >\r\n                                            <DownloadTemplateIcon>\r\n                                                <FileDownload />\r\n                                            </DownloadTemplateIcon>\r\n                                        </StyledIconWrapper>\r\n                                    </Tooltip>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledIconContainer>\r\n                            <StyledIconContainer>\r\n                                <StyledHeaderActionItems>\r\n                                    <Tooltip<HTMLDivElement>\r\n                                        label={'Upload template'}\r\n                                        preset={'button-icon'}\r\n                                        dataTest=\"upload-template-tooltip\"\r\n                                    >\r\n                                        {tooltipRef => (\r\n                                            <>\r\n                                                <input\r\n                                                    id=\"myInput\"\r\n                                                    type=\"file\"\r\n                                                    ref={ref => (upload = ref)}\r\n                                                    style={{ display: 'none' }}\r\n                                                    onChange={e =>\r\n                                                        handleImportUsers(e)\r\n                                                    }\r\n                                                />\r\n                                                <StyledIconWrapper\r\n                                                    ref={tooltipRef}\r\n                                                    onClick={() =>\r\n                                                        upload.click()\r\n                                                    }\r\n                                                    data-test={`${dataTest}-upload-template`}\r\n                                                >\r\n                                                    <UploadTemplateIcon>\r\n                                                        <Upload />\r\n                                                    </UploadTemplateIcon>\r\n                                                </StyledIconWrapper>\r\n                                            </>\r\n                                        )}\r\n                                    </Tooltip>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledIconContainer>\r\n                        </StyledLabelActionButtons>\r\n                    )}\r\n                    {!!users?.items.length && isEmpty(selectedUsers) && (\r\n                        <StyledUserCounterContainer data-test={`${dataTest}-counter`}>\r\n                            {userItemsText}\r\n                        </StyledUserCounterContainer>\r\n                    )}\r\n                </StyledLabelActionPanel>\r\n                {isEmpty(selectedUsers) && <Divider />}\r\n            </>\r\n        );\r\n    };\r\n","import XLSX from 'xlsx';\n\nexport const parseXlsFile = (file: any, onSuccess?: any) => {\n    const reader = new FileReader();\n    let generatedResults: any = [];\n\n    reader.onload = e => {\n        const bstr = e.target!.result;\n        const wb = XLSX.read(bstr, {\n            type: 'binary',\n            bookVBA: true,\n        });\n\n        wb.SheetNames.forEach(function(sheetName: string) {\n            const XL_row_object = XLSX.utils.sheet_to_json(\n                wb.Sheets[sheetName]\n            );\n            const json_object = JSON.stringify(XL_row_object);\n            let sheetResults = JSON.parse(json_object);\n            generatedResults = [...generatedResults, ...sheetResults];\n        });\n        onSuccess && onSuccess(generatedResults);\n        return generatedResults;\n    };\n    reader.readAsBinaryString(file);\n};\n","import React, { FC, useState } from 'react';\nimport {\n    filterInvitationRolesByPermissions,\n    getUserRoleNameById,\n} from '../../tools';\nimport styled from 'styled-components';\nimport { motion } from 'framer-motion';\nimport { ClickAwayListener } from '@material-ui/core';\nimport { usePermissionsState } from '../../../../../features/permissions/store/state';\nimport { useUserRolesState } from '../../../../../features/roles/store/states';\nimport { Variables } from '../../../../../theme/variables';\nimport OutsideActionBox from '../../../../../ui/components/OutsideActionBox/OutsideActionBox';\nimport RadioButton from '../../../../../ui/components/RadioButton';\nimport UpArrow from '../../../../../ui/icons/UpArrow';\nimport DownArrow from '../../../../../ui/icons/DownArrow';\n\nconst StyledSelectForm = styled.div`\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    height: 100%;\n`;\n\nconst StyledLabelWrapper = styled.div<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n    height: 100%;\n    padding: 0 16px;\n    cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n`;\n\nconst SelectContainer = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst SelectLabel = styled.div<{ color?: string }>`\n    font-size: 13px;\n    color: ${props => (props.color ? props.color : props.theme.Colors.black)};\n`;\n\nconst IconHolder = styled.div<{ disabled?: boolean }>`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    margin-left: 10px;\n    color: ${({ theme, disabled }) =>\n        disabled ? theme.Colors.cloudyBlue : theme.Colors.black};\n`;\n\nconst RolesContainer = styled(motion.div)`\n    padding: 24px 24px 16px 24px;\n    width: 129px;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    top: 8px;\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n    position: absolute;\n`;\n\nconst StyledRolesList = styled.div``;\n\nconst ScrollableRoleContainer = styled.div``;\n\nconst RoleItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    height: 24px;\n    margin-bottom: 8px;\n`;\n\nconst StyledRadioButton = styled(RadioButton)`\n    margin-bottom: 0;\n`;\n\nconst ANIMATION_SCALE = 5;\n\nexport const EditAssignRoles: FC<{\n    disabled?: boolean;\n    assignedRole: number | null;\n    handleRoleCheck(role: number | null): void;\n    modified: boolean;\n    setModified(modified: boolean): void;\n    dataTest: string;\n}> = ({ disabled, assignedRole, handleRoleCheck, modified, setModified, dataTest }) => {\n    const [open, setOpen] = useState(false);\n    const permissions = usePermissionsState();\n    const userRoles = useUserRolesState();\n    const roles = filterInvitationRolesByPermissions(\n        userRoles.list,\n        permissions\n    );\n    const assignedRoleName = getUserRoleNameById(assignedRole, userRoles.list);\n\n    const updateCheckedRole = (value: number) => {\n        setOpen(false);\n        handleRoleCheck(value);\n    };\n\n    return (\n        <ClickAwayListener onClickAway={() => setOpen(false)}>\n            <StyledSelectForm>\n                <StyledLabelWrapper\n                    onClick={() => {\n                        if (!modified) {\n                            setModified(true);\n                        }\n                        setOpen(!open);\n                    }}\n                    disabled={disabled}\n                    data-test={dataTest}\n                >\n                    <SelectLabel\n                        color={\n                            !assignedRoleName || disabled\n                                ? Variables.Colors.cloudyBlue\n                                : Variables.Colors.black\n                        }\n                    >\n                        {assignedRoleName}\n                    </SelectLabel>\n                    <IconHolder disabled={disabled}>\n                        {!disabled && open ? <UpArrow /> : <DownArrow />}\n                    </IconHolder>\n                </StyledLabelWrapper>\n                <SelectContainer open={open && !disabled}>\n                    <RolesContainer\n                        initial={{ scale: 1 / ANIMATION_SCALE }}\n                        animate={{ scale: 1 }}\n                        exit={{ scale: 0 }}\n                    >\n                        <StyledRolesList>\n                            <ScrollableRoleContainer>\n                                {roles &&\n                                    (roles || []).map(role => (\n                                        <RoleItemWrapper\n                                            key={role.value}\n                                            onClick={() => {\n                                                updateCheckedRole(role.value);\n                                            }}\n                                            data-test={`role-${role.name.toLowerCase()}`}\n                                        >\n                                            <StyledRadioButton\n                                                checked={\n                                                    assignedRole === role.value\n                                                }\n                                                size={12}\n                                                handleChange={() =>\n                                                    updateCheckedRole(\n                                                        role.value\n                                                    )\n                                                }\n                                                label={role.name}\n                                            />\n                                        </RoleItemWrapper>\n                                    ))}\n                            </ScrollableRoleContainer>\n                        </StyledRolesList>\n                    </RolesContainer>\n                </SelectContainer>\n            </StyledSelectForm>\n        </ClickAwayListener>\n    );\n};\n","import React, { FC, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { usePractisSetsState } from '../../../../../features/portablePractisSets/store/hors/withPractisSets/states';\nimport {\n    useResetPractisSets,\n    useSavePractisSets,\n    useSelectMultiplePractisSets,\n} from '../../../../../features/portablePractisSets/store/hors/withPractisSets/services';\nimport { AssignPractisSets } from '../../../../../features/portablePractisSets/templates/AssignPractisSets';\nimport { usePortablePractisSetsState } from '../../../../../features/portablePractisSets/store/states';\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\nimport { Popup } from '../../../../../ui/components/Popup';\nimport { Tooltip } from '../../../../../ui/components/Tooltip';\nimport UpArrow from '../../../../../ui/icons/UpArrow';\nimport DownArrow from '../../../../../ui/icons/DownArrow';\nimport { PractisSetStatuses } from '../../../../../constants/interfaces/PractisSets';\n\nconst Container = styled.div`\n    position: relative;\n    height: 100%;\n    width: 100%;\n`;\n\nconst SelectLabelWrapper = styled.div<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n    height: 100%;\n    padding: 0 16px;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n`;\n\nconst SelectLabel = styled.div<{ disabled?: boolean }>`\n    font-size: 13px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.lightBlueGray\n            : props.theme.Colors.black};\n`;\n\nconst IconHolder = styled.div<{ disabled?: boolean }>`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    margin-left: 10px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.lightBlueGray\n            : props.theme.Colors.black};\n`;\n\nconst EditAssignPractisSets: FC<{\n    selectedPractisSets: PractisSetWithDueDate[];\n    onSelectPractisSets(practisSetIds?: PractisSetWithDueDate[]): void;\n    modified: boolean;\n    setModified(modified: boolean): void;\n    dataTest: string;\n}> = ({ selectedPractisSets, onSelectPractisSets, modified, setModified, dataTest }) => {\n    const { saved } = usePractisSetsState();\n    const { data } = usePortablePractisSetsState();\n    const savePractisSets = useSavePractisSets();\n    const selectMultiplePractisSets = useSelectMultiplePractisSets();\n    const resetPractisSets = useResetPractisSets();\n\n    useEffect(() => {\n        selectMultiplePractisSets(selectedPractisSets);\n        savePractisSets();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [selectMultiplePractisSets, savePractisSets]);\n\n    useEffect(() => {\n        return () => {\n            resetPractisSets();\n        };\n    }, [resetPractisSets]);\n\n    useEffect(() => {\n        onSelectPractisSets(saved);\n    }, [onSelectPractisSets, saved]);\n\n    const practisSetsDisabled = !data || data.items.filter(item => item.status === PractisSetStatuses.ACTIVE).length < 1;\n\n    return (\n        <Container>\n            <Popup<HTMLDivElement>\n                content={({ hide }) => (\n                    <AssignPractisSets\n                        onSuccessApply={() => {\n                            hide();\n                        }}\n                    />\n                )}\n            >\n                {(ref, { toggleShown, shown }) => (\n                    <span ref={ref}>\n                        <Tooltip\n                            label={'No practis sets added yet'}\n                            preset={'dropdown'}\n                            disabled={!practisSetsDisabled}\n                        >\n                            <SelectLabelWrapper\n                                onClick={() => {\n                                    if (!modified && !practisSetsDisabled) {\n                                        setModified(true);\n                                    }\n                                    !practisSetsDisabled && toggleShown();\n                                }}\n                                disabled={practisSetsDisabled}\n                                data-test={dataTest}\n                            >\n                                <>\n                                    <SelectLabel disabled={practisSetsDisabled}>\n                                        {saved.length < 1\n                                            ? 'Practis Sets'\n                                            : `${saved.length} ${\n                                                  saved.length > 1\n                                                      ? 'Practis Sets'\n                                                      : 'Practis Set'\n                                              }`}\n                                    </SelectLabel>\n                                    <IconHolder disabled={practisSetsDisabled}>\n                                        {shown ? <UpArrow /> : <DownArrow />}\n                                    </IconHolder>\n                                </>\n                            </SelectLabelWrapper>\n                        </Tooltip>\n                    </span>\n                )}\n            </Popup>\n        </Container>\n    );\n};\n\nexport default EditAssignPractisSets;\n","import React, { FC, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { useTeamsState } from '../../../../../features/portableTeams/store/hors/withTeams/states';\r\nimport {\r\n    useResetTeams,\r\n    useSaveTeams,\r\n    useSelectMultipleTeams,\r\n} from '../../../../../features/portableTeams/store/hors/withTeams/services';\r\nimport { AssignTeams } from '../../../../../features/portableTeams/templates/AssignTeams';\r\nimport { usePortableTeamsState } from '../../../../../features/portableTeams/store/states';\r\nimport { Popup } from '../../../../../ui/components/Popup';\r\nimport { Tooltip } from '../../../../../ui/components/Tooltip';\r\nimport UpArrow from '../../../../../ui/icons/UpArrow';\r\nimport DownArrow from '../../../../../ui/icons/DownArrow';\r\n\r\nconst Container = styled.div`\r\n    position: relative;\r\n    height: 100%;\r\n    width: 100%;\r\n`;\r\n\r\nconst SelectLabelWrapper = styled.div<{ disabled?: boolean }>`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    width: 100%;\r\n    height: 100%;\r\n    padding: 0 16px;\r\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\r\n`;\r\n\r\nconst SelectLabel = styled.div<{ disabled?: boolean }>`\r\n    font-size: 13px;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.lightBlueGray\r\n            : props.theme.Colors.black};\r\n`;\r\n\r\nconst IconHolder = styled.div<{ disabled?: boolean }>`\r\n    width: 8px;\r\n    height: 100%;\r\n    display: flex;\r\n    pointer-events: none;\r\n    align-items: center;\r\n    justify-content: center;\r\n    margin-left: 10px;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.lightBlueGray\r\n            : props.theme.Colors.black};\r\n`;\r\n\r\nconst EditAssignTeams: FC<{\r\n    selectedTeams: number[];\r\n    saveTeams?(): void;\r\n    onSelectTeams(TeamIds?: number[]): void;\r\n    modified: boolean;\r\n    setModified(modified: boolean): void;\r\n    dataTest: string;\r\n}> = ({ selectedTeams, onSelectTeams, modified, setModified, dataTest }) => {\r\n    const { saved } = useTeamsState();\r\n    const { data } = usePortableTeamsState();\r\n    const saveTeams = useSaveTeams();\r\n    const selectMultipleTeams = useSelectMultipleTeams();\r\n    const resetTeams = useResetTeams();\r\n\r\n    useEffect(() => {\r\n        selectMultipleTeams(selectedTeams);\r\n        saveTeams();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [saveTeams, selectMultipleTeams]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetTeams();\r\n        };\r\n    }, [resetTeams]);\r\n\r\n    useEffect(() => {\r\n        onSelectTeams(saved);\r\n    }, [onSelectTeams, saved]);\r\n\r\n    const TeamsDisabled = !data || data.items.length < 1;\r\n\r\n    return (\r\n        <Container>\r\n            <Popup<HTMLDivElement>\r\n                content={({ hide }) => (\r\n                    <AssignTeams\r\n                        onSuccessApply={() => {\r\n                            hide();\r\n                        }}\r\n                        onCancel={() => {\r\n                            hide();\r\n                        }}\r\n                        selectedTeams={selectedTeams}\r\n                    />\r\n                )}\r\n            >\r\n                {(ref, { toggleShown, shown }) => (\r\n                    <span ref={ref}>\r\n                        <Tooltip\r\n                            label={'No teams added yet'}\r\n                            preset={'dropdown'}\r\n                            disabled={!TeamsDisabled}\r\n                        >\r\n                            <SelectLabelWrapper\r\n                                onClick={() => {\r\n                                    if (!modified && !TeamsDisabled) {\r\n                                        setModified(true);\r\n                                    }\r\n                                    !TeamsDisabled && toggleShown();\r\n                                }}\r\n                                disabled={TeamsDisabled}\r\n                                data-test={dataTest}\r\n                            >\r\n                                <>\r\n                                    <SelectLabel disabled={TeamsDisabled}>\r\n                                        {saved.length < 1\r\n                                            ? 'Teams'\r\n                                            : `${saved.length} ${\r\n                                                  saved.length > 1\r\n                                                      ? 'Teams'\r\n                                                      : 'Team'\r\n                                              }`}\r\n                                    </SelectLabel>\r\n                                    <IconHolder disabled={TeamsDisabled}>\r\n                                        {shown ? <UpArrow /> : <DownArrow />}\r\n                                    </IconHolder>\r\n                                </>\r\n                            </SelectLabelWrapper>\r\n                        </Tooltip>\r\n                    </span>\r\n                )}\r\n            </Popup>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default EditAssignTeams;\r\n","import React, { FC, useEffect } from 'react';\nimport styled from 'styled-components';\n\nimport { usePortableLabelsState } from '../../../../../features/portableLabels/store/states';\nimport { AssignLabels } from '../../../../../features/portableLabels/templates/AssignLabels';\nimport { useLabelsState } from '../../../../../features/portableLabels/store/hors/withLabels/states';\nimport {\n    useResetLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../features/portableLabels/store/hors/withLabels/services';\nimport { Popup } from '../../../../../ui/components/Popup';\nimport { Tooltip } from '../../../../../ui/components/Tooltip';\nimport UpArrow from '../../../../../ui/icons/UpArrow';\nimport DownArrow from '../../../../../ui/icons/DownArrow';\n\nconst Container = styled.div`\n    position: relative;\n    height: 100%;\n    width: 100%;\n`;\n\nconst SelectLabelWrapper = styled.div<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n    height: 100%;\n    padding: 0 16px;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n`;\n\nconst SelectLabel = styled.div<{ disabled?: boolean }>`\n    font-size: 13px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.lightBlueGray\n            : props.theme.Colors.black};\n`;\n\nconst IconHolder = styled.div<{ disabled?: boolean }>`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    margin-left: 10px;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.lightBlueGray\n            : props.theme.Colors.black};\n`;\n\nconst EditAssignLabels: FC<{\n    selectedLabels: number[];\n    onSelectLabels(labelIds?: number[]): void;\n    modified: boolean;\n    setModified(modified: boolean): void;\n    dataTest: string;\n}> = ({ selectedLabels, onSelectLabels, modified, setModified, dataTest }) => {\n    const { saved } = useLabelsState();\n    const { data } = usePortableLabelsState();\n    const saveLabels = useSaveLabels();\n    const selectLabels = useSelectLabels();\n    const resetLabels = useResetLabels();\n\n    useEffect(() => {\n        selectLabels(selectedLabels);\n        saveLabels();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [selectLabels, saveLabels]);\n\n    useEffect(() => {\n        return () => {\n            resetLabels();\n        };\n    }, [resetLabels]);\n\n    useEffect(() => {\n        onSelectLabels(saved);\n    }, [onSelectLabels, saved]);\n\n    const labelsDisabled = !data || data.items.length < 1;\n    const selectedUserLabelsCount = selectedLabels.filter(id => id > 0).length;\n\n    return (\n        <Container>\n            <Popup<HTMLDivElement>\n                content={({ hide }) => (\n                    <AssignLabels\n                        onSuccessApply={() => {\n                            hide();\n                        }}\n                    />\n                )}\n            >\n                {(ref, { toggleShown, shown }) => (\n                    <span ref={ref}>\n                        <Tooltip\n                            label={'No labels added yet'}\n                            preset={'dropdown'}\n                            disabled={!labelsDisabled}\n                        >\n                            <SelectLabelWrapper\n                                onClick={() => {\n                                    if (!modified && !labelsDisabled) {\n                                        setModified(true);\n                                    }\n                                    !labelsDisabled && toggleShown();\n                                }}\n                                disabled={labelsDisabled}\n                                data-test={dataTest}\n                            >\n                                <>\n                                    <SelectLabel disabled={labelsDisabled}>\n                                        {selectedUserLabelsCount < 1\n                                            ? 'Labels'\n                                            : `${selectedUserLabelsCount} ${\n                                                  selectedUserLabelsCount > 1\n                                                      ? 'Labels'\n                                                      : 'Label'\n                                              }`}\n                                    </SelectLabel>\n                                    <IconHolder disabled={labelsDisabled}>\n                                        {shown ? <UpArrow /> : <DownArrow />}\n                                    </IconHolder>\n                                </>\n                            </SelectLabelWrapper>\n                        </Tooltip>\n                    </span>\n                )}\n            </Popup>\n        </Container>\n    );\n};\n\nexport default EditAssignLabels;\n","import React, { FC } from 'react';\nimport { IconProps } from './types';\n\nexport const ThinClose: FC<IconProps> = ({ className }) => {\n    return (\n        <svg\n            width=\"100%\"\n            height=\"100%\"\n            viewBox=\"0 0 16 16\"\n            className={className}\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n        >\n            <g fill=\"none\" fillRule=\"evenodd\">\n                <g>\n                    <g>\n                        <path\n                            d=\"M0 0H16V16H0z\"\n                            transform=\"translate(-1342 -404) translate(1342 404)\"\n                        />\n                        <g stroke=\"currentColor\" strokeLinecap=\"round\">\n                            <path\n                                d=\"M0 0L12 12M12 0L0 12\"\n                                transform=\"translate(-1342 -404) translate(1342 404) translate(1.953 2.021)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </g>\n        </svg>\n    );\n};\n\nexport default ThinClose;\n","import React, { FC } from 'react';\nimport { IconProps } from './types';\n\nexport const ThinCheck: FC<IconProps> = ({ className }) => {\n    return (\n        <svg\n            width=\"100%\"\n            height=\"100%\"\n            viewBox=\"0 0 16 16\"\n            className={className}\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n        >\n            <g fill=\"none\" fillRule=\"evenodd\">\n                <g>\n                    <g>\n                        <path\n                            d=\"M0 0H16V16H0z\"\n                            transform=\"translate(-1389 -404) translate(1389 404)\"\n                        />\n                        <path\n                            stroke=\"currentColor\"\n                            strokeLinecap=\"round\"\n                            d=\"M0.98 9.032L5.024 13.076 15.099 3\"\n                            transform=\"translate(-1389 -404) translate(1389 404)\"\n                        />\n                    </g>\n                </g>\n            </g>\n        </svg>\n    );\n};\n\nexport default ThinCheck;\n","import React, { FC, useState, useEffect } from 'react';\nimport * as EmailValidator from 'email-validator';\nimport styled from 'styled-components';\n\nimport { DraftUser, PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\nimport { CheckPermission } from '../../../../../features/permissions';\nimport { WithPractisSetsContext } from '../../../../../features/portablePractisSets';\nimport { WithTeamsContext } from '../../../../../features/portableTeams';\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\nimport { EditAssignRoles } from './EditAssignRoles';\nimport EditAssignPractisSets from './EditAssignPractisSets';\nimport {\n    useResetSelectedLabels,\n    useSelectLabels,\n} from '../../../../../features/portableLabels/store/hors/withLabels/services';\nimport EditAssignTeams from './EditAssignTeams';\nimport EditAssignLabels from './EditAssignLabels';\nimport OutsideActionBox from '../../../../../ui/components/OutsideActionBox/OutsideActionBox';\nimport ThinClose from '../../../../../ui/icons/ThinClose';\nimport ThinCheck from '../../../../../ui/icons/ThinCheck';\n\n//region Styles\nconst TableRow = styled.tr`\n    &&:hover {\n        background: unset;\n    }\n`;\n\nconst Container = styled.div`\n    display: grid;\n    grid-template-columns: 16fr 13fr 18fr 12fr 11fr 15fr 15fr;\n    grid-template-rows: 1fr;\n    grid-column-gap: 8px;\n    padding: 7.5px 0;\n    position: relative;\n`;\n\nconst Actions = styled.div`\n    position: absolute;\n    right: 0;\n    bottom: -40px;\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    grid-template-rows: 1fr;\n    grid-column-gap: 8px;\n`;\n\nconst ActionButton = styled.div<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 40px;\n    height: 40px;\n    border-radius: 4px;\n    background: ${props => props.theme.Colors.whiteFive};\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    &&:hover {\n        opacity: 0.9;\n    }\n`;\n\nconst ActionIcon = styled.div`\n    width: 16px;\n    height: 16px;\n    display: flex;\n    color: inherit;\n`;\n\nconst SectionItem = styled.div`\n    display: flex;\n    align-items: center;\n    height: 40px;\n    border-radius: 4px;\n    background: ${props => props.theme.Colors.whiteFive};\n    position: relative;\n    & > div {\n        width: 100%;\n    }\n`;\n\nconst SectionError = styled.div`\n    position: absolute;\n    bottom: -20px;\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.tomato};\n`;\n\nconst Input = styled.input<{ hasError?: boolean }>`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 13px;\n    font-weight: normal;\n    color: ${props => props.theme.Colors.black};\n    border: none;\n    background: transparent;\n    height: 100%;\n    width: 100%;\n    padding: 0 16px;\n    border-radius: 4px;\n    box-shadow: 0 0 0 ${props => (props.hasError ? '1px' : '0px')} ${props => props.theme.Colors.tomato};\n`;\n//endregion\n\nconst EditUserItem: FC<{\n    user: DraftUser;\n    setUser(user: DraftUser): void;\n    handleUpdateSelectedUser(): void;\n    assignedRole: number | null;\n    onAssignRoleCheck(role: number | null): void;\n    selectedUserLabels: number[];\n    setSelectedUserLabels: (labelIds: number[]) => void;\n    selectedUserPractisSets: PractisSetWithDueDate[];\n    setSelectedUserPractisSets: (practisSetIds: PractisSetWithDueDate[]) => void;\n    selectedUserTeams: number[];\n    setSelectedUserTeams: (teamIds: number[]) => void;\n    handleInputChange: (\n        e: React.ChangeEvent<HTMLInputElement>,\n        field: string\n    ) => void;\n    isRoleDisabled: boolean | undefined;\n    dataTest: string;\n}> = ({\n    user,\n    setUser,\n    handleUpdateSelectedUser,\n    handleInputChange,\n    assignedRole,\n    onAssignRoleCheck,\n    setSelectedUserLabels,\n    selectedUserLabels,\n    setSelectedUserPractisSets,\n    selectedUserPractisSets,\n    setSelectedUserTeams,\n    selectedUserTeams,\n    isRoleDisabled,\n    dataTest\n}) => {\n    const selectLabels = useSelectLabels();\n    const resetSelectedLabels = useResetSelectedLabels();\n    const [modified, setModified] = useState(false);\n    const [hideActions, setHideActions] = useState(false);\n\n    useEffect(() => {\n        selectLabels(user.labelIDs);\n    }, [selectLabels, user]);\n\n    const resetSelectedUser = () => {\n        setUser({\n            id: '',\n            email: '',\n            firstName: '',\n            lastName: '',\n            labelIDs: [],\n            practisSetIDs: [],\n            teamIDs: [],\n            roleId: null,\n        });\n        resetSelectedLabels();\n    };\n\n    const handleChange = (\n        e: React.ChangeEvent<HTMLInputElement>,\n        field: string\n    ) => {\n        if (!modified) {\n            setModified(true);\n        }\n        handleInputChange(e, field);\n    };\n\n    const handleSaveUser = () => {\n        setHideActions(true);\n        handleUpdateSelectedUser();\n    };\n\n    const isFirstNameInvalid = !user.firstName || user.firstName.length < 1;\n    const isLastNameInvalid = !user.lastName || user.lastName.length < 1;\n    const isEmailInvalid = !EmailValidator.validate(user.email.trim());\n    const isRoleInvalid = !assignedRole;\n\n    const isEditFormInvalid =\n        isFirstNameInvalid ||\n        isLastNameInvalid ||\n        isEmailInvalid ||\n        isRoleInvalid;\n\n    return (\n        <TableRow data-test={`${dataTest}-row`}>\n            <td colSpan={9}>\n                <OutsideActionBox\n                    open={true}\n                    toggleOpen={() => {\n                        if (!modified) {\n                            resetSelectedUser();\n                        }\n                    }}\n                >\n                    <Container>\n                        <SectionItem>\n                            <Input\n                                value={user.firstName}\n                                onChange={e => {\n                                    handleChange(e, 'firstName');\n                                }}\n                                autoFocus={true}\n                                data-test={`${dataTest}-first-name`}\n                            />\n                        </SectionItem>\n                        <SectionItem>\n                            <Input\n                                value={user.lastName}\n                                onChange={e => {\n                                    handleChange(e, 'lastName');\n                                }}\n                                data-test={`${dataTest}-last-name`}\n                            />\n                        </SectionItem>\n                        <SectionItem>\n                            <Input\n                                value={user.email}\n                                onChange={e => {\n                                    handleChange(e, 'email');\n                                }}\n                                hasError={isEmailInvalid}\n                                data-test={`${dataTest}-email`}\n                            />\n                            {isEmailInvalid && (\n                                <SectionError>\n                                    Enter a valid email address \n                                </SectionError>\n                            )}\n                        </SectionItem>\n                        <SectionItem>\n                            <CheckPermission\n                                permissions={[\n                                    NEW_PERMISSIONS.ASSIGN_INVITATION_ROLE,\n                                ]}\n                            >\n                                <EditAssignRoles\n                                    disabled={isRoleDisabled}\n                                    assignedRole={assignedRole}\n                                    handleRoleCheck={(role: number) => {\n                                        onAssignRoleCheck(role);\n                                    }}\n                                    modified={modified}\n                                    setModified={setModified}\n                                    dataTest={`${dataTest}-roles`}\n                                />\n                            </CheckPermission>\n                        </SectionItem>\n                        <SectionItem>\n                            <CheckPermission\n                                permissions={[\n                                    NEW_PERMISSIONS.ASSIGN_INVITATION_PRACTIS_SET,\n                                ]}\n                            >\n                                <WithTeamsContext.Provider\n                                    value={{\n                                        reducerName: 'draftEdit',\n                                        scope: 'editUser',\n                                    }}\n                                >\n                                    <EditAssignTeams\n                                        selectedTeams={selectedUserTeams}\n                                        onSelectTeams={setSelectedUserTeams}\n                                        modified={modified}\n                                        setModified={setModified}\n                                        dataTest={`${dataTest}-teams`}\n                                    />\n                                </WithTeamsContext.Provider>\n                            </CheckPermission>\n                        </SectionItem>\n                        <SectionItem>\n                            <CheckPermission\n                                permissions={[\n                                    NEW_PERMISSIONS.ASSIGN_INVITATION_PRACTIS_SET,\n                                ]}\n                            >\n                                <WithPractisSetsContext.Provider\n                                    value={{\n                                        reducerName: 'draftEdit',\n                                        scope: 'editUser',\n                                    }}\n                                >\n                                    <EditAssignPractisSets\n                                        selectedPractisSets={\n                                            selectedUserPractisSets\n                                        }\n                                        onSelectPractisSets={\n                                            setSelectedUserPractisSets\n                                        }\n                                        modified={modified}\n                                        setModified={setModified}\n                                        dataTest={`${dataTest}-practis-sets`}\n                                    />\n                                </WithPractisSetsContext.Provider>\n                            </CheckPermission>\n                        </SectionItem>\n                        <SectionItem>\n                            <CheckPermission\n                                permissions={[\n                                    NEW_PERMISSIONS.ASSIGN_INVITATION_LABEL,\n                                ]}\n                            >\n                                <EditAssignLabels\n                                    selectedLabels={selectedUserLabels}\n                                    onSelectLabels={setSelectedUserLabels}\n                                    modified={modified}\n                                    setModified={setModified}\n                                    dataTest={`${dataTest}-labels`}\n                                />\n                            </CheckPermission>\n                        </SectionItem>\n                        {!hideActions && (\n                            <Actions>\n                                <ActionButton onClick={resetSelectedUser} data-test={`${dataTest}-cancel`}>\n                                    <ActionIcon>\n                                        <ThinClose />\n                                    </ActionIcon>\n                                </ActionButton>\n                                <ActionButton\n                                    onClick={() => {\n                                        !isEditFormInvalid && handleSaveUser();\n                                    }}\n                                    disabled={isEditFormInvalid}\n                                    data-test={`${dataTest}-save`}\n                                >\n                                    <ActionIcon>\n                                        <ThinCheck />\n                                    </ActionIcon>\n                                </ActionButton>\n                            </Actions>\n                        )}\n                    </Container>\n                </OutsideActionBox>\n            </td>\n        </TableRow>\n    );\n};\n\nexport default EditUserItem;\n","import { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { TableCell } from '../table-cell';\n\nconst StyledTableCell = styled(TableCell)`\n    padding: 0;\n    border-bottom: 1px solid ${props => props.theme.Colors.paleGrey};\n`;\n\nexport const TableCheckboxHeaderCell: FC<{ width?: number, dataTest?: string; }> = ({\n    children,\n    width,\n    dataTest\n}) => {\n    return <StyledTableCell width={width} dataTest={dataTest}>{children}</StyledTableCell>;\n};\n","import React, { ChangeEventHandler, FC } from 'react';\nimport Checkbox from '../../../Checkbox';\nimport { Variables } from '../../../../../theme/variables';\nimport styled from 'styled-components';\nimport { DEFAULT_SIZE } from './constants';\n\nconst CheckboxContainer = styled.div`\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: initial;\n    flex-shrink: 0;\n    margin-right: 16px;\n`;\n\nconst StyledCheckbox = styled(Checkbox)`\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0;\n`;\n\nexport const TableCheckbox: FC<{\n    checked: boolean;\n    handleCheck: ChangeEventHandler<HTMLInputElement>;\n    partial?: boolean;\n    disabled?: boolean;\n    size?: number;\n}> = ({ checked, partial, disabled, handleCheck, size }) => {\n    return (\n        <CheckboxContainer\n            onClick={e => {\n                e.stopPropagation();\n            }}\n        >\n            <StyledCheckbox\n                size={size ? size : DEFAULT_SIZE}\n                checked={checked}\n                partial={partial}\n                disabled={disabled}\n                background={Variables.Colors.white}\n                handleChange={handleCheck}\n                border={Variables.Colors.cloudyBlue}\n            />\n        </CheckboxContainer>\n    );\n};\n","import { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { TableCell } from '../table-cell';\n\nconst StyledTableCell = styled(TableCell)`\n    padding: 0;\n`;\n\nexport const TableCheckboxCell: FC<{ width?: number }> = ({\n    children,\n    width,\n}) => {\n    return <StyledTableCell width={width}>{children}</StyledTableCell>;\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nconst NewUserExclamation = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                viewBox=\"0 0 2 11\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.2%\"\n                            x=\"-14.3%\"\n                            y=\"-1.2%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M16.884 86.34v-7.02h-1.768v7.02h1.768zm0 2.34v-1.56h-1.768v1.56h1.768z\"\n                                transform=\"translate(-1367 -295) translate(1352 216)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NewUserExclamation;\n","import { FC, CSSProperties, memo } from 'react';\nimport styled from 'styled-components';\n\nimport { SIZES } from '../table-wrapper/constants';\n\nconst ScrollContainer = styled.div<{ addOverflow?: boolean }>`\n    ${props => props.addOverflow && `overflow-y: hidden;`}\n    ${props => props.addOverflow && `overflow-x: auto;`}\n    transform: rotateZ(180deg);\n    direction: rtl;\n\n    ::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.whiteTwo};\n        border-radius: 8px;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n        background: ${props => props.theme.Colors.whiteThree};\n    }\n`;\n\nconst TableInner = styled.table`\n    border-collapse: separate;\n    border-spacing: 0;\n    width: 100%;\n    display: inline-table;\n    transform: rotateZ(180deg);\n    direction: ltr;\n    min-width: ${SIZES.MIN_WIDTH}px;\n\n    ::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.whiteTwo};\n        border-radius: 8px;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n        background: ${props => props.theme.Colors.whiteThree};\n    }\n`;\n\nconst TableCont = styled.div`\n    display: block;\n    border-radius: 8px;\n    background: ${props => props.theme.Colors.white};\n    position: relative;\n`;\n\nexport const Table: FC<{\n    className?: string;\n    containerStyles?: CSSProperties;\n    cornered?: boolean;\n    hideSpacer?: boolean;\n    addOverflow?: boolean;\n}> = memo(\n    ({ addOverflow, children, className, containerStyles }) => {\n        return (\n            <TableCont style={containerStyles}>\n                <ScrollContainer addOverflow={addOverflow}>\n                    <TableInner className={className}>{children}</TableInner>\n                </ScrollContainer>\n            </TableCont>\n        );\n    }\n);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst THead = styled.thead``;\n\nexport const TableHead: FC<{children?: React.ReactNode, dataTest?: string }> =\n    ({ children, dataTest }) => <THead data-test={dataTest}>{children}</THead>;\n","import React, { FC, memo } from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../theme/variables';\n\nconst Root = styled.div`\n    flex: 1;\n    display: flex;\n    justify-content: flex-end;\n    @media (max-width: ${Variables.BreakPoints.responsiveSmPlus}px) {\n        margin-top: 8px;\n        justify-content: flex-start;\n        flex-wrap: wrap;\n    }\n`;\n\nexport const TableToolsRight: FC<{\n    className?: string;\n}> = memo(({ children, className }) => (\n    <Root className={className}>{children}</Root>\n));\n","import React, { FC, memo } from 'react';\nimport styled from 'styled-components';\n\nimport { SIZES } from '../table-wrapper/constants';\n\nconst Root = styled.div`\n    min-width: ${SIZES.MIN_WIDTH}px;\n    display: flex;\n    justify-content: stretch;\n    align-items: stretch;\n    padding: 16px 0;\n`;\n\nexport const TableTools: FC<{\n    className?: string;\n}> = memo(({ children, className }) => (\n    <Root className={className}>{children}</Root>\n));\n","import React, { FC, memo } from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../theme/variables';\n\nconst Root = styled.div`\n    display: flex;\n    flex: 1;\n    justify-content: space-between;\n    @media (max-width: ${Variables.BreakPoints.responsiveSmPlus}px) {\n        flex-direction: column;\n    }\n`;\n\nexport const TableToolsWrapper: FC<{\n    className?: string;\n}> = memo(({ children, className }) => (\n    <Root className={className}>{children}</Root>\n));\n","import React, { FC, memo } from 'react';\nimport styled from 'styled-components';\n\nconst Root = styled.div`\n    display: flex;\n`;\n\nexport const TableToolsLeft: FC<{\n    className?: string;\n}> = memo(({ children, className }) => (\n    <Root className={className}>{children}</Root>\n));\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const EditPencil = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 15 15\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <g fill=\"#currentColor\">\n                        <path\n                            d=\"M1358.3 306.282l-3.585.718-.715-.718.717-3.583 4.657-4.657 3.581-3.581.36-.36.36-.359c.989-.99 2.593-.99 3.583 0 .99.99.99 2.594 0 3.583l-8.958 8.957zm-2.151-3.582l-.499.498-.537 2.69 2.688-.54.498-.498-2.15-2.15zm.716-.717l2.15 2.15 6.45-6.45-2.15-2.15-6.45 6.45zm9.676-7.524c-.593-.593-1.557-.593-2.15 0l-.359.358 2.15 2.15.36-.358c.555-.556.59-1.438.103-2.035z\"\n                            transform=\"translate(-1354 -293)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default EditPencil;\n","import { FC } from 'react';\n\nimport styled from 'styled-components';\nimport { TableBody } from '../table-body-wrapper/table-body';\n\nconst TableRow = styled.tr`\n    pointer-events: none;\n`;\n\nconst StyledTableBody = styled(TableBody)`\n    &:before {\n        line-height: unset;\n    }\n`\n\nexport const TableNoResultBody: FC<{}> = ({ children }) => (\n    <StyledTableBody>\n        <TableRow>\n            <td colSpan={100}>{children}</td>\n        </TableRow>\n    </StyledTableBody>\n);\n","import styled from 'styled-components';\n\nexport const StyledNoResults = styled.div`\n    display: flex;\n    padding-top: 136px;\n    padding-bottom: 88px;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const StyledNoResultsContent = styled.div`\n    max-width: 300px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const NoResultsTitle = styled.div<{ width?: string }>`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 15px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    ${props => !!props.width && `width: ${props.width};`}\n`;\n\nexport const NoResultsIcon = styled.div`\n    width: 48px;\n    height: 48px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 10px;\n`;\n\n","import { FC } from 'react';\n\nimport {\n    NoResultsIcon,\n    NoResultsTitle,\n    StyledNoResults,\n    StyledNoResultsContent,\n} from './styles';\n\nexport const TableNoResult: FC<{\n    icon?: any;\n    width?: string;\n    subTitle?: string;\n    subTitleWidth?: string;\n    dataTest?: string;\n}> = ({ icon: Icon, width, dataTest, children }) => (\n    <StyledNoResults>\n        <StyledNoResultsContent>\n            {Icon && (\n                <NoResultsIcon data-test={dataTest && `${dataTest}-icon`}>\n                    <Icon />\n                </NoResultsIcon>\n            )}\n            <NoResultsTitle\n                width={width}\n                data-test={dataTest && `${dataTest}-text`}\n            >\n                {children}\n            </NoResultsTitle>\n        </StyledNoResultsContent>\n    </StyledNoResults>\n);\n","import React, { FC, useEffect, useRef, useState } from 'react';\n\nimport styled from 'styled-components';\nimport { NewUserValues } from '../../models/NewUserValues';\nimport { getUserRoleNameById, InvitationEmailErrors } from '../../tools';\nimport {\n    DraftUser,\n    PractisSetWithDueDate,\n} from '../../../../../constants/interfaces/Draft';\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\nimport { useIfChanged } from '../../../../../helpers/hooks/usePreviousData';\nimport EditUserItem from './EditUserItem';\nimport { useUserRolesState } from '../../../../../features/roles/store/states';\nimport { TableCheckbox } from '../../../../../ui/components/table-wrapper/table/table-checkbox';\nimport {\n    TableCheckboxCell,\n    TableCheckboxHeaderCell,\n} from '../../../../../ui/components/table-wrapper/table/TableCheckbox';\nimport { TableHeaderCell } from '../../../../../ui/components/table-wrapper/table/table-header/table-header-cell';\nimport { TableCell } from '../../../../../ui/components/table-wrapper/table/table-cell';\nimport { TableBody } from '../../../../../ui/components/table-wrapper/table/table-body-wrapper/table-body';\nimport { ScrollPagination } from '../../../../../ui/components/ScrollPagination';\nimport { TableRow } from '../../../../../ui/components/table-wrapper/table/table-row';\nimport NewUserExclamation from '../../../../../ui/icons/NewUserExclamation';\nimport { Tooltip } from '../../../../../ui/components/Tooltip';\nimport { useOrderBy } from '../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { Table, TableHead } from '../../../../../ui/components/Table';\nimport EditPencil from '../../../../../ui/icons/EditPencil';\nimport Trash from '../../../../../ui/icons/Trash';\nimport { TableNoResultBody } from '../../../../../ui/components/table-wrapper/table/TableNoResultBody';\nimport { TableNoResult } from '../../../../../ui/components/table-wrapper/table/TableNoResult';\nimport NoTrainingsFiltering from '../../../../../ui/icons/NoTrainingsFiltering';\nimport NoSearchResult from '../../../../../ui/icons/NoSearchResult';\n\nconst ITEMS_PER_PAGE = 20;\n\n//region Styles\nconst TableHeaderFirstCell = styled(TableHeaderCell)`\n    min-width: 120px;\n`;\n\nconst StyledTableCell = styled(TableCell)`\n    padding: 0;\n`;\n\nconst StyledTable = styled.table`\n    flex: 1;\n    border-collapse: separate;\n    border-spacing: 0;\n    width: 100%;\n    display: inline-table;\n`;\n\nconst StyledTableBody = styled(TableBody)`\n    width: 100%;\n    &:before {\n        content: unset;\n    }\n`;\n\nconst StyledTablePagination = styled(ScrollPagination)`\n    width: 100%;\n`;\n\nconst TableBodyScrollContainer = styled.div`\n    overflow: auto;\n    flex: 1;\n    width: 100%;\n    padding-bottom: 40px;\n    margin-top: -5px;\n`;\n\nconst FormatTableCellText = styled.span<{ hasError?: boolean }>`\n    color: ${props => (props.hasError ? props.theme.Colors.tomato : 'unset')};\n`;\n\nconst IconsContainer = styled.div`\n    align-items: center;\n    justify-content: space-between;\n    padding-right: 10px;\n    display: none;\n    min-width: 50px;\n`;\n\nconst IconHolder = styled.div`\n    width: 14px;\n    height: 14px;\n    cursor: pointer;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst StyledTableRow = styled(TableRow)<{ hovered?: boolean }>`\n    ${props =>\n        !!props.hovered &&\n        `\n            background: ${props.theme.Colors.whiteTwo};\n            & > td {\n                &:first-child {\n                    border-top-left-radius: 4px;\n                    border-bottom-left-radius: 4px;\n                }\n                &:last-child {\n                    border-top-right-radius: 4px;\n                    border-bottom-right-radius: 4px;\n                }\n            }\n        `}\n\n    &:hover ${IconsContainer} {\n        display: flex;\n    }\n`;\n\nconst IconsPlaceholder = styled.div`\n    display: block;\n    width: 50px;\n`;\n\nconst StyledIconHint = styled.div`\n    display: none;\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 13px;\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    cursor: pointer;\n    padding: 8px 16px;\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    background-color: ${props => props.theme.Colors.white};\n`;\n\nconst ErrorStateCheckbox = styled.div`\n    margin-right: 16px;\n`;\n\nconst ExclamationIconContainer = styled.div`\n    position: relative;\n    width: 16px;\n    height: 16px;\n    border-radius: 2px;\n    border: solid 1px ${props => props.theme.Colors.tomato};\n    background-color: ${props => props.theme.Colors.tomato};\n    align-items: center;\n    justify-content: center;\n    padding-left: 6px;\n\n    &:hover ${StyledIconHint} {\n        display: block;\n        width: 200px;\n        position: absolute;\n        left: 8px;\n        top: 10px;\n    }\n\n    &:hover ${IconsPlaceholder} {\n        display: none;\n    }\n`;\n\nconst ExclamationIconHolder = styled.div`\n    width: 2px;\n    color: ${props => props.theme.Colors.white};\n`;\n\nconst StyledTableContainer = styled.div`\n    flex: 1;\n    height: 100%;\n`;\n\nconst TableContainer = styled.div`\n    width: 100%;\n    height: 100%;\n`;\n\nconst TableExtendContainer = styled.div`\n    border-radius: 16px;\n    background: ${props => props.theme.Colors.white};\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n`;\n//endregion\n\nexport const RenderTableCheckboxCell: FC<{\n    user: DraftUser;\n    selectedUsers: number[];\n    handleUserCheck(userId: number): void;\n    dataTest: string;\n}> = ({ user, selectedUsers, handleUserCheck, dataTest }) => {\n    let content;\n    if (\n        !user.firstName ||\n        !user.lastName ||\n        !user.email ||\n        user.isEntryInvalid\n    ) {\n        content = (\n            <Tooltip\n                label={\n                    <span data-test={`${dataTest}-warning-text`}>\n                        {InvitationEmailErrors.isEntryInvalid}\n                    </span>\n                }\n                position=\"bottom-end\"\n            >\n                <ErrorStateCheckbox data-test={`${dataTest}-warning`}>\n                    <ExclamationIconContainer>\n                        <ExclamationIconHolder>\n                            <NewUserExclamation />\n                        </ExclamationIconHolder>\n                    </ExclamationIconContainer>\n                </ErrorStateCheckbox>\n            </Tooltip>\n        );\n    } else if (user.emailExistsInSystem) {\n        content = (\n            <Tooltip\n                label={\n                    <span data-test={`${dataTest}-warning-text`}>\n                        {InvitationEmailErrors.emailExistsInSystem}\n                    </span>\n                }\n                position=\"bottom-end\"\n            >\n                <ErrorStateCheckbox data-test={`${dataTest}-warning`}>\n                    <ExclamationIconContainer>\n                        <ExclamationIconHolder>\n                            <NewUserExclamation />\n                        </ExclamationIconHolder>\n                    </ExclamationIconContainer>\n                </ErrorStateCheckbox>\n            </Tooltip>\n        );\n    } else {\n        content = (\n            <TableCheckbox\n                checked={\n                    !!selectedUsers &&\n                    !!user.id &&\n                    selectedUsers.includes(user.id)\n                }\n                handleCheck={() => handleUserCheck(user.id)}\n                dataTest={dataTest}\n            />\n        );\n    }\n\n    return <TableCheckboxCell width={1}>{content}</TableCheckboxCell>;\n};\n\nexport const UsersList: FC<{\n    userList?: DraftUser[];\n    totalUsersCount?: number;\n    selectedUsers: number[];\n    handleUserCheck(id?: number | string): void;\n    updateAllUsersCheck(checked: boolean): void;\n    onEditUser(user: NewUserValues): void;\n    onRemoveUser(userId: number | string): void;\n    isDraftSaved?: boolean;\n    searchParams: SearchParams;\n    limit: any;\n    setLimit(limit: number): void;\n    orderBy: any;\n    setOrderBy(field: string): void;\n    selectedUser: DraftUser;\n    setSelectedUser(user: DraftUser): void;\n    handleUpdateSelectedUser(): void;\n    assignedRole: number | null;\n    onAssignRoleCheck(role: number | null): void;\n    selectedUserLabels: number[];\n    setSelectedUserLabels: (labelIds: number[]) => void;\n    selectedUserPractisSets: PractisSetWithDueDate[];\n    setSelectedUserPractisSets: (\n        practisSetIds: PractisSetWithDueDate[]\n    ) => void;\n    selectedUserTeams: number[];\n    setSelectedUserTeams: (teamIds: number[]) => void;\n    handleInputChange: (\n        e: React.ChangeEvent<HTMLInputElement>,\n        field: string\n    ) => void;\n    showNoSearchResultsState: boolean;\n    showNoFilterResultsState: boolean;\n    isRoleDisabled: boolean | undefined;\n    updateSelectAll: (checked: boolean) => void;\n    dataTest: string;\n}> = ({\n    userList,\n    totalUsersCount,\n    selectedUsers,\n    handleUserCheck,\n    updateSelectAll,\n    updateAllUsersCheck,\n    onEditUser,\n    onRemoveUser,\n    isDraftSaved,\n    searchParams,\n    limit,\n    setLimit,\n    orderBy,\n    setOrderBy,\n    children,\n    selectedUser,\n    setSelectedUser,\n    handleUpdateSelectedUser,\n    handleInputChange,\n    assignedRole,\n    onAssignRoleCheck,\n    setSelectedUserLabels,\n    selectedUserLabels,\n    setSelectedUserPractisSets,\n    selectedUserPractisSets,\n    setSelectedUserTeams,\n    selectedUserTeams,\n    showNoSearchResultsState,\n    showNoFilterResultsState,\n    isRoleDisabled,\n    dataTest\n}) => {\n    const scrollableRef = useRef<HTMLDivElement>(null);\n    const userRoles = useUserRolesState();\n\n    const [usersToDisplay, setUsersToDisplay] = useState<\n        DraftUser[] | undefined\n    >(userList);\n\n    const isCheckboxPartiallySelected =\n        usersToDisplay &&\n        selectedUsers &&\n        selectedUsers.length < usersToDisplay.length;\n\n    const ifSearchParamsChanged = useIfChanged(searchParams);\n\n    useEffect(() => {\n        if (userList) {\n            if (isDraftSaved) {\n                setUsersToDisplay(userList);\n            } else {\n                updateDisplayUsers(searchParams);\n            }\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [userList, limit, ifSearchParamsChanged]);\n\n    //TODO: refactor\n    const updateDisplayUsers = (searchParams: SearchParams) => {\n        const displayUsers: any = userList ? [...userList] : [];\n        if (searchParams.orderBy && searchParams.orderBy.field) {\n            const field = searchParams.orderBy.field;\n            const reverse = searchParams.orderBy.asc ? 1 : -1;\n            if (field === 'labelCount') {\n                displayUsers.sort((a: any, b: any) => {\n                    const firstEntry = a['labelIDs'];\n                    const secondEntry = b['labelIDs'];\n                    if (!firstEntry || !secondEntry) return false;\n                    return (\n                        reverse *\n                        (firstEntry.length < secondEntry.length\n                            ? -1\n                            : firstEntry.length > secondEntry.length\n                            ? 1\n                            : 0)\n                    );\n                });\n            } else if (field === 'practisSetCount') {\n                displayUsers.sort((a: any, b: any) => {\n                    const firstEntry = a['practisSetIDs'];\n                    const secondEntry = b['practisSetIDs'];\n                    if (!firstEntry || !secondEntry) return false;\n                    return (\n                        reverse *\n                        (firstEntry.length < secondEntry.length\n                            ? -1\n                            : firstEntry.length > secondEntry.length\n                            ? 1\n                            : 0)\n                    );\n                });\n            } else if (field === 'roleId') {\n                displayUsers.sort((a: any, b: any) => {\n                    const firstEntry = getRoleName(a[field] as number);\n                    const secondEntry = getRoleName(b[field] as number);\n                    if (!firstEntry || !secondEntry) return false;\n                    if (\n                        typeof firstEntry !== 'string' ||\n                        typeof secondEntry !== 'string'\n                    )\n                        return false;\n                    return (\n                        reverse *\n                        (firstEntry.toLowerCase() < secondEntry.toLowerCase()\n                            ? -1\n                            : firstEntry.toLowerCase() >\n                              secondEntry.toLowerCase()\n                            ? 1\n                            : 0)\n                    );\n                });\n            } else {\n                displayUsers.sort((a: any, b: any) => {\n                    const firstEntry = a[field];\n                    const secondEntry = b[field];\n                    if (!firstEntry || !secondEntry) return false;\n                    if (\n                        typeof firstEntry !== 'string' ||\n                        typeof secondEntry !== 'string'\n                    )\n                        return false;\n                    return (\n                        reverse *\n                        (firstEntry.toLowerCase() < secondEntry.toLowerCase()\n                            ? -1\n                            : firstEntry.toLowerCase() >\n                              secondEntry.toLowerCase()\n                            ? 1\n                            : 0)\n                    );\n                });\n            }\n            setUsersToDisplay(displayUsers);\n        }\n    };\n\n    const getRoleName = (roleId: number) => {\n        if (!roleId) return '';\n\n        const role = getUserRoleNameById(roleId, userRoles.list);\n        return role || '';\n    };\n\n    const hcUserFirstName = useOrderBy('firstName', orderBy, setOrderBy);\n    const hcUserLastName = useOrderBy('lastName', orderBy, setOrderBy);\n    const hcUserEmail = useOrderBy('email', orderBy, setOrderBy);\n    const hcUserRole = useOrderBy('roleId', orderBy, setOrderBy);\n    const hcPractisSets = useOrderBy('practisSetCount', orderBy, setOrderBy);\n    const hcTeams = useOrderBy('teamsCount', orderBy, setOrderBy);\n    const hcLabels = useOrderBy('labelCount', orderBy, setOrderBy);\n\n    const actionsDisabled = !userList || userList.length < 1;\n\n    return (\n        <StyledTableContainer>\n            <TableContainer>\n                <TableExtendContainer>\n                    <Table hideSpacer={true}>\n                        <TableHead dataTest={`${dataTest}-head`}>\n                            <TableRow>\n                                <TableCheckboxHeaderCell width={1} dataTest={`${dataTest}-head-checkbox`}>\n                                    <TableCheckbox\n                                        checked={\n                                            !!selectedUsers &&\n                                            !!selectedUsers.length\n                                        }\n                                        disabled={actionsDisabled}\n                                        partial={isCheckboxPartiallySelected}\n                                        handleCheck={(event: any) => {\n                                            updateAllUsersCheck(\n                                                event.target.checked\n                                            );\n\n                                            updateSelectAll(\n                                                event.target.checked\n                                            );\n                                        }}\n                                        dataTest={`${dataTest}-head-checkbox-input`}\n                                    />\n                                </TableCheckboxHeaderCell>\n                                <TableHeaderFirstCell\n                                    width={14}\n                                    {...hcUserFirstName}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-first-name`}\n                                >\n                                    First Name\n                                </TableHeaderFirstCell>\n                                <TableHeaderCell\n                                    width={14}\n                                    {...hcUserLastName}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-last-name`}\n                                >\n                                    Last Name\n                                </TableHeaderCell>\n                                <TableHeaderCell\n                                    width={18}\n                                    {...hcUserEmail}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-email`}\n                                >\n                                    User Email\n                                </TableHeaderCell>\n                                <TableHeaderCell\n                                    width={10}\n                                    {...hcUserRole}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-role`}\n                                >\n                                    Role\n                                </TableHeaderCell>\n                                <TableHeaderCell\n                                    width={13}\n                                    {...hcTeams}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-teams`}\n                                >\n                                    Teams\n                                </TableHeaderCell>\n                                <TableHeaderCell\n                                    width={15}\n                                    {...hcPractisSets}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-practis-sets`}\n                                >\n                                    Practis Sets\n                                </TableHeaderCell>\n                                <TableHeaderCell\n                                    width={10}\n                                    {...hcLabels}\n                                    disabled={actionsDisabled}\n                                    dataTest={`${dataTest}-head-labels`}\n                                >\n                                    Labels\n                                </TableHeaderCell>\n                                <TableHeaderCell width={5} />\n                            </TableRow>\n                        </TableHead>\n                    </Table>\n                    {children}\n                    <TableBodyScrollContainer ref={scrollableRef}>\n                        <StyledTablePagination\n                            itemsPerPage={ITEMS_PER_PAGE}\n                            itemCount={userList ? userList.length : 0}\n                            totalCount={\n                                isDraftSaved\n                                    ? totalUsersCount\n                                    : userList && userList.length\n                            }\n                            onLimitChange={setLimit}\n                            scrollableRef={scrollableRef}\n                        >\n                            <StyledTable>\n                                <StyledTableBody>\n                                    {usersToDisplay &&\n                                        usersToDisplay.map(\n                                            (user: DraftUser) => {\n                                                if (\n                                                    user.id === selectedUser.id\n                                                ) {\n                                                    return (\n                                                        <EditUserItem\n                                                            key={user.id}\n                                                            user={selectedUser}\n                                                            setUser={\n                                                                setSelectedUser\n                                                            }\n                                                            handleUpdateSelectedUser={\n                                                                handleUpdateSelectedUser\n                                                            }\n                                                            handleInputChange={\n                                                                handleInputChange\n                                                            }\n                                                            assignedRole={\n                                                                assignedRole\n                                                            }\n                                                            onAssignRoleCheck={\n                                                                onAssignRoleCheck\n                                                            }\n                                                            setSelectedUserLabels={\n                                                                setSelectedUserLabels\n                                                            }\n                                                            selectedUserLabels={\n                                                                selectedUserLabels\n                                                            }\n                                                            setSelectedUserPractisSets={\n                                                                setSelectedUserPractisSets\n                                                            }\n                                                            selectedUserPractisSets={\n                                                                selectedUserPractisSets\n                                                            }\n                                                            setSelectedUserTeams={\n                                                                setSelectedUserTeams\n                                                            }\n                                                            selectedUserTeams={\n                                                                selectedUserTeams\n                                                            }\n                                                            isRoleDisabled={\n                                                                isRoleDisabled\n                                                            }\n                                                            dataTest={`${dataTest}-edit`}\n                                                        />\n                                                    );\n                                                }\n                                                return (\n                                                    <StyledTableRow\n                                                        key={user.id}\n                                                        hovered={\n                                                            user.id ===\n                                                            selectedUser.id\n                                                        }\n                                                        dataTest={`${dataTest}-row`}\n                                                    >\n                                                        <RenderTableCheckboxCell\n                                                            user={user}\n                                                            selectedUsers={\n                                                                selectedUsers\n                                                            }\n                                                            handleUserCheck={\n                                                                handleUserCheck\n                                                            }\n                                                            dataTest={`${dataTest}-row-checkbox`}\n                                                        />\n                                                        <StyledTableCell\n                                                            width={14}\n                                                        >\n                                                            {user.firstName && (\n                                                                <FormatTableCellText\n                                                                    hasError={\n                                                                        user.isEntryInvalid ||\n                                                                        user.emailExistsInSystem ||\n                                                                        !user.firstName ||\n                                                                        !user.lastName ||\n                                                                        !user.email ||\n                                                                        !user.roleId\n                                                                    }\n                                                                    data-test={`${dataTest}-row-first-name`}\n                                                                >\n                                                                    {\n                                                                        user.firstName\n                                                                    }\n                                                                </FormatTableCellText>\n                                                            )}\n                                                        </StyledTableCell>\n                                                        <TableCell width={14}>\n                                                            {user.lastName && (\n                                                                <FormatTableCellText\n                                                                    hasError={\n                                                                        user.isEntryInvalid ||\n                                                                        user.emailExistsInSystem ||\n                                                                        !user.firstName ||\n                                                                        !user.lastName ||\n                                                                        !user.email ||\n                                                                        !user.roleId\n                                                                    }\n                                                                    data-test={`${dataTest}-row-last-name`}\n                                                                >\n                                                                    {\n                                                                        user.lastName\n                                                                    }\n                                                                </FormatTableCellText>\n                                                            )}\n                                                        </TableCell>\n                                                        <TableCell width={18}>\n                                                            {user.email && (\n                                                                <FormatTableCellText\n                                                                    hasError={\n                                                                        user.isEntryInvalid ||\n                                                                        user.emailExistsInSystem ||\n                                                                        !user.firstName ||\n                                                                        !user.lastName ||\n                                                                        !user.email ||\n                                                                        !user.roleId\n                                                                    }\n                                                                    data-test={`${dataTest}-row-email`}\n                                                                    >\n                                                                    {\n                                                                        user.email\n                                                                    }\n                                                                </FormatTableCellText>\n                                                            )}\n                                                        </TableCell>\n                                                        <TableCell width={10}>\n                                                            <span data-test={`${dataTest}-row-role`}>\n                                                                {!!user.roleId &&\n                                                                    getRoleName(\n                                                                        user.roleId\n                                                                    )}\n                                                            </span>\n                                                        </TableCell>\n                                                        <TableCell\n                                                            shouldShowEmptyCell={!user.teamIDs?.length}\n                                                            width={13}>\n                                                                <span data-test={`${dataTest}-row-teams`}>\n                                                                    {user.teamIDs &&\n                                                                    !!user.teamIDs\n                                                                        .length &&\n                                                                    `${\n                                                                        user.teamIDs\n                                                                            .length\n                                                                    } ${\n                                                                        user.teamIDs\n                                                                            .length >\n                                                                        1\n                                                                            ? 'Teams'\n                                                                            : 'Team'\n                                                                    }`}\n                                                                </span>\n                                                        </TableCell>\n                                                        <TableCell\n                                                            shouldShowEmptyCell={!user.practisSetIDs?.length}\n                                                            width={15}>\n                                                                <span data-test={`${dataTest}-row-practis-sets`}>\n                                                                    {user.practisSetIDs &&\n                                                                        user\n                                                                            .practisSetIDs\n                                                                            .length &&\n                                                                        `${\n                                                                            user\n                                                                                .practisSetIDs\n                                                                                .length\n                                                                        } ${\n                                                                            user\n                                                                                .practisSetIDs\n                                                                                .length >\n                                                                            1\n                                                                                ? 'Practis Sets'\n                                                                                : 'Practis Set'\n                                                                        }`}\n                                                                </span>\n                                                        </TableCell>\n                                                        <TableCell\n                                                            shouldShowEmptyCell={!user.labelIDs?.length}\n                                                            width={10}>\n                                                                <span data-test={`${dataTest}-row-labels`}>\n                                                                    {user.labelIDs &&\n                                                                        user.labelIDs\n                                                                            .length &&\n                                                                        `${\n                                                                            user\n                                                                                .labelIDs\n                                                                                .length\n                                                                        } ${\n                                                                            user\n                                                                                .labelIDs\n                                                                                .length >\n                                                                            1\n                                                                                ? 'Labels'\n                                                                                : 'Label'\n                                                                        }`}\n                                                                </span>\n                                                        </TableCell>\n                                                        <TableCell width={5}>\n                                                            <IconsPlaceholder />\n                                                            <IconsContainer>\n                                                                <IconHolder\n                                                                    onClick={() =>\n                                                                        user &&\n                                                                        onEditUser(\n                                                                            user\n                                                                        )\n                                                                    }\n                                                                    data-test={`${dataTest}-row-edit`}\n                                                                >\n                                                                    <EditPencil />\n                                                                </IconHolder>\n                                                                <IconHolder\n                                                                    onClick={() =>\n                                                                        user.id &&\n                                                                        onRemoveUser(\n                                                                            user.id\n                                                                        )\n                                                                    }\n                                                                    data-test={`${dataTest}-row-delete`}\n                                                                >\n                                                                    <Trash />\n                                                                </IconHolder>\n                                                            </IconsContainer>\n                                                        </TableCell>\n                                                    </StyledTableRow>\n                                                );\n                                            }\n                                        )}\n                                </StyledTableBody>\n                                {usersToDisplay && usersToDisplay.length === 0 && (\n                                    <TableNoResultBody>\n                                        {showNoSearchResultsState ? (\n                                            <TableNoResult\n                                                icon={NoSearchResult}\n                                                subTitleWidth=\"180px\"\n                                                dataTest=\"no-found-users\"\n                                            >\n                                                No Users Found\n                                            </TableNoResult>\n                                        ) : showNoFilterResultsState ? (\n                                            <TableNoResult\n                                                icon={NoTrainingsFiltering}\n                                                width=\"160px\"\n                                                dataTest=\"no-filter-results\"\n                                            >\n                                                No Results Match the Filter\n                                                Criteria\n                                            </TableNoResult>\n                                        ) : null}\n                                    </TableNoResultBody>\n                                )}\n                            </StyledTable>\n                        </StyledTablePagination>\n                    </TableBodyScrollContainer>\n                </TableExtendContainer>\n            </TableContainer>\n        </StyledTableContainer>\n    );\n};\n","import { FC, useCallback, useState } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { Variables } from '../../../../theme/variables';\r\nimport { useCreateUserStagingService } from '../store/services';\r\nimport { NewUserValues } from '../models/NewUserValues';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport { pushModal, useHistory } from '../../../../tools/router';\r\nimport { Input } from '../../../../ui/components/input';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\r\n\r\nconst StyledTitle = styled.div`\r\n    font-size: 20px;\r\n    font-weight: 800;\r\n    width: 100%;\r\n`;\r\n\r\nconst StyledContent = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    align-items: center;\r\n`;\r\n\r\nconst StyledDescription = styled.div`\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    margin-top: 15px;\r\n    margin-bottom: -2px;\r\n    width: 100%;\r\n    height: 37px;\r\n`;\r\n\r\nconst StyledFormArea = styled.div`\r\n    width: 416px;\r\n`;\r\n\r\nconst StyledActions = styled.div`\r\n    width: 264px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-top: 12px;\r\n    align-self: flex-end;\r\n`;\r\n\r\nconst StyledInput = styled(Input)<{ hasError?: boolean }>`\r\n    font-family: ${props => props.theme.Fonts.manrope};\r\n    border-radius: 4px;\r\n    background-color: ${props => props.theme.Colors.whiteTwo};\r\n    ${props =>\r\n        !!props.hasError && `border: 1px solid ${props.theme.Colors.tomato}`};\r\n`;\r\n\r\nconst StyledInputContainer = styled.div`\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst StyledErrorMessage = styled.div`\r\n    font-family: ${props => props.theme.Fonts.manrope};\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    font-stretch: normal;\r\n    font-style: normal;\r\n    line-height: normal;\r\n    letter-spacing: normal;\r\n    color: ${props => props.theme.Colors.tomato};\r\n    width: 100%;\r\n    margin-bottom: 2px;\r\n`;\r\n\r\nexport const SaveAsDraftModal: FC<{\r\n    newUsers: NewUserValues[];\r\n    onProceed(): void;\r\n    onError(error: string): void;\r\n    onClose(): void;\r\n}> = ({ newUsers, onProceed, onError, onClose }) => {\r\n    const [title, setTitle] = useState('');\r\n    const [error, setError] = useState('');\r\n    const [submitClicked, setSubmitClicked] = useState(false)\r\n    const createUserStagingService = useCreateUserStagingService();\r\n    const history = useHistory();\r\n    const handleTitleChange = (value: any) => {\r\n        if (value.length > 64) return;\r\n        setTitle(value);\r\n        setError('');\r\n    };\r\n\r\n    const handleSubmit = useCallback(() => {\r\n        if (!newUsers || (newUsers && !newUsers.length)) return;\r\n\r\n        setSubmitClicked(true)\r\n        createUserStagingService(\r\n            title,\r\n            newUsers.map(user => ({\r\n                firstName: user.firstName ? user.firstName.toString() : '',\r\n                lastName: user.lastName ? user.lastName.toString() : '',\r\n                email: user.email ? user.email : '',\r\n                roleId: user.roleId ? user.roleId : null,\r\n                labelIDs: user.labelIDs,\r\n                practisSetIDs: user.practisSetIDs ?? [],\r\n                teamIDs: user.teamIDs,\r\n            }))\r\n        ).then((data: any) => {\r\n            if (data && data.errorCode && data.errorCode === 433) {\r\n                setError('Entered title already exists');\r\n                setSubmitClicked(false);\r\n            } else if (data.id) {\r\n                setError('');\r\n                onProceed();\r\n                pushModal(\r\n                    history,\r\n                    ROUTES.ACTION_ITEMS.NEW_USER.replace(':draftId', data.id)\r\n                );\r\n            } else {\r\n                setError('');\r\n                onError('Draft contains invalid data');\r\n                setSubmitClicked(false);\r\n            }\r\n        });\r\n    }, [\r\n        newUsers,\r\n        createUserStagingService,\r\n        title,\r\n        onProceed,\r\n        history,\r\n        onError,\r\n    ]);\r\n\r\n    return (\r\n        <DialogWrapper\r\n            customization={{ width: 480, padding: '32px 40px' }}\r\n            dataTest=\"save-as-draft\"\r\n        >\r\n            <StyledTitle data-test=\"save-as-draft-title\">\r\n                Save as Draft\r\n            </StyledTitle>\r\n            <StyledContent>\r\n                <StyledDescription data-test=\"save-as-draft-description\">\r\n                    You can save your progress as draft until it’s ready to be\r\n                    sent out.\r\n                </StyledDescription>\r\n                <StyledFormArea>\r\n                    <StyledInputContainer>\r\n                        <StyledInput\r\n                            type=\"text\"\r\n                            name=\"title\"\r\n                            inputPadding=\"15px 24px\"\r\n                            value={title}\r\n                            placeholder=\"Draft Title\"\r\n                            labelLeftPosition=\"24px\"\r\n                            labelFontWeight={500}\r\n                            maxLength={100}\r\n                            height=\"40px\"\r\n                            handleChange={(e: any) =>\r\n                                handleTitleChange(e.target.value)\r\n                            }\r\n                            hasError={!!error}\r\n                            dataTest=\"save-as-draft-input\"\r\n                        />\r\n                    </StyledInputContainer>\r\n                </StyledFormArea>\r\n                {error && (\r\n                    <StyledErrorMessage data-test=\"save-as-draft-input-error\">\r\n                        {error}\r\n                    </StyledErrorMessage>\r\n                )}\r\n                <StyledActions>\r\n                    <Button\r\n                        width=\"128px\"\r\n                        height=\"40px\"\r\n                        action={onClose}\r\n                        variant=\"inverse\"\r\n                        dataTest=\"save-as-draft-cancel\"\r\n                    >\r\n                        Cancel\r\n                    </Button>\r\n                    <Button\r\n                        width=\"128px\"\r\n                        height=\"40px\"\r\n                        action={handleSubmit}\r\n                        disabled={!title}\r\n                        customDisabledColor={Variables.Colors.cloudyBlue}\r\n                        loading={submitClicked}\r\n                        dataTest=\"save-as-draft-save\"\r\n                    >\r\n                        Save\r\n                    </Button>\r\n                </StyledActions>\r\n            </StyledContent>\r\n        </DialogWrapper>\r\n    );\r\n};\r\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { PaginationResult } from '../../../../constants/interfaces/PaginationResult';\nimport { DraftUser } from '../../../../constants/interfaces/Draft';\nimport { StateWithLabels } from '../../../../features/portableLabels/store/hors/withLabels';\n\nexport type DraftEditBaseState = {\n    data?: PaginationResult<DraftUser>;\n    loading: boolean;\n    updateData?: Partial<DraftUser>;\n    updateType?:\n        | 'draft-created'\n        | 'draft-updated'\n        | 'draft-deleted'\n        | 'user-invited';\n    loadingUpdate?: boolean;\n    error?: string;\n};\n\nexport type DraftEditState = DraftEditBaseState & StateWithLabels;\n\nexport type DraftEditStateSelector = (state: any) => DraftEditState;\n\nexport const DraftEditStateSelectorContext = React.createContext<DraftEditStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useDraftEditState(): DraftEditState {\n    return useSelector(useContext(DraftEditStateSelectorContext));\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const AddUser = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 24 24\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <g fill=\"#currentColor\">\n                        <g>\n                            <path\n                                fillRule=\"evenodd\"\n                                d=\"M23.253 21h-2.25v2.25c0 .414-.336.75-.75.75s-.75-.336-.75-.75V21h-2.25c-.414 0-.75-.336-.75-.75 0-.415.336-.75.75-.75h2.25v-2.25c0-.415.336-.751.75-.751s.75.336.75.751v2.25h2.25c.414 0 .75.335.75.75 0 .414-.336.75-.75.75zm-8.637-5.754c.771.192 1.897.482 3.014.795-.525.358-.974.81-1.36 1.313-.908-.244-1.86-.488-2.767-.706v-2.376c1.881-1.28 2.996-4.06 2.996-6.588 0-3.418-.875-6.19-5.248-6.19s-5.247 2.772-5.247 6.19c0 2.53 1.116 5.313 3 6.592v2.394c-2.837.667-6.13 1.581-6.887 1.996-.49.618-.918 2.597-.614 3.835h13.712c.138.533.349 1.033.619 1.498H.677c-1.173-1.8-.697-5.399.476-6.597.558-.57 4.747-1.65 6.751-2.142-2.117-1.645-3.407-4.695-3.407-7.604C4.497 3.428 5.725 0 11.25 0c5.527 0 6.755 3.428 6.755 7.656 0 2.9-1.284 5.942-3.39 7.59z\"\n                                transform=\"translate(-392 -692) translate(392 692)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default AddUser;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NewUserPath = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"68\"\n                height=\"74\"\n                viewBox=\"0 0 68 74\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"#4AA9E2\">\n                        <g>\n                            <path\n                                fillRule=\"nonzero\"\n                                d=\"M68 0v1.5C33.417 1.5 5.317 29.254 4.758 63.704L4.75 64.75h-1.5C3.25 29.347 31.663.58 66.93.009L68 0z\"\n                                transform=\"translate(-316 -703) translate(316 703.25)\"\n                            />\n                            <path\n                                stroke=\"#4AA9E2\"\n                                d=\"M4 65.868l3.191 6.382H.809L4 65.868z\"\n                                transform=\"translate(-316 -703) translate(316 703.25) rotate(-180 4 68.75)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NewUserPath;\n","import React, { FC } from 'react';\n\nimport styled from 'styled-components';\nimport AddNewUser from '../../../../ui/icons/AddNewUser';\nimport NewUserPath from '../../../../ui/icons/NewUserPath';\n\nconst IconsContainer = styled.div`\n    display: flex;\n    z-index: 1;\n    padding-left: 24px;\n    position: absolute;\n    align-items: flex-end;\n    top: 70px;\n`;\n\nconst PathIconHolder = styled.div`\n    margin-right: 8px;\n    padding-top: 12px;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    transform: rotateX(180deg);\n`;\n\nconst UserIconContainer = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nconst UserIconHolder = styled.div`\n    height: 24px;\n    width: 24px;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n`;\n\nconst AddNewUserLabel = styled.div`\n    color: ${props => props.theme.Fonts.manrope};\n    font-size: 15px;\n    font-weight: 600;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    margin-left: 7px;\n`;\n\nconst AddNewUserTip: FC<{dataTest: string}> = ({ dataTest }) => {\n    return (\n        <IconsContainer>\n            <PathIconHolder>\n                <NewUserPath />\n            </PathIconHolder>\n            <UserIconContainer>\n                <UserIconHolder>\n                    <AddNewUser />\n                </UserIconHolder>\n                <AddNewUserLabel data-test={dataTest}>\n                    Add users to the table in order to edit or invite them\n                </AddNewUserLabel>\n            </UserIconContainer>\n        </IconsContainer>\n    );\n};\n\nexport default AddNewUserTip;\n","import { useEffect } from 'react';\n\nexport default function useKeypress(key: string, action: any) {\n    useEffect(() => {\n        function onKeyup(e: any) {\n            if (e.key === key) action && action();\n        }\n        window.addEventListener('keyup', onKeyup);\n        return () => window.removeEventListener('keyup', onKeyup);\n    }, [action, key]);\n}\n","import { rgba } from 'polished';\nimport React, {\n    createContext,\n    FC,\n    MouseEvent,\n    useCallback,\n    useContext,\n    useMemo,\n} from 'react';\nimport styled from 'styled-components';\nimport { motion } from 'framer-motion';\n\nimport { useHistory } from '../../../tools/router';\n\nconst Background = styled.div`\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1100;\n    background: ${props => rgba(props.theme.Colors.dark, 0.8)};\n    overflow-x: auto;\n    overflow-y: hidden;\n`;\n\nconst Modal = styled(motion.div)<{ width?: string }>`\n    position: absolute;\n    width: ${props => (!!props.width ? props.width : '80%')};\n    top: 0;\n    right: 0;\n    bottom: 0;\n    background: ${props => props.theme.Colors.whiteTwo};\n    box-shadow: 0 5px 20px -5px rgba(166, 174, 190, 0.5);\n    transition: left 0.3s linear;\n    border-top-left-radius: 16px;\n    border-bottom-left-radius: 16px;\n    @media (max-width: ${props => props.theme.BreakPoints.responsiveSm}px) {\n        left: 47px;\n        min-width: 375px;\n        width: 968px;\n    }\n`;\n\nexport const ModalPage: FC<{\n    onClose?(): void;\n    className?: string;\n    width?: string;\n}> = ({ children, onClose, className, width }) => {\n    const preventClick = useCallback((e: MouseEvent<HTMLDivElement>) => {\n        e.stopPropagation();\n    }, []);\n\n    const closeModalPage = useCallback(() => {\n        if (onClose) onClose();\n    }, [onClose]);\n    const context = useMemo(() => ({ closeModalPage }), [closeModalPage]);\n\n    return (\n        <Background onClick={closeModalPage} data-test=\"modal-background\">\n            <Modal onClick={preventClick} className={className} width={width}>\n                <ModalPageContext.Provider value={context}>\n                    {children}\n                </ModalPageContext.Provider>\n            </Modal>\n        </Background>\n    );\n};\n\nexport interface ModalPageContainerProps {\n    closePath: string;\n    closeGoingBack: boolean;\n    restrictClosing?: boolean;\n    restrictClosingAction?(): void;\n    handleManualClose?(): void;\n    className?: string;\n    width?: string;\n}\n\nexport const ModalPageContainer: FC<ModalPageContainerProps> = ({\n    closePath,\n    closeGoingBack,\n    restrictClosing,\n    restrictClosingAction,\n    children,\n    className,\n    handleManualClose,\n    width,\n}) => {\n    const history = useHistory();\n    const handleClose = useCallback(() => {\n        if (restrictClosing) {\n            restrictClosingAction && restrictClosingAction();\n        } else {\n            if (closeGoingBack) history.goBack();\n            else history.replace(closePath);\n        }\n    }, [\n        history,\n        closeGoingBack,\n        closePath,\n        restrictClosing,\n        restrictClosingAction,\n    ]);\n\n    return (\n        <ModalPage\n            onClose={handleManualClose || handleClose}\n            className={className}\n            width={width}\n        >\n            {children}\n        </ModalPage>\n    );\n};\n\nexport const ModalPageContext = createContext<{ closeModalPage?(): void }>({});\n\nexport function useModalPageContext() {\n    return useContext(ModalPageContext);\n}\n\nexport default ModalPageContainer;\n","import styled from 'styled-components';\n\nexport const StyledContainer = styled.div`\n    overflow: auto;\n    height: 100%;\n    display: block;\n    padding: 0 28px;\n    background-color: var(--ps-white-1);\n    min-width: 1024px;\n    border-top-left-radius: 8px;\n    border-bottom-left-radius: 8px;\n`;\n\nexport const StyledHeader = styled.div<{ marginBottom?: string }>`\n    display: flex;\n    align-items: center;\n    font-size: 24px;\n    font-weight: bold;\n    letter-spacing: 0.5px;\n    height: 95px;\n    background-color: var(--ps-white-1);\n    color: var(--ps-graphite-1);\n`;\n\nexport const UserStatsContainer = styled.div`\n    margin-left: 16px;\n`;\n\nexport const StyledFooter = styled.div`\n    height: 79px;\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    flex-shrink: 0;\n`;\n\nexport const StyledFooterActions = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nexport const StyledHeaderInput = styled.div`\n    flex: 1;\n    min-width: 150px;\n    font-size: 20px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    margin-left: 16px;\n`;\n\nexport const StyledContent = styled.div`\n    display: flex;\n    flex-direction: column;\n    height: calc(100% - 257px);\n    justify-content: space-between;\n    min-height: 300px;\n`;\n\nexport const AddNewUserWrapper = styled.div`\n    margin-top: 16px;\n    position: relative;\n`;\n\nexport const Divider = styled.hr`\n    width: 100%;\n    height: 1px;\n    border: none;\n    flex-shrink: 0;\n    background-color: var(--ps-grey-4);\n    margin: 0;\n`;\n\nexport const StyledSavedStatusContainer = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 13px;\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: var(--ps-grey-1);\n    align-self: flex-end;\n`;\n\nexport const StyledButtonContainer = styled.div`\n    margin-right: 16px;\n`;","import { useSelector } from 'react-redux';\nimport React, { useContext } from 'react';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport { CompanyUserStats } from '../../../constants/interfaces/CompanyUserStats';\nimport { CompanyVoiceSettings } from '../../../constants/interfaces/CompanyVoiceSettings';\n\nexport interface CompanyVoiceSettingsState {\n    data?: CompanyVoiceSettings[];\n    loading: boolean;\n    error?: string;\n}\n\nexport type CompanyVoiceSettingsStateSelector = (\n    state: any\n) => CompanyVoiceSettingsState;\n\nexport const CompanyVoiceSettingsStateSelectorContext = React.createContext<\n    CompanyVoiceSettingsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useCompanyVoiceSettingsState(): CompanyVoiceSettingsState {\n    return useSelector(useContext(CompanyVoiceSettingsStateSelectorContext));\n}\n\nexport interface CompanyAdminsState {\n    data?: UserV2[];\n    loading: boolean;\n    error?: string;\n}\n\nexport type CompanyAdminsStateSelector = (\n    state: any\n) => CompanyAdminsState;\n\nexport const CompanyAdminsStateSelectorContext = React.createContext<\n    CompanyAdminsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useCompanyAdminsState(): CompanyAdminsState {\n    return useSelector(useContext(CompanyAdminsStateSelectorContext));\n}\n\nexport interface CompanyUserStatsState {\n    data?: CompanyUserStats;\n    loading: boolean;\n    error?: string;\n}\n\nexport type CompanyUserStatsStateSelector = (\n    state: any\n) => CompanyUserStatsState;\n\nexport const CompanyUserStatsStateSelectorContext = React.createContext<\n    CompanyUserStatsStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useCompanyUserStatsState(): CompanyUserStatsState {\n    return useSelector(useContext(CompanyUserStatsStateSelectorContext));\n}","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Cross = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 12 12\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0.650152 0.649946C0.825927 0.474384 1.06421 0.375771 1.31265 0.375771C1.56109 0.375771 1.79936 0.474384 1.97515 0.649946L6.00015 4.67495L10.0252 0.649946C10.111 0.557834 10.2145 0.483959 10.3295 0.432721C10.4445 0.381484 10.5687 0.353934 10.6945 0.351709C10.8204 0.349484 10.9454 0.372646 11.0622 0.419796C11.1789 0.466946 11.2849 0.537121 11.3739 0.626146C11.463 0.715171 11.5332 0.821221 11.5803 0.937946C11.6274 1.05468 11.6507 1.17972 11.6484 1.3056C11.6462 1.43148 11.6187 1.55562 11.5674 1.67062C11.5162 1.78562 11.4423 1.88912 11.3502 1.97495L7.32515 5.99995L11.3502 10.0249C11.4423 10.1108 11.5162 10.2143 11.5674 10.3293C11.6187 10.4443 11.6462 10.5684 11.6484 10.6943C11.6507 10.8202 11.6274 10.9452 11.5803 11.0619C11.5332 11.1787 11.463 11.2847 11.3739 11.3737C11.2849 11.4628 11.1789 11.5329 11.0622 11.5801C10.9454 11.6272 10.8204 11.6504 10.6945 11.6482C10.5687 11.6459 10.4445 11.6184 10.3295 11.5672C10.2145 11.5159 10.111 11.4421 10.0252 11.3499L6.00015 7.32495L1.97515 11.3499C1.79743 11.5156 1.56236 11.6057 1.31949 11.6014C1.07661 11.5971 0.844889 11.4987 0.673114 11.3269C0.501352 11.1552 0.402964 10.9234 0.398677 10.6806C0.394389 10.4377 0.484552 10.2027 0.650152 10.0249L4.67515 5.99995L0.650152 1.97495C0.474589 1.79917 0.375977 1.56088 0.375977 1.31245C0.375977 1.06401 0.474589 0.825734 0.650152 0.649946Z\" fill=\"currentColor\"/>\n            </svg>\n        );\n    }\n);\n","import { motion } from 'framer-motion';\nimport styled from 'styled-components';\nimport { rgba } from 'polished';\n\nexport const ModalBackground = styled(motion.div)<{\n    zIndex?: number;\n}>`\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: ${props => props.zIndex || '1200'};\n    background: ${rgba('#232e3a', 0.8)};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    color: var(--ps-black-main);\n`;\n\nexport const ModalContainer = styled(motion.div)<{\n    width: number;\n}>`\n    width: ${props => props.width || '400'}px;\n    height: auto;\n    min-height: 200px;\n    box-shadow: 0px 5px 20px rgba(0, 0, 0, 0.1);\n    background-color: var(--ps-white-1);\n    border-radius: 8px;\n    display: flex;\n    flex-direction: column;\n`;\n\nexport const ModalHeader = styled.div`\n    min-height: 50px;\n    border-bottom: 1px solid var(--ps-grey-4);\n    position: relative;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n`;\n\nexport const ModalTitle = styled.div`\n    padding: 8px 50px 8px 24px;\n    font-size: 18px;\n    font-weight: 800;\n    color: var(--ps-black-main);\n`;\n\nexport const CrossContainer = styled.div`\n    width: 12px;\n    height: 12px;\n    color: #24292E;\n    position: absolute;\n    top: 19px;\n    right: 28px;\n    cursor: pointer;\n    display: flex;\n`;","import React, { FC } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Cross } from '../../icons/Cross';\n\nimport {\n    ModalBackground,\n    ModalContainer,\n    ModalTitle,\n    CrossContainer,\n    ModalHeader,\n} from './styles';\nimport { ModalWithCrossProps } from './types';\n\nconst ModalWithCrossView: FC<ModalWithCrossProps> = props => {\n    const {\n        title,\n        titleStyle,\n        titleContent,\n        width,\n        onClose,\n        children,\n        dataTest,\n        zIndex,\n        hideCross\n    } = props;\n    const container = document.querySelector('body') as HTMLElement;\n\n    return createPortal(\n        <ModalBackground zIndex={zIndex}>\n            <ModalContainer\n                initial={{ scale: 0.8 }}\n                animate={{ scale: 1 }}\n                width={width}\n                data-test={dataTest}\n            >\n                {!hideCross && <ModalHeader>\n                    {title ? (\n                        <ModalTitle style={titleStyle} data-test={dataTest && `${dataTest}-title`}>\n                            {title}\n                        </ModalTitle>\n                    ) : titleContent}\n                    <CrossContainer onClick={onClose} data-test={dataTest && `${dataTest}-close`}>\n                        <Cross />\n                    </CrossContainer>\n                </ModalHeader>}\n                {children}\n            </ModalContainer>\n        </ModalBackground>,\n        container\n    );\n};\n\nexport default ModalWithCrossView;","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    padding: 16px 24px;\n`;\n\nexport const Description = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-black-main);\n`;\n\nexport const QuickTip = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-black-main);\n    padding-top: 8px;\n`;\n\nexport const Footer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    padding-top: 32px;\n`;","import { Button } from \"../../../../../../../ui/components/Button\";\nimport { ModalWithCross } from \"../../../../../../../ui/components/ModalWithCross\";\nimport {\n    Container,\n    Description,\n    QuickTip,\n    Footer\n} from \"./styles\";\nimport { UserLimitWarningModalViewProps } from \"./types\";\n\nfunction UserLimitWarningModalView({\n    title,\n    description,\n    quickTip,\n    width,\n    onClose,\n    onManageInvitations,\n    onRequestLimitChange,\n}: UserLimitWarningModalViewProps) {\n    return (\n        <ModalWithCross\n            title={title}\n            width={width}\n            titleStyle={{padding: '14px 24px', fontSize: '15px'}}\n            onClose={onClose}\n            dataTest=\"limit-warning\"\n        >\n            <Container>\n                <Description data-test=\"limit-warning-description\">{description}</Description>\n                <QuickTip>\n                    <span data-test=\"quick-tip-icon\">💡</span>&nbsp;\n                    <b data-test=\"quick-tip-title\">Quick tip:</b>&nbsp;\n                    <span data-test=\"quick-tip-text\">{quickTip}</span>\n                </QuickTip>\n                <Footer>\n                    <Button\n                        action={onManageInvitations}\n                        label=\"Manage Invitations\"\n                        width=\"130px\"\n                        height=\"40px\"\n                        variant=\"inverse\"\n                        dataTest=\"manage-invitations-button\"\n                    />\n                    <Button\n                        action={onRequestLimitChange}\n                        label=\"Request Limit Change\"\n                        width=\"130px\"\n                        height=\"40px\"\n                        dataTest=\"request-limit-change-button\"\n                    />\n                </Footer>\n            </Container>\n        </ModalWithCross>\n    );\n}\n\nexport default UserLimitWarningModalView;","import { useCallback } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { sendEmail } from \"../../../../../../../helpers/functions/email-helpers\";\nimport ROUTES from \"../../../../../../../routes/routes\";\nimport { useHistory } from \"../../../../../../../tools/router\";\nimport { getCompanyState } from \"../../../../../../CompanySettings/store/reducers\";\nimport { getProfileState } from \"../../../../../../UserProfile/store/reducers\";\nimport { UserLimitWarningModalProps } from \"./types\";\nimport UserLimitWarningModalView from \"./view\";\n\nfunction UserLimitWarningModal({\n    title, description, quickTip, width, onClose\n}: UserLimitWarningModalProps) {\n    const history = useHistory();\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n\n    const handleManageInvitations = useCallback(() => {\n        history.push(ROUTES.INVITATIONS);\n    }, [history]);\n\n    const handleRequestLimitChange = useCallback(() => {\n        if (!profile || !company) return;\n        sendEmail(\n            `Licensed seats limit change request from ${profile.firstName} ${profile.lastName} at ${company.name}`\n        );\n    }, [company, profile]);\n\n    return (\n        <UserLimitWarningModalView\n            title={title}\n            description={description}\n            quickTip={quickTip}\n            width={width}\n            onClose={onClose}\n            onManageInvitations={handleManageInvitations}\n            onRequestLimitChange={handleRequestLimitChange}\n        />\n    );\n}\n\nexport default UserLimitWarningModal;","import { useCompanyUserStatsState } from \"../../../../../../CompanySettings/store/states\";\nimport { UserLimitWarningModal } from \"../UserLimitWarningModal\";\nimport { NoFreeUsersModalViewProps } from \"./types\";\n\nfunction NoFreeUsersModalView({\n    onClose\n}: NoFreeUsersModalViewProps) {\n    const userStats = useCompanyUserStatsState().data;\n\n    if (!userStats) return <></>;\n\n    return (\n        <UserLimitWarningModal\n            title=\"You can't invite new users\"\n            description={<>You've reached your company's licensed seats limit of <b data-test=\"user-limit-value\">{userStats.limit}</b>. You may be able to find unaccepted invitations and revoke them, which will free up some seats.<br />\n            Alternatively, contact your Practis Support to request an increase.</>}\n            quickTip=\"you can save all these invitations as a Draft for now until the limitation issue is resolved.\"\n            width={388}\n            onClose={onClose}\n        />\n    );\n}\n\nexport default NoFreeUsersModalView;","import { useCompanyUserStatsState } from '../../../../../../CompanySettings/store/states';\nimport { UserLimitWarningModal } from '../UserLimitWarningModal';\nimport { ExceededFreeUsersModalViewProps } from './types';\n\nfunction ExceededFreeUsersModalView({\n    onClose\n}: ExceededFreeUsersModalViewProps) {\n    const userStats = useCompanyUserStatsState().data;\n\n    if (!userStats) return <></>;\n\n    return (\n        <UserLimitWarningModal\n            title=\"You need more seats to invite these users\"\n            description={<>You're trying to invite more users than is allowed under your existing license. Your company's account on Practis is limited to <b><span data-test=\"user-limit-value\">{userStats.limit}</span> licensed seats</b> and you've used up <b data-test=\"existing-users-count\">{userStats.total}</b>.<br /> \nYou can either modify the invitations here to a lower number, find unaccepted invitations and revoke them, which will free up some seats.<br />\nAlternatively, contact your Practis Support to request an increase.</>}\n            quickTip=\"you can save all these invitations as a Draft for now until the limitation issue is resolved.\"\n            width={392}\n            onClose={onClose}\n        />\n    );\n}\n\nexport default ExceededFreeUsersModalView;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Gear = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#iirg9aq4aa)\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.429 1.525a6.593 6.593 0 0 1 1.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 0 1 0 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 0 1-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 0 1-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 0 1-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 0 1-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 0 1 0-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19.162-.348.354-.679.573-.99.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 0 0-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63-.268.382-.505.789-.704 1.217-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 0 0 0 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 0 0 1.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 0 0 .668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 0 0 0-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 0 0-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 0 0-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 0 0 8 0zm1.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0z\" fill=\"currentColor\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"iirg9aq4aa\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default Gear;\n","import styled from 'styled-components';\n\nexport const Text = styled.div`\n    font-size: 13px;\n    font-weight: 400;\n    color: var(--ps-grey-1);\n    height: 19px;\n    display: flex;\n    align-items: center;\n`;\n\nexport const GearButton = styled.div`\n    width: 16px;\n    height: 16px;\n    margin-left: 4px;\n    cursor: pointer;\n    color: var(--ps-blue-11);\n`;","import Gear from '../../icons/Gear';\nimport { CompanyUserStatsTextViewProps } from './types';\nimport { GearButton, Text } from './styles';\n\nfunction CompanyUserStatsTextView({\n    userStats,\n    showUnlimited,\n    showSettingsButton,\n    style,\n    onSettingsClick,\n}: CompanyUserStatsTextViewProps) {\n    return (\n        <Text style={style}>\n            {userStats?.limit ? (\n                <>\n                <span data-test=\"user-stats-text\">\n                    <span data-test=\"user-stats-total\">{userStats.total}</span>\n                    &nbsp;of&nbsp;\n                    <span data-test=\"user-stats-limit\">{userStats.limit}</span>\n                    &nbsp;licensed seats have been used\n                </span>\n                {showSettingsButton && (\n                    <GearButton\n                        onClick={onSettingsClick}\n                        data-test=\"user-limit-settings-button\"\n                    >\n                        <Gear />\n                    </GearButton>\n                )}\n                </>\n            ) : (showUnlimited && (\n                <span data-test=\"user-stats-text\">Unlimited licensed seats</span>\n            ))}\n        </Text>\n    );\n}\n\nexport default CompanyUserStatsTextView;","import { useCallback, useEffect } from 'react';\nimport { useGetCompanyUserStatsService } from '../../../pages/CompanySettings/store/services';\nimport { useCompanyUserStatsState } from '../../../pages/CompanySettings/store/states';\nimport { CompanyUserStatsTextProps } from './types';\nimport CompanyUserStatsTextView from './view';\nimport { pushModal, useHistory } from '../../../tools/router';\nimport ROUTES from '../../../routes/routes';\n\nfunction CompanyUserStatsText({\n    companyId,\n    showUnlimited,\n    showSettingsButton,\n    style,\n}: CompanyUserStatsTextProps) {\n    const userStatsState = useCompanyUserStatsState();\n    const getCompanyUserStats = useGetCompanyUserStatsService();\n    const history = useHistory();\n\n    /**\n     * @function handleGearClick\n     * @description opens company settings modal with user limits tab selected\n     * @returns { void }\n     */\n    const handleSettingClick = useCallback(() => {\n        pushModal(history, ROUTES.COMPANY_SETTINGS.USER_LIMIT);\n    }, [history]);\n\n    useEffect(() => {\n        getCompanyUserStats(companyId);\n    }, [companyId, getCompanyUserStats]);\n\n    return (\n        <CompanyUserStatsTextView\n            userStats={userStatsState.data}\n            showUnlimited={showUnlimited}\n            showSettingsButton={showSettingsButton}\n            style={style}\n            onSettingsClick={handleSettingClick}\n        />\n    );\n}\n\nexport default CompanyUserStatsText;","import { ScenarioCases } from './reducers';\nimport { Keywords } from '../../../../constants/interfaces/Keywords';\n\nexport enum ACTIONS {\n    UPLOAD_SCENARIO_LOGO_START = 'UPLOAD_SCENARIO_LOGO_START',\n    UPLOAD_SCENARIO_LOGO_SUCCESS = 'UPLOAD_SCENARIO_LOGO_SUCCESS',\n    UPLOAD_SCENARIO_LOGO_FAILURE = 'UPLOAD_SCENARIO_LOGO_FAILURE',\n\n    UPLOAD_SCENARIO_AUDIO_START = 'UPLOAD_SCENARIO_AUDIO_START',\n    UPLOAD_SCENARIO_AUDIO_SUCCESS = 'UPLOAD_SCENARIO_AUDIO_SUCCESS',\n    UPLOAD_SCENARIO_AUDIO_FAILURE = 'UPLOAD_SCENARIO_AUDIO_FAILURE',\n\n    CREATE_SCRIPT_LINE = 'CREATE_SCRIPT_LINE',\n    UPDATE_SCRIPT_LINE = 'UPDATE_SCRIPT_LINE',\n    DELETE_SCRIPT_LINE = 'DELETE_SCRIPT_LINE',\n    MODIFY_SCRIPT_TEXT = 'MODIFY_SCRIPT_TEXT',\n    CLEAR_SCRIPT_LINES = 'CLEAR_SCRIPT_LINES',\n\n    RESET_SCENARIO = 'RESET_SCENARIO',\n    RESET_SCENARIO_LOGO = 'RESET_SCENARIO_LOGO',\n\n    FETCH_SCENARIO_START = 'FETCH_SCENARIO_START',\n    FETCH_SCENARIO_SUCCESS = 'FETCH_SCENARIO_SUCCESS',\n    FETCH_SCENARIO_FAILURE = 'FETCH_SCENARIO_FAILURE',\n\n    UPDATE_SCRIPT_LINE_KEYWORDS = 'UPDATE_SCRIPT_LINE_KEYWORDS',\n\n    STORE_SCENARIO_TEMP_COPY = 'STORE_SCENARIO_TEMP_COPY',\n    RESTORE_SCENARIO_FROM_TEMP = 'RESTORE_SCENARIO_FROM_TEMP',\n\n    MODIFY_SCENARIO = 'MODIFY_SCENARIO',\n    UPDATE_SCENARIO_CASE = 'UPDATE_SCENARIO_CASE',\n}\n\nexport function createScriptLineAction(data: any) {\n    return {\n        type: ACTIONS.CREATE_SCRIPT_LINE as ACTIONS.CREATE_SCRIPT_LINE,\n        data,\n    };\n}\n\nexport function updateScriptLineAction(data: any) {\n    return {\n        type: ACTIONS.UPDATE_SCRIPT_LINE as ACTIONS.UPDATE_SCRIPT_LINE,\n        data,\n    };\n}\n\nexport function modifyScriptTextAction(\n    value: string,\n    lineId: number | string\n) {\n    return {\n        type: ACTIONS.MODIFY_SCRIPT_TEXT as ACTIONS.MODIFY_SCRIPT_TEXT,\n        lineId: lineId,\n        value,\n    };\n}\n\nexport function deleteScriptLineAction(data: any) {\n    return {\n        type: ACTIONS.DELETE_SCRIPT_LINE as ACTIONS.DELETE_SCRIPT_LINE,\n        data,\n    };\n}\n\nexport function clearScriptLinesAction() {\n    return {\n        type: ACTIONS.CLEAR_SCRIPT_LINES as ACTIONS.CLEAR_SCRIPT_LINES,\n    };\n}\n\nexport function uploadScenarioLogoStart() {\n    return {\n        type: ACTIONS.UPLOAD_SCENARIO_LOGO_START as ACTIONS.UPLOAD_SCENARIO_LOGO_START,\n    };\n}\n\nexport function uploadScenarioLogoSuccess(data: any) {\n    return {\n        type: ACTIONS.UPLOAD_SCENARIO_LOGO_SUCCESS as ACTIONS.UPLOAD_SCENARIO_LOGO_SUCCESS,\n        data,\n    };\n}\n\nexport function uploadScenarioLogoFailure(error: any) {\n    return {\n        type: ACTIONS.UPLOAD_SCENARIO_LOGO_FAILURE as ACTIONS.UPLOAD_SCENARIO_LOGO_FAILURE,\n        error,\n    };\n}\n\nexport function uploadScenarioAudioStart() {\n    return {\n        type: ACTIONS.UPLOAD_SCENARIO_AUDIO_START as ACTIONS.UPLOAD_SCENARIO_AUDIO_START,\n    };\n}\n\nexport function uploadScenarioAudioSuccess(\n    scriptLineId: string | number,\n    response: any\n) {\n    return {\n        type: ACTIONS.UPLOAD_SCENARIO_AUDIO_SUCCESS as ACTIONS.UPLOAD_SCENARIO_AUDIO_SUCCESS,\n        data: {\n            scriptLineId,\n            response,\n        },\n    };\n}\n\nexport function uploadScenarioAudioFailure(error: any) {\n    return {\n        type: ACTIONS.UPLOAD_SCENARIO_AUDIO_FAILURE as ACTIONS.UPLOAD_SCENARIO_AUDIO_FAILURE,\n        error,\n    };\n}\n\nexport function resetScenarioAction() {\n    return {\n        type: ACTIONS.RESET_SCENARIO as ACTIONS.RESET_SCENARIO,\n    };\n}\n\nexport function resetScenarioLogoAction() {\n    return {\n        type: ACTIONS.RESET_SCENARIO_LOGO as ACTIONS.RESET_SCENARIO_LOGO,\n    };\n}\n\nexport function fetchScenarioStart() {\n    return {\n        type: ACTIONS.FETCH_SCENARIO_START as ACTIONS.FETCH_SCENARIO_START,\n    };\n}\n\nexport function fetchScenarioSuccess(data: any) {\n    return {\n        type: ACTIONS.FETCH_SCENARIO_SUCCESS as ACTIONS.FETCH_SCENARIO_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchScenarioFailure(error: any) {\n    return {\n        type: ACTIONS.FETCH_SCENARIO_FAILURE as ACTIONS.FETCH_SCENARIO_FAILURE,\n        error,\n    };\n}\n\nexport function modifyScenarioAction(\n    data: any,\n    field: string,\n    silent?: boolean\n) {\n    return {\n        type: ACTIONS.MODIFY_SCENARIO as ACTIONS.MODIFY_SCENARIO,\n        field: field,\n        data: data,\n        silent: silent,\n    };\n}\n\nexport function updateScenarioModifyCase(value: ScenarioCases) {\n    return {\n        type: ACTIONS.UPDATE_SCENARIO_CASE as ACTIONS.UPDATE_SCENARIO_CASE,\n        value,\n    };\n}\n\nexport function storeScenarioTempCopyAction() {\n    return {\n        type: ACTIONS.STORE_SCENARIO_TEMP_COPY as ACTIONS.STORE_SCENARIO_TEMP_COPY,\n    };\n}\n\nexport function restoreScenarioFromTempAction() {\n    return {\n        type: ACTIONS.RESTORE_SCENARIO_FROM_TEMP as ACTIONS.RESTORE_SCENARIO_FROM_TEMP,\n    };\n}\n\nexport function updateScriptLineKeywords(\n    keywords: Keywords[],\n    lineId: number | string\n) {\n    return {\n        type: ACTIONS.UPDATE_SCRIPT_LINE_KEYWORDS as ACTIONS.UPDATE_SCRIPT_LINE_KEYWORDS,\n        keywords,\n        lineId,\n    };\n}\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useParams } from 'react-router';\r\n\r\nimport * as Yup from 'yup';\r\nimport { useSelector } from 'react-redux';\r\nimport { FieldArray, Form, Formik } from 'formik';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport Validation from '../../../../../services/validation';\r\nimport {\r\n    useAddMultipleStagingUsersService,\r\n    useAddStagingUserService,\r\n    useAssignFiltersToStagingUsersService,\r\n    useDeleteStagingUserService,\r\n    useInviteStagingUserService,\r\n    useModifyDraftUsersService,\r\n    useModifyDraftUsersWithoutValidationService,\r\n    useResetDraftsPageService,\r\n    useSearchStagingUsersService,\r\n    useUpdateStagingUserService,\r\n    MAX_DRAFT_USERS_INVITE,\r\n} from '../../store/services';\r\n\r\nimport { AddNewUserContainer } from '../../components/AddNewUser';\r\nimport { CheckPermission } from '../../../../../features/permissions';\r\nimport { NEW_PERMISSIONS } from '../../../../../constants/enums/permissions';\r\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\r\nimport { NewUserHeader } from '../../components/Header/NewUserHeader';\r\nimport { UsersList } from '../../components/UsersList/UsersList';\r\nimport { formatDate } from '../../../../../helpers/functions/date-convert';\r\nimport { SaveAsDraftModal } from '../../components/SaveAsDraftModal';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../../constants/interfaces/filters';\r\nimport { useIfChanged } from '../../../../../helpers/hooks/usePreviousData';\r\nimport {\r\n    DraftUser,\r\n    PractisSetWithDueDate,\r\n} from '../../../../../constants/interfaces/Draft';\r\nimport { useDraftEditState } from '../../store/states';\r\nimport { getCompanyState } from '../../../../CompanySettings/store/reducers';\r\nimport { CompanyInterface } from '../../../../../constants/interfaces/Company';\r\nimport { useHistory } from '../../../../../tools/router';\r\nimport { useGetFullPractisSetsService } from '../../../../../features/library/store/services';\r\nimport { AssignFiltersToStagingUsersParams } from '../../../../../api/users/types';\r\nimport { LibraryItemsStatus } from '../../../../../features/library/tools';\r\nimport ROUTES from '../../../../../routes/routes';\r\nimport AddNewUserTip from '../../components/AddNewUserTip';\r\nimport useKeyPress from '../../../../../helpers/hooks/useKeyPress';\r\nimport { WithLabelsContext } from '../../../../../features/portableLabels';\r\nimport { WithTeamsContext } from '../../../../../features/portableTeams';\r\nimport { WithPractisSetsContext } from '../../../../../features/portablePractisSets';\r\nimport { isAdminRole, isTeamLeader, ROLE_NAMES } from '../../../../../constants/enums';\r\nimport { getProfileState } from '../../../../UserProfile/store/reducers';\r\nimport { useUserRolesState } from '../../../../../features/roles/store/states';\r\nimport uniqBy from 'lodash/uniqBy';\r\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { escapeRegExp } from '../../../../../helpers/functions/escape-reg-exp';\r\nimport { ModalPageContainerProps } from '../../../../../ui/components/ModalPage';\r\nimport ModalPage from '../../../../../ui/components/ModalPage/ModalPage';\r\nimport { useTableStateHelper } from '../../../../../ui/components/table-wrapper/helper';\r\nimport { Button } from '../../../../../ui/components/Button';\r\nimport { useInviteUsersBulActionService } from '../../services/InviteUsersBulkActionService';\r\nimport { ChunkServiceUserDataInterface } from '../../services/InviteUsersBulkActionService/types';\r\nimport { onTriggerEvent } from '../../../../../helpers/functions/Events';\r\nimport {\r\n    EventNameList,\r\n    REFRESH_PENDING_USERS_PAGE,\r\n} from '../../../../../helpers/functions/Events/types';\r\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\r\nimport { extractEmailsFromString } from '../../../../../helpers/functions/strings';\r\nimport { usePortableTeamsState } from '../../../../../features/portableTeams/store/states';\r\nimport { useShowConfirmModalDialog } from '../../../../../ui/components/ModalDialogs/store/actions';\r\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\r\n\r\nimport {\r\n    StyledContainer,\r\n    StyledHeader,\r\n    StyledFooter,\r\n    StyledFooterActions,\r\n    StyledHeaderInput,\r\n    StyledContent,\r\n    AddNewUserWrapper,\r\n    Divider,\r\n    StyledSavedStatusContainer,\r\n    StyledButtonContainer,\r\n    UserStatsContainer,\r\n} from './styles';\r\nimport { CompanyUserStats } from '../../../../../constants/interfaces/CompanyUserStats';\r\nimport { NoFreeUsersModal } from './components/NoFreeUsersModal';\r\nimport { ExceededFreeUsersModal } from './components/ExceededFreeUsersModal';\r\nimport { useGetCompanyUserStatsService } from '../../../../CompanySettings/store/services';\r\nimport { CompanyUserStatsText } from '../../../../../ui/components/CompanyUserStatsText';\r\n\r\nconst validationSchema = Yup.object().shape<DraftUser>({\r\n    email: Validation.email.trim(),\r\n    firstName: Validation.firstName,\r\n    lastName: Validation.lastName,\r\n} as any);\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\nconst NEW_DRAFT_ID = 'new';\r\n\r\nconst NewUser: FC<{\r\n    users?: PaginationResult<DraftUser>;\r\n    lastUpdated?: string;\r\n    loading?: boolean;\r\n    params: { draftId?: any };\r\n    company: CompanyInterface;\r\n    navigateToInvitations(): void;\r\n    searchDraftUsers(draftId: number, sp: SearchParams): Promise<any>;\r\n    modifyDraftUsers(users: PaginationResult<DraftUser>): void;\r\n    modifyDraftUsersWithoutValidation(users: PaginationResult<DraftUser>): void;\r\n    resetDraftsPage(): void;\r\n    addStagingUser(stagingId: number, users: DraftUser): Promise<boolean>;\r\n    addMultipleStagingUsers(\r\n        stagingId: number,\r\n        users: DraftUser[]\r\n    ): Promise<boolean>;\r\n    updateStagingUser(\r\n        stagingId: number,\r\n        stagingUserId: number,\r\n        users: DraftUser\r\n    ): Promise<boolean>;\r\n    deleteStagingUser(\r\n        stagingId: number,\r\n        stagingUserIds: number[]\r\n    ): Promise<boolean>;\r\n    inviteStagingUser(\r\n        stagingId: number,\r\n        stagingUserIds: number[],\r\n        selectAll: boolean,\r\n        search: SearchParams\r\n    ): Promise<any>;\r\n    assignFiltersToStagingUsers(\r\n        stagingId: number,\r\n        assignFilters: AssignFiltersToStagingUsersParams\r\n    ): Promise<any>;\r\n    setGoBackTwice(enable: boolean): void;\r\n    getCompanyUserStats: (companyId: number, callback?: (result: CompanyUserStats) => void) => void;\r\n}> = ({\r\n    users,\r\n    lastUpdated,\r\n    loading,\r\n    params,\r\n    company,\r\n    navigateToInvitations,\r\n    searchDraftUsers,\r\n    modifyDraftUsers,\r\n    modifyDraftUsersWithoutValidation,\r\n    resetDraftsPage,\r\n    addStagingUser,\r\n    addMultipleStagingUsers,\r\n    updateStagingUser,\r\n    deleteStagingUser,\r\n    inviteStagingUser,\r\n    assignFiltersToStagingUsers,\r\n    setGoBackTwice,\r\n    getCompanyUserStats\r\n}) => {\r\n    const showMessage = useShowMessage();\r\n    const history = useHistory();\r\n    useHtmlPageTitle('Invite Users to the App')\r\n\r\n    const existedEmailListRef = useRef<string[]>([]);\r\n    const existedEmailList = existedEmailListRef.current;\r\n    const { data: initialTeams } = usePortableTeamsState();\r\n    const defaultTeamId = initialTeams?.items?.find(item => item.isDefault)?.id;\r\n\r\n    const [noFreeUsersModalOpen, setNoFreeUsersModalOpen] = useState(false);\r\n    const [exceededFreeUsersModalOpen, setExceededFreeUsersModalOpen] = useState(false);\r\n\r\n    const formRef: any = React.createRef();\r\n    const [loadingInvitation, setLoadingInvitation] = useState(false);\r\n    const [saveDraftModalOpen, setSaveDraftModalOpen] = useState(false);\r\n    const [creatingUser, setCreatingUser] = useState(false);\r\n    const [usersSavedAt, setUsersSavedAt] = useState<Date | null>(null);\r\n    const [draftSavedFirstTimeAt, setDraftSavedFirstTimeAt] =\r\n        useState<Date | null>(null);\r\n\r\n    const isDraftSaved = params.draftId !== NEW_DRAFT_ID;\r\n    const profile = useSelector(getProfileState);\r\n    const isRoleDisabled = isTeamLeader(profile?.role?.name);\r\n\r\n    const userEmptyState: DraftUser = {\r\n        id: '',\r\n        email: '',\r\n        firstName: '',\r\n        lastName: '',\r\n        labelIDs: [],\r\n        practisSetIDs: [],\r\n        teamIDs: [],\r\n        roleId: null,\r\n    };\r\n\r\n    const userRoles = useUserRolesState();\r\n    const userRoleId = userRoles.list.filter(\r\n        role => role.name === ROLE_NAMES.USER\r\n    )[0];\r\n\r\n    // NEW USER STATE LOGIC\r\n    const [newUser, setNewUser] = useState<DraftUser>(userEmptyState);\r\n\r\n    const [newUserRole, setNewUserRole] = useState<number | null>(null);\r\n    const [newUserPractisSets, setNewUserPractisSets] = useState<\r\n        PractisSetWithDueDate[]\r\n    >([]);\r\n    const [newUserTeams, setNewUserTeams] = useState<number[]>([]);\r\n    const [newUserLabels, setNewUserLabels] = useState<number[]>([]);\r\n    const [isSelectAll, setIsSelectAll] = useState(false);\r\n\r\n    const handleSetNewUserLabels = (labelIds: number[]) => {\r\n        setNewUserLabels(labelIds);\r\n    };\r\n\r\n    const handleChangeNewUserRole = useCallback(\r\n        (role: number | null) => {\r\n            setNewUserRole(role);\r\n        },\r\n        [setNewUserRole]\r\n    );\r\n\r\n    const handleSetNewUserPractisSets = (\r\n        practisSetIds: PractisSetWithDueDate[]\r\n    ) => {\r\n        setNewUserPractisSets(practisSetIds);\r\n    };\r\n\r\n    const handleSetNewUserTeams = (teamIds: number[]) => {\r\n        setNewUserTeams(teamIds);\r\n    };\r\n\r\n    // SELECTED USER STATE LOGIC\r\n    const [selectedUser, setSelectedUser] = useState<DraftUser>(userEmptyState);\r\n    const [selectedUserRole, setSelectedUserRole] = useState<number | null>(\r\n        null\r\n    );\r\n    const [selectedUserPractisSets, setSelectedUserPractisSets] = useState<\r\n        PractisSetWithDueDate[]\r\n    >([]);\r\n    const [selectedUserTeams, setSelectedUserTeams] = useState<number[]>([]);\r\n    const [selectedUserLabels, setSelectedUserLabels] = useState<number[]>([]);\r\n\r\n    const handleSetSelectedUserLabels = (labelIds: number[]) => {\r\n        setSelectedUserLabels(labelIds);\r\n    };\r\n    const handleChangeSelectedUserRole = useCallback(\r\n        (role: number | null) => {\r\n            setSelectedUserRole(role);\r\n        },\r\n        [setSelectedUserRole]\r\n    );\r\n\r\n    const handleSetSelectedUserPractisSets = (\r\n        practisSetIds: PractisSetWithDueDate[]\r\n    ) => {\r\n        setSelectedUserPractisSets(practisSetIds);\r\n    };\r\n\r\n    const handleSetSelectedUserTeams = (teamIds: number[]) => {\r\n        setSelectedUserTeams(teamIds);\r\n    };\r\n\r\n    const isTeamLead = isTeamLeader(profile?.role?.name);\r\n    useEffect(() => {\r\n        if (userRoleId?.id && isTeamLead) {\r\n            setNewUserRole(userRoleId.id);\r\n            setSelectedUserRole(userRoleId.id);\r\n        }\r\n    }, [userRoleId, isTeamLead]);\r\n\r\n    // LIST USERS STATE LOGIC\r\n    const [checkedUserIds, setCheckedUserIds] = useState<number[]>([]);\r\n\r\n    const [checkedUserRoles, setCheckedUserRoles] = useState<number[]>([]);\r\n\r\n    const handleClearCheckedUserRoles = (roleIds: number[]) => {\r\n        setCheckedUserRoles(roleIds);\r\n    };\r\n\r\n    const handleAssignFiltersToCheckedUsers = async (\r\n        assignedLabels: number[],\r\n        deletedLabels: number[],\r\n        assignedPractisSets: PractisSetWithDueDate[],\r\n        deletedPractisSets: number[],\r\n        assignedTeams: number[],\r\n        deletedTeams: number[],\r\n        roleId: null | number\r\n    ) => {\r\n        if (isDraftSaved) {\r\n            const limit = isSelectAll ? users?.totalCount : searchParams?.limit;\r\n\r\n            return assignFiltersToStagingUsers(params.draftId, {\r\n                userIDs: checkedUserIds,\r\n                labelIDs: assignedLabels,\r\n                roleId: isRoleDisabled ? null : roleId,\r\n                deletedLabelIDs: deletedLabels,\r\n                practisSetIDs: assignedPractisSets,\r\n                deletedPractisSetIDs: deletedPractisSets,\r\n                teamIDs: assignedTeams,\r\n                deletedTeamIDs: deletedTeams,\r\n                selectAll: isSelectAll,\r\n                search: { ...searchParams, limit },\r\n            })\r\n                .then(() => {\r\n                    manualRefreshSearchParams();\r\n                    const count =\r\n                        (isSelectAll\r\n                            ? users?.totalCount\r\n                            : checkedUserIds.length) || 0;\r\n\r\n                    showMessage(\r\n                        `Changes  ${\r\n                            count > 1 ? 'have' : 'has'\r\n                        } been saved for ${count} ${\r\n                            count > 1 ? 'users' : 'user'\r\n                        }`,\r\n                        'success'\r\n                    );\r\n                    return true;\r\n                })\r\n                .catch(() => {\r\n                    return false;\r\n                });\r\n        } else {\r\n            let filteredUsers = userItemsList ? [...userItemsList] : [];\r\n\r\n            if (assignedLabels.length > 0) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        const updatedUserLabels = new Set([\r\n                            ...user.labelIDs,\r\n                            ...assignedLabels,\r\n                        ]);\r\n                        return {\r\n                            ...user,\r\n                            labelIDs: Array.from(updatedUserLabels),\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (deletedLabels.length > 0) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        const updatedUserLabels = user.labelIDs.filter(\r\n                            id => !deletedLabels.includes(id)\r\n                        );\r\n                        return {\r\n                            ...user,\r\n                            labelIDs: updatedUserLabels,\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (assignedPractisSets.length > 0) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        const updatedUserPractisSets = uniqBy(\r\n                            [...assignedPractisSets, ...user.practisSetIDs],\r\n                            practisSet => practisSet.practisSetId\r\n                        );\r\n\r\n                        return {\r\n                            ...user,\r\n                            practisSetIDs: updatedUserPractisSets,\r\n                            practisSets: updatedUserPractisSets,\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (deletedPractisSets.length > 0) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        const updatedUserPractisSets =\r\n                            user.practisSetIDs.filter(\r\n                                id =>\r\n                                    !deletedPractisSets.includes(\r\n                                        id.practisSetId\r\n                                    )\r\n                            );\r\n                        return {\r\n                            ...user,\r\n                            practisSetIDs: updatedUserPractisSets,\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (assignedTeams.length > 0) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        const updatedUserTeams = new Set([\r\n                            ...user.teamIDs,\r\n                            ...assignedTeams,\r\n                        ]);\r\n                        return {\r\n                            ...user,\r\n                            teamIDs: Array.from(updatedUserTeams),\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (deletedTeams.length > 0) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        const updatedUserTeams = user.teamIDs.filter(\r\n                            id => !deletedTeams.includes(id)\r\n                        );\r\n                        return {\r\n                            ...user,\r\n                            teamIDs: updatedUserTeams,\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (roleId && !isRoleDisabled) {\r\n                filteredUsers = filteredUsers.map(user => {\r\n                    if (checkedUserIds.includes(user.id)) {\r\n                        return {\r\n                            ...user,\r\n                            roleId: roleId,\r\n                        };\r\n                    } else {\r\n                        return user;\r\n                    }\r\n                });\r\n            }\r\n            showMessage(\r\n                `Changes  ${\r\n                    checkedUserIds.length > 1 ? 'have' : 'has'\r\n                } been saved for ${checkedUserIds.length} ${\r\n                    checkedUserIds.length > 1 ? 'users' : 'user'\r\n                }`,\r\n                'success'\r\n            );\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: filteredUsers,\r\n            } as PaginationResult<DraftUser>);\r\n            return true;\r\n        }\r\n    };\r\n\r\n    // FILTERS\r\n    const [filterRoles, setFilterRoles] = useState<number[]>([]);\r\n\r\n    const initialLocalFilterParams: {\r\n        searchTerm: string;\r\n        labelIDs: number[];\r\n        practisSetIDs: number[];\r\n        roleIDs: number[];\r\n        teamIDs: number[];\r\n    } = {\r\n        searchTerm: '',\r\n        labelIDs: [],\r\n        practisSetIDs: [],\r\n        roleIDs: [],\r\n        teamIDs: [],\r\n    };\r\n\r\n    const [localFilterParams, setLocalFilterParams] = useState(\r\n        initialLocalFilterParams\r\n    );\r\n    const [filtersCount, setFiltersCount] = useState<number>(0);\r\n\r\n    const ifLocalFilterParamsChanged = useIfChanged(localFilterParams);\r\n    const ifUsersChanged = useIfChanged(users);\r\n    const [localUsers, setLocalUsers] = useState<\r\n        PaginationResult<DraftUser> | undefined\r\n    >(users && users);\r\n\r\n    useEffect(() => {\r\n        if (users) {\r\n            setLocalUsers(users);\r\n        }\r\n    }, [users]);\r\n\r\n    useEffect(() => {\r\n        if ((ifLocalFilterParamsChanged || ifUsersChanged) && !isDraftSaved) {\r\n            let filteredUser: DraftUser[] =\r\n                users && users.items ? users.items : [];\r\n            if (localFilterParams.roleIDs.length > 0) {\r\n                filteredUser = filteredUser.filter(user => {\r\n                    return (\r\n                        user.roleId &&\r\n                        localFilterParams.roleIDs.includes(user.roleId)\r\n                    );\r\n                });\r\n            }\r\n\r\n            if (localFilterParams.labelIDs.length > 0) {\r\n                filteredUser = filteredUser.filter(user => {\r\n                    return localFilterParams.labelIDs.some(\r\n                        id => user.labelIDs.indexOf(id) >= 0\r\n                    );\r\n                });\r\n            }\r\n\r\n            if (localFilterParams.practisSetIDs.length > 0) {\r\n                filteredUser = filteredUser.filter(user => {\r\n                    return localFilterParams.practisSetIDs.some(\r\n                        //filter to find if filtered practis set is assigned to user\r\n                        id =>\r\n                            user.practisSetIDs.some(\r\n                                x => x.practisSetId === id\r\n                            )\r\n                    );\r\n                });\r\n            }\r\n\r\n            if (localFilterParams.teamIDs.length > 0) {\r\n                filteredUser = filteredUser.filter(user => {\r\n                    return localFilterParams.teamIDs.some(\r\n                        id => user.teamIDs.indexOf(id) >= 0\r\n                    );\r\n                });\r\n            }\r\n\r\n            if (localFilterParams.searchTerm.length > 0) {\r\n                const escapedSearchTerm = escapeRegExp(\r\n                    localFilterParams.searchTerm\r\n                ).toLowerCase();\r\n                const regSearchTerm = new RegExp(escapedSearchTerm);\r\n\r\n                const trimmedRegSearchTerm = new RegExp(\r\n                    escapeRegExp(\r\n                        localFilterParams.searchTerm.trim()\r\n                    ).toLowerCase()\r\n                );\r\n\r\n                filteredUser = filteredUser.filter(user => {\r\n                    return (\r\n                        (user.firstName &&\r\n                            regSearchTerm.test(user.firstName.toLowerCase())) ||\r\n                        (user.firstName &&\r\n                            user.lastName &&\r\n                            trimmedRegSearchTerm.test(\r\n                                `${user.firstName} ${user.lastName}`\r\n                                    .trim()\r\n                                    .toLowerCase()\r\n                            )) ||\r\n                        (user.lastName &&\r\n                            regSearchTerm.test(user.lastName.toLowerCase())) ||\r\n                        (user.email &&\r\n                            regSearchTerm.test(user.email?.toLowerCase()))\r\n                    );\r\n                });\r\n            }\r\n\r\n            setLocalUsers(prevState => {\r\n                if (prevState) {\r\n                    return {\r\n                        ...prevState,\r\n                        items: filteredUser,\r\n                    };\r\n                }\r\n            });\r\n        }\r\n    }, [\r\n        ifLocalFilterParamsChanged,\r\n        isDraftSaved,\r\n        ifUsersChanged,\r\n        localFilterParams,\r\n        modifyDraftUsers,\r\n        users,\r\n    ]);\r\n\r\n    const userItemsList = !isDraftSaved\r\n        ? localUsers && localUsers.items\r\n        : users && users.items;\r\n\r\n    const setLocalSearchTerm = (value: string) => {\r\n        setLocalFilterParams(prevState => {\r\n            return {\r\n                ...prevState,\r\n                searchTerm: value,\r\n            };\r\n        });\r\n    };\r\n\r\n    const handleApplyFiltersToCheckedUsers = async (\r\n        labelIDs: number[],\r\n        practisSetIDs: PractisSetWithDueDate[],\r\n        teamIDs: number[],\r\n        roleIDs: number[]\r\n    ) => {\r\n        setFiltersCount(\r\n            labelIDs.length +\r\n                teamIDs.length +\r\n                practisSetIDs.length +\r\n                roleIDs.length\r\n        );\r\n\r\n        if (isDraftSaved) {\r\n            setLabelIDs(labelIDs);\r\n            //PSWDD maybe change type\r\n            setPractisSetIDs(practisSetIDs.map(x => x.practisSetId));\r\n            setTeamIDs(teamIDs);\r\n            if (!isRoleDisabled) {\r\n                setRoleIDs(roleIDs);\r\n            }\r\n        } else {\r\n            setLocalFilterParams((prevState: any) => {\r\n                return {\r\n                    ...prevState,\r\n                    teamIDs: teamIDs,\r\n                    labelIDs: labelIDs,\r\n                    practisSetIDs: practisSetIDs.map(x => x.practisSetId),\r\n                    roleIDs: isRoleDisabled ? [] : roleIDs,\r\n                };\r\n            });\r\n        }\r\n        return true;\r\n    };\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        filters: [],\r\n        orderBy: { field: 'lastEditedBy.firstName', asc: false },\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n    };\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setLabelIDs,\r\n        setPractisSetIDs,\r\n        setRoleIDs,\r\n        setTeamIDs,\r\n        setLimit,\r\n    } = useSearchParamsState(initialSearchParams);\r\n    const ifSearchParamsChanged = useIfChanged(searchParams);\r\n    const ifDraftIdChanged = useIfChanged(params.draftId);\r\n\r\n    const manualRefreshSearchParams = useCallback(async () => {\r\n        return searchDraftUsers(params.draftId, searchParams).then(\r\n            updatedUsers => {\r\n                setUsersSavedAt(new Date());\r\n                setDraftSavedFirstTimeAt(null);\r\n                return updatedUsers;\r\n            }\r\n        );\r\n    }, [searchDraftUsers, params.draftId, searchParams]);\r\n\r\n    useEffect(() => {\r\n        if ((ifSearchParamsChanged || ifDraftIdChanged) && isDraftSaved) {\r\n            searchDraftUsers(params.draftId, searchParams).catch(console.error);\r\n        }\r\n    }, [\r\n        params.draftId,\r\n        searchDraftUsers,\r\n        searchParams,\r\n        ifSearchParamsChanged,\r\n        ifDraftIdChanged,\r\n        isDraftSaved,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        if (userItemsList) {\r\n            const userItemListIds: number[] = userItemsList.map(\r\n                user => user.id\r\n            );\r\n            let updatedCheckedUserIds = checkedUserIds.filter(userId =>\r\n                userItemListIds.includes(userId)\r\n            );\r\n            setCheckedUserIds(\r\n                !isSelectAll ? updatedCheckedUserIds : userItemListIds\r\n            );\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [userItemsList]);\r\n\r\n    const resetNewUserFields = () => {\r\n        setNewUser(JSON.parse(JSON.stringify(userEmptyState)));\r\n        if (!isRoleDisabled) {\r\n            setNewUserRole(null);\r\n        }\r\n        setNewUserPractisSets([]);\r\n        setNewUserTeams([]);\r\n        setNewUserLabels([]);\r\n    };\r\n\r\n    const resetEditingUserFields = () => {\r\n        setSelectedUser(JSON.parse(JSON.stringify(userEmptyState)));\r\n        if (!isRoleDisabled) {\r\n            setSelectedUserRole(null);\r\n        }\r\n        setSelectedUserTeams([]);\r\n        setSelectedUserPractisSets([]);\r\n        setSelectedUserLabels([]);\r\n    };\r\n\r\n    const handleUpdateSelectedUser = () => {\r\n        const modifiedUser: DraftUser = {\r\n            ...selectedUser,\r\n            email: selectedUser.email.trim(),\r\n            id: selectedUser.id,\r\n            roleId: selectedUserRole,\r\n            labelIDs: selectedUserLabels.filter(labelId => labelId > 0) || [],\r\n            practisSetIDs: selectedUserPractisSets || [],\r\n            practisSets: selectedUserPractisSets || [],\r\n            teamIDs: selectedUserTeams || [],\r\n            emailExistsInSystem: false,\r\n        };\r\n\r\n        let updatedUserItems = users ? [...users.items] : [];\r\n        const userExists =\r\n            updatedUserItems.filter(user => user.id === modifiedUser.id)\r\n                .length > 0;\r\n\r\n        if (userExists) {\r\n            updatedUserItems = updatedUserItems.map(user => {\r\n                if (user.id === modifiedUser.id) {\r\n                    return modifiedUser;\r\n                } else {\r\n                    return user;\r\n                }\r\n            });\r\n        } else {\r\n            updatedUserItems.unshift(modifiedUser);\r\n        }\r\n\r\n        const filteredUser = updatedUserItems.map((item, index) => ({\r\n            ...item,\r\n            isEntryInvalid:\r\n                !!item.email &&\r\n                index < updatedUserItems.length - 1 &&\r\n                updatedUserItems\r\n                    .slice(index + 1)\r\n                    .filter(user => user.email === item.email).length > 0,\r\n        }));\r\n\r\n        if (isDraftSaved) {\r\n            if (userExists) {\r\n                updateStagingUser(params.draftId, modifiedUser.id, {\r\n                    firstName: modifiedUser.firstName,\r\n                    lastName: modifiedUser.lastName,\r\n                    email: modifiedUser.email,\r\n                    roleId: modifiedUser.roleId,\r\n                    labelIDs: modifiedUser.labelIDs\r\n                        ? modifiedUser.labelIDs\r\n                        : [],\r\n                    practisSetIDs: modifiedUser.practisSetIDs ?? [],\r\n                    teamIDs: modifiedUser.teamIDs,\r\n                }).then(() => {\r\n                    resetEditingUserFields();\r\n                    manualRefreshSearchParams().catch(console.error);\r\n                });\r\n            } else {\r\n                addStagingUser(params.draftId, {\r\n                    firstName: modifiedUser.firstName,\r\n                    lastName: modifiedUser.lastName,\r\n                    email: modifiedUser.email,\r\n                    roleId: modifiedUser.roleId,\r\n                    labelIDs: modifiedUser.labelIDs\r\n                        ? modifiedUser.labelIDs\r\n                        : [],\r\n                    practisSetIDs: modifiedUser.practisSetIDs ?? [],\r\n                    practisSets: modifiedUser.practisSets ?? [],\r\n                    teamIDs: modifiedUser.teamIDs,\r\n                }).then(() => {\r\n                    resetEditingUserFields();\r\n                    manualRefreshSearchParams().catch(console.error);\r\n                });\r\n            }\r\n        } else {\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: filteredUser,\r\n            } as PaginationResult<DraftUser>);\r\n            resetEditingUserFields();\r\n        }\r\n    };\r\n\r\n    const handleCreateNewUser = (user: DraftUser) => {\r\n        const modifiedUser: DraftUser = {\r\n            ...user,\r\n            id: Date.now(), // random unique number\r\n            roleId: newUserRole,\r\n            labelIDs: newUserLabels.filter(labelId => labelId > 0) || [],\r\n            practisSetIDs: newUserPractisSets || [],\r\n            practisSets: newUserPractisSets || [],\r\n            teamIDs: newUserTeams || [],\r\n            teamsCount: `${(newUserTeams || []).length}`,\r\n        };\r\n\r\n        let updatedUserItems = users ? [...users.items] : [];\r\n        const userExists =\r\n            updatedUserItems.filter(user => user.id === modifiedUser.id)\r\n                .length > 0;\r\n\r\n        if (userExists) {\r\n            updatedUserItems = updatedUserItems.map(user => {\r\n                if (user.id === modifiedUser.id) {\r\n                    return modifiedUser;\r\n                } else {\r\n                    return user;\r\n                }\r\n            });\r\n        } else {\r\n            updatedUserItems.unshift(modifiedUser);\r\n        }\r\n\r\n        const filteredUser = updatedUserItems.map((item, index) => ({\r\n            ...item,\r\n            isEntryInvalid:\r\n                !!item.email &&\r\n                index < updatedUserItems.length - 1 &&\r\n                updatedUserItems\r\n                    .slice(index + 1)\r\n                    .filter(user => user.email === item.email).length > 0,\r\n        }));\r\n\r\n        if (isDraftSaved) {\r\n            if (userExists) {\r\n                updateStagingUser(params.draftId, modifiedUser.id, {\r\n                    firstName: modifiedUser.firstName,\r\n                    lastName: modifiedUser.lastName,\r\n                    email: modifiedUser.email,\r\n                    roleId: modifiedUser.roleId,\r\n                    labelIDs: modifiedUser.labelIDs\r\n                        ? modifiedUser.labelIDs\r\n                        : [],\r\n                    practisSetIDs: modifiedUser.practisSetIDs ?? [],\r\n                    teamIDs: modifiedUser.teamIDs,\r\n                }).then(() => {\r\n                    resetNewUserFields();\r\n                    manualRefreshSearchParams().catch(console.error);\r\n                });\r\n            } else {\r\n                addStagingUser(params.draftId, {\r\n                    firstName: modifiedUser.firstName,\r\n                    lastName: modifiedUser.lastName,\r\n                    email: modifiedUser.email,\r\n                    roleId: modifiedUser.roleId,\r\n                    labelIDs: modifiedUser.labelIDs\r\n                        ? modifiedUser.labelIDs\r\n                        : [],\r\n                    practisSetIDs: modifiedUser.practisSetIDs ?? [],\r\n                    teamIDs: modifiedUser.teamIDs,\r\n                }).then(() => {\r\n                    resetNewUserFields();\r\n                    manualRefreshSearchParams().catch(console.error);\r\n                });\r\n            }\r\n        } else {\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: filteredUser,\r\n            } as PaginationResult<DraftUser>);\r\n            resetNewUserFields();\r\n        }\r\n    };\r\n\r\n    const handleSubmitForm = () => {\r\n        if (formRef.current) {\r\n            if (newUserRole) {\r\n                formRef.current.handleSubmit();\r\n            }\r\n        }\r\n    };\r\n\r\n    useKeyPress('Enter', handleSubmitForm);\r\n\r\n    const onUsersImported = (importedUsers: DraftUser[]) => {\r\n        if (isDraftSaved) {\r\n            const sendImportedUsers = importedUsers.map(user => {\r\n                return {\r\n                    firstName: user.firstName ? user.firstName : '',\r\n                    lastName: user.lastName ? user.lastName : '',\r\n                    email: user.email ? user.email.trim() : '',\r\n                    roleId: user.roleId ? user.roleId : null,\r\n                    practisSetIDs: [],\r\n                    teamIDs: [],\r\n                    labelIDs: [],\r\n                };\r\n            });\r\n\r\n            addMultipleStagingUsers(params.draftId, sendImportedUsers).then(\r\n                () => {\r\n                    manualRefreshSearchParams().catch(console.error);\r\n                }\r\n            );\r\n        } else {\r\n            const currentUsers = userItemsList ? [...userItemsList] : [];\r\n            const finalReformattedResults = [\r\n                ...currentUsers.filter((user: any) => !!user.email),\r\n                ...importedUsers,\r\n            ];\r\n\r\n            const trimmedFinalResults = finalReformattedResults.map(item => {\r\n                return {\r\n                    ...item,\r\n                    email: item.email?.trim(),\r\n                };\r\n            });\r\n\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: trimmedFinalResults,\r\n            } as PaginationResult<DraftUser>);\r\n        }\r\n    };\r\n\r\n    const onEditUser = (user: DraftUser) => {\r\n        if (!user) return;\r\n        setSelectedUser({\r\n            ...user,\r\n            email: user.email || '',\r\n        });\r\n\r\n        setSelectedUserRole(user.roleId);\r\n        setSelectedUserLabels(user.labelIDs || []);\r\n\r\n        if (isDraftSaved) {\r\n            setSelectedUserPractisSets(user.practisSets || []);\r\n        } else {\r\n            setSelectedUserPractisSets(user.practisSetIDs || []);\r\n        }\r\n\r\n        setSelectedUserTeams(user.teamIDs || []);\r\n    };\r\n\r\n    const onRemoveUser = (userId: number | string) => {\r\n        const userItems = users && users.items ? users.items : [];\r\n        const updatedList = userItems.filter(user => user.id !== userId);\r\n        const finalResult = updatedList.map((item, index) => ({\r\n            ...item,\r\n            isEntryInvalid:\r\n                !!item.email &&\r\n                index < updatedList.length - 1 &&\r\n                updatedList\r\n                    .slice(index + 1)\r\n                    .filter(user => user.email === item.email).length > 0,\r\n        }));\r\n\r\n        if (isDraftSaved) {\r\n            deleteStagingUser(params.draftId, [Number(userId)]).then(() => {\r\n                manualRefreshSearchParams().catch(console.error);\r\n                showMessage('1 User has been removed', 'success');\r\n                if (checkedUserIds.includes(userId as number)) {\r\n                    setCheckedUserIds([]);\r\n                }\r\n            });\r\n        } else {\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: finalResult,\r\n            } as PaginationResult<DraftUser>);\r\n            showMessage('1 User has been removed', 'success');\r\n            if (checkedUserIds.includes(userId as number)) {\r\n                setCheckedUserIds([]);\r\n            }\r\n        }\r\n\r\n        setCheckedUserIds([]);\r\n    };\r\n\r\n    const modifySelectedUser = (value: string, field: string) => {\r\n        if (value.length > 100) return;\r\n        setSelectedUser(prevState => ({\r\n            ...prevState,\r\n            [field]: value,\r\n        }));\r\n    };\r\n\r\n    const modifyNewUser = (value: string, field: string) => {\r\n        if (value.length > 100) return;\r\n        setNewUser(prevState => ({\r\n            ...prevState,\r\n            [field]: value,\r\n        }));\r\n    };\r\n\r\n    const handleUserCheck = (id?: number | string) => {\r\n        if (!id) return;\r\n        const checkUser = checkedUserIds.find((item: any) => item === id);\r\n        setCheckedUserIds((prevState: any) =>\r\n            checkUser\r\n                ? prevState.filter((item: any) => item !== id)\r\n                : [...prevState, id]\r\n        );\r\n        if (checkUser) {\r\n            setIsSelectAll(false);\r\n        }\r\n    };\r\n\r\n    const updateAllUsersCheck = (checked: boolean) => {\r\n        const userItems =\r\n            users && users.items\r\n                ? users.items.filter(\r\n                      item => !item.isEntryInvalid && !item.emailExistsInSystem\r\n                  )\r\n                : [];\r\n\r\n        setCheckedUserIds(checked ? userItems.map(item => item.id) : []);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    const updateSelectAll = (checked: boolean) => {\r\n        setIsSelectAll(checked);\r\n    };\r\n\r\n    const clearAllUsers = () => {\r\n        setCheckedUserIds([]);\r\n    };\r\n\r\n    const onRemoveSelectedUsers = () => {\r\n        const userItems = users && users.items ? users.items : [];\r\n        const deletedUsersLength = checkedUserIds.length;\r\n\r\n        if (isDraftSaved) {\r\n            deleteStagingUser(params.draftId, checkedUserIds).then(() => {\r\n                manualRefreshSearchParams().catch(console.error);\r\n\r\n                showMessage(\r\n                    `${deletedUsersLength} ${\r\n                        deletedUsersLength > 1 ? 'Users have' : 'User has'\r\n                    } been removed`,\r\n                    'success'\r\n                );\r\n\r\n                setCheckedUserIds([]);\r\n            });\r\n        } else {\r\n            const updatedList = userItems.filter(\r\n                user => !checkedUserIds.includes(user.id)\r\n            );\r\n            showMessage(\r\n                `${deletedUsersLength} ${\r\n                    deletedUsersLength > 1 ? 'Users have' : 'User has'\r\n                } been removed`,\r\n                'success'\r\n            );\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: updatedList,\r\n            } as PaginationResult<DraftUser>);\r\n            setCheckedUserIds([]);\r\n        }\r\n    };\r\n\r\n    const [existingUserIds, setExistingUserIds] = useState<any>([]);\r\n\r\n    useEffect(() => {\r\n        if (users && users.items) {\r\n            const userItems = users && users.items ? users.items : [];\r\n            let existingUsers = userItems.filter(\r\n                user => user.emailExistsInSystem\r\n            );\r\n            setExistingUserIds(existingUsers.map(user => user.id));\r\n        }\r\n    }, [users]);\r\n\r\n    const onRemoveExistingUsers = () => {\r\n        const userItems = users && users.items ? users.items : [];\r\n        if (existingUserIds.length < 1) return;\r\n\r\n        if (isDraftSaved) {\r\n            deleteStagingUser(params.draftId, existingUserIds).then(() => {\r\n                manualRefreshSearchParams().catch(console.error);\r\n                showMessage(\r\n                    `${existingUserIds.length} Existing ${\r\n                        existingUserIds.length > 1 ? 'users have' : 'user has'\r\n                    } been removed`,\r\n                    'success'\r\n                );\r\n                setCheckedUserIds([]);\r\n            });\r\n        } else {\r\n            const updatedList = userItems.filter(\r\n                user => !existingUserIds.includes(user.id)\r\n            );\r\n            showMessage(\r\n                `${existingUserIds.length} Existing ${\r\n                    existingUserIds.length > 1 ? 'users have' : 'user has'\r\n                } been removed`,\r\n                'success'\r\n            );\r\n            modifyDraftUsers({\r\n                ...users,\r\n                items: updatedList,\r\n            } as PaginationResult<DraftUser>);\r\n            setCheckedUserIds([]);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @function checkIsAllItemsSelected\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsAllItemsSelected = () =>\r\n        users?.totalCount === checkedUserIds.length;\r\n\r\n    /**\r\n     * @function handleSuccessAllUsersInvited\r\n     * @returns { void }\r\n     */\r\n    const handleSuccessAllUsersInvited = useCallback(() => {\r\n        // if previous page was pending users page, dispatch refresh the page.\r\n        if (\r\n            history?.location?.state?.background?.pathname ===\r\n            ROUTES.INVITATIONS\r\n        ) {\r\n            onTriggerEvent(EventNameList[REFRESH_PENDING_USERS_PAGE]);\r\n        }\r\n\r\n        showMessage('All Users have been invited', 'success');\r\n        navigateToInvitations();\r\n    }, [history, navigateToInvitations, showMessage]);\r\n\r\n    /**\r\n     * @function handleErrorUsersInvited\r\n     * @returns { void }\r\n     */\r\n    const handleErrorUsersInvited = useCallback(\r\n        (invitedUsers: ChunkServiceUserDataInterface[]) => {\r\n            const alreadyInvitedUserItems: ChunkServiceUserDataInterface[] = [];\r\n\r\n            for (const user of invitedUsers) {\r\n                if (!existedEmailList.includes(user.email?.toLowerCase())) {\r\n                    alreadyInvitedUserItems.push(user);\r\n                }\r\n            }\r\n            const remainingUserItems = users?.items\r\n                .filter(\r\n                    user =>\r\n                        !alreadyInvitedUserItems.some(\r\n                            item => item.email === user.email\r\n                        )\r\n                )\r\n                .map(user =>\r\n                    existedEmailList.includes(user.email?.toLowerCase())\r\n                        ? { ...user, emailExistsInSystem: true }\r\n                        : user\r\n                );\r\n\r\n            if (!isEmpty(remainingUserItems)) {\r\n                alreadyInvitedUserItems.length > 0 &&\r\n                    (alreadyInvitedUserItems.length > 1\r\n                        ? showMessage(\r\n                              `${alreadyInvitedUserItems?.length} Users have been invited`,\r\n                              'success'\r\n                          )\r\n                        : showMessage(\r\n                              `${alreadyInvitedUserItems?.length} User has been invited`,\r\n                              'success'\r\n                          ));\r\n\r\n                modifyDraftUsers({\r\n                    ...users,\r\n                    items: remainingUserItems,\r\n                } as PaginationResult<DraftUser>);\r\n            } else {\r\n                handleSuccessAllUsersInvited();\r\n            }\r\n        },\r\n        [\r\n            existedEmailList,\r\n            handleSuccessAllUsersInvited,\r\n            modifyDraftUsers,\r\n            showMessage,\r\n            users,\r\n        ]\r\n    );\r\n\r\n    /**\r\n     * @dev Contains all conditions can error happens.\r\n     * @function checkIfInviteUsersHaveErrors\r\n     * @param { ChunkServiceUserDataInterface[] } invitedUsers\r\n     * @returns { boolean }\r\n     */\r\n    const checkIfInviteUsersHaveErrors = useCallback(\r\n        (invitedUsers: ChunkServiceUserDataInterface[]): boolean => {\r\n            if (\r\n                (!isEmpty(existedEmailList) &&\r\n                    (existedEmailList.length === invitedUsers.length ||\r\n                        invitedUsers.length === 1)) ||\r\n                users?.items?.some(item => item.emailExistsInSystem) ||\r\n                users?.items?.some(item => item.isEntryInvalid)\r\n            ) {\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        },\r\n\r\n        [existedEmailList, users?.items]\r\n    );\r\n\r\n    /**\r\n     * @function onSuccessInviteUsersCallback\r\n     * @returns { void }\r\n     */\r\n    const onSuccessInviteUsersCallback = useCallback(\r\n        (invitedUsers: ChunkServiceUserDataInterface[]) => {\r\n            if (checkIfInviteUsersHaveErrors(invitedUsers)) {\r\n                handleErrorUsersInvited(invitedUsers);\r\n            } else {\r\n                if (\r\n                    isSelectAll ||\r\n                    invitedUsers.length === users?.items.length ||\r\n                    users?.items.length === 1\r\n                ) {\r\n                    handleSuccessAllUsersInvited();\r\n                } else {\r\n                    invitedUsers.length > 0 &&\r\n                        (invitedUsers.length > 1\r\n                            ? showMessage(\r\n                                  `${invitedUsers?.length} Users have been invited`,\r\n                                  'success'\r\n                              )\r\n                            : showMessage(\r\n                                  `${invitedUsers?.length} User has been invited`,\r\n                                  'success'\r\n                              ));\r\n                    modifyDraftUsers({\r\n                        ...users,\r\n                        items: users?.items.filter(\r\n                            user =>\r\n                                !invitedUsers.some(\r\n                                    invitedUser =>\r\n                                        invitedUser.email?.toLowerCase() ===\r\n                                        user.email?.toLowerCase()\r\n                                )\r\n                        ),\r\n                    } as PaginationResult<DraftUser>);\r\n                }\r\n            }\r\n\r\n            Promise.resolve().then(() => {\r\n                setCheckedUserIds([]);\r\n                setIsSelectAll(false);\r\n                setLoadingInvitation(false);\r\n                existedEmailList.length = 0; // clear existedEmailListRef\r\n                getCompanyUserStats(company.id!);\r\n            });\r\n        },\r\n        [checkIfInviteUsersHaveErrors, handleErrorUsersInvited, isSelectAll, users, handleSuccessAllUsersInvited, showMessage, modifyDraftUsers, existedEmailList, getCompanyUserStats, company.id]\r\n    );\r\n\r\n    /**\r\n     * @function onFailedInviteUsersCallback\r\n     * @param { ErrorResult | undefined } error\r\n     * @returns { void }\r\n     */\r\n    const onFailedInviteUsersCallback = useCallback(\r\n        (error?: ErrorResult) => {\r\n            if (error?.message) {\r\n                const existedEmail = extractEmailsFromString(\r\n                    error.message\r\n                )?.[0];\r\n\r\n                if (existedEmail) {\r\n                    existedEmailList.push(existedEmail);\r\n                }\r\n            }\r\n        },\r\n        [existedEmailList]\r\n    );\r\n\r\n    const inviteUsersBulkActionService = useInviteUsersBulActionService(\r\n        onSuccessInviteUsersCallback,\r\n        onFailedInviteUsersCallback\r\n    );\r\n\r\n    const onInviteSelectedUsers = () => {\r\n        setLoadingInvitation(true);\r\n\r\n        getCompanyUserStats(company.id!, (userStats) => {\r\n            const userItems = users && users.items ? users.items : [];\r\n            const isAllItemsSelected = checkIsAllItemsSelected() || isSelectAll;\r\n\r\n            const checkedUsersIds = isAllItemsSelected ? [] : checkedUserIds;\r\n\r\n            if (userStats!.limit && userStats!.limit <= userStats!.total) {\r\n                setLoadingInvitation(false);\r\n                setNoFreeUsersModalOpen(true);\r\n                return;\r\n            }\r\n\r\n            if (isDraftSaved) {\r\n                const limit = isAllItemsSelected\r\n                    ? users!.totalCount\r\n                    : searchParams.limit;\r\n\r\n                const filteredUsers = userItems.filter(user =>\r\n                    checkedUserIds.includes(user.id)\r\n                );\r\n\r\n                if (\r\n                    userStats!.limit\r\n                    && userStats!.limit < userStats!.total + (isAllItemsSelected ? users!.totalCount : filteredUsers.length)\r\n                ) {\r\n                    setLoadingInvitation(false);\r\n                    setExceededFreeUsersModalOpen(true);\r\n                    return;\r\n                }\r\n\r\n                if (\r\n                    filteredUsers?.length > MAX_DRAFT_USERS_INVITE ||\r\n                    isAllItemsSelected\r\n                ) {\r\n                    showMessage(\r\n                        `We're sending ${\r\n                            filteredUsers?.length || 'all'\r\n                        } invitations. This might take a while.`,\r\n                        'success'\r\n                    );\r\n                    navigateToInvitations();\r\n                }\r\n\r\n                inviteStagingUser(\r\n                    params.draftId,\r\n                    checkedUsersIds,\r\n                    isAllItemsSelected,\r\n                    { ...searchParams, limit }\r\n                )\r\n                    .then(invitationResults => {\r\n                        const updatedErroredUsers = userItems.map(user => {\r\n                            if (checkedUserIds.includes(user.id)) {\r\n                                return {\r\n                                    ...user,\r\n                                    emailExistsInSystem:\r\n                                        invitationResults &&\r\n                                        invitationResults[user.id] &&\r\n                                        invitationResults[user.id].error,\r\n                                };\r\n                            } else {\r\n                                return user;\r\n                            }\r\n                        });\r\n                        const updatedFilteredUsers = updatedErroredUsers.filter(\r\n                            user =>\r\n                                (checkedUserIds.includes(user.id) &&\r\n                                    invitationResults &&\r\n                                    invitationResults[user.id] &&\r\n                                    !invitationResults[user.id].id) ||\r\n                                !checkedUserIds.includes(user.id)\r\n                        );\r\n                        setLoadingInvitation(false);\r\n\r\n                        const duplicatedUsersCount = updatedErroredUsers.filter(\r\n                            user => user.emailExistsInSystem\r\n                        ).length;\r\n\r\n                        const usersInvitedCount =\r\n                            checkedUserIds.length - duplicatedUsersCount;\r\n\r\n                        modifyDraftUsersWithoutValidation({\r\n                            ...users,\r\n                            items: updatedErroredUsers,\r\n                        } as PaginationResult<DraftUser>);\r\n                        setCheckedUserIds([]);\r\n                        if (!isAllItemsSelected) {\r\n                            if (updatedFilteredUsers.length < 1) {\r\n                                showMessage(\r\n                                    'All Users have been invited',\r\n                                    'success'\r\n                                );\r\n                                navigateToInvitations();\r\n                            } else {\r\n                                if (\r\n                                    usersInvitedCount > 0 &&\r\n                                    duplicatedUsersCount > 0\r\n                                ) {\r\n                                    showMessage(\r\n                                        `${usersInvitedCount} ${\r\n                                            usersInvitedCount > 1\r\n                                                ? 'Users have'\r\n                                                : 'User has'\r\n                                        } been invited but ${duplicatedUsersCount}  ${\r\n                                            duplicatedUsersCount > 1\r\n                                                ? 'users'\r\n                                                : 'user'\r\n                                        } already exist in our system`,\r\n                                        'error'\r\n                                    );\r\n                                    manualRefreshSearchParams();\r\n                                } else if (\r\n                                    usersInvitedCount > 0 &&\r\n                                    duplicatedUsersCount < 1\r\n                                ) {\r\n                                    showMessage(\r\n                                        `${usersInvitedCount} ${\r\n                                            usersInvitedCount > 1\r\n                                                ? 'Users have'\r\n                                                : 'User has'\r\n                                        } been invited `,\r\n                                        'success'\r\n                                    );\r\n                                    manualRefreshSearchParams();\r\n                                } else if (\r\n                                    duplicatedUsersCount > 0 &&\r\n                                    usersInvitedCount < 1\r\n                                ) {\r\n                                    showMessage(\r\n                                        `${duplicatedUsersCount}  ${\r\n                                            duplicatedUsersCount > 1\r\n                                                ? 'Users'\r\n                                                : 'User'\r\n                                        } already exist in our system`,\r\n                                        'error'\r\n                                    );\r\n                                }\r\n                            }\r\n                        }\r\n                        getCompanyUserStats(company.id!);\r\n                    })\r\n                    .catch(() => {\r\n                        setLoadingInvitation(false);\r\n                    });\r\n            } else {\r\n                const filteredUsers = userItems.filter(\r\n                    user =>\r\n                        checkedUserIds.includes(user.id) &&\r\n                        !user.isEntryInvalid &&\r\n                        !user.emailExistsInSystem\r\n                );\r\n\r\n                if (\r\n                    userStats!.limit\r\n                    && userStats!.limit < userStats!.total + filteredUsers.length\r\n                ) {\r\n                    setLoadingInvitation(false);\r\n                    setExceededFreeUsersModalOpen(true);\r\n                    return;\r\n                }\r\n\r\n                const invitingUsers = filteredUsers.map(\r\n                    user =>\r\n                        ({\r\n                            firstName: user.firstName.toString(),\r\n                            lastName: user.lastName.toString(),\r\n                            email: user.email,\r\n                            roleId: user.roleId,\r\n                            companyId: company.id,\r\n                            labelIds: user.labelIDs,\r\n                            practisSets: user.practisSets,\r\n                            teamsIds: user.teamIDs?.filter(\r\n                                teamId => teamId !== defaultTeamId\r\n                            ), // Remove default team id.\r\n                        } as ChunkServiceUserDataInterface)\r\n                );\r\n\r\n                inviteUsersBulkActionService(invitingUsers);\r\n            }\r\n        });\r\n    };\r\n\r\n    const handleSaveAsDraft = () => {\r\n        if (!isDraftSaved) {\r\n            setSaveDraftModalOpen(true);\r\n        }\r\n    };\r\n\r\n    const saveAsDraftConfirmed = useCallback(() => {\r\n        setUsersSavedAt(new Date());\r\n        setDraftSavedFirstTimeAt(new Date());\r\n        setSaveDraftModalOpen(false);\r\n        setGoBackTwice(true);\r\n        showMessage('Invitation draft has been saved', 'success');\r\n    }, [showMessage, setGoBackTwice]);\r\n\r\n    const saveAsDraftFailed = useCallback(\r\n        (error: string) => {\r\n            setSaveDraftModalOpen(false);\r\n            showMessage(error, 'error');\r\n        },\r\n        [showMessage]\r\n    );\r\n\r\n    const startedToFillInitialUser =\r\n        !!newUser.firstName ||\r\n        !!newUser.lastName ||\r\n        !!newUser.email ||\r\n        !!newUser.roleId ||\r\n        !!newUserRole ||\r\n        !!newUserLabels.length ||\r\n        !!newUserPractisSets.length;\r\n\r\n    const hideNewUserTipDisplayed =\r\n        (!!userItemsList && userItemsList.length > 0) ||\r\n        filtersCount > 0 ||\r\n        searchParams.searchTerm.length > 0 ||\r\n        localFilterParams.searchTerm.length > 0 ||\r\n        startedToFillInitialUser ||\r\n        loading;\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm || localFilterParams.searchTerm,\r\n        appliedFilters: filtersCount,\r\n        itemsCount: userItemsList?.length,\r\n    });\r\n\r\n    const userSavedAtText = draftSavedFirstTimeAt\r\n        ? `Saved ${formatDate(draftSavedFirstTimeAt)}`\r\n        : usersSavedAt\r\n        ? `Automatically Saved ${formatDate(usersSavedAt)}`\r\n        : isDraftSaved\r\n        ? lastUpdated\r\n            ? `Last Updated ${formatDate(lastUpdated)}`\r\n            : 'Not Saved'\r\n        : 'Not Saved';\r\n\r\n    useEffect(() => {\r\n        resetDraftsPage();\r\n        return () => {\r\n            resetDraftsPage();\r\n        };\r\n    }, [resetDraftsPage]);\r\n\r\n    return (\r\n        <StyledContainer>\r\n            {saveDraftModalOpen && (\r\n                <SaveAsDraftModal\r\n                    newUsers={users && users.items ? users.items : []}\r\n                    onClose={() => setSaveDraftModalOpen(false)}\r\n                    onProceed={saveAsDraftConfirmed}\r\n                    onError={saveAsDraftFailed}\r\n                />\r\n            )}\r\n            {noFreeUsersModalOpen && (\r\n                <NoFreeUsersModal\r\n                    onClose={() => setNoFreeUsersModalOpen(false)}\r\n                />\r\n            )}\r\n            {exceededFreeUsersModalOpen && (\r\n                <ExceededFreeUsersModal\r\n                    onClose={() => setExceededFreeUsersModalOpen(false)}\r\n                />\r\n            )}\r\n            <StyledHeader>\r\n                <div>\r\n                    <StyledHeaderInput data-test=\"invite-users-page-title\">\r\n                        Invite Users to Practis\r\n                    </StyledHeaderInput>\r\n                    {company.id && (\r\n                        <UserStatsContainer>\r\n                            <CompanyUserStatsText\r\n                                companyId={company.id}\r\n                                showSettingsButton={isAdminRole(profile?.role?.name)}\r\n                            />\r\n                        </UserStatsContainer>\r\n                    )}\r\n                </div>\r\n            </StyledHeader>\r\n            <NewUserHeader\r\n                users={users}\r\n                localUsers={localUsers}\r\n                selectedUsers={checkedUserIds}\r\n                existingUserIds={existingUserIds}\r\n                onUsersImported={onUsersImported}\r\n                onRemoveUsers={onRemoveSelectedUsers}\r\n                onRemoveExistingUsers={onRemoveExistingUsers}\r\n                disableSearch={tableStates.disableSearch}\r\n                disableFilters={tableStates.disableFilters}\r\n                setSearchTerm={\r\n                    isDraftSaved ? setSearchTerm : setLocalSearchTerm\r\n                }\r\n                assignFilters={handleAssignFiltersToCheckedUsers}\r\n                selectedRoles={checkedUserRoles}\r\n                setSelectedRoles={handleClearCheckedUserRoles}\r\n                filterRoles={filterRoles}\r\n                setFilterRoles={setFilterRoles}\r\n                applyFilters={handleApplyFiltersToCheckedUsers}\r\n                filtersCount={filtersCount}\r\n                isRoleDisabled={isRoleDisabled}\r\n                updateAllUsersCheck={updateAllUsersCheck}\r\n                clearAllUsers={clearAllUsers}\r\n                userItemsList={userItemsList}\r\n                isSelectAll={isSelectAll}\r\n                updateSelectAll={updateSelectAll}\r\n                dataTest=\"invite-users\"\r\n            />\r\n            <StyledContent>\r\n                <UsersList\r\n                    userList={userItemsList}\r\n                    totalUsersCount={users && users.totalCount}\r\n                    selectedUsers={checkedUserIds}\r\n                    updateAllUsersCheck={updateAllUsersCheck}\r\n                    updateSelectAll={updateSelectAll}\r\n                    handleUserCheck={handleUserCheck}\r\n                    onEditUser={onEditUser}\r\n                    onRemoveUser={onRemoveUser}\r\n                    isDraftSaved={isDraftSaved}\r\n                    searchParams={searchParams}\r\n                    limit={searchParams.limit}\r\n                    setLimit={setLimit}\r\n                    orderBy={searchParams.orderBy}\r\n                    setOrderBy={setOrderBy}\r\n                    selectedUser={selectedUser}\r\n                    setSelectedUser={setSelectedUser}\r\n                    handleUpdateSelectedUser={handleUpdateSelectedUser}\r\n                    assignedRole={selectedUserRole}\r\n                    onAssignRoleCheck={handleChangeSelectedUserRole}\r\n                    selectedUserLabels={selectedUserLabels}\r\n                    setSelectedUserLabels={handleSetSelectedUserLabels}\r\n                    selectedUserPractisSets={selectedUserPractisSets}\r\n                    setSelectedUserPractisSets={\r\n                        handleSetSelectedUserPractisSets\r\n                    }\r\n                    selectedUserTeams={selectedUserTeams}\r\n                    setSelectedUserTeams={handleSetSelectedUserTeams}\r\n                    handleInputChange={(\r\n                        e: React.ChangeEvent<HTMLInputElement>,\r\n                        field: string\r\n                    ) => {\r\n                        if (e.target.value.length > 100) return;\r\n                        modifySelectedUser(e.target.value, field);\r\n                    }}\r\n                    showNoSearchResultsState={\r\n                        searchParams.searchTerm.length > 0 ||\r\n                        localFilterParams.searchTerm.length > 0\r\n                    }\r\n                    showNoFilterResultsState={\r\n                        tableStates.showNoFilterResultsState\r\n                    }\r\n                    isRoleDisabled={isRoleDisabled}\r\n                    dataTest=\"invite-users-table\"\r\n                >\r\n                    {!tableStates.showNoFilterResultsState &&\r\n                        !searchParams.searchTerm.length &&\r\n                        !localFilterParams.searchTerm.length && (\r\n                            <AddNewUserWrapper>\r\n                                {!hideNewUserTipDisplayed && (\r\n                                    <AddNewUserTip dataTest=\"invite-users-table-prompt\" />\r\n                                )}\r\n                                <Formik<DraftUser>\r\n                                    ref={formRef}\r\n                                    initialValues={newUser}\r\n                                    onSubmit={values => {\r\n                                        values.email = values.email.trim();\r\n                                        setCreatingUser(true);\r\n\r\n                                        setTimeout(() => {\r\n                                            setCreatingUser(false);\r\n                                        }, 2000);\r\n                                        handleCreateNewUser(values);\r\n                                    }}\r\n                                    validationSchema={validationSchema}\r\n                                    enableReinitialize={true}\r\n                                >\r\n                                    {({\r\n                                        values,\r\n                                        handleChange,\r\n                                        errors,\r\n                                        submitCount,\r\n                                    }) => (\r\n                                        <Form\r\n                                            onKeyDown={e => {\r\n                                                if (e.key === 'Enter') {\r\n                                                    return;\r\n                                                }\r\n                                            }}\r\n                                        >\r\n                                            <FieldArray\r\n                                                name=\"users\"\r\n                                                render={() => (\r\n                                                    <AddNewUserContainer\r\n                                                        users={\r\n                                                            userItemsList\r\n                                                                ? userItemsList\r\n                                                                : []\r\n                                                        }\r\n                                                        creatingUser={\r\n                                                            creatingUser\r\n                                                        }\r\n                                                        startedToFillInitialUser={\r\n                                                            startedToFillInitialUser\r\n                                                        }\r\n                                                        hideNewUserTipDisplayed={\r\n                                                            hideNewUserTipDisplayed\r\n                                                        }\r\n                                                        hasError={\r\n                                                            (!!errors.email ||\r\n                                                                !!errors.firstName ||\r\n                                                                !!errors.lastName) &&\r\n                                                            submitCount > 0\r\n                                                        }\r\n                                                        errorMessages={errors}\r\n                                                        isSubmitDisabled={\r\n                                                            !values.firstName ||\r\n                                                            !values.lastName ||\r\n                                                            !values.email ||\r\n                                                            !newUserRole\r\n                                                        }\r\n                                                        assignedRole={\r\n                                                            newUserRole\r\n                                                        }\r\n                                                        onAssignRoleCheck={\r\n                                                            handleChangeNewUserRole\r\n                                                        }\r\n                                                        selectedUserPractisSets={\r\n                                                            newUserPractisSets\r\n                                                        }\r\n                                                        setSelectedUserPractisSets={\r\n                                                            handleSetNewUserPractisSets\r\n                                                        }\r\n                                                        selectedUserTeams={\r\n                                                            newUserTeams\r\n                                                        }\r\n                                                        setSelectedUserTeams={\r\n                                                            handleSetNewUserTeams\r\n                                                        }\r\n                                                        selectedUserLabels={\r\n                                                            newUserLabels\r\n                                                        }\r\n                                                        setSelectedUserLabels={\r\n                                                            handleSetNewUserLabels\r\n                                                        }\r\n                                                        handleInputChange={(\r\n                                                            e: React.ChangeEvent<HTMLInputElement>,\r\n                                                            field: string\r\n                                                        ) => {\r\n                                                            if (\r\n                                                                e.target.value\r\n                                                                    .length >\r\n                                                                100\r\n                                                            )\r\n                                                                return;\r\n                                                            modifyNewUser(\r\n                                                                e.target.value,\r\n                                                                field\r\n                                                            );\r\n                                                            handleChange(e);\r\n                                                        }}\r\n                                                        isRoleDisabled={\r\n                                                            isRoleDisabled\r\n                                                        }\r\n                                                        dataTest=\"invite-users-new\"\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Form>\r\n                                    )}\r\n                                </Formik>\r\n                            </AddNewUserWrapper>\r\n                        )}\r\n                </UsersList>\r\n            </StyledContent>\r\n            <Divider />\r\n            <StyledFooter>\r\n                <StyledFooterActions>\r\n                    <StyledButtonContainer>\r\n                        <StyledSavedStatusContainer data-test=\"invite-users-saved-label\">\r\n                            {userSavedAtText}\r\n                        </StyledSavedStatusContainer>\r\n                    </StyledButtonContainer>\r\n                    {!isDraftSaved && (\r\n                        <CheckPermission\r\n                            permissions={[NEW_PERMISSIONS.CREATE_STAGING]}\r\n                        >\r\n                            <StyledButtonContainer>\r\n                                <Button\r\n                                    action={handleSaveAsDraft}\r\n                                    label=\"Save as Draft\"\r\n                                    variant=\"inverse\"\r\n                                    width=\"152px\"\r\n                                    height=\"40px\"\r\n                                    buttonSize={16}\r\n                                    disabled={\r\n                                        isEmpty(users?.items) ||\r\n                                        loadingInvitation\r\n                                    }\r\n                                    dataTest=\"invite-users-save-as-draft\"\r\n                                />\r\n                            </StyledButtonContainer>\r\n                        </CheckPermission>\r\n                    )}\r\n                    <CheckPermission\r\n                        permissions={[NEW_PERMISSIONS.CREATE_STAGING]}\r\n                    >\r\n                        <Button\r\n                            action={onInviteSelectedUsers}\r\n                            label=\"Invite Selected Users\"\r\n                            width=\"184px\"\r\n                            height=\"40px\"\r\n                            buttonSize={16}\r\n                            disabled={\r\n                                !checkedUserIds.length ||\r\n                                !users ||\r\n                                (!!users && !users.items.length)\r\n                            }\r\n                            loading={loadingInvitation}\r\n                            loadingColor=\"white\"\r\n                            dataTest=\"invite-selected-users\"\r\n                        />\r\n                    </CheckPermission>\r\n                </StyledFooterActions>\r\n            </StyledFooter>\r\n        </StyledContainer>\r\n    );\r\n};\r\n\r\nexport const NewUserContainer: FC<ModalPageContainerProps> = ({\r\n    closePath,\r\n    closeGoingBack,\r\n}) => {\r\n    const params: any = useParams();\r\n    const history = useHistory();\r\n    const state = useDraftEditState();\r\n    const company = useSelector(getCompanyState);\r\n    const searchDraftUsers = useSearchStagingUsersService();\r\n    const modifyDraftUsers = useModifyDraftUsersService();\r\n    const modifyDraftUsersWithoutValidation =\r\n        useModifyDraftUsersWithoutValidationService();\r\n    const resetDraftsPage = useResetDraftsPageService();\r\n    const addStagingUser = useAddStagingUserService();\r\n    const addMultipleStagingUsers = useAddMultipleStagingUsersService();\r\n    const updateStagingUser = useUpdateStagingUserService();\r\n    const deleteStagingUser = useDeleteStagingUserService();\r\n    const inviteStagingUser = useInviteStagingUserService();\r\n    const assignFiltersToStagingUsers = useAssignFiltersToStagingUsersService();\r\n    const searchPractisSets = useGetFullPractisSetsService();\r\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\r\n    const getCompanyUserStats = useGetCompanyUserStatsService();\r\n\r\n    useEffect(() => {\r\n        searchPractisSets({\r\n            searchTerm: '',\r\n            filters: [{ field: 'status', value: [LibraryItemsStatus.ACTIVE] }],\r\n            orderBy: {\r\n                field: 'updated_at',\r\n                asc: false,\r\n            },\r\n            offset: 0,\r\n            totalCount: 0,\r\n            numberOfPages: 0,\r\n        });\r\n    }, [searchPractisSets]);\r\n\r\n    const isDraftSaved = params.draftId !== NEW_DRAFT_ID;\r\n    const [goBackTwice, setGoBackTwice] = useState(false);\r\n\r\n    const goBack = useCallback(() => {\r\n        if (goBackTwice) {\r\n            history.go(-2);\r\n        } else {\r\n            history.goBack();\r\n        }\r\n    }, [history, goBackTwice]);\r\n\r\n    const showClosingWarning = () => {\r\n        if (\r\n            !isDraftSaved &&\r\n            state &&\r\n            state.data &&\r\n            state.data.items &&\r\n            state.data.items.length\r\n        ) {\r\n            showConfirmationModalDialog({\r\n                modalTitle: 'Unsaved Progress',\r\n                description:\r\n                    'Are you sure you want to exit? Any unsaved progress will be lost.',\r\n                cancelButtonText: 'Go Back',\r\n                confirmButtonText: 'Exit Without Saving',\r\n                customization: { width: 400, padding: '32px 40px' },\r\n                onConfirm: goBack,\r\n            });\r\n        } else {\r\n            goBack();\r\n        }\r\n    };\r\n\r\n    const navigateToInvitations = () => {\r\n        history.replace(ROUTES.INVITATIONS);\r\n    };\r\n\r\n    return (\r\n        <WithLabelsContext.Provider value={{ reducerName: 'draftEdit' }}>\r\n            <WithTeamsContext.Provider value={{ reducerName: 'draftEdit' }}>\r\n                <WithPractisSetsContext.Provider\r\n                    value={{ reducerName: 'draftEdit' }}\r\n                >\r\n                    <ModalPage\r\n                        closePath={closePath}\r\n                        closeGoingBack={closeGoingBack}\r\n                        restrictClosing={true}\r\n                        restrictClosingAction={showClosingWarning}\r\n                    >\r\n                        <NewUser\r\n                            params={params}\r\n                            users={state && state.data}\r\n                            lastUpdated={\r\n                                state && state.data && state.data.lastUpdated\r\n                            }\r\n                            loading={state.loading}\r\n                            company={company}\r\n                            navigateToInvitations={navigateToInvitations}\r\n                            modifyDraftUsers={modifyDraftUsers}\r\n                            modifyDraftUsersWithoutValidation={\r\n                                modifyDraftUsersWithoutValidation\r\n                            }\r\n                            resetDraftsPage={resetDraftsPage}\r\n                            searchDraftUsers={searchDraftUsers}\r\n                            addStagingUser={addStagingUser}\r\n                            addMultipleStagingUsers={addMultipleStagingUsers}\r\n                            updateStagingUser={updateStagingUser}\r\n                            deleteStagingUser={deleteStagingUser}\r\n                            inviteStagingUser={inviteStagingUser}\r\n                            assignFiltersToStagingUsers={\r\n                                assignFiltersToStagingUsers\r\n                            }\r\n                            setGoBackTwice={setGoBackTwice}\r\n                            getCompanyUserStats={getCompanyUserStats}\r\n                        />\r\n                    </ModalPage>\r\n                </WithPractisSetsContext.Provider>\r\n            </WithTeamsContext.Provider>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { isEmpty } from 'lodash';\n\nimport { useChunkRequestsService } from '../../../../../services/ChunkRequestService/hooks';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../../ui/components/ModalDialogs/store/actions';\nimport { AssignedMemberToTeamType } from '../../../../../api/teams/types';\nimport {\n    useAssignMembersToTeamsApi,\n    useAssignUserLabelsApi,\n    useEnrollPractisSetsToUserApi,\n    useInviteUsers,\n} from '../../../../../api';\nimport {\n    ChunkServiceUserDataInterface,\n    InviteUsersParametersType,\n} from './types';\nimport { InviteUser } from '../../../../../api/invitations/types';\nimport { UserInterface } from '../../../../../constants/interfaces/User';\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\nimport { EnrollmentType } from '../../../../../api/enrollments/types';\nimport { ChunkRequestActionInterface } from '../../../../../services/ChunkRequestService/hooks/types';\nimport {\n    ASSIGN_LABELS_TO_USERS_ACTION,\n    INVITE_USERS_ACTION,\n    INVITE_USERS_ITEM_PER_CHUNK_SIZE,\n} from './constants';\nimport { ITEM_PER_CHUNK_SIZE } from '../../../../../services/ChunkRequestService/hooks/constants';\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\nimport { UserLabelType } from '../../../../../api/users/types';\n\n/**\n * @description function to invite users.\n * Create new user at first then assign labels, teams, practisSets to\n * new created user by using chunk service if needed.\n * @function useInviteUsersBulActionService\n * @param { Function | undefined } onSuccessCallback\n * @param { Function | undefined } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useInviteUsersBulActionService(\n    onSuccessCallback?: (inviteUsers: ChunkServiceUserDataInterface[]) => void,\n    onErrorCallback?: (error?: ErrorResult) => void\n) {\n    const actionList = useRef<\n        ChunkRequestActionInterface<InviteUsersParametersType>[]\n    >([]);\n    const usersDataRef = useRef<ChunkServiceUserDataInterface[] | null>(null);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n\n    const inviteUsers = useInviteUsers();\n    const assignLabelsToUsers = useAssignUserLabelsApi();\n    const assignPractisSetsToUsers = useEnrollPractisSetsToUserApi();\n    const assignMembersToTeams = useAssignMembersToTeamsApi();\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(\n        (error?: ErrorResult) => {\n            isRunning && setIsRunning(false);\n\n            actionList.current = [];\n\n            onErrorCallback?.(error);\n        },\n        [isRunning, onErrorCallback]\n    );\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n\n            actionList.current = [];\n            onSuccessCallback?.(usersDataRef?.current ?? []);\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList.current,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback,\n        false\n    );\n\n    /**\n     * @function handleStopInviteUsersBulkActionService\n     * @returns { void }\n     */\n    const handleStopInviteUsersBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            hideModalDialog();\n\n            setIsRunning(false);\n            actionList.current = [];\n        });\n    }, [hideModalDialog, setIsStopped]);\n\n    /**\n     * @description show progress modal and start chunk service action\n     * @function handleStartActionModal\n     * @returns { void }\n     */\n    const handleStartActionModal = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'Inviting Users',\n                        onStopBulkActionService:\n                            handleStopInviteUsersBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopInviteUsersBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    /**\n     * @function assignLabelsToUsersService\n     * @param { UserInterface[] } users\n     * @param { number[] } usersLabelIds\n     * @return { Promise<void> }\n     */\n    const assignLabelsToUsersService = useCallback(\n        async (users: UserInterface[], usersLabelIds: number[]) => {\n            if (!isEmpty(users) && !isEmpty(usersLabelIds)) {\n                const userId = users[0]?.id;\n\n                const processedUsersLabels = usersLabelIds.map(\n                    labelId =>\n                        ({\n                            userId,\n                            labelId,\n                        } as UserLabelType)\n                );\n\n                !isEmpty(processedUsersLabels) &&\n                    (await assignLabelsToUsers(processedUsersLabels));\n            }\n        },\n        [assignLabelsToUsers]\n    );\n\n    /**\n     * @function assignPractisSetsToUsersService\n     * @param { UserInterface[] } users\n     * @param { PractisSetWithDueDate[] } usersPractisSets\n     * @return { Promise<void> }\n     */\n    const assignPractisSetsToUsersService = useCallback(\n        async (\n            users: UserInterface[],\n            usersPractisSets: PractisSetWithDueDate[]\n        ) => {\n            if (!isEmpty(users) && !isEmpty(usersPractisSets)) {\n                const userId = users[0]?.id;\n\n                const processedUsersPractisSet = usersPractisSets.map(\n                    practisSet =>\n                        ({\n                            userId,\n                            ...practisSet,\n                        } as EnrollmentType)\n                );\n\n                !isEmpty(processedUsersPractisSet) &&\n                    (await assignPractisSetsToUsers(processedUsersPractisSet));\n            }\n        },\n        [assignPractisSetsToUsers]\n    );\n\n    /**\n     * @function assignTeamsToUsersService\n     * @param { UserInterface[] } users\n     * @param { number[] } usersTeamIds\n     * @return { Promise<void> }\n     */\n    const assignTeamsToUsersService = useCallback(\n        async (users: UserInterface[], usersTeamIds: number[]) => {\n            if (!isEmpty(users) && !isEmpty(usersTeamIds)) {\n                const userId = users[0]?.id;\n\n                const processedUsersTeams = usersTeamIds.map(\n                    teamId =>\n                        ({\n                            userId,\n                            teamId,\n                        } as AssignedMemberToTeamType)\n                );\n\n                !isEmpty(processedUsersTeams) &&\n                    (await assignMembersToTeams(processedUsersTeams));\n            }\n        },\n        [assignMembersToTeams]\n    );\n\n    /**\n     * @description create new users.\n     * @function inviteUsersService\n     * @param { InviteUser[] } users\n     * @returns { Promise<void | number[]> }\n     */\n    const inviteUsersService = useCallback(\n        (users: InviteUser[]) => {\n            return inviteUsers(users).then((response: UserInterface[]) => {\n                if (!isEmpty(response)) {\n                    return response;\n                }\n            });\n        },\n        [inviteUsers]\n    );\n\n    /**\n     * @function handleStartInviteUsersBulkActionService\n     * @returns { void }\n     */\n    const handleStartInviteUsersBulkActionService = useCallback(() => {\n        if (usersDataRef.current) {\n            const inviteUsersOptions = {\n                parameters: {\n                    users: usersDataRef?.current?.map(user => ({\n                        firstName: user.firstName,\n                        lastName: user.lastName,\n                        email: user.email,\n                        roleId: user.roleId,\n                        companyId: user.companyId,\n                    })) as InviteUser[],\n                },\n                fieldName: 'users',\n            };\n\n            const InviteUsersAction = {\n                actionName: INVITE_USERS_ACTION,\n                actionFunction: inviteUsersService,\n                actionFunctionOptions: inviteUsersOptions,\n                itemPerChunk: INVITE_USERS_ITEM_PER_CHUNK_SIZE,\n                childActionList: [\n                    {\n                        actionName: ASSIGN_LABELS_TO_USERS_ACTION,\n                        actionFunction: assignLabelsToUsersService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                users: [],\n                                labelIds: usersDataRef.current.map(\n                                    user => user.labelIds\n                                ),\n                            },\n                            fieldName: 'labelIds',\n                            secondaryFieldName: 'users',\n                        },\n                        itemPerChunk: ITEM_PER_CHUNK_SIZE,\n                    },\n                    {\n                        actionFunction: assignTeamsToUsersService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                users: [],\n                                teamIds: usersDataRef.current.map(\n                                    user => user.teamsIds\n                                ),\n                            },\n                            fieldName: 'teamIds',\n                            secondaryFieldName: 'users',\n                        },\n                        itemPerChunk: ITEM_PER_CHUNK_SIZE,\n                    },\n                    {\n                        actionFunction: assignPractisSetsToUsersService,\n                        actionFunctionOptions: {\n                            parameters: {\n                                users: [],\n                                practisSets: usersDataRef.current.map(\n                                    user => user.practisSets\n                                ),\n                            },\n                            fieldName: 'practisSets',\n                            secondaryFieldName: 'users',\n                        },\n                        itemPerChunk: ITEM_PER_CHUNK_SIZE,\n                    },\n                ],\n            } as ChunkRequestActionInterface<any>;\n\n            actionList.current.push(InviteUsersAction);\n\n            !isEmpty(actionList.current) && handleStartActionModal();\n        }\n    }, [\n        assignLabelsToUsersService,\n        assignPractisSetsToUsersService,\n        assignTeamsToUsersService,\n        handleStartActionModal,\n        inviteUsersService,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartInviteUsersBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    /**\n     * @description Call the service runner.\n     * @function callback\n     * @param { ChunkServiceUserDataInterface[] } usersData\n     * @returns { void }\n     */\n    return useCallback((usersData: ChunkServiceUserDataInterface[]) => {\n        usersDataRef.current = usersData;\n\n        setIsRunning(true);\n    }, []);\n}","export const INVITE_USERS_ITEM_PER_CHUNK_SIZE = 1;\nexport const INVITE_USERS_ACTION = 'INVITE_USERS_ACTION';\nexport const ASSIGN_LABELS_TO_USERS_ACTION = 'ASSIGN_LABELS_TO_USERS_ACTION';","import { NewUserContainer } from './NewUser';\n\nexport default NewUserContainer;\n","import { Keywords } from './Keywords';\n\nexport enum ScriptLineSpeaker {\n    CUSTOMER = 'CUSTOMER',\n    REP = 'REP',\n}\n\nexport interface ScriptLine {\n    id: number | string;\n    text: string;\n    audioUrl?: string;\n    audioId: number;\n    speaker: ScriptLineSpeaker;\n    position: number;\n    duration: number;\n    keywords: Keywords[];\n}\n","import {\n    Scenario,\n    ScenarioStatuses,\n} from '../../../../constants/interfaces/Scenario';\nimport { ScriptLine } from '../../../../constants/interfaces/ScriptLine';\nimport { AppState } from '../../../../store/reducers';\nimport {\n    ACTIONS,\n    createScriptLineAction,\n    deleteScriptLineAction,\n    fetchScenarioFailure,\n    fetchScenarioStart,\n    fetchScenarioSuccess,\n    modifyScenarioAction,\n    modifyScriptTextAction,\n    resetScenarioAction,\n    resetScenarioLogoAction,\n    restoreScenarioFromTempAction,\n    updateScriptLineKeywords,\n    storeScenarioTempCopyAction,\n    updateScenarioModifyCase,\n    updateScriptLineAction,\n    uploadScenarioAudioFailure,\n    uploadScenarioAudioStart,\n    uploadScenarioAudioSuccess,\n    clearScriptLinesAction,\n} from './actions';\nimport {\n    ACTIONS as LIBRARY_ACTIONS,\n    updateLibraryScenarioSuccess,\n} from '../../../../features/library/store/actions';\n\nexport type ScenarioCases =\n    | 'init'\n    | 'created'\n    | 'modified'\n    | 'loaded'\n    | 'updated'\n    | 'error';\n\nexport interface ScenarioInterface {\n    info: Scenario;\n    temp_info?: Scenario;\n    loading: boolean;\n    case: ScenarioCases;\n    errors: string;\n}\n\nexport const initialScenarioState: ScenarioInterface = {\n    info: {\n        title: '',\n        description: '',\n        instructions: '',\n        status: ScenarioStatuses.DRAFT,\n        script: {\n            totalDuration: null,\n            scenarioId: null,\n            companyId: null,\n            lines: [],\n        },\n    },\n    loading: false,\n    case: 'init',\n    errors: '',\n};\n\ntype ScenarioActions =\n    | ReturnType<typeof fetchScenarioStart>\n    | ReturnType<typeof fetchScenarioSuccess>\n    | ReturnType<typeof fetchScenarioFailure>\n    | ReturnType<typeof modifyScenarioAction>\n    | ReturnType<typeof createScriptLineAction>\n    | ReturnType<typeof updateScriptLineAction>\n    | ReturnType<typeof modifyScriptTextAction>\n    | ReturnType<typeof deleteScriptLineAction>\n    | ReturnType<typeof uploadScenarioAudioStart>\n    | ReturnType<typeof uploadScenarioAudioSuccess>\n    | ReturnType<typeof uploadScenarioAudioFailure>\n    | ReturnType<typeof resetScenarioAction>\n    | ReturnType<typeof resetScenarioLogoAction>\n    | ReturnType<typeof updateScenarioModifyCase>\n    | ReturnType<typeof updateLibraryScenarioSuccess>\n    | ReturnType<typeof storeScenarioTempCopyAction>\n    | ReturnType<typeof restoreScenarioFromTempAction>\n    | ReturnType<typeof updateScriptLineKeywords>\n    | ReturnType<typeof clearScriptLinesAction>;\n\nexport const scenarioReducer = (\n    state = initialScenarioState,\n    action: ScenarioActions\n): ScenarioInterface => {\n    switch (action.type) {\n        case ACTIONS.FETCH_SCENARIO_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.FETCH_SCENARIO_SUCCESS:\n            return {\n                info: {\n                    ...state.info,\n                    ...action.data,\n                },\n                loading: false,\n                case: 'loaded',\n                errors: '',\n            };\n        case ACTIONS.FETCH_SCENARIO_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                case: 'error',\n                errors: action.error,\n            };\n        case ACTIONS.UPLOAD_SCENARIO_AUDIO_START:\n            return {\n                ...state,\n            };\n        case ACTIONS.UPLOAD_SCENARIO_AUDIO_SUCCESS:\n            const updatedLines = state.info.script.lines.map(\n                (line: ScriptLine) => {\n                    if (line.id === action.data.scriptLineId) {\n                        const newLine = { ...line };\n                        newLine.audioUrl = action.data.response.url;\n                        newLine.audioId = action.data.response.id;\n                        newLine.duration =\n                            action.data.response.metadata.format.duration;\n                        return newLine;\n                    } else {\n                        return line;\n                    }\n                }\n            );\n\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    script: {\n                        ...state.info.script,\n                        totalDuration: updatedLines\n                            .map((lines: ScriptLine) =>\n                                lines.duration ? lines.duration : 0\n                            )\n                            .reduce((a, b) => a + b, 0),\n                        lines: updatedLines,\n                    },\n                },\n                case: 'modified',\n            };\n        case ACTIONS.UPLOAD_SCENARIO_AUDIO_FAILURE:\n            return {\n                ...state,\n                errors: action.error,\n                case: 'error',\n            };\n        case ACTIONS.CREATE_SCRIPT_LINE:\n            const createdScriptLine = { ...state.info.script };\n            createdScriptLine.lines.push(action.data);\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    script: {\n                        ...createdScriptLine,\n                    },\n                },\n                case: 'modified',\n                errors: '',\n            };\n        case ACTIONS.UPDATE_SCRIPT_LINE:\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    script: {\n                        ...state.info.script,\n                        lines: action.data.map(\n                            (line: ScriptLine, index: number) => {\n                                return { ...line, position: index };\n                            }\n                        ),\n                    },\n                },\n                case: 'modified',\n                errors: '',\n            };\n        case ACTIONS.MODIFY_SCRIPT_TEXT:\n            return {\n                ...state,\n                case: 'modified',\n                info: {\n                    ...state.info,\n                    script: {\n                        ...state.info.script,\n                        lines: state.info.script.lines.map(\n                            (line: ScriptLine) => {\n                                if (line.id === action.lineId) {\n                                    return {\n                                        ...line,\n                                        text: action.value,\n                                        audioId: 0,\n                                        audioUrl: undefined\n                                    };\n                                } else {\n                                    return line;\n                                }\n                            }\n                        ),\n                    },\n                },\n            };\n        case ACTIONS.DELETE_SCRIPT_LINE:\n            const newScriptLines = [...state.info.script.lines];\n            const newScriptLinesArr = [\n                ...newScriptLines.filter(\n                    (line: ScriptLine) => line.id !== action.data\n                ),\n            ];\n            const newDurations = newScriptLinesArr\n                .filter((line: ScriptLine) => line.audioUrl)\n                .map((line: ScriptLine) => line.duration);\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    script: {\n                        ...state.info.script,\n                        totalDuration:\n                            newDurations.length > 0\n                                ? newDurations.reduce((a, b) => a + b)\n                                : 0,\n                        lines: newScriptLinesArr,\n                    },\n                },\n                case: 'modified',\n                errors: '',\n            };\n        case ACTIONS.CLEAR_SCRIPT_LINES:\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    script: {\n                        ...state.info.script,\n                        lines: []\n                    },\n                },\n                case: 'modified',\n                errors: '',\n            };\n        case ACTIONS.MODIFY_SCENARIO:\n            const newScenarioInfo: any = { ...state.info };\n            newScenarioInfo[action.field] = action.data;\n            return {\n                ...state,\n                info: {\n                    ...newScenarioInfo,\n                },\n                case: action.silent ? state.case : 'modified',\n            };\n        case ACTIONS.UPDATE_SCRIPT_LINE_KEYWORDS: {\n            const newLines = [...state.info.script.lines];\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    script: {\n                        ...state.info.script,\n                        lines: newLines.map(line => {\n                            if (line.id === action.lineId) {\n                                return {\n                                    ...line,\n                                    keywords: action.keywords,\n                                };\n                            } else {\n                                return line;\n                            }\n                        }),\n                    },\n                },\n                case: 'modified',\n                errors: '',\n            };\n        }\n        case ACTIONS.STORE_SCENARIO_TEMP_COPY: {\n            return {\n                ...state,\n                temp_info: JSON.parse(JSON.stringify(state.info)),\n            };\n        }\n        case ACTIONS.RESTORE_SCENARIO_FROM_TEMP: {\n            return {\n                ...state,\n                info: JSON.parse(JSON.stringify(state.temp_info)),\n                case: 'init',\n            };\n        }\n        case ACTIONS.RESET_SCENARIO: {\n            return {\n                ...initialScenarioState,\n                info: {\n                    ...initialScenarioState.info,\n                    script: {\n                        ...initialScenarioState.info.script,\n                        lines: [],\n                    },\n                },\n            };\n        }\n        case ACTIONS.UPDATE_SCENARIO_CASE: {\n            return {\n                ...state,\n                case: action.value,\n            };\n        }\n        case LIBRARY_ACTIONS.UPDATE_LIBRARY_SCENARIO_SUCCESS: {\n            return {\n                ...state,\n                case: 'updated',\n            };\n        }\n        default:\n            return state;\n    }\n};\n\nexport const getScenarioState = (state: AppState) => state.scenario;\n","import { flatten, range } from 'lodash';\n\nconst imageColors = ['1EB0FF', '51D76A', '96DAFF', 'FF7836'];\nconst imageCount = 10;\n\nexport const SCENARIO_IMAGES: string[] = flatten(\n    range(1, imageCount + 1).map(n =>\n        imageColors.map(c => `image_${n}_${c}.png`)\n    )\n);\n","import { useCallback } from 'react';\nimport { RoleplayData } from '../../pages/Roleplays/CreateRoleplay/types';\nimport { useHttp } from '../../tools/http/Http';\nimport { CreateRoleplayApiParams, GetRoleplayApiParams, GetRoleplaysApiParams, RevertRoleplayApiParams, GenerateRoleplayApiParams, DeleteRoleplayApiParams, DuplicateRoleplayApiParams, UpdateRoleplayApiParams, CreateCommandRoleplayApiParams, GetRoleplayContentApiParams, RegenerateRoleplayApiParams, ResetRoleplayApiParams, GetRoleplayContentByApiParams } from './types';\n\n/**\n * @function useGetRoleplays\n * @returns { GetRoleplaysApiParams }\n */\nexport function useGetRoleplaysApi(): GetRoleplaysApiParams {\n    const http = useHttp();\n    return useCallback(\n        (params) => http.get('/roleplays', params, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useCreateRoleplayApi\n * @returns { Roleplay }\n */\nexport function useCreateRoleplayApi(): CreateRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        (roleplayData: RoleplayData) =>\n            http.post(`/roleplays`, roleplayData, true),\n        [http]\n    );\n}\n\n/**\n * @function useDuplicateRoleplayApi\n * @returns { Roleplay }\n */\nexport function useDuplicateRoleplayApi(): DuplicateRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId, title}) =>\n            http.post(`roleplays/${roleplayId}/clone`, {title}, true),\n        [http]\n    );\n}\n\n/**\n * @function useDeleteRoleplayApi\n * @returns { Roleplay }\n */\nexport function useDeleteRoleplayApi(): DeleteRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        (rolepayIds) =>\n            http.delete(`roleplays`, rolepayIds, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetRoleplay\n * @returns { GetRoleplayApiParams }\n */\nexport function useGetRoleplayApi(): GetRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId}) => http.get(`roleplays/${roleplayId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useUpdateRoleplayApi\n * @returns { Roleplay }\n */\nexport function useUpdateRoleplayApi(): UpdateRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        (roleplayId: string, roleplayData: RoleplayData) =>\n            http.put(`/roleplays/${roleplayId}`, roleplayData, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetRoleplayContent\n * @returns { RoleplayContent }\n */\nexport function useGetRoleplayContentApi(): GetRoleplayContentApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId}) => http.get(`roleplays/${roleplayId}/content`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useCreateCommandRoleplayApi\n * @returns { Roleplay }\n */\nexport function useCreateCommandRoleplayApi(): CreateCommandRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId, text}) =>\n            http.post(`roleplays/${roleplayId}/command`, {text}, true),\n        [http]\n    );\n}\n\n/**\n * @function useGenerateRoleplayApi\n * @returns { Roleplay }\n */\nexport function useGenerateRoleplayApi(): GenerateRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId}) =>\n            http.post(`roleplays/${roleplayId}/generate-initial`, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useRegenerateRoleplayApi\n * @returns { Roleplay }\n */\nexport function useRegenerateRoleplayApi(): RegenerateRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId}) =>\n            http.post(`roleplays/${roleplayId}/regenerate`, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useResetRoleplayApi\n * @returns { Roleplay }\n */\nexport function useResetRoleplayApi(): ResetRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId}) =>\n            http.post(`roleplays/${roleplayId}/clear`, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGetRoleplayContentById\n * @returns { RoleplayContent }\n */\nexport function useGetRoleplayContentByIdApi(): GetRoleplayContentByApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId, contentId}) => http.get(`roleplays/${roleplayId}/content/${contentId}`, undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useRevertRoleplayApi\n * @returns { Roleplay }\n */\nexport function useRevertRoleplayApi(): RevertRoleplayApiParams {\n    const http = useHttp();\n    return useCallback(\n        ({roleplayId}) =>\n            http.post(`roleplays/${roleplayId}/cancel/`, undefined, true),\n        [http]\n    );\n}","import { SCENARIO_IMAGES } from '../../../../constants/enums/scenarios';\nimport { Scenario } from '../../../../constants/interfaces/Scenario';\nimport { ScriptLine, ScriptLineSpeaker } from '../../../../constants/interfaces/ScriptLine';\nimport { randomArrayItem } from '../../../../helpers/functions/get-random-from-array';\nimport { getConfig } from '../../../../tools/config';\nimport {\n    createScriptLineAction,\n    deleteScriptLineAction,\n    modifyScriptTextAction,\n    updateScriptLineAction,\n    uploadScenarioAudioStart,\n    uploadScenarioAudioSuccess,\n    uploadScenarioAudioFailure,\n    uploadScenarioLogoFailure,\n    uploadScenarioLogoStart,\n    uploadScenarioLogoSuccess,\n    modifyScenarioAction,\n    fetchScenarioStart,\n    fetchScenarioSuccess,\n    fetchScenarioFailure,\n    resetScenarioAction,\n    resetScenarioLogoAction,\n    updateScenarioModifyCase,\n    restoreScenarioFromTempAction,\n    storeScenarioTempCopyAction,\n    updateScriptLineKeywords,\n    clearScriptLinesAction,\n} from './actions';\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    useFileUploadApi,\n    useGetScenarioApi,\n} from '../../../../api';\nimport { ScenarioCases } from './reducers';\nimport { Keywords } from '../../../../constants/interfaces/Keywords';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useGetRoleplayApi, useGetRoleplayContentByIdApi } from '../../../../api/roleplay';\n\nexport const useCreateScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (data: ScriptLine) => {\n            dispatch(createScriptLineAction(data));\n        },\n        [dispatch]\n    );\n};\n\nexport const useDeleteScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (lineId: number) => {\n            dispatch(deleteScriptLineAction(lineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useModifyScriptTextService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (value: string, lineId: number | string) => {\n            dispatch(modifyScriptTextAction(value, lineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useUpdateScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (scriptLines: Array<ScriptLine>) => {\n            dispatch(updateScriptLineAction(scriptLines));\n        },\n        [dispatch]\n    );\n};\n\nexport const updateScriptLine = (scriptLines: Array<ScriptLine>) => {\n    return (dispatch: any) => {\n        dispatch(updateScriptLineAction(scriptLines));\n    };\n};\n\nexport const useClearScriptLinesService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        () => {\n            dispatch(clearScriptLinesAction());\n        },\n        [dispatch]\n    );\n};\n\nexport const useGetScenarioService = () => {\n    const dispatch = useDispatch();\n    const getScenarioApi = useGetScenarioApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (scenarioId: number) => {\n            dispatch(fetchScenarioStart());\n            getScenarioApi(scenarioId)\n                .then(data => {\n                    dispatch(fetchScenarioSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchScenarioFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getScenarioApi, showMessage]\n    );\n};\n\nexport const useUploadScenarioImageService = () => {\n    const dispatch = useDispatch();\n    const fileUploadApi = useFileUploadApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (file: any, associatedEntityId?: number, filename?: string) => {\n            dispatch(uploadScenarioLogoStart());\n            const formData: FormData = new FormData();\n            formData.set('file', file);\n            formData.set('type', 'IMAGE');\n            formData.set('associatedEntityType', 'Scenario');\n            if (associatedEntityId)\n                formData.set(\n                    'associatedEntityId',\n                    associatedEntityId.toString()\n                );\n            if (filename) formData.set('filename', filename);\n\n            fileUploadApi(formData)\n                .then(data => {\n                    dispatch(uploadScenarioLogoSuccess(data));\n                    return 'success';\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(uploadScenarioLogoFailure(error.message));\n                    showMessage(error.message, 'error');\n                    return 'error';\n                });\n        },\n        [dispatch, fileUploadApi, showMessage]\n    );\n};\n\nexport const useUploadScenarioAudioService = () => {\n    const dispatch = useDispatch();\n    const fileUploadApi = useFileUploadApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (file: any, associatedEntityId: string | number, filename?: string) => {\n            dispatch(uploadScenarioAudioStart());\n            const formData: FormData = new FormData();\n            formData.set('file', file);\n            formData.set('type', 'AUDIO');\n            formData.set('associatedEntityType', 'Line');\n            if (!associatedEntityId.toString().includes('temp_'))\n                formData.set(\n                    'associatedEntityId',\n                    associatedEntityId.toString()\n                );\n            if (filename) formData.set('filename', filename);\n\n            return fileUploadApi(formData)\n                .then(data => {\n                    dispatch(\n                        uploadScenarioAudioSuccess(associatedEntityId, data)\n                    );\n                    return 'success';\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(uploadScenarioAudioFailure(error.message));\n                    showMessage(error.message, 'error');\n                    return 'error';\n                });\n        },\n        [dispatch, fileUploadApi, showMessage]\n    );\n};\n\nexport const generateRandomImageUrl = () => {\n    const fileName = randomArrayItem(SCENARIO_IMAGES);\n    return (\n        getConfig().S3_FILES_BASE_URL + `scenarios/default-logos/${fileName}`\n    );\n};\n\nexport const useModifyScenarioService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (value: any, field: keyof Scenario, silent?: boolean) => {\n            dispatch(modifyScenarioAction(value, field, silent));\n        },\n        [dispatch]\n    );\n};\n\nexport const useResetScenarioService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetScenarioAction());\n    }, [dispatch]);\n};\n\nexport const useResetScenarioLogoService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetScenarioLogoAction());\n    }, [dispatch]);\n};\n\nexport const useStoreScenarioTempCopyService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(storeScenarioTempCopyAction());\n    }, [dispatch]);\n};\n\nexport const useRestoreScenarioFromTempActionService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(restoreScenarioFromTempAction());\n    }, [dispatch]);\n};\n\nexport const useUpdateScenarioModifyCase = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (value: ScenarioCases) => {\n            dispatch(updateScenarioModifyCase(value));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSaveScenarioKeywordsService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (keywords: Keywords[], lineId: number | string) => {\n            dispatch(updateScriptLineKeywords(keywords, lineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useGetRoleplayForScenario = () => {\n    const getRoleplayContentByIdApi = useGetRoleplayContentByIdApi();\n    const getRoleplayApi = useGetRoleplayApi();\n\n    return useCallback(\n        async (roleplayId: string, contentId: string) => {\n            return getRoleplayContentByIdApi({roleplayId, contentId}).then(async ({conversation, summary}) => {\n                const aiLines = conversation.map(({text, role}) => {\n                    return {\n                        text: text,\n                        speaker: role === 'prospect' ? ScriptLineSpeaker.CUSTOMER : ScriptLineSpeaker.REP\n                    }\n                })\n                const {title} = await getRoleplayApi({roleplayId});\n\n                return {aiLines, title, description: summary};\n            })\n        },\n        [getRoleplayContentByIdApi, getRoleplayApi]\n    );\n};\n","export enum EditModeValues {\n    EDIT = 'EDIT',\n    VIEW = 'VIEW',\n}","import { ErrorResult } from \"../../../constants/interfaces/ErrorResult\";\n\nexport enum ACTIONS {\n    VOICE_GENERATION_START = 'VOICE_GENERATION_START',\n    VOICE_GENERATION_SUCCESS = 'VOICE_GENERATION_SUCCESS',\n    VOICE_GENERATION_FAILURE = 'VOICE_GENERATION_FAILURE',\n    VOICE_GENERATION_CLEAR = 'VOICE_GENERATION_CLEAR',\n}\n\nexport function voiceGenerationStart(feature: string, itemId: number | string) {\n    return {\n        type: ACTIONS.VOICE_GENERATION_START as ACTIONS.VOICE_GENERATION_START,\n        itemId,\n        feature,\n    };\n}\n\nexport function voiceGenerationSuccess(\n    feature: string,\n    itemId: number | string,\n    voice: Blob\n) {\n    return {\n        type: ACTIONS.VOICE_GENERATION_SUCCESS as ACTIONS.VOICE_GENERATION_SUCCESS,\n        feature,\n        itemId,\n        voice,\n    };\n}\n\nexport function voiceGenerationFailure(\n    feature: string,\n    itemId: number | string,\n    error: ErrorResult\n) {\n    return {\n        type: ACTIONS.VOICE_GENERATION_FAILURE as ACTIONS.VOICE_GENERATION_FAILURE,\n        feature,\n        itemId,\n        error,\n    };\n}\n\nexport function voiceGenerationClear(feature: string, itemId: number | string) {\n    return {\n        type: ACTIONS.VOICE_GENERATION_CLEAR as ACTIONS.VOICE_GENERATION_CLEAR,\n        feature,\n        itemId,\n    };\n}\n","import React, { FC, useState } from 'react';\nimport styled from 'styled-components';\nimport { Textarea } from '../Textarea/Textarea';\nimport { Variables } from '../../../theme/variables';\nimport { getIn } from 'formik';\n\nconst StyledFormikField = styled.div<{ marginRight?: string }>`\n    ${props => !!props.marginRight && `margin-right: ${props.marginRight};`}\n`;\n\nconst StyledTextareaContainer = styled.div<{\n    height?: string;\n    width?: string;\n    disabled?: boolean;\n    color: string;\n    background?: string;\n    padding?: string;\n    maxHeight?: string;\n    hasError?: boolean;\n}>`\n    ${props => (!!props.width ? `min-width: ${props.width}` : '')};\n    position: relative;\n    border-radius: 4px;\n    padding: ${props => props.padding || '15px 23px'};\n    background: ${props =>\n        !!props.background\n            ? props.background\n            : props.disabled\n            ? Variables.Colors.whiteTwo\n            : props.color};\n    border: 1px solid ${props =>\n        props.hasError\n            ? 'var(--ps-red-main)'\n            : !!props.background\n                ? props.background\n                : props.disabled\n                ? Variables.Colors.whiteTwo\n                : props.color};\n    max-height:  ${props => props.maxHeight || 'auto'};\n`;\n\nconst StyledLabel = styled.div<{\n    focused: boolean;\n    titleFontColor?: string;\n    titleFontWeight?: string;\n}>`\n    font-size: 13px;\n    margin-bottom: 2px;\n    color: ${props =>\n        !!props.titleFontColor\n            ? props.titleFontColor\n            : props.theme.Colors.steelGrey};\n    font-weight: ${props =>\n        !!props.titleFontWeight ? props.titleFontWeight : 'normal'};\n`;\n\nconst StyledCounter = styled.div<{ fontSize?: string }>`\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '11px')};\n    font-weight: normal;\n    text-align: right;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst ErrorContainer = styled.div<{ fontSize?: string }>`\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '13px')};\n    color: var(--ps-red-main);\n    font-weight: 500;\n`;\n\nexport const TextAreaBox: FC<{\n    label?: string;\n    value?: string;\n    field?: any;\n    form?: { touched: any; errors: any };\n    name?: any;\n    onChange?: any;\n    type?: string;\n    max?: number;\n    width?: string;\n    onBlur?: any;\n    background?: string;\n    color?: string;\n    disabled?: boolean;\n    placeholder?: string;\n    autoFocus?: boolean;\n    readOnly?: boolean;\n    padding?: string;\n    fontSize?: string;\n    marginTop?: string;\n    titleFontColor?: string;\n    titleFontWeight?: string;\n    minRows?: number;\n    marginRight?: string;\n    className?: string;\n    hideCounter?: boolean;\n    counterFontSize?: string;\n    maxHeight?: string\n    dataTest?: string\n}> = props => {\n    const [focused, setFocused] = useState(false);\n    const error = props.form && props.field ? getIn(props.form.errors, props.field.name) : undefined;\n    const touched = props.form && props.field ? getIn(props.form.touched, props.field.name) : undefined;\n\n    const onFocus = () => {\n        setFocused(true);\n    };\n\n    const onBlur = () => {\n        setFocused(false);\n        if (props.onBlur) props.onBlur();\n    };\n\n    const TextAreaStyles = {\n        flex: 1,\n        fontSize: `${!!props.fontSize ? props.fontSize : '13px'}`,\n        marginTop: `${!!props.marginTop ? props.marginTop : '0'}`,\n    };\n\n    return (\n        <StyledFormikField marginRight={props.marginRight}>\n            <StyledTextareaContainer\n                width={props.width}\n                disabled={props.disabled}\n                color={props.color ? props.color : Variables.Colors.white}\n                background={props.background}\n                padding={props.padding}\n                maxHeight={props.maxHeight}\n                hasError={!!error && !!touched}\n            >\n                <StyledLabel\n                    focused={focused}\n                    titleFontColor={props.titleFontColor}\n                    titleFontWeight={props.titleFontWeight}\n                >\n                    {props.label}\n                </StyledLabel>\n                <Textarea\n                    value={props.value}\n                    styles={TextAreaStyles}\n                    {...props}\n                    {...props.field}\n                    label={props.label}\n                    placeholder={props.placeholder}\n                    max={props.max}\n                    onChange={props.onChange ?? props.field.onChange}\n                    onFocus={onFocus}\n                    onBlur={onBlur}\n                    disabled={props.disabled}\n                    autoFocus={props.autoFocus}\n                    readOnly={props.readOnly}\n                    minRows={props.minRows}\n                    fontSize={props.fontSize}\n                    dataTest={props.dataTest}\n                />\n                {props.max && !props.hideCounter && (\n                    <StyledCounter fontSize={props.counterFontSize} data-test={`${props.dataTest}-counter`}>\n                        {props.value ? props.value.length : '0'}/{props.max}\n                    </StyledCounter>\n                )}\n            </StyledTextareaContainer>\n            {error && touched && (\n                <ErrorContainer data-test={`${props.dataTest}-error`}>\n                    {error}\n                </ErrorContainer>\n            )}\n        </StyledFormikField>\n    );\n};\n\nexport default TextAreaBox;\n","import React, { FC, useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { Scenario } from '../../../../../../constants/interfaces/Scenario';\nimport { getScenarioState } from '../../../store/reducers';\nimport { useModifyScenarioService } from '../../../store/services';\nimport { EditModeContext } from '../../../NewScenario';\nimport { EditModeValues } from '../../../../../../constants/enums/EditModeValues';\nimport { Variables } from '../../../../../../theme/variables';\nimport TextAreaBox from '../../../../../../ui/components/TextAreaBox/TextAreaBox';\n\nconst StyledScenarioInfo = styled.div`\n    flex: 2;\n    margin-right: 32px;\n    padding-top: 24px;\n`;\n\nconst StyledScenarioInfoContent = styled.div`\n    border-radius: 4px;\n`;\n\nconst StyledInputDivs = styled.div``;\n\nconst ScenarioInfo: FC<{\n    scenario: Scenario;\n    modified: 'init' | 'created' | 'modified' | 'updated' | 'error' | 'loaded';\n    modifyScenario: (value: any, field: keyof Scenario) => any;\n}> = ({ scenario, modifyScenario }) => {\n    const edit = useContext(EditModeContext);\n\n    return (\n        <StyledScenarioInfo>\n            <StyledScenarioInfoContent>\n                <StyledInputDivs>\n                    <TextAreaBox\n                        background={Variables.Colors.whiteFive}\n                        value={scenario && scenario.description}\n                        onChange={(e: any) =>\n                            modifyScenario(e.target.value, 'description')\n                        }\n                        name=\"description\"\n                        placeholder=\"Description\"\n                        max={500}\n                        minRows={7.5}\n                        padding=\"12px 16px\"\n                        readOnly={edit.mode === EditModeValues.VIEW}\n                        dataTest='scenario-description'\n                    />\n                </StyledInputDivs>\n            </StyledScenarioInfoContent>\n        </StyledScenarioInfo>\n    );\n};\n\nexport const ScenarioInfoContainer: FC<{\n    scenario: Scenario;\n}> = ({ scenario }) => {\n    const modified = useSelector(getScenarioState).case;\n\n    const modifyScenario = useModifyScenarioService();\n\n    return (\n        <ScenarioInfo\n            scenario={scenario}\n            modified={modified}\n            modifyScenario={modifyScenario}\n        />\n    );\n};\n\nexport default ScenarioInfoContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { ScriptLineSpeaker } from '../../../../../../../../constants/interfaces/ScriptLine';\nimport LinkText from '../../../../../../../../ui/components/LinkText/link-text';\n\nconst StyledEmptyScriptContainer = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 0 8px;\n`;\n\nconst ScriptAction: FC<{\n    handleAdd: any;\n}> = ({ handleAdd }) => {\n    return (\n        <StyledEmptyScriptContainer>\n            <LinkText onClick={() => handleAdd(ScriptLineSpeaker.CUSTOMER)} dataTest='add-scenario-customer-line'>\n                + Add a customer line\n            </LinkText>\n            <LinkText onClick={() => handleAdd(ScriptLineSpeaker.REP)} dataTest='add-scenario-rep-line'>\n                Add a rep line +\n            </LinkText>\n        </StyledEmptyScriptContainer>\n    );\n};\n\nexport default ScriptAction;\n","export const ElevenLabsUrl = 'https://api.elevenlabs.io/v1';","import { ElevenLabsUrl } from './constants';\nimport { getConfig } from \"../../tools/config\";\nimport { GenerateAudioType, GetVoicesResult } from './types';\nimport { ErrorResult } from '../../constants/interfaces/ErrorResult';\n\nexport const generateAudioWithElevenLabs = async ({text, stability, voiceId, similarityBoost, style}: GenerateAudioType) => {\n    const config = getConfig();\n\n    const res = await fetch(ElevenLabsUrl + `/text-to-speech/${voiceId || 'EXAVITQu4vr4xnSDxMaL'}`, {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application/json',\n            'xi-api-key': config.ELEVEN_LABS_KEY,\n            'accept': 'audio/mpeg'\n        },\n        body: JSON.stringify({\n            text,\n            \"voice_settings\": {\n                \"stability\": stability,\n                \"similarity_boost\": similarityBoost,\n                \"style\": style\n            }\n        }),\n    });\n\n    if (!res.ok) {\n        return Promise.reject({\n            code: res.status,\n            status: res.statusText\n        } as ErrorResult);\n    }\n\n    return await res.blob();\n};\n\nexport const getElevenLabsVoices = async () => {\n    const config = getConfig();\n\n    const res = await fetch(ElevenLabsUrl + `/voices`, {\n        method: 'GET',\n        headers: {\n            'Content-Type': 'application/json',\n            'xi-api-key': config.ELEVEN_LABS_KEY,\n            'accept': 'audio/mpeg'\n        }\n    });\n    \n    return await res.json() as Promise<GetVoicesResult>;\n};","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n    voiceGenerationClear,\n    voiceGenerationFailure,\n    voiceGenerationStart,\n    voiceGenerationSuccess,\n} from './actions';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { TextToSpeechSettings } from '../../../constants/interfaces/CompanyVoiceSettings';\nimport { generateAudioWithElevenLabs } from '../../../services/ElevenLabs';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\n\nexport const useTextToSpeechService = () => {\n    const showMessage = useShowMessage();\n    const dispatch = useDispatch();\n    return useCallback(\n        (\n            text: string,\n            settings: TextToSpeechSettings,\n            params: { feature: string; itemId: number | string }\n        ) => {\n            dispatch(voiceGenerationStart(params.feature, params.itemId));\n            return generateAudioWithElevenLabs({\n                text,\n                voiceId: settings.voiceId,\n                stability: settings.stability,\n                similarityBoost: settings.similarityBoost,\n            })\n                .then(data => {\n                    dispatch(voiceGenerationSuccess(params.feature, params.itemId, data));\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    const errorMessage = error.code === 429\n                        ? 'Our voice generation system is experiencing high load. Please try again in a few minutes.'\n                        : 'Something went wrong while generating audio';\n                    showMessage(errorMessage, 'error');\n                    dispatch(\n                        voiceGenerationFailure(params.feature, params.itemId, error)\n                    );\n                    throw error;\n                });\n        },\n        [dispatch, showMessage]\n    );\n};\n\nexport const useClearVoiceService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (s: { feature: string; itemId: number | string }) => {\n            dispatch(voiceGenerationClear(s.feature, s.itemId));\n        },\n        [dispatch]\n    );\n};\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\n\nexport interface VoiceGenerationState {\n    [key: string]: {\n        generating?: boolean;\n        error?: ErrorResult;\n        data: Array<{\n            id?: number | string;\n            voice?: Blob;\n        }>;\n    };\n}\n\nexport type VoiceGenerationSelector = (state: any) => VoiceGenerationState;\n\nexport const VoiceGenerationSelectorContext = React.createContext<\n    VoiceGenerationSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useVoiceGenerationState(): VoiceGenerationState {\n    return useSelector(useContext(VoiceGenerationSelectorContext));\n}\n","const R = require('ramda');\n\nexport const appendItem = (array: any, action: any) => R.append(action, array);\nexport const removeItem = (array: Array<any>, action: any, field?: string) =>\n    array.filter((item: any) =>\n        field ? item[field] === action[field] : item.id !== action.id\n    );\n\nexport const findItem = (array: any, field: string, value: any) => {\n    if (!array) return null;\n    return R.find(R.propEq(field, value))(array);\n};\n\nexport const modifyArrayItem = (\n    array: Array<any>,\n    index: number | string,\n    field: string,\n    value: any\n) => {\n    const itemIdx = (id: number | string) =>\n        R.findIndex(R.propEq('id', id), array);\n    const fieldLens = (idx: string) => R.lensPath([idx, field]);\n    const wField = fieldLens(itemIdx(index));\n    return R.over(wField, (item: any) => value, array);\n};\n","export enum ACTIONS {\n    CREATE_AUDIO_PLAYLIST = 'CREATE_AUDIO_PLAYLIST',\n    PLAY_AUDIO = 'PLAY_AUDIO',\n    STOP_AUDIO = 'STOP_AUDIO',\n    RESET_PLAYLIST = 'RESET_PLAYLIST',\n    START_AUDIO_RECORDING = 'START_AUDIO_RECORDING',\n    STOP_AUDIO_RECORDING = 'STOP_AUDIO_RECORDING',\n    GO_NEXT = 'GO_NEXT',\n}\n\nexport function createPlaylistAction(data: any) {\n    return {\n        type: ACTIONS.CREATE_AUDIO_PLAYLIST as ACTIONS.CREATE_AUDIO_PLAYLIST,\n        data,\n    };\n}\n\nexport function playAudioAction(scriptLineId: number | string) {\n    return {\n        type: ACTIONS.PLAY_AUDIO as ACTIONS.PLAY_AUDIO,\n        scriptLineId,\n    };\n}\n\nexport function stopAudioAction(scriptLineId: number | string) {\n    return {\n        type: ACTIONS.STOP_AUDIO as ACTIONS.STOP_AUDIO,\n        scriptLineId,\n    };\n}\n\nexport function resetPlaylistAction() {\n    return {\n        type: ACTIONS.RESET_PLAYLIST as ACTIONS.RESET_PLAYLIST,\n    };\n}\n\nexport function startAudioRecordingAction(scriptLineId: number | string) {\n    return {\n        type: ACTIONS.START_AUDIO_RECORDING as ACTIONS.START_AUDIO_RECORDING,\n        scriptLineId,\n    };\n}\n\nexport function stopAudioRecordingAction() {\n    return {\n        type: ACTIONS.STOP_AUDIO_RECORDING as ACTIONS.STOP_AUDIO_RECORDING,\n    };\n}\n\nexport function goNextAction() {\n    return {\n        type: ACTIONS.GO_NEXT as ACTIONS.GO_NEXT,\n    };\n}\n","import { Reducer } from 'redux';\nimport {\n    ACTIONS,\n    createPlaylistAction,\n    goNextAction,\n    playAudioAction,\n    resetPlaylistAction,\n    startAudioRecordingAction,\n    stopAudioAction,\n    stopAudioRecordingAction,\n} from './actions';\nimport { AppState } from '../../../store/reducers';\n\nexport interface AudioInterface {\n    playlist: number[];\n    status: 'single' | 'playlist' | 'off';\n    recording: false | number | string;\n    current: number | string | null;\n    next: number | null;\n}\n\nconst initialAudioState: AudioInterface = {\n    playlist: [],\n    recording: false,\n    status: 'off',\n    current: null,\n    next: null,\n};\n\ntype AudioAction =\n    | ReturnType<typeof createPlaylistAction>\n    | ReturnType<typeof playAudioAction>\n    | ReturnType<typeof stopAudioAction>\n    | ReturnType<typeof resetPlaylistAction>\n    | ReturnType<typeof startAudioRecordingAction>\n    | ReturnType<typeof stopAudioRecordingAction>\n    | ReturnType<typeof goNextAction>;\n\nexport const audioReducer: Reducer<AudioInterface, AudioAction> = (\n    state: AudioInterface = initialAudioState,\n    action: AudioAction\n): AudioInterface => {\n    switch (action.type) {\n        case ACTIONS.CREATE_AUDIO_PLAYLIST:\n            return {\n                ...state,\n                status: 'playlist',\n                playlist: action.data,\n                current: action.data[0],\n                next: action.data[1],\n            };\n        case ACTIONS.PLAY_AUDIO:\n            return {\n                ...state,\n                status: 'single',\n                current: action.scriptLineId,\n                next: null,\n            };\n        case ACTIONS.STOP_AUDIO:\n            return {\n                ...state,\n                status: 'off',\n                current: null,\n            };\n        case ACTIONS.START_AUDIO_RECORDING:\n            return {\n                ...state,\n                recording: action.scriptLineId,\n            };\n        case ACTIONS.STOP_AUDIO_RECORDING:\n            return {\n                ...state,\n                recording: false,\n            };\n        case ACTIONS.GO_NEXT:\n            const newPlaylist = state.playlist;\n            let newState = { ...state };\n            if (state.status === 'playlist') {\n                newPlaylist.shift();\n                newState = {\n                    ...state,\n                    status: newPlaylist[0] ? 'playlist' : 'off',\n                    playlist: newPlaylist,\n                    current: newPlaylist[0] ? newPlaylist[0] : null,\n                    next: newPlaylist[1] ? newPlaylist[1] : null,\n                };\n            }\n            return newState;\n        case ACTIONS.RESET_PLAYLIST:\n            return {\n                ...initialAudioState,\n            };\n        default:\n            return state;\n    }\n};\n\nexport const getAudioState = (state: AppState) => state.player;\n","import { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport {\n    createPlaylistAction,\n    goNextAction,\n    playAudioAction,\n    resetPlaylistAction,\n    startAudioRecordingAction,\n    stopAudioAction,\n    stopAudioRecordingAction,\n} from './actions';\n\nexport const useCreatePlaylistService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (data: any) => {\n            dispatch(createPlaylistAction(data));\n        },\n        [dispatch]\n    );\n};\n\nexport const usePlayAudioService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (scriptLineId: number | string) => {\n            dispatch(playAudioAction(scriptLineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useStopAudioService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (scriptLineId: number | string) => {\n            dispatch(stopAudioAction(scriptLineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useResetAudioService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetPlaylistAction());\n    }, [dispatch]);\n};\n\nexport const useStartAudioRecordingService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (scriptLineId: number | string) => {\n            dispatch(startAudioRecordingAction(scriptLineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useStopAudioRecordingService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(stopAudioRecordingAction());\n    }, [dispatch]);\n};\n\nexport const useGoNextService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(goNextAction());\n    }, [dispatch]);\n};\n","import { useCallback } from 'react';\n\nexport const useGetSelectionCharacterOffsetWithin = () => {\n    return useCallback((element: any) => {\n        let start = 0;\n        let end = 0;\n        const doc = element.ownerDocument || element.document;\n        const win = doc.defaultView || doc.parentWindow;\n        let sel: any;\n        let selectionRect;\n        if (typeof win.getSelection !== 'undefined') {\n            sel = win.getSelection();\n            if (sel.rangeCount > 0) {\n                const range = win.getSelection().getRangeAt(0);\n                selectionRect = range.getBoundingClientRect();\n                const preCaretRange = range.cloneRange();\n                preCaretRange.selectNodeContents(element);\n                preCaretRange.setEnd(range.startContainer, range.startOffset);\n                start = preCaretRange.toString().length;\n                preCaretRange.setEnd(range.endContainer, range.endOffset);\n                end = preCaretRange.toString().length;\n            }\n        } else if (sel && sel === doc.selection && sel.type !== 'Control') {\n            const textRange = sel.createRange();\n            const preCaretTextRange = doc.body.createTextRange();\n            preCaretTextRange.moveToElementText(element);\n            preCaretTextRange.setEndPoint('EndToStart', textRange);\n            start = preCaretTextRange.text.length;\n            preCaretTextRange.setEndPoint('EndToEnd', textRange);\n            end = preCaretTextRange.text.length;\n        }\n        return { start: start, end: end, selectionRect: selectionRect };\n    }, []);\n};\n\nexport function getCaretPosition(context: any) {\n    const selection = window.getSelection();\n    if (!selection) return null;\n    const range: any = selection.getRangeAt(0);\n    range.setStart(context, 0);\n    return range.toString().length;\n}\n\nexport function getTextNodeAtPosition(root: any, index: any) {\n    const NODE_TYPE = NodeFilter.SHOW_TEXT;\n    // @ts-ignore\n    const treeWalker = document.createTreeWalker(root, NODE_TYPE, function next(\n        elem: any\n    ): number {\n        if (index > root.textContent.length) {\n            index -= elem.textContent.length;\n            return NodeFilter.FILTER_REJECT;\n        }\n        return NodeFilter.FILTER_ACCEPT;\n    });\n\n    const c = treeWalker.nextNode();\n    return {\n        node: c ? c : root,\n        position: index,\n    };\n}\n\nexport function useSetCaretPosition() {\n    return useCallback((element?: any, offset?: any) => {\n        const range: any = document.createRange();\n        const sel: any = window.getSelection();\n        let currentNode = null;\n        let currentNodeLength = null;\n        let previousNodeLength = null;\n        for (let i = 0; i < element.childNodes.length; i++) {\n            previousNodeLength = currentNodeLength;\n            currentNode = element.childNodes[i];\n            currentNodeLength = (\n                element.childNodes[i].innerText ||\n                element.childNodes[i].textContent\n            ).length;\n            while (currentNode.childNodes.length > 0) {\n                currentNode = currentNode.childNodes[0];\n            }\n\n            //calc offset in current node\n            if (previousNodeLength) {\n                offset -= previousNodeLength;\n            }\n            //check whether current node has enough length\n            if (offset <= currentNodeLength) {\n                break;\n            }\n        }\n        //move caret to specified offset\n        if (currentNode != null) {\n            if (offset > currentNode.length) {\n                offset = currentNode.length;\n            }\n            range.setStart(currentNode, offset);\n            range.collapse(true);\n            sel.removeAllRanges();\n            sel.addRange(range);\n        }\n    }, []);\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const KeywordIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M1155.998 494.994v-1H1165v1h-9.002zm3.971-11.125l-.364.616-5.276 8.916-1.11-.625-2.205 2.224-1.776-1 .872-2.975-1.11-.626 5.64-9.532-.888-.5-2.564 4.333-.888-.5 3.077-5.2.888.5.888.5.514-.866 5.329 3.002-1.027 1.733zm-8.886 10.014l1.321-1.566-1.48-.834-.73 1.9.889.5zm3.932-11.649l-4.614 7.799 1.565.882-.677-.381 1.776 1 .888.5 4.615-7.799-3.553-2zm1.026-1.733l-.513.866 3.553 2.002.513-.867-3.553-2z\"\n                            transform=\"translate(-1149 -479)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default KeywordIcon;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport KeywordIcon from '../../../../../../../../ui/icons/Keyword';\n\nconst StyledTooltip = styled.div<{ top: number; left: number; color?: string }>`\n    position: fixed;\n    top: ${props => props.top}px;\n    left: ${props => props.left}px;\n    background: ${props => props.theme.Colors.darkTwo};\n    font-size: 13px;\n    font-weight: 600;\n    height: 42px;\n    width: 112px;\n    color: ${props => (props.color ? props.color : props.theme.Colors.white)};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    border-radius: 4px;\n    cursor: pointer;\n    user-select: none;\n    z-index: 5;\n    &::before {\n        content: '';\n        position: absolute;\n        top: 100%;\n        left: 50%;\n        margin-left: -5px;\n        border-width: 5px;\n        border-style: solid;\n        border-color: black transparent transparent transparent;\n    }\n\n    &:active {\n        opacity: 0.95;\n    }\n`;\n\nconst StyledIconContainer = styled.div`\n    width: 16px;\n    height: 16px;\n    margin-right: 8px;\n`;\n\nconst Tooltip: FC<{\n    top?: number;\n    left?: number;\n    label?: string;\n    onClick?: (args: any) => void;\n    textColor?: string;\n    withIcon?: boolean;\n}> = ({ top, left, label, onClick, textColor }) => {\n    return (\n        <StyledTooltip\n            top={top ? top : 0}\n            left={left ? left : 0}\n            onClick={onClick}\n            color={textColor}\n        >\n            <StyledIconContainer>\n                <KeywordIcon />\n            </StyledIconContainer>\n\n            {label ? label : 'Keyword'}\n        </StyledTooltip>\n    );\n};\n\nexport default Tooltip;\n","import React, {\n    FC,\n    FocusEvent,\n    KeyboardEvent,\n    MouseEvent,\n    RefObject,\n    ChangeEvent,\n} from 'react';\nimport styled from 'styled-components';\n\nconst KEYWORDS_CLASS = '__keywords';\n\n//region Styles\nconst StyledContentEditable = styled.div<{\n    fontSize: string;\n    disabled?: boolean;\n}>`\n    text-align: left;\n    font-size: ${props => props.fontSize};\n    white-space: break-spaces;\n    word-break: break-word;\n    overflow-wrap: break-word;\n    line-height: normal;\n    letter-spacing: normal;\n    margin: 0;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.steelGrey\n            : props.theme.Colors.dark};\n    height: 100%;\n    .${KEYWORDS_CLASS} {\n        color: ${props => props.theme.Colors.softBlue};\n        font-weight: bold;\n        cursor: pointer;\n        display: inline;\n\n        &:hover {\n            opacity: 0.85;\n        }\n        &:active {\n            opacity: 0.7;\n        }\n    }\n    &[contenteditable='true']:empty:before {\n        content: attr(placeholder);\n        display: block;\n        font-size: 13px;\n        color: ${props => props.theme.Colors.cloudyBlue};\n    }\n    &::placeholder {\n        color: ${props => props.theme.Colors.cloudyBlue};\n        font-size: 13px;\n    }\n`;\n//endregion\n\nexport const ContentEditable: FC<{\n    value: string;\n    onChange: (value: string) => void;\n    onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void;\n    onMouseUp?: (event: MouseEvent<HTMLDivElement>) => void;\n    onFocus?: (e: FocusEvent<HTMLDivElement>) => void;\n    onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n    fontSize?: string;\n    placeholder?: string;\n    disabled?: boolean;\n    innerRef?: RefObject<HTMLDivElement>;\n    dataTest?: string;\n}> = ({\n    value,\n    onChange,\n    onKeyDown,\n    onMouseUp,\n    onFocus,\n    onClick,\n    fontSize,\n    placeholder,\n    disabled,\n    innerRef,\n    dataTest\n}) => {\n    const handleInput = (event: ChangeEvent<HTMLDivElement>) => {\n        if (onChange) {\n            onChange(event.target.innerText);\n        }\n    };\n\n    return (\n        <StyledContentEditable\n            ref={innerRef}\n            fontSize={fontSize ? fontSize : '11px'}\n            contentEditable={!disabled}\n            onInput={handleInput}\n            dangerouslySetInnerHTML={{ __html: value }}\n            onKeyDown={onKeyDown}\n            onMouseUp={onMouseUp}\n            placeholder={placeholder}\n            onFocus={onFocus}\n            onClick={onClick}\n            disabled={disabled}\n            data-test={dataTest}\n        />\n    );\n};\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { Keywords } from '../../../constants/interfaces/Keywords';\nimport {\n    useGetSelectionCharacterOffsetWithin,\n    useSetCaretPosition,\n} from '../../../features/keywords/hooks';\nimport { ContentEditable } from './ContentEditable';\n\nconst KEYWORDS_CLASS = '__keywords';\n\nconst StyledContainer = styled.div`\n    flex: 1;\n    height: 100%;\n`;\n\nexport const ContentEditableInput: FC<{\n    value: string;\n    handleChange?: (value: string, caretPosition: number) => void;\n    placeholder?: string;\n    max?: number;\n    onChange?: any;\n    autoFocus?: boolean;\n    viewMode?: boolean;\n    selections?: Keywords[];\n    setSelections?: (keyword: Keywords[]) => void;\n    setCreateTooltip?: (arg: any) => void;\n    setRemoveTooltip?: (arg: any) => void;\n    setKeywordIdToRemove?: (arg: string) => void;\n    deleteKeyword?: (id: string) => void;\n    recording?: boolean;\n    scriptLineId?: number | string;\n    className?: string;\n    onMouseUp?(ref: any): void;\n    dataTest?: string;\n}> = ({\n    value,\n    handleChange,\n    placeholder,\n    selections,\n    autoFocus,\n    viewMode,\n    setCreateTooltip,\n    setRemoveTooltip,\n    setKeywordIdToRemove,\n    recording,\n    scriptLineId,\n    className,\n    onMouseUp,\n    dataTest\n}) => {\n    const textareaRef = useRef<any>(null);\n    const [localValue, setLocalValue] = useState(value);\n    const [caretPosition, saveCaretPosition] = useState<null | number>(null);\n    const setCaretPosition = useSetCaretPosition();\n\n    const getSelectionCharacterOffsetWithin = useGetSelectionCharacterOffsetWithin();\n    const timeoutRef = useRef<any>(null);\n    const selectionRef = useRef<any>(null);\n\n    useEffect(() => {\n        setLocalValue(value);\n    }, [value]);\n\n    const handleTextChange = (value: string) => {\n        if (timeoutRef.current !== null) {\n            clearTimeout(timeoutRef.current);\n        }\n        if (setRemoveTooltip) {\n            setRemoveTooltip({\n                visible: false,\n            });\n        }\n        if (setCreateTooltip) {\n            setCreateTooltip({\n                visible: false,\n            });\n        }\n\n        const selection = getSelectionCharacterOffsetWithin(\n            textareaRef.current\n        );\n        saveCaretPosition(selection.end);\n\n        selectionRef.current = selectionRef.current\n            ? selection.end < selectionRef.current\n                ? selection.end\n                : selectionRef.current\n            : selection.end;\n        timeoutRef.current = setTimeout(() => {\n            setLocalValue(value);\n            if (handleChange) {\n                handleChange(value, selectionRef.current);\n            }\n            setCaretPosition(textareaRef.current, selection.end);\n            timeoutRef.current = null;\n            selectionRef.current = selection.end;\n        }, 100);\n    };\n\n    const handleTextFocus = () => {\n        const selection = getSelectionCharacterOffsetWithin(\n            textareaRef.current\n        );\n        selectionRef.current = selection.end;\n    };\n\n    const handleKeyPress = (event: any) => {\n        if (event.key === 'Enter') {\n            document.execCommand('insertLineBreak');\n            event.preventDefault();\n        }\n        if (\n            event.keyCode === 37 ||\n            event.keyCode === 38 ||\n            event.keyCode === 39 ||\n            event.keyCode === 40\n        ) {\n            const selection = getSelectionCharacterOffsetWithin(\n                textareaRef.current\n            );\n            selectionRef.current = selection.end;\n        }\n    };\n\n    const selectedValues = selections\n        ? selections.map((selection: Keywords) => {\n              return [selection.start, selection.end, selection.id];\n          })\n        : [];\n\n    useEffect(() => {\n        if (autoFocus) {\n            textareaRef.current.focus();\n        }\n    }, [autoFocus]);\n\n    useEffect(() => {\n        const handleKeywordClick = (e: any) => {\n            e.preventDefault();\n            e.stopPropagation();\n            const selectionRect = e.target.getBoundingClientRect();\n            setCreateTooltip && setCreateTooltip({ visible: false });\n            setRemoveTooltip &&\n                setRemoveTooltip({\n                    visible: true,\n                    top: selectionRect.top - 50,\n                    left: selectionRect.left + selectionRect.width * 0.5 - 56,\n                });\n            if (setKeywordIdToRemove) {\n                setKeywordIdToRemove(e.target.dataset.id);\n            }\n        };\n\n        const keywords = document.getElementsByClassName(\n            `${KEYWORDS_CLASS}_${scriptLineId}`\n        );\n        if (viewMode) {\n            for (let keyword of Array.from(keywords)) {\n                keyword.removeEventListener('click', handleKeywordClick);\n            }\n        } else {\n            for (let keyword of Array.from(keywords)) {\n                keyword.addEventListener('click', handleKeywordClick);\n            }\n        }\n        return () => {\n            for (let keyword of Array.from(keywords)) {\n                keyword.removeEventListener('click', handleKeywordClick);\n            }\n        };\n    }, [\n        setCreateTooltip,\n        setKeywordIdToRemove,\n        setRemoveTooltip,\n        viewMode,\n        selections,\n        scriptLineId,\n    ]);\n\n    function renderDetails(data: string): string {\n        return selectedValues\n            .reduce((str: any, [start, end, id]: any) => {\n                str[\n                    start\n                ] = `<span class=\"${KEYWORDS_CLASS} ${KEYWORDS_CLASS}_${scriptLineId}\" data-id=\"${id}\">${str[start]}`;\n                str[end] = `${str[end]}</span>`;\n                return str;\n            }, data.split(''))\n            .join('');\n    }\n\n    useEffect(() => {\n        if (caretPosition && textareaRef.current) {\n            setCaretPosition(textareaRef.current, caretPosition);\n        }\n    }, [caretPosition, setCaretPosition]);\n\n    return (\n        <StyledContainer>\n            <ContentEditable\n                onKeyDown={handleKeyPress}\n                innerRef={textareaRef}\n                disabled={viewMode}\n                value={renderDetails(localValue)}\n                fontSize={recording ? '15px' : '13px'}\n                onChange={handleTextChange}\n                placeholder={placeholder}\n                onMouseUp={() =>\n                    onMouseUp && !viewMode && onMouseUp(textareaRef)\n                }\n                onClick={handleTextFocus}\n                dataTest={dataTest}\n            />\n        </StyledContainer>\n    );\n};\n\nexport default ContentEditableInput;\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport { useGetSelectionCharacterOffsetWithin } from '../../../../../../../../features/keywords/hooks';\nimport Tooltip from './Tooltip';\nimport styled from 'styled-components';\nimport { ClickAwayListener } from '@material-ui/core';\nimport { Keywords } from '../../../../../../../../constants/interfaces/Keywords';\nimport { Variables } from '../../../../../../../../theme/variables';\nimport { useSaveScenarioKeywordsService } from '../../../../../store/services';\nimport ContentEditableInput from '../../../../../../../../ui/components/ContentEditableDiv/ContentEditableDiv';\n\n\nconst StyledContainer = styled.div`\n    z-index: 1;\n    height: 100%;\n    min-height: 62px;\n`;\n\nconst StyledScriptItemTextarea = styled.div`\n    height: 100%;\n`;\n\nexport const ScriptItemTextarea: FC<{\n    value: string;\n    handleValueChange: (text: string) => void;\n    viewMode?: boolean;\n    autoFocus?: boolean;\n    placeholder?: string;\n    scriptLineKeywords?: Keywords[];\n    scriptLineId: number | string;\n    recording?: boolean;\n    dataTest?: string;\n}> = ({\n    value,\n    handleValueChange,\n    viewMode,\n    autoFocus,\n    placeholder,\n    scriptLineKeywords,\n    scriptLineId,\n    recording,\n    dataTest\n}) => {\n    const getSelectionCharacterOffsetWithin = useGetSelectionCharacterOffsetWithin();\n\n    const [createToolTip, setCreateTooltip] = useState<{\n        visible: boolean;\n        top?: number;\n        left?: number;\n    }>({\n        visible: false,\n        top: 0,\n        left: 0,\n    });\n\n    const [removeToolTip, setRemoveTooltip] = useState<{\n        visible: boolean;\n        top?: number;\n        left?: number;\n    }>({\n        visible: false,\n        top: 0,\n        left: 0,\n    });\n\n    const [keywords, setKeywords] = useState({ start: 0, end: 0 });\n    const [saveKeyword, setSaveKeyword] = useState(false);\n    const [removeKeyword, setRemoveKeyword] = useState(false);\n    const [keywordIdToRemove, setKeywordIdToRemove] = useState('');\n    const [selections, setSelections] = useState<Keywords[]>(\n        scriptLineKeywords ? scriptLineKeywords : []\n    );\n\n    useEffect(() => {\n        if (scriptLineKeywords) {\n            setSelections(scriptLineKeywords);\n        }\n    }, [scriptLineKeywords, setSelections]);\n\n    const reportSelection = (refs: any) => {\n        const selection = getSelectionCharacterOffsetWithin(refs.current);\n        if (selection.start === selection.end) {\n            return;\n        }\n        setRemoveTooltip({ visible: false });\n        setCreateTooltip({\n            visible: true,\n            top: selection.selectionRect.top - 50,\n            left:\n                selection.selectionRect.left +\n                selection.selectionRect.width * 0.5 -\n                56,\n        });\n        setKeywords({ start: selection.start, end: selection.end - 1 });\n    };\n\n    const clearSelection = () => {\n        const doc: any = document;\n        const win: any = window;\n        if (doc.selection) {\n            doc.selection.empty();\n        } else if (window.getSelection()) {\n            win.getSelection().removeAllRanges();\n        }\n    };\n\n    const handleModifyText = (text: string, caretPosition: number) => {\n        if (viewMode) {\n            return false;\n        }\n        const valueLength = text.length;\n        const valueDiff = text.length - value.length;\n        handleValueChange(text);\n        let updatedSelections = [...selections];\n        updatedSelections = updatedSelections.filter(selection => {\n            return selection.end < valueLength;\n        });\n        updatedSelections = updatedSelections.filter(selection => {\n            return (\n                caretPosition < selection.start || caretPosition > selection.end\n            );\n        });\n\n        updatedSelections = updatedSelections.map(selection => {\n            if (selection.start >= caretPosition) {\n                const start = selection.start + valueDiff;\n                const end = selection.end + valueDiff;\n                return { start: start, end: end, id: `${start}-${end}` };\n            } else {\n                return selection;\n            }\n        });\n        setSelections(updatedSelections);\n    };\n\n    const handleAddKeyword = (id: string, start: number, end: number) => {\n        let newSelections: Keywords[] = [...selections];\n        let startIndex = start;\n        let endIndex = end;\n        const selectionConflict = selections.filter((selection: Keywords) => {\n            return (\n                (start >= selection.start && start <= selection.end) ||\n                (end >= selection.start && end <= selection.end) ||\n                (selection.end <= end && selection.start >= start)\n            );\n        });\n\n        if (selectionConflict.length > 0) {\n            for (let conflict of selectionConflict) {\n                startIndex = Math.min(startIndex, conflict.start);\n                endIndex = Math.max(endIndex, conflict.end);\n                newSelections = newSelections.filter(\n                    selection => selection.id !== conflict.id\n                );\n            }\n        }\n\n        newSelections.push({ start: startIndex, end: endIndex, id: id });\n        setSelections(newSelections);\n        setSaveToScenario(true);\n    };\n\n    const handleRemoveKeyword = useCallback(\n        (id: string) => {\n            setSelections(\n                selections.filter((selection: any) => {\n                    return selection.id !== id;\n                })\n            );\n        },\n        [selections]\n    );\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const handleToggleKeyword = (start: number, end: number) => {\n        const findSelection = selections.filter(\n            (selection: any) => selection.id === `${start}-${end}`\n        );\n        if (findSelection[0]) {\n            handleRemoveKeyword(`${start}-${end}`);\n        } else {\n            handleAddKeyword(`${start}-${end}`, start, end);\n        }\n    };\n\n    useEffect(() => {\n        if (saveKeyword) {\n            handleToggleKeyword(keywords.start, keywords.end);\n            setSaveKeyword(false);\n        }\n    }, [keywords, saveKeyword, selections, handleToggleKeyword]);\n\n    useEffect(() => {\n        if (removeKeyword) {\n            handleRemoveKeyword(keywordIdToRemove);\n            setSaveToScenario(true);\n            setRemoveKeyword(false);\n        }\n    }, [keywordIdToRemove, removeKeyword, selections, handleRemoveKeyword]);\n\n    // Handle case when deleting text to remove keywords that would exceed the boundaries\n    useEffect(() => {\n        const newSelections = [...selections].filter((selection: Keywords) => {\n            return selection.end <= value.length;\n        });\n        if (newSelections.length !== selections.length) {\n            setSelections(newSelections);\n            setSaveToScenario(true);\n        }\n    }, [value, selections, setSelections]);\n\n    const saveScenarioKeyword = useSaveScenarioKeywordsService();\n    const [saveToScenario, setSaveToScenario] = useState(false);\n\n    useEffect(() => {\n        if (saveToScenario) {\n            saveScenarioKeyword(selections, scriptLineId);\n            setSaveToScenario(false);\n        }\n    }, [\n        selections,\n        saveScenarioKeyword,\n        scriptLineId,\n        saveToScenario,\n        setSaveToScenario,\n    ]);\n\n    return (\n        <ClickAwayListener\n            onClickAway={() => {\n                setCreateTooltip({ visible: false });\n                setRemoveTooltip({ visible: false });\n            }}\n        >\n            <StyledContainer>\n                {createToolTip.visible && (\n                    <Tooltip\n                        top={createToolTip.top}\n                        left={createToolTip.left}\n                        onClick={() => {\n                            setCreateTooltip({ visible: false });\n                            setSaveKeyword(true);\n                            clearSelection();\n                        }}\n                    />\n                )}\n                {removeToolTip.visible && (\n                    <Tooltip\n                        top={removeToolTip.top}\n                        left={removeToolTip.left}\n                        onClick={() => {\n                            setRemoveTooltip({ visible: false });\n                            setRemoveKeyword(true);\n                            clearSelection();\n                        }}\n                        textColor={Variables.Colors.softBlue}\n                    />\n                )}\n                <StyledScriptItemTextarea>\n                    <ContentEditableInput\n                        value={value}\n                        selections={selections}\n                        setSelections={setSelections}\n                        handleChange={(text, caretPosition) =>\n                            handleModifyText(text, caretPosition)\n                        }\n                        viewMode={viewMode}\n                        deleteKeyword={handleRemoveKeyword}\n                        autoFocus={autoFocus}\n                        setCreateTooltip={setCreateTooltip}\n                        setRemoveTooltip={setRemoveTooltip}\n                        setKeywordIdToRemove={setKeywordIdToRemove}\n                        placeholder={placeholder}\n                        recording={recording}\n                        scriptLineId={scriptLineId}\n                        onMouseUp={reportSelection}\n                        dataTest={dataTest}\n                    />\n                </StyledScriptItemTextarea>\n            </StyledContainer>\n        </ClickAwayListener>\n    );\n};\n\nexport default ScriptItemTextarea;\n","import React, { createContext, FC } from 'react';\nimport styled from 'styled-components';\n\nconst CommentInner = styled.div<{ reverse?: boolean }>`\n    display: flex;\n    flex: 1;\n    flex-direction: ${props => (props.reverse ? 'row-reverse' : 'row')};\n`;\n\nexport const CommentContext = createContext<{\n    reverse?: boolean;\n    disabled?: boolean;\n    background?: string;\n}>({\n    reverse: false,\n    disabled: false,\n});\nconst CommentProvider = CommentContext.Provider;\n\nexport const Comment: FC<{\n    className?: string;\n    reverse?: boolean;\n    disabled?: boolean;\n    background?: string;\n}> = ({ children, className, reverse, disabled, background }) => {\n    return (\n        <CommentInner className={className} reverse={reverse}>\n            <CommentProvider\n                value={{\n                    reverse: reverse,\n                    disabled: disabled,\n                    background: background,\n                }}\n            >\n                {children}\n            </CommentProvider>\n        </CommentInner>\n    );\n};\n","import React, { FC, useContext } from 'react';\nimport styled from 'styled-components';\nimport { CommentContext } from './Comment';\nimport { Variables } from '../../../../theme/variables';\n\nconst Body = styled.div<{ reverse?: boolean; background: string }>`\n    flex: 1;\n    position: relative;\n    background: ${props => props.background};\n    border-top-right-radius: ${props => (props.reverse ? '0' : '8px')};\n    border-top-left-radius: ${props => (props.reverse ? '8px' : '0')};\n    border-bottom-right-radius: ${props => (props.reverse ? '16px' : '8px')};\n    border-bottom-left-radius: ${props => (props.reverse ? '8px' : '16px')};\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    flex-direction: column;\n    word-break: break-word;\n    overflow: hidden;\n`;\n\nconst Blacker = styled.div`\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: 1;\n`;\n\nexport const CommentBody: FC<{ className?: string }> = ({\n    children,\n    className,\n}) => {\n    const params = useContext(CommentContext);\n\n    return (\n        <Body\n            reverse={params.reverse}\n            background={\n                params.background ? params.background : Variables.Colors.white\n            }\n            className={className}\n        >\n            {params.disabled && <Blacker />}\n            {children}\n        </Body>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Actions = styled.div`\n    display: flex;\n    padding: 8px 24px 16px 24px;\n`;\n\nexport const CommentTools: FC<{\n    className?: string;\n}> = ({ children, className }) => (\n    <Actions className={className}>{children}</Actions>\n);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Title = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    margin-bottom: 8px;\n`;\n\nexport const CommentTitle: FC<{\n    className?: string;\n    dataTest?: string;\n}> = ({ children, className, dataTest }) => (\n    <Title className={className} data-test={dataTest}>{children}</Title>\n);\n","import React, { FC, MouseEvent, useContext } from 'react';\nimport styled from 'styled-components';\n\nimport { CommentContext } from './Comment';\n\n//region Styles\nconst Description = styled.div<{\n    reverse?: boolean;\n    disabled?: boolean;\n}>`\n    padding: 16px 32px 12px 24px;\n    position: relative;\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n`;\n\nconst StyledRemoveIcon = styled.div`\n    font-size: 11px;\n    color: ${props => props.theme.Colors.fadedRed};\n    user-select: none;\n    position: absolute;\n    cursor: pointer;\n    right: 16px;\n    top: 16px;\n    font-weight: bold;\n    &:hover {\n        opacity: 0.8;\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\n//endregion\n\nexport const CommentDescription: FC<{\n    reverse?: boolean;\n    onDelete?: (e: MouseEvent<HTMLDivElement>) => void;\n    hideRemoveIcon?: boolean;\n    dataTest?: string;\n}> = ({ children, onDelete, hideRemoveIcon, dataTest }) => {\n    const params = useContext(CommentContext);\n\n    return (\n        <Description reverse={!params.reverse} disabled={params.disabled}>\n            {!hideRemoveIcon && (\n                <StyledRemoveIcon onClick={onDelete} data-test={dataTest}>Delete</StyledRemoveIcon>\n            )}\n            {children}\n        </Description>\n    );\n};\n","import React, { FC, useContext } from 'react';\nimport styled from 'styled-components';\nimport { CommentContext } from './Comment';\n\nconst Avatar = styled.div<{ disabled?: boolean }>`\n    width: 28px;\n    height: 28px;\n    opacity: ${props => (props.disabled ? 0.4 : 1)};\n    margin: 0 8px;\n`;\n\nconst AvatarImage = styled.img<{ disabled?: boolean }>`\n    height: 100%;\n    width: 100%;\n    opacity: ${props => (props.disabled ? 0.4 : 1)};\n`;\n\nexport const CommentAvatar: FC<{\n    image?: string;\n}> = ({ children, image }) => {\n    const params = useContext(CommentContext);\n\n    if (image) {\n        return (\n            <Avatar disabled={params.disabled}>\n                <AvatarImage src={image} alt=\"company\" />\n            </Avatar>\n        );\n    }\n    return <Avatar disabled={params.disabled}>{children}</Avatar>;\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Save = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 12 12\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path\n                        fill=\"#73BBE5\"\n                        stroke=\"#73BBE5\"\n                        strokeWidth=\".5\"\n                        d=\"M1 11V1h10v10H1zm7.5-9.375h-5V4.75h5V1.625zm1.875 0h-1.25v3.75h-6.25v-3.75h-1.25v8.75h8.75v-8.75zm-3.125 2.5h-.625V2.25h.625v1.875z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Save;\n","import styled from \"styled-components\";\nimport { ReactMic } from \"@cleandersonlobo/react-mic\";\n\n//region Styles\nexport const StyledScriptPlayingAudioAction = styled.div`\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    border-radius: 4px;\n    overflow: hidden;\n    height: 48px;\n`;\n\nexport const StyledPlayingAudioButton = styled.div`\n    height: 100%;\n    background: ${props => props.theme.Colors.darkTwo};\n    display: flex;\n    justify-content: center;\n    align-items: flex-end;\n    padding: 16px;\n`;\n\nexport const StyledButton = styled.div`\n    font-size: 11px;\n    display: flex;\n    justify-content: center;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const IconContainer = styled.div`\n    width: 14px;\n    height: 14px;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    margin-right: 8px;\n`;\n\nexport const ButtonText = styled.div`\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    font-size: 11px;\n    font-weight: 600;\n`;\n\nexport const StyledReactMicContainer = styled.div`\n    height: 100%;\n    flex: 1;\n    padding-left: 16px;\n    background: ${props => props.theme.Colors.darkTwo};\n`;\n\nexport const StyledReactMic = styled(ReactMic)`\n    height: 100%;\n    width: 100%;\n`;\n//endregion","import { FC } from 'react';\nimport { ClickAwayListener } from '@material-ui/core';\n\nimport { Variables } from '../../../theme/variables';\nimport { useShowMessage } from '../ErrorMessages/ErrorMessages';\nimport Save from '../../icons/Save';\nimport {\n    ButtonText,\n    IconContainer,\n    StyledButton,\n    StyledPlayingAudioButton,\n    StyledReactMic,\n    StyledReactMicContainer,\n    StyledScriptPlayingAudioAction,\n} from './style';\nimport { AudioRecorderProps } from './type';\n\nconst AudioRecorder: FC<AudioRecorderProps> = ({\n    record,\n    onClickAway,\n    onSave,\n    onStop,\n    onData,\n    backgroundColor,\n    strokeColor,\n}) => {\n    const showMessage = useShowMessage();\n\n    const handleNoPermission = () => {\n        onStop(null);\n        showMessage('Microphone permission has been denied', 'error');\n    };\n\n    navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(\n        stream => {\n            stream.getTracks().forEach(function (track) {\n                track.stop();\n            });\n        },\n        () => {\n            handleNoPermission();\n        }\n    );\n\n    return (\n        <ClickAwayListener onClickAway={onClickAway}>\n            <StyledScriptPlayingAudioAction>\n                <StyledReactMicContainer>\n                    <StyledReactMic\n                        record={record}\n                        className=\"sound-wave\"\n                        onStop={onStop}\n                        onData={onData}\n                        mimeType={'audio/mp3'}\n                        strokeColor={\n                            strokeColor\n                                ? strokeColor\n                                : Variables.Colors.softBlue\n                        }\n                        backgroundColor={\n                            backgroundColor\n                                ? backgroundColor\n                                : Variables.Colors.darkTwo\n                        }\n                    />\n                </StyledReactMicContainer>\n                <StyledPlayingAudioButton>\n                    <StyledButton onClick={onSave}>\n                        <IconContainer>\n                            <Save />\n                        </IconContainer>\n                        <ButtonText>Save</ButtonText>\n                    </StyledButton>\n                </StyledPlayingAudioButton>\n            </StyledScriptPlayingAudioAction>\n        </ClickAwayListener>\n    );\n};\n\nexport default AudioRecorder;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PauseCircle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"#4AA9E2\"/>\n                <path d=\"M6 5.267c0-.207.222-.335.397-.229l4.476 2.733a.27.27 0 0 1 0 .458l-4.476 2.732A.262.262 0 0 1 6 10.733V5.267z\" fill=\"#4AA9E2\"/>\n            </svg>\n        );\n    }\n);\n\nexport default PauseCircle;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PauseCircle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"#4AA9E2\"/>\n                <path d=\"M6 5v6M10 5v6\" stroke=\"#4AA9E2\" stroke-linecap=\"round\"/>\n            </svg>\n        );\n    }\n);\n\nexport default PauseCircle;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const StopCircle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"#4AA9E2\"/>\n                <rect x=\"5\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#4AA9E2\"/>\n            </svg>\n        );\n    }\n);\n\nexport default StopCircle;\n","import styled from 'styled-components';\n\nexport const StyledAudioPlayer = styled.div<{ color: string }>`\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    border-radius: 16px;\n`;\n\nexport const StyledActionPanel = styled.div`\n    display: flex;\n    padding: 0;\n    justify-content: space-between;\n    align-items: center;\n    margin-top: 4px;\n`;\n\nexport const StyledActionButtons = styled.div`\n    display: flex;\n`;\n\nexport const StyledButton = styled.div`\n    width: 16px;\n    height: 16px;\n    cursor: pointer;\n\n    &:last-child {\n        margin-left: 8px;\n    }\n`;\n\nexport const AudioDuration = styled.div`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 13px;\n`;\n\nexport const StyledAudioWrapper = styled.div`\n    display: flex;\n    justify-content: center;\n    padding: 4px 0;\n`;\n\nexport const StyledAudioLine = styled.div`\n    width: 100%;\n    height: 8px;\n    border-radius: 12px;\n    border: solid 1px ${props => props.theme.Colors.cloudyBlue};\n    background: ${props => props.theme.Colors.whiteFive};\n    cursor: pointer;\n    position: relative;\n`;\n\nexport const StyledLine = styled.div<{ active: number | null }>`\n    width: ${props => (props.active ? `${props.active}%` : 0)};\n    max-width: 100%;\n    position: absolute;\n    top: -1px;\n    bottom: -1px;\n    border-radius: 12px;\n    border: solid 1px ${props => props.theme.Colors.darkSkyBlue};\n    background: ${props => props.theme.Colors.darkSkyBlueTwo15Full};\n`;\n","import React from 'react';\n\nimport { Variables } from '../../../theme/variables';\nimport { secondsToMinFormatted } from '../../../helpers/functions/convert-time';\nimport PlayCircle from '../../icons/PlayCircle';\nimport PauseCircle from '../../icons/PauseCircle';\nimport StopCircle from '../../icons/StopCircle';\nimport {\n    AudioDuration,\n    StyledActionButtons,\n    StyledActionPanel,\n    StyledAudioLine,\n    StyledAudioPlayer,\n    StyledAudioWrapper,\n    StyledButton,\n    StyledLine,\n} from './style';\nimport { AudioPlayerInterface } from './type';\n\nexport class AudioPlayer extends React.Component<AudioPlayerInterface> {\n    state = {\n        duration: this.props.duration,\n        current: null,\n        isPaused: false,\n    };\n\n    _isMounted = false;\n    audio: any;\n    customAudioUiPlayer: any;\n    slider: any;\n    currentTimeInterval: any;\n\n    handlePlay = () => {\n        this.audio.play();\n    };\n\n    handlePause = () => {\n        this.audio.pause();\n    };\n\n    handleStop = () => {\n        if (!this._isMounted) return;\n        this.audio.currentTime = 0;\n        this.slider.value = 0;\n        this.setState({\n            current: 0,\n        });\n        this.audio.pause();\n        if (this.props.onStop) {\n            this.props.onStop();\n        }\n    };\n\n    handleRewind = (time?: number) => {\n        if (!time) return;\n        this.audio.currentTime = time;\n        this.audio.play();\n    };\n\n    getCurrentAudioClickDuration = (e: any) => {\n        if (!this.audio) return;\n        const clickPosition = e.clientX - this.getSliderLeftPosition();\n        const totalWidth = this.getSliderTotalWidth();\n        const clickFraction = (clickPosition / totalWidth).toFixed(2);\n\n        return this.state.duration * Number(clickFraction);\n    };\n\n    getSliderLeftPosition = () => {\n        return this.customAudioUiPlayer.getBoundingClientRect().left;\n    };\n\n    getSliderTotalWidth = () => {\n        return this.customAudioUiPlayer.getBoundingClientRect().width;\n    };\n\n    componentDidMount = () => {\n        this._isMounted = true;\n\n        this.slider.value = 0;\n        this.currentTimeInterval = null;\n        if (this.props.autoPlay) {\n            this.audio.play();\n        }\n        this.audio.onplay = () => {\n            this.currentTimeInterval = setInterval(() => {\n                if (this.audio) {\n                    this.slider.value = this.audio.currentTime;\n                    this.setState({\n                        current:\n                            (this.audio.currentTime * 100) /\n                            this.state.duration,\n                    });\n                }\n            }, 500);\n            this.setState({ isPaused: false });\n        };\n\n        this.audio.onpause = () => {\n            if (!this._isMounted) return;\n            this.setState({ isPaused: true });\n            clearInterval(this.currentTimeInterval);\n        }\n\n        this.audio.onended = () => {\n            this.setState({\n                current: 100,\n                isPaused: true,\n            });\n            if (this.props.goNext) {\n                this.props.goNext();\n            }\n            clearInterval(this.currentTimeInterval);\n        };\n\n        this.slider.onchange = (e: any) => {\n            clearInterval(this.currentTimeInterval);\n            this.audio.currentTime = e.target.value;\n        };\n    };\n\n    componentWillUnmount() {\n        this._isMounted = false;\n    }\n\n    render() {\n        const src = this.props.audio;\n\n        return (\n            <StyledAudioPlayer\n                color={\n                    this.props.color\n                        ? this.props.color\n                        : Variables.Colors.softBlue\n                }\n            >\n                <audio\n                    ref={audio => {\n                        this.audio = audio;\n                    }}\n                    src={src}\n                />\n                <StyledAudioWrapper>\n                    <StyledAudioLine\n                        ref={customAudioPlayer => {\n                            this.customAudioUiPlayer = customAudioPlayer;\n                        }}\n                        onClick={e =>\n                            this.handleRewind(\n                                this.getCurrentAudioClickDuration(e)\n                            )\n                        }\n                    >\n                        <StyledLine\n                            ref={slider => {\n                                this.slider = slider;\n                            }}\n                            active={this.state.current}\n                        />\n                    </StyledAudioLine>\n                </StyledAudioWrapper>\n                <StyledActionPanel>\n                    <StyledActionButtons>\n                        {\n                            this.state.isPaused\n                                ? <StyledButton onClick={this.handlePlay}><PlayCircle /></StyledButton>\n                                : <StyledButton onClick={this.handlePause}><PauseCircle /></StyledButton>\n                        }\n                        <StyledButton onClick={this.handleStop}><StopCircle /></StyledButton>\n                    </StyledActionButtons>\n                    <AudioDuration>\n                        {secondsToMinFormatted(\n                            this.audio && this.audio.currentTime\n                        )}\n                    </AudioDuration>\n                </StyledActionPanel>\n            </StyledAudioPlayer>\n        );\n    }\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Generate = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 13 12\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <path d=\"M6.625 0v12h-1V0h1zM8.5 1.688V10.5h-1V1.687h1zm-5.625 0V10.5h-1V1.687h1zM4.75 2.813v6.485h-1V2.812h1zm5.625 1.312v3.75h-1v-3.75h1zm1.875.375v3h-1v-3h1zM1 4.5v3H0v-3h1z\" />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Generate;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Record = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 12 12\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <circle\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    cx=\"30\"\n                    cy=\"116\"\n                    r=\"6\"\n                    transform=\"translate(-24 -110)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Record;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Play = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 7\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"currentColor\" fillRule=\"evenodd\">\n                    <path d=\"M12.5 7h-9C1.567 7 0 5.433 0 3.5S1.567 0 3.5 0 7 1.567 7 3.5c0 .98-.406 1.865-1.056 2.5h4.112C9.406 5.365 9 4.48 9 3.5 9 1.567 10.567 0 12.5 0S16 1.567 16 3.5 14.433 7 12.5 7zM6 3.5C6 2.119 4.88 1 3.5 1S1 2.119 1 3.5C1 4.88 2.12 6 3.5 6S6 4.88 6 3.5zM12.5 1C11.12 1 10 2.12 10 3.5 10 4.881 11.12 6 12.5 6 13.881 6 15 4.881 15 3.5S13.881 1 12.5 1z\" />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Play;\n","export const DEFAULT_CUSTOMER_VOICE_ID = 'EXAVITQu4vr4xnSDxMaL';\nexport const DEFAULT_CUSTOMER_VOICE_STABILITY = 0.4;\nexport const DEFAULT_CUSTOMER_VOICE_SIMILARITY = 0.65;\n\nexport const DEFAULT_REP_VOICE_ID = 'flq6f7yk4E4fJM5XTYuZ';\nexport const DEFAULT_REP_VOICE_STABILITY = 0.4;\nexport const DEFAULT_REP_VOICE_SIMILARITY = 0.65;","import { TextToSpeechSettings, TextToSpeechSettingsByRoles } from '../../constants/interfaces/CompanyVoiceSettings';\nimport {\n    DEFAULT_CUSTOMER_VOICE_ID,\n    DEFAULT_CUSTOMER_VOICE_SIMILARITY,\n    DEFAULT_CUSTOMER_VOICE_STABILITY,\n    DEFAULT_REP_VOICE_ID,\n    DEFAULT_REP_VOICE_SIMILARITY,\n    DEFAULT_REP_VOICE_STABILITY,\n} from './constants';\n\nexport const getTextToSpeechSettingsOrDefault = (settings?: TextToSpeechSettings[]): TextToSpeechSettingsByRoles => {\n    const customer = settings?.find(item => item.role === 'customer') ?? {\n        role: 'customer',\n        voiceId: DEFAULT_CUSTOMER_VOICE_ID,\n        stability: DEFAULT_CUSTOMER_VOICE_STABILITY,\n        similarityBoost: DEFAULT_CUSTOMER_VOICE_SIMILARITY,\n    } as TextToSpeechSettings;\n    const representative = settings?.find(item => item.role === 'representative') ?? {\n        role: 'representative',\n        voiceId: DEFAULT_REP_VOICE_ID,\n        stability: DEFAULT_REP_VOICE_STABILITY,\n        similarityBoost: DEFAULT_REP_VOICE_SIMILARITY,\n    } as TextToSpeechSettings;\n    return { customer, representative };\n}","import { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../../../../../constants/interfaces/ScriptLine';\nimport styled from 'styled-components';\nimport { Dispatch } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../../UserProfile/store/reducers';\nimport { UserProfile } from '../../../../../../../../constants/interfaces/User';\nimport {\n    useDeleteScriptLineService,\n    useModifyScriptTextService,\n    useUploadScenarioAudioService,\n} from '../../../../../store/services';\nimport {\n    useClearVoiceService,\n    useTextToSpeechService,\n} from '../../../../../../../../features/textToSpeech/store/services';\nimport { useVoiceGenerationState } from '../../../../../../../../features/textToSpeech/store/states';\nimport { findItem } from '../../../../../../../../tools/ramda';\nimport { getCompanyState } from '../../../../../../../CompanySettings/store/reducers';\nimport { CompanyInterface } from '../../../../../../../../constants/interfaces/Company';\nimport { CompanyVoiceSettings } from '../../../../../../../../constants/interfaces/CompanyVoiceSettings';\nimport {\n    AudioInterface,\n    getAudioState,\n} from '../../../../../../../../features/player/store/reducers';\nimport {\n    useGoNextService,\n    usePlayAudioService,\n    useResetAudioService,\n    useStartAudioRecordingService,\n    useStopAudioRecordingService,\n    useStopAudioService,\n} from '../../../../../../../../features/player/store/services';\nimport { useCompanyVoiceSettingsState } from '../../../../../../../CompanySettings/store/states';\nimport ScriptItemTextarea from '../ScriptItemTextArea/ScriptItemTextArea';\nimport { Button } from '../../../../../../../../ui/components/Button';\nimport {\n    Comment,\n    CommentBody,\n    CommentDescription,\n    CommentTitle,\n    CommentTools,\n} from '../../../../../../../../ui/components/Comment';\nimport AudioRecorder from '../../../../../../../../ui/components/AudioRecorder/AudioRecorder';\nimport { AudioPlayer } from '../../../../../../../../ui/components/AudioPlayer/AudioPlayer';\nimport Generate from '../../../../../../../../ui/icons/Generate';\nimport Record from '../../../../../../../../ui/icons/Record';\nimport Play from '../../../../../../../../ui/icons/Play';\nimport { useShowConfirmModalDialog } from '../../../../../../../../ui/components/ModalDialogs/store/actions';\nimport { getTextToSpeechSettingsOrDefault } from '../../../../../../../../features/textToSpeech/helpers';\n\nconst StyledScriptItem = styled.div`\n    width: 100%;\n`;\n\nconst StyledButton = styled(Button)`\n    margin-right: 8px;\n    font-size: 11px;\n    font-weight: 600;\n`;\n\nconst StyledScriptAction = styled.div`\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    width: 100%;\n`;\n\nconst StyledAudioSection = styled.div`\n    display: flex;\n    flex-wrap: wrap;\n`;\n\nconst StyledTextarea = styled(ScriptItemTextarea)`\n    color: ${props => props.theme.Colors.blackTwo};\n`;\n\nconst DisabledArea = styled.div`\n    position: absolute;\n    height: 100%;\n    background: transparent;\n    width: 100%;\n`;\n\nconst ScriptItem: FC<{\n    script: ScriptLine;\n    handleScriptLineDelete: any;\n    handleScriptTextModify: (\n        value: string,\n        id: number | string\n    ) => void;\n    handleUploadAudio: (\n        file: any,\n        associatedEntityId: number | string,\n        filename?: string\n    ) => any;\n    profile?: UserProfile;\n    company: CompanyInterface;\n    player: AudioInterface;\n    handlePlayAudio: (scriptLineId: number | string) => void;\n    handleStopAudio: (scriptLineId: number | string) => void;\n    handleStartRecording: (scriptLineId: number | string) => void;\n    handleStopRecording: () => void;\n    handleGoNext: () => void;\n    handleResetPlaylist: () => void;\n    disabled: boolean;\n    editable: boolean;\n    dispatch: Dispatch;\n    voiceSettings?: CompanyVoiceSettings[];\n}> = ({\n    script,\n    handleScriptLineDelete,\n    handleScriptTextModify,\n    handleUploadAudio,\n    editable,\n    player,\n    handlePlayAudio,\n    handleStopAudio,\n    handleGoNext,\n    handleResetPlaylist,\n    handleStartRecording,\n    handleStopRecording,\n    voiceSettings,\n}) => {\n    const textToSpeech = useTextToSpeechService();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const clearAudio = useClearVoiceService();\n    const voice = useVoiceGenerationState().scenarios;\n    const generatingAudio = voice && voice.generating;\n    const loadingAudio = !!(\n        voice &&\n        voice.data &&\n        findItem(voice.data, 'id', script.id)\n    );\n    const voiceData =\n        voice &&\n        voice.data &&\n        findItem(voice.data, 'id', script.id) &&\n        findItem(voice.data, 'id', script.id).voice;\n\n    const [record, setRecord] = useState({ state: false, open: false });\n    const [save, setSave] = useState(false);\n    const [audio, setAudio] = useState<any>({});\n    const disabled =\n        (!!player.recording && player.recording !== script.id) ||\n        generatingAudio;\n    const isRepSpeaker = script.speaker === ScriptLineSpeaker.REP;\n\n    useEffect(() => {\n        return () => {\n            handleClickAway();\n        };\n        // eslint-disable-next-line\n    }, []);\n\n    useEffect(() => {\n        if (save) {\n            if (audio) {\n                handleUploadAudio(audio, script.id).then(\n                    (result: string) => {\n                        if (generatingAudio) {\n                            clearAudio({\n                                feature: 'scenarios',\n                                itemId: script.id,\n                            });\n                        }\n                    }\n                );\n            }\n        }\n        // eslint-disable-next-line\n    }, [audio]);\n\n    const startRecording = (): void => {\n        handleResetPlaylist();\n        setTimeout(() => {\n            handleStartRecording(script.id);\n            setRecord({ open: true, state: true });\n        }, 100);\n    };\n\n    const generateAudio = () => {\n        const settingsOrDefault = getTextToSpeechSettingsOrDefault(voiceSettings);\n        const settings = script.speaker === ScriptLineSpeaker.CUSTOMER\n            ? settingsOrDefault.customer\n            : settingsOrDefault.representative;\n\n        handleResetPlaylist();\n        textToSpeech(\n            script.text,\n            settings,\n            { feature: 'scenarios', itemId: script.id }\n        );\n    };\n\n    useEffect(() => {\n        if (voiceData) {\n            setSave(true);\n            setAudio(voiceData);\n        }\n    }, [voiceData]);\n\n    const saveRecording = (): void => {\n        setSave(true);\n        setRecord({ ...record, state: false });\n    };\n\n    const handleClickAway = (): void => {\n        setSave(false);\n        setRecord({ ...record, state: false });\n    };\n\n    const handleStop = (audio: any) => {\n        setAudio(audio.blob);\n        handleStopRecording();\n        setRecord({ state: false, open: false });\n    };\n\n    const startPlayingAudio = (): void => {\n        handleResetPlaylist();\n        handlePlayAudio(script.id);\n    };\n\n    const myRef = useRef<any>(null);\n\n    const onHandleGoNext = () => {\n        if (player.status === 'playlist' && myRef.current) {\n            myRef.current.scrollIntoView({\n                behavior: 'smooth',\n                block: 'start',\n            });\n            handleGoNext();\n        }\n    };\n\n    const handleRemoveItem = useCallback(() => {\n        showConfirmationModalDialog({\n            modalTitle: 'Are You Sure?',\n            description: 'Are you sure you want to delete the line?',\n            onConfirm: () => handleScriptLineDelete(script.id),\n        });\n    }, [handleScriptLineDelete, script.id, showConfirmationModalDialog]);\n\n    return (\n        <>\n        <StyledScriptItem ref={myRef}>\n            <Comment\n                reverse={isRepSpeaker}\n                disabled={disabled || generatingAudio}\n            >\n                <CommentBody>\n                    <CommentDescription\n                        hideRemoveIcon={!editable}\n                        onDelete={handleRemoveItem}\n                        dataTest={\n                            isRepSpeaker\n                                ? 'delete-scenario-rep-line'\n                                : 'delete-scenario-customer-line'\n                        }\n                    >\n                        {(!editable || disabled) && <DisabledArea />}\n                        <CommentTitle>\n                            {isRepSpeaker ? 'Rep' : 'Customer'}\n                        </CommentTitle>\n                        <StyledTextarea\n                            handleValueChange={(value: string) =>\n                                handleScriptTextModify(value, script.id)\n                            }\n                            scriptLineId={script.id}\n                            scriptLineKeywords={script.keywords}\n                            value={script.text}\n                            autoFocus={!script.text}\n                            viewMode={!editable || disabled}\n                            recording={\n                                !!player.recording &&\n                                player.recording === script.id\n                            }\n                            placeholder={\n                                isRepSpeaker\n                                    ? 'Write representative’s line here'\n                                    : 'Write customer’s line here'\n                            }\n                            dataTest={\n                                isRepSpeaker\n                                    ? 'scenario-rep-line-input'\n                                    : 'scenario-customer-line-input'\n                            }\n                        />\n                    </CommentDescription>\n                    <CommentTools>\n                        {!record.open && player.current !== script.id && (\n                            <StyledScriptAction>\n                                <StyledAudioSection>\n                                    {editable && (\n                                        <StyledButton\n                                            label=\"Record Audio\"\n                                            action={startRecording}\n                                            iconRender={<Record />}\n                                            color=\"warning\"\n                                            variant=\"transparent\"\n                                            buttonSize={12}\n                                            width={'90px'}\n                                            dataTest={\n                                                isRepSpeaker\n                                                    ? 'record-scenario-rep-line-audio'\n                                                    : 'record-scenario-customer-line-audio'\n                                            }\n                                        />\n                                    )}\n                                    {editable && script.text.length > 0 && (\n                                        <StyledButton\n                                            label=\"Generate Audio\"\n                                            iconRender={<Generate />}\n                                            action={generateAudio}\n                                            variant=\"transparent\"\n                                            loading={loadingAudio}\n                                            buttonSize={14}\n                                            dataTest={\n                                                isRepSpeaker\n                                                    ? 'generate-scenario-rep-line-audio'\n                                                    : 'generate-scenario-customer-line-audio'\n                                            }\n                                        />\n                                    )}\n                                    {script.audioUrl && (\n                                        <StyledButton\n                                            label=\"Play\"\n                                            iconRender={<Play />}\n                                            action={startPlayingAudio}\n                                            variant=\"transparent\"\n                                            buttonSize={14}\n                                            width={'40px'}\n                                            dataTest={\n                                                isRepSpeaker\n                                                    ? 'play-scenario-rep-line'\n                                                    : 'play-scenario-customer-line'\n                                            }\n                                        />\n                                    )}\n                                </StyledAudioSection>\n                            </StyledScriptAction>\n                        )}\n                        {record.open && (\n                            <AudioRecorder\n                                record={record.state}\n                                onClickAway={handleClickAway}\n                                onStop={handleStop}\n                                onSave={saveRecording}\n                            />\n                        )}\n                        {player.current === script.id && (\n                            <AudioPlayer\n                                audio={script.audioUrl}\n                                duration={\n                                    script.duration ? script.duration : 10\n                                }\n                                onStop={() => handleStopAudio(script.id)}\n                                autoPlay={true}\n                                goNext={onHandleGoNext}\n                            />\n                        )}\n                    </CommentTools>\n                </CommentBody>\n            </Comment>\n        </StyledScriptItem>\n        </>\n    );\n};\n\nexport const ScriptItemContainer: FC<{\n    script: ScriptLine;\n    disabled: boolean;\n    editable: boolean;\n}> = ({ script, disabled, editable }) => {\n    const dispatch = useDispatch();\n\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n    const player = useSelector(getAudioState);\n\n    const resetPlaylist = useResetAudioService();\n    const goNext = useGoNextService();\n    const playAudio = usePlayAudioService();\n    const stopAudio = useStopAudioService();\n    const startRecording = useStartAudioRecordingService();\n    const stopRecording = useStopAudioRecordingService();\n\n    const deleteScriptLine = useDeleteScriptLineService();\n    const modifyScriptText = useModifyScriptTextService();\n\n    const uploadScenarioAudio = useUploadScenarioAudioService();\n    const voiceSettings = useCompanyVoiceSettingsState();\n\n    return (\n        <ScriptItem\n            script={script}\n            handleScriptLineDelete={deleteScriptLine}\n            handleScriptTextModify={modifyScriptText}\n            handleUploadAudio={uploadScenarioAudio}\n            profile={profile}\n            company={company}\n            player={player}\n            handlePlayAudio={playAudio}\n            handleStopAudio={stopAudio}\n            handleStartRecording={startRecording}\n            handleStopRecording={stopRecording}\n            handleGoNext={goNext}\n            handleResetPlaylist={resetPlaylist}\n            voiceSettings={voiceSettings.data}\n            disabled={disabled}\n            editable={editable}\n            dispatch={dispatch}\n        />\n    );\n};\n\nexport default ScriptItemContainer;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Drag = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 11 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\">\n                        <g>\n                            <g transform=\"translate(-1368 -472) translate(1368 472) translate(6.4)\">\n                                <circle cx=\"1.6\" cy=\"1.6\" r=\"1.6\" />\n                                <circle cx=\"1.6\" cy=\"8\" r=\"1.6\" />\n                                <circle cx=\"1.6\" cy=\"14.4\" r=\"1.6\" />\n                            </g>\n                            <g transform=\"translate(-1368 -472) translate(1368 472)\">\n                                <circle cx=\"1.6\" cy=\"1.6\" r=\"1.6\" />\n                                <circle cx=\"1.6\" cy=\"8\" r=\"1.6\" />\n                                <circle cx=\"1.6\" cy=\"14.4\" r=\"1.6\" />\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Drag;\n","import React, { FC, useContext, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../../../../../constants/interfaces/ScriptLine';\nimport ScriptItem from '../ScriptItem/ScriptItem';\nimport {\n    DragDropContext,\n    Draggable,\n    Droppable,\n    DropResult,\n} from 'react-beautiful-dnd';\nimport { useUpdateScriptLineService } from '../../../../../store/services';\nimport { useSelector } from 'react-redux';\nimport {\n    AudioInterface,\n    getAudioState,\n} from '../../../../../../../../features/player/store/reducers';\nimport {\n    EditModeContext,\n    ScenarioContainerContext,\n} from '../../../../../NewScenario';\nimport { EditModeValues } from '../../../../../../../../constants/enums/EditModeValues';\nimport Drag from '../../../../../../../../ui/icons/Drag';\n\n\nconst StyledScriptLineContent = styled.div`\n    display: flex;\n    flex-direction: column;\n`;\n\nconst StyledDroppableContainer = styled.div<{ isDraggingOver: boolean }>``;\n\nconst StyledScriptHandle = styled.div<{ reverse?: boolean; hidden?: boolean }>`\n    color: #b1c0cb;\n    display: flex;\n    flex-shrink: 0;\n    width: 11px;\n    align-items: center;\n    height: 30px;\n    margin-left: ${props => (props.reverse ? 29 : 8)}px;\n    margin-right: ${props => (props.reverse ? 8 : 29)}px;\n    visibility: ${props => (props.hidden ? 'hidden' : 'visible')};\n`;\n\nconst StyledDraggableItem = styled.div<{ reverse?: boolean }>`\n    display: flex;\n    flex-direction: ${props => (props.reverse ? 'row' : 'row-reverse')};\n    margin-bottom: 16px;\n`;\n\nconst ScriptLineContent: FC<{\n    script: Array<ScriptLine>;\n    player?: AudioInterface;\n    handleScriptLineUpdate: (value: any) => void;\n}> = ({ script, player, handleScriptLineUpdate }) => {\n    const [scriptLines, setScriptLines] = useState(script);\n    const parentRef = useContext(ScenarioContainerContext);\n    const edit = useContext(EditModeContext);\n\n    useEffect(() => {\n        parentRef && parentRef.current.scrollTo(0, 0);\n    }, [parentRef]);\n\n    useEffect(() => {\n        setScriptLines(script);\n    }, [script, setScriptLines]);\n\n    const Reorder = (startIndex: number, endIndex: number) => {\n        const result = Array.from(scriptLines);\n        const [removed] = result.splice(startIndex, 1);\n        result.splice(endIndex, 0, removed);\n        setScriptLines(result);\n        handleScriptLineUpdate(result);\n    };\n\n    const onDragEnd = (result: DropResult) => {\n        if (!result.destination) {\n            return;\n        }\n        Reorder(result.source.index, result.destination.index);\n    };\n\n    return (\n        <StyledScriptLineContent>\n            <DragDropContext onDragEnd={onDragEnd}>\n                <Droppable droppableId={`scenario-drop-list`}>\n                    {(provided: any, snapshot) => (\n                        <StyledDroppableContainer\n                            ref={provided.innerRef}\n                            isDraggingOver={snapshot.isDraggingOver}\n                        >\n                            {scriptLines.map((item: ScriptLine, index) => {\n                                let disabled = false;\n                                if (\n                                    player &&\n                                    player.recording &&\n                                    player.recording !== item.id\n                                ) {\n                                    disabled = true;\n                                }\n                                return (\n                                    <Draggable\n                                        key={`draggable-item_${item.id}`}\n                                        draggableId={item.id.toString()}\n                                        index={index}\n                                    >\n                                        {(provided, snapshot) => (\n                                            <StyledDraggableItem\n                                                ref={provided.innerRef}\n                                                {...provided.draggableProps}\n                                                reverse={\n                                                    item.speaker ===\n                                                    ScriptLineSpeaker.REP\n                                                }\n                                            >\n                                                <StyledScriptHandle\n                                                    className=\"handle\"\n                                                    reverse={\n                                                        item.speaker ===\n                                                        ScriptLineSpeaker.REP\n                                                    }\n                                                    hidden={\n                                                        edit.mode ===\n                                                        EditModeValues.VIEW\n                                                    }\n                                                    {...provided.dragHandleProps}\n                                                    data-test={\n                                                        item.speaker === ScriptLineSpeaker.REP\n                                                            ? 'scenario-rep-line-drag-handle'\n                                                            : 'scenario-customer-line-drag-handle'\n                                                    }\n                                                >\n                                                    <Drag />\n                                                </StyledScriptHandle>\n                                                <ScriptItem\n                                                    key={item.id}\n                                                    script={item}\n                                                    disabled={disabled}\n                                                    editable={\n                                                        edit.mode ===\n                                                        EditModeValues.EDIT\n                                                    }\n                                                />\n                                            </StyledDraggableItem>\n                                        )}\n                                    </Draggable>\n                                );\n                            })}\n                            {provided.placeholder}\n                        </StyledDroppableContainer>\n                    )}\n                </Droppable>\n            </DragDropContext>\n        </StyledScriptLineContent>\n    );\n};\n\nexport const ScriptLineContentContainer: FC<{\n    script: ScriptLine[];\n}> = ({ script }) => {\n    const player = useSelector(getAudioState);\n    const updateScriptLine = useUpdateScriptLineService();\n\n    return (\n        <ScriptLineContent\n            script={script}\n            player={player}\n            handleScriptLineUpdate={updateScriptLine}\n        />\n    );\n};\n\nexport default ScriptLineContentContainer;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Stop = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"-2 0 24 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <path d=\"M0 0h20v20H0z\" />\n                    <path\n                        fill=\"currentColor\"\n                        fillRule=\"evenodd\"\n                        d=\"M7 13h6V7H7v6zm3-13C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n                    />\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Stop;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Phone = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 12 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <g>\n                                <path\n                                    d=\"M247 28h-6c-1.656 0-3-1.343-3-3V15c0-1.657 1.344-3 3-3h6c1.657 0 3 1.343 3 3v10c0 1.657-1.343 3-3 3zm2-13c0-1.103-.897-2-2-2h-6c-1.103 0-2 .897-2 2v10c0 1.103.897 2 2 2h6c1.103 0 2-.897 2-2V15zm-3.5-.002h-3c-.276 0-.5-.223-.5-.5 0-.275.224-.5.5-.5h3c.276 0 .5.225.5.5 0 .277-.224.5-.5.5zm-1.5 9c.552 0 1 .449 1 1 0 .553-.448 1-1 1s-1-.447-1-1c0-.551.448-1 1-1z\"\n                                    transform=\"translate(-1382 -324) translate(504 103) translate(640 209)\"\n                                />\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Phone;\n","import { useState, useCallback, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { ScriptLine } from '../../../constants/interfaces/ScriptLine';\nimport { useCompanyVoiceSettingsState } from '../../../pages/CompanySettings/store/states';\nimport { showModalDialog, useHideModalDialog } from '../../../ui/components/ModalDialogs/store/actions';\nimport { ChunkRequestActionInterface } from '../../../services/ChunkRequestService/hooks/types';\nimport { TextToSpeechChunkRequestParameters } from './types';\nimport { GeneralBulkActionModalInterface } from '../../../ui/components/ModalDialogs/types';\nimport { useChunkRequestsService } from '../../../services/ChunkRequestService/hooks';\nimport { getTextToSpeechSettingsOrDefault } from '../helpers';\nimport { useTextToSpeechForScriptLine } from './helpers';\n\n/**\n * @function useTextToSpeechBulkActionService\n * @description Custom hook to generate speech for script lines with chunk service\n * @param { ScriptLine[] } lines\n * @param { string } featureName\n * @param { Function } onSuccess\n * @param { Function } onError\n * @returns { CallableFunction }\n */\nexport function useTextToSpeechBulkActionService(\n    lines: ScriptLine[],\n    featureName: string,\n    onSuccess?: () => void,\n    onError?: () => void\n) {\n    const dispatch = useDispatch();\n    const voiceSettings = useCompanyVoiceSettingsState().data;\n    const textToSpeechForScriptLine = useTextToSpeechForScriptLine();\n    const hideModalDialog = useHideModalDialog();\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<TextToSpeechChunkRequestParameters>[] =\n        [\n            {\n                actionName: 'TEXT_TO_SPEECH_ACTION',\n                actionFunction: textToSpeechForScriptLine,\n                actionFunctionOptions: {\n                    parameters: {\n                        lines,\n                        index: lines.length,\n                        featureName,\n                        settings: getTextToSpeechSettingsOrDefault(voiceSettings),\n                    },\n                    fieldName: 'index',\n                },\n                itemPerChunk: 1,\n            },\n        ];\n\n    /**\n     * @function handleSuccess\n     * @returns { void }\n     */\n    const handleSuccess = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n\n            onSuccess?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccess]);\n\n    /**\n     * @function handleFailed\n     * @returns { void }\n     */\n    const handleFailed = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: 'AI Voice Processing',\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n\n            isRunning && setIsRunning(false);\n\n            onError?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onError]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccess,\n        handleFailed\n    );\n\n    /**\n     * @function handleStop\n     * @returns { void }\n     */\n    const handleStop = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n            onSuccess?.();\n        });\n    }, [hideModalDialog, onSuccess, setIsStopped]);\n\n    /**\n     * @function handleStart\n     * @returns { void }\n     */\n    const handleStart = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'AI Voice Processing',\n                        onStopBulkActionService:\n                            handleStop,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStop,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStart();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n}","import { useCallback } from 'react';\nimport { useTextToSpeechService } from '../store/services';\nimport { ScriptLine, ScriptLineSpeaker } from '../../../constants/interfaces/ScriptLine';\nimport { TextToSpeechSettingsByRoles } from '../../../constants/interfaces/CompanyVoiceSettings';\n\n/**\n * @function useTextToSpeechForScriptLine\n * @description Custom hook to generate speech for a separate script line by its index\n * @returns { CallableFunction }\n */\nexport const useTextToSpeechForScriptLine = () => {\n    const textToSpeech = useTextToSpeechService();\n\n    /**\n     * @function callback\n     * @param { ScriptLine[] } lines\n     * @param { number } index\n     * @param { string } featureName\n     * @param { TextToSpeechSettingsByRoles } settings\n     * @returns { Promise }\n     */\n    return useCallback((\n        lines: ScriptLine[],\n        index: number,\n        featureName: string,\n        settings: TextToSpeechSettingsByRoles\n    ) => {\n        const line = lines[index];\n        if (!line?.text?.length) return Promise.resolve();\n\n        const lineSettings = line.speaker === ScriptLineSpeaker.CUSTOMER\n            ? settings.customer\n            : settings.representative;\n        return textToSpeech(\n            line.text,\n            lineSettings,\n            { feature: featureName, itemId: line.id }\n        );\n    }, [textToSpeech]);\n};","import React, { FC, useContext } from 'react';\nimport styled from 'styled-components';\n\nimport {\n    AudioInterface,\n    getAudioState,\n} from '../../../../../../../features/player/store/reducers';\nimport { useSelector } from 'react-redux';\nimport { EditModeContext, PlayAudioContext } from '../../../../NewScenario';\nimport { useResetAudioService } from '../../../../../../../features/player/store/services';\nimport { ScriptLine } from '../../../../../../../constants/interfaces/ScriptLine';\nimport {\n    Scenario,\n    ScenarioStatuses,\n} from '../../../../../../../constants/interfaces/Scenario';\nimport { useVoiceGenerationState } from '../../../../../../../features/textToSpeech/store/states';\nimport { getScenarioState } from '../../../../store/reducers';\nimport { EditModeValues } from '../../../../../../../constants/enums/EditModeValues';\nimport { useHistory } from '../../../../../../../tools/router';\nimport ROUTES from '../../../../../../../routes/routes';\nimport { Button } from '../../../../../../../ui/components/Button';\nimport Generate from '../../../../../../../ui/icons/Generate';\nimport Play from '../../../../../../../ui/icons/Play';\nimport Stop from '../../../../../../../ui/icons/Stop';\nimport Phone from '../../../../../../../ui/icons/Phone';\nimport { isProductionEnvironment } from '../../../../../../../helpers/functions/general';\nimport { useTextToSpeechBulkActionService } from '../../../../../../../features/textToSpeech/BulkActionService';\n\nconst StyledScriptHeaderActions = styled.div`\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n`;\n\nconst StyledButton = styled(Button)<{ width?: string }>`\n    min-width: 100px;\n    ${props => (!!props.width ? `width: ${props.width}` : '')};\n`;\n\nconst ScriptHeaderActions: FC<{\n    scenario: Scenario;\n    player: AudioInterface;\n    stopPlaylist: () => void;\n    generating?: boolean;\n    playAudio?: () => void;\n    textToSpeech: () => void;\n}> = ({\n    player,\n    stopPlaylist,\n    scenario,\n    generating,\n    playAudio,\n    textToSpeech\n}) => {\n    const edit = useContext(EditModeContext);\n    const history = useHistory();\n\n    const handlePreviewScenario = () => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.TRAINING.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    };\n\n    return (\n        <>\n            <StyledScriptHeaderActions>\n                <StyledButton\n                    label=\"Generate for All\"\n                    iconRender={<Generate />}\n                    disabled={\n                        (!!scenario.script &&\n                            (scenario.script.lines.filter(\n                                (line: ScriptLine) => line.text\n                            ).length === 0 ||\n                                player.status !== 'off' ||\n                                !!player.recording ||\n                                generating)) ||\n                        edit.mode === EditModeValues.VIEW\n                    }\n                    width={'136px'}\n                    height=\"40px\"\n                    action={textToSpeech}\n                    dataTest='scenario-generate-for-all'\n                />\n                {player.status !== 'playlist' ? (\n                    <StyledButton\n                        label=\"Play All\"\n                        iconRender={<Play />}\n                        disabled={\n                            !!scenario.script &&\n                            (scenario.script.lines.filter(\n                                (line: ScriptLine) => line.audioUrl\n                            ).length === 0 ||\n                                !!player.recording ||\n                                generating)\n                        }\n                        action={playAudio}\n                        height=\"40px\"\n                        dataTest='scenario-play-all'\n                    />\n                ) : (\n                    <StyledButton\n                        label=\"Stop\"\n                        iconRender={<Stop />}\n                        color=\"warning\"\n                        action={stopPlaylist}\n                        height=\"40px\"\n                        dataTest='scenario-stop'\n                    />\n                )}\n                {!isProductionEnvironment() && (\n                    <StyledButton\n                        label=\"Preview\"\n                        iconRender={<Phone />}\n                        disabled={scenario.status !== ScenarioStatuses.ACTIVE}\n                        height=\"40px\"\n                        action={handlePreviewScenario}\n                        dataTest='scenario-preview'\n                    />\n                )}\n            </StyledScriptHeaderActions>\n        </>\n    );\n};\n\nexport const ScriptHeaderActionsContainer: FC<{\n}> = () => {\n    const player = useSelector(getAudioState);\n    const scenario = useSelector(getScenarioState).info;\n    const resetPlaylist = useResetAudioService();\n    const voice = useVoiceGenerationState().scenarios;\n    const generating = voice && voice.generating;\n    const playAudio = useContext(PlayAudioContext);\n    const textToSpeechBulkAction = useTextToSpeechBulkActionService(\n        scenario.script.lines,\n        'scenarios'\n    );\n\n    return (\n        <ScriptHeaderActions\n            player={player}\n            stopPlaylist={resetPlaylist}\n            scenario={scenario}\n            generating={generating}\n            playAudio={playAudio}\n            textToSpeech={textToSpeechBulkAction}\n        />\n    );\n};\n\nexport default ScriptHeaderActionsContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport secondsToMin from '../../../../../../../helpers/functions/convert-time';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../../../../constants/interfaces/ScriptLine';\nimport ScriptHeaderActionsContainer from './ScriptHeaderActions';\n\nconst StyledScenarioScriptHeader = styled.div`\n    display: flex;\n    flex-direction: column;\n    margin-bottom: 24px;\n    padding-top: 24px;\n`;\n\nconst BuilderActions = styled.div`\n    height: 96px;\n    display: flex;\n    background: ${props => props.theme.Colors.dark};\n    border-radius: 4px;\n    margin-bottom: 16px;\n`;\n\nconst BuilderConfigs = styled.div`\n    flex: 2;\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n    background: ${props => props.theme.Colors.darkTwo};\n    display: flex;\n    align-items: center;\n    justify-content: space-evenly;\n`;\n\nconst ConfigItem = styled.div`\n    text-align: center;\n`;\n\nconst BuilderDuration = styled.div`\n    flex: 1;\n    text-align: center;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst StyledValue = styled.div`\n    font-size: 20px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.white};\n    margin: 0;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    margin-bottom: 8px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst ScenarioScriptHeader: FC<{\n    totalDuration?: number | null;\n    customerLineCount?: number;\n    repLineCount?: number;\n}> = ({ totalDuration, customerLineCount, repLineCount }) => {\n    return (\n        <StyledScenarioScriptHeader>\n            <BuilderActions>\n                <BuilderConfigs>\n                    <ConfigItem>\n                        <StyledDescription data-test='scenario-customer-lines-text'>Customer Lines</StyledDescription>\n                        <StyledValue data-test='scenario-customer-lines-value'>{customerLineCount}</StyledValue>\n                    </ConfigItem>\n                    <ConfigItem>\n                        <StyledDescription data-test='scenario-rep-lines-text'>Rep Lines</StyledDescription>\n                        <StyledValue data-test='scenario-rep-lines-value'>{repLineCount}</StyledValue>\n                    </ConfigItem>\n                </BuilderConfigs>\n                <BuilderDuration>\n                    <StyledDescription data-test='scenario-total-duration-text'>Total Duration</StyledDescription>\n                    <StyledValue data-test='scenario-total-duration-value'>{secondsToMin(totalDuration)}</StyledValue>\n                </BuilderDuration>\n            </BuilderActions>\n            <ScriptHeaderActionsContainer/>\n        </StyledScenarioScriptHeader>\n    );\n};\n\nexport const ScenarioScriptHeaderContainer: FC<{\n    totalDuration?: number | null;\n    scriptLines?: ScriptLine[];\n}> = ({ totalDuration, scriptLines }) => {\n    const customerLineCount =\n        scriptLines &&\n        scriptLines.filter(\n            (line: ScriptLine) => line.speaker === ScriptLineSpeaker.CUSTOMER\n        ).length;\n    const repLineCount =\n        scriptLines &&\n        scriptLines.filter(\n            (line: ScriptLine) => line.speaker === ScriptLineSpeaker.REP\n        ).length;\n\n    return (\n        <ScenarioScriptHeader\n            totalDuration={totalDuration}\n            customerLineCount={customerLineCount}\n            repLineCount={repLineCount}\n        />\n    );\n};\n\nexport default ScenarioScriptHeaderContainer;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Customer = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 19 20\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M18.194 20H.564c-.977-1.499-.581-4.498.397-5.497.465-.476 3.956-1.376 5.627-1.786-1.765-1.37-2.84-3.912-2.84-6.337C3.748 2.857 4.77 0 9.377 0s5.63 2.857 5.63 6.38c0 2.417-1.07 4.953-2.826 6.326 1.633.407 5.176 1.332 5.627 1.797.97.999 1.356 3.998.386 5.497zm-1.19-4.443c-.64-.344-3.399-1.118-5.75-1.682v-1.98c1.567-1.067 2.496-3.385 2.496-5.491 0-2.85-.729-5.159-4.373-5.159s-4.373 2.31-4.373 5.159c0 2.108.93 4.427 2.5 5.493v1.996c-2.364.556-5.108 1.317-5.74 1.663-.408.515-.764 2.165-.511 3.196h16.251c.252-1.031-.097-2.676-.5-3.195z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Customer;\n","import React, { FC, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport ScriptAction from './components/ScriptAction/ScriptAction';\nimport ScriptLineContent from './components/ScriptLineContent/ScriptLineContent';\nimport { Scenario } from '../../../../../../constants/interfaces/Scenario';\nimport { getProfileState } from '../../../../../UserProfile/store/reducers';\nimport { getCompanyState } from '../../../../../CompanySettings/store/reducers';\nimport { useGetCompanyService } from '../../../../../CompanySettings/store/services';\nimport { useSelector } from 'react-redux';\nimport ScenarioScriptHeader from './ScenarioScriptHeader/ScenarioScriptHeader';\nimport { EditModeContext } from '../../../NewScenario';\nimport { EditModeValues } from '../../../../../../constants/enums/EditModeValues';\nimport AvatarPlaceholder from '../../../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport Customer from '../../../../../../ui/icons/Customer';\nimport { CompanyInterface } from '../../../../../../constants/interfaces/Company';\n\nexport interface RightPanelInterface {\n    scenario: Scenario;\n    createScriptLine: any;\n    company?: CompanyInterface;\n}\n\nconst StyledScenarioScript = styled.div`\n    flex: 3;\n    display: flex;\n    flex-direction: column;\n    min-width: 400px;\n`;\n\nconst UserAvatarPanel = styled.div`\n    display: flex;\n    justify-content: space-between;\n    margin-bottom: 16px;\n`;\n\nconst StyledCustomer = styled.div<{ reverse?: boolean }>`\n    display: flex;\n    align-items: center;\n    flex-direction: ${props => (props.reverse ? 'row-reverse' : 'row')};\n`;\n\nconst ImageContainer = styled.div`\n    height: 40px;\n    width: 40px;\n    border-radius: 4px;\n    overflow: hidden;\n    background: ${props => props.theme.Colors.white};\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledImage = styled.img`\n    height: 100%;\n    width: 100%;\n`;\n\nconst StyledCustomerImage = styled(Customer)`\n    height: 20px;\n    width: 20px;\n`;\n\nconst StyledText = styled.p`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    margin: 0 8px;\n`;\n\nconst ScriptsBody = styled.div``;\n\nconst PlaceholderWrapper = styled.div`\n    width: 100%;\n    height: 100%;\n    border-radius: 4px;\n    align-items: center;\n    justify-content: center;\n    display: flex;\n`;\n\nconst ScenarioScripts = ({\n    scenario,\n    createScriptLine,\n    company,\n}: RightPanelInterface) => {\n    const edit = useContext(EditModeContext);\n    let logo;\n    if (company?.logoUrl) {\n        logo = <StyledImage src={company.logoUrl} alt=\"company\" data-test=\"scenario-rep-logo\" />;\n    } else if (company) {\n        logo = (\n            <AvatarPlaceholder\n                profile={company}\n                size={'sm'}\n                customWrapper={PlaceholderWrapper}\n                dataTest=\"scenario-rep-logo\"\n            />\n        );\n    }\n    return (\n        <StyledScenarioScript>\n            <ScenarioScriptHeader\n                totalDuration={\n                    scenario && scenario.script && scenario.script.totalDuration\n                }\n                scriptLines={scenario.script && scenario.script.lines}\n            />\n            <ScriptsBody>\n                <UserAvatarPanel>\n                    <StyledCustomer>\n                        <ImageContainer data-test=\"scenario-customer-avatar\">\n                            <StyledCustomerImage />\n                        </ImageContainer>\n                        <StyledText data-test=\"scenario-customer-label\">Customer</StyledText>\n                    </StyledCustomer>\n                    <StyledCustomer reverse>\n                        <ImageContainer>{logo}</ImageContainer>\n                        <StyledText data-test=\"scenario-rep-label\">Rep</StyledText>\n                    </StyledCustomer>\n                </UserAvatarPanel>\n                {scenario.script && (\n                    <ScriptLineContent script={scenario.script.lines} />\n                )}\n                {edit.mode === EditModeValues.EDIT && (\n                    <ScriptAction handleAdd={createScriptLine} />\n                )}\n            </ScriptsBody>\n        </StyledScenarioScript>\n    );\n};\n\nexport const ScenarioScriptsContainer: FC<{\n    scenario: Scenario;\n    createScriptLine: any;\n}> = ({ scenario, createScriptLine }) => {\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n    const getCompany = useGetCompanyService();\n\n    useEffect(() => {\n        if (!company?.id && profile?.companyId) {\n            getCompany(profile.companyId);\n        }\n    }, [company?.id, getCompany, profile?.companyId]);\n\n    return (\n        <ScenarioScripts\n            scenario={scenario}\n            createScriptLine={createScriptLine}\n            company={company}\n        />\n    );\n};\n\nexport default ScenarioScriptsContainer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport ScenarioInfo from './ScenarioInfo/ScenarioInfo';\nimport ScenarioScripts from './ScenarioScript/ScenarioScripts';\nimport { Scenario } from '../../../../../constants/interfaces/Scenario';\n\nexport interface CustomBodyInterface {\n    scenario: Scenario;\n    createScriptLine: any;\n}\n\nconst CustomBodyContainerWrapper = styled.div`\n    display: flex;\n`;\n\nconst CustomBodyContainer = styled.div`\n    display: flex;\n    flex: 1;\n    flex-wrap: wrap;\n`;\n\nconst CustomBody = ({ scenario, createScriptLine }: CustomBodyInterface) => {\n    return (\n        <CustomBodyContainerWrapper>\n            <CustomBodyContainer>\n                <ScenarioInfo scenario={scenario} />\n                <ScenarioScripts\n                    scenario={scenario}\n                    createScriptLine={createScriptLine}\n                />\n            </CustomBodyContainer>\n        </CustomBodyContainerWrapper>\n    );\n};\n\nexport default CustomBody;\n","import { FC, useState } from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../theme/variables';\nimport { useLocalStorage } from '../../../tools/localStorage/LocalStorage';\nimport { Button } from '../../../ui/components/Button';\nimport Checkbox from '../../../ui/components/Checkbox';\nimport DialogWrapper from '../../../ui/components/DialogWrapper/DialogWrapper';\n\nconst StyledTitle = styled.div`\n    font-size: 20px;\n    font-weight: bold;\n    width: 100%;\n    color: var(--ps-black-main);\n`;\n\nconst StyledContent = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledDescription = styled.div<{ marginTop?: string }>`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n    ${props => !!props.marginTop && `margin-top: ${props.marginTop};`}\n    align-self: flex-start;\n`;\n\nconst StyledActions = styled.div`\n    width: 100%;\n    display: flex;\n    justify-content: flex-end;\n    margin-top: 37px;\n`;\n\nconst StyledButtonContainer = styled.div`\n    margin-left: 16px;\n`;\n\nconst StyledCheckboxContainer = styled.div`\n    display: flex;\n    align-items: center;\n    margin-top: 11px;\n    margin-bottom: 5px;\n    align-self: flex-start;\n`;\n\nconst StyledReminderTitle = styled.div`\n    font-size: 13px;\n    font-weight: 500;\n    margin-left: 11px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const StatusModalConfirmation: FC<{\n    onCancel(): void;\n    onConfirm(): void;\n    title?: string;\n    confirmButtonText?: string;\n    cancelButtonText?: string;\n    displayDontShow?: boolean;\n    dontShowHandle?: string;\n    danger?: boolean;\n}> = ({\n    onCancel,\n    onConfirm,\n    title,\n    confirmButtonText,\n    cancelButtonText,\n    children,\n    displayDontShow,\n    dontShowHandle,\n    danger,\n}) => {\n    const [notShow, setNotShow] = useState(false);\n    const localStorage = useLocalStorage();\n\n    const handleConfirm = () => {\n        if (notShow) {\n            localStorage.set(\n                `${dontShowHandle ? dontShowHandle : 'default'}_dont_show`,\n                'true'\n            );\n        }\n        onConfirm();\n    };\n\n    if (\n        localStorage.get(\n            `${dontShowHandle ? dontShowHandle : 'default'}_dont_show`\n        )\n    ) {\n        onConfirm();\n        return null;\n    }\n\n    return (\n        <DialogWrapper\n            customization={{ width: 400, padding: '22px 32px' }}\n        >\n            <StyledTitle data-test=\"confirmation-modal-title\">\n                {title || 'Are You Sure?'}\n            </StyledTitle>\n            <StyledContent>\n                <StyledDescription\n                    marginTop=\"15px\"\n                    data-test=\"confirmation-modal-description\"\n                >\n                    {children}\n                </StyledDescription>\n                {displayDontShow && (\n                    <StyledCheckboxContainer>\n                        <Checkbox\n                            size={16}\n                            checked={notShow}\n                            border={Variables.Colors.coral}\n                            checkedBackground={Variables.Colors.coral}\n                            handleChange={() => setNotShow(!notShow)}\n                            dataTest=\"confirmation-modal-checkbox\"\n                        />\n                        <StyledReminderTitle data-test=\"confirmation-modal-checkbox-label\">\n                            Don’t show this message again\n                        </StyledReminderTitle>\n                    </StyledCheckboxContainer>\n                )}\n                <StyledActions>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={onCancel}\n                        color=\"warning\"\n                        variant=\"inverse\"\n                        dataTest=\"confirmation-modal-cancel\"\n                    >\n                        Go Back\n                    </Button>\n                    <StyledButtonContainer>\n                        <Button\n                            width=\"128px\"\n                            height=\"40px\"\n                            color=\"warning\"\n                            action={() => !!handleConfirm && handleConfirm()}\n                            dataTest=\"confirmation-modal-confirm\"\n                        >\n                            {confirmButtonText || 'Confirm'}\n                        </Button>\n                    </StyledButtonContainer>\n                </StyledActions>\n            </StyledContent>\n        </DialogWrapper>\n    );\n};\n","import { EditModeValues } from \"../../constants/enums/EditModeValues\";\n\nexport const buildPageTitle = (\n    entityName: 'Challenge' | 'Scenario' | 'Practis Set',\n    editMode: EditModeValues,\n    isNew: boolean) => {\n        return isNew\n            ? `Add New ${entityName}`\n            : editMode === EditModeValues.EDIT\n                ? `Edit ${entityName}`\n                : `View ${entityName}`;\n}","import { FC, useContext, useState } from 'react';\r\nimport { EditModeContext, LoadingSaveContext } from '../../NewScenario';\r\nimport styled from 'styled-components';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n    Scenario,\r\n    ScenarioStatuses,\r\n    Status,\r\n} from '../../../../../constants/interfaces/Scenario';\r\nimport { useVoiceGenerationState } from '../../../../../features/textToSpeech/store/states';\r\nimport {\r\n    AudioInterface,\r\n    getAudioState,\r\n} from '../../../../../features/player/store/reducers';\r\nimport {\r\n    useModifyScenarioService,\r\n    useRestoreScenarioFromTempActionService,\r\n    useStoreScenarioTempCopyService,\r\n} from '../../store/services';\r\nimport { useResetAudioService } from '../../../../../features/player/store/services';\r\nimport { StatusModalConfirmation } from '../../../StatusModalConfirmation/StatusModalConfirmation';\r\nimport { buildPageTitle } from '../../../../../helpers/functions/page-title-helpers';\r\nimport { EditModeValues } from '../../../../../constants/enums/EditModeValues';\r\nimport { formatDate } from '../../../../../helpers/functions/date-convert';\r\nimport { Button } from '../../../../../ui/components/Button';\r\nimport { TableDivider } from '../../../../../ui/components/table-wrapper/table-divider';\r\nimport { useHandleRestoreArchivedScenario } from '../../services';\r\n\r\nconst StyledCustomWrapper = styled.div``;\r\n\r\nconst StyledCustomHeader = styled.div`\r\n    padding-left: 16px;\r\n    display: flex;\r\n    align-items: center;\r\n    flex-wrap: wrap;\r\n    height: 103px;\r\n`;\r\n\r\nconst StyledHeaderInput = styled.div`\r\n    flex: 1;\r\n    min-width: 150px;\r\n    margin-right: 16px;\r\n`;\r\n\r\nconst HeaderTitle = styled.div`\r\n    font-size: 20px;\r\n    font-weight: 800;\r\n    color: ${props => props.theme.Colors.black};\r\n`;\r\n\r\nconst StyledHeaderActions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 10px 0;\r\n    flex-wrap: wrap;\r\n`;\r\n\r\nconst StyledHeaderActionItemsWrapper = styled.div`\r\n    display: flex;\r\n`;\r\n\r\nconst StyledHeaderActionItems = styled.div`\r\n    margin-left: 16px;\r\n`;\r\n\r\nconst PublishedDate = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n    margin-right: 16px;\r\n`;\r\n\r\nconst EDIT_MODAL_INFO = {\r\n    id: 'scenario_edit_message',\r\n    message: 'Are you sure you want to edit Scenario.',\r\n    buttonText: 'Proceed',\r\n    cancelButtonText: 'Go Back',\r\n    title: 'Are you sure?',\r\n    notShow: false,\r\n    danger: true,\r\n};\r\n\r\nconst CANCEL_EDIT_MODAL_INFO = {\r\n    id: 'scenario_cancel_edit_message',\r\n    message: 'Do you want to discard changes?',\r\n    buttonText: 'Discard',\r\n    cancelButtonText: 'No',\r\n    title: 'Discard Changes?',\r\n    notShow: false,\r\n    danger: true,\r\n};\r\n\r\nconst MODAL_INFO = {\r\n    DELETED: {\r\n        message: 'Are you sure you want to delete?',\r\n        buttonText: 'Yes, Delete',\r\n        title: 'Delete Scenario',\r\n        notShow: false,\r\n        danger: false,\r\n    },\r\n    DRAFT: {\r\n        message: 'Are you sure you want to archive?',\r\n        buttonText: 'Yes, Archive',\r\n        title: 'Archive Scenario',\r\n        notShow: false,\r\n        danger: false,\r\n    },\r\n    ARCHIVED: {\r\n        message:\r\n            'Removing the active items will effectively RESET progress for related Practis Sets for all currently enrolled Trainees. They will receive a notification and will be asked to start again.',\r\n        buttonText: 'Yes, Archive',\r\n        title: 'Archive Scenario',\r\n        notShow: false,\r\n        danger: true,\r\n    },\r\n    ACTIVE: {\r\n        message: 'Are you sure you want to archive?',\r\n        buttonText: 'Yes, Archive',\r\n        title: 'Archive Scenario',\r\n        notShow: false,\r\n        danger: false,\r\n    },\r\n};\r\n\r\nconst EDIT_VIEW_STATUS = [ScenarioStatuses.ACTIVE];\r\n\r\nconst CustomHeader: FC<{\r\n    modifyScenario: (\r\n        value: any,\r\n        field: keyof Scenario,\r\n        silent?: boolean\r\n    ) => any;\r\n    storeScenarioTemp: () => void;\r\n    restoreScenarioFromTemp: () => void;\r\n    handleUpdateScenario: (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: Status,\r\n        keepModal?: boolean\r\n    ) => any;\r\n    stopPlaylist: () => void;\r\n    scenario: any;\r\n    modified?: boolean;\r\n    player: AudioInterface;\r\n    isViewMode?: boolean;\r\n}> = ({\r\n    scenario,\r\n    modifyScenario,\r\n    handleUpdateScenario,\r\n    player,\r\n    storeScenarioTemp,\r\n    restoreScenarioFromTemp,\r\n    modified,\r\n    isViewMode,\r\n}) => {\r\n    const handleRestoreArchivedScenario = useHandleRestoreArchivedScenario();\r\n    const voice = useVoiceGenerationState().scenarios;\r\n    const generating = voice && voice.generating;\r\n    const [publishModal, setPublishModal] = useState(false);\r\n    const [editModal, setEditModal] = useState(false);\r\n    const [cancelEditModal, setCancelEditModal] = useState(false);\r\n    const [saveState, setSaveState] = useState<Status>(ScenarioStatuses.ACTIVE);\r\n\r\n    const handleSaveWithModalAction = (status: ScenarioStatuses) => {\r\n        setSaveState(status);\r\n        setPublishModal(true);\r\n    };\r\n\r\n    const loadingSave = useContext(LoadingSaveContext);\r\n    const edit = useContext(EditModeContext);\r\n\r\n    const cancelEditing = () => {\r\n        if (modified) {\r\n            setCancelEditModal(true);\r\n        } else {\r\n            restoreScenarioFromTemp();\r\n            edit.action(EditModeValues.VIEW);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <StyledCustomWrapper>\r\n            {publishModal && (\r\n                <StatusModalConfirmation\r\n                    onCancel={() => {\r\n                        setPublishModal(false);\r\n                    }}\r\n                    onConfirm={() => {\r\n                        setPublishModal(false);\r\n                        handleUpdateScenario(null, saveState);\r\n                    }}\r\n                    title={MODAL_INFO[saveState].title}\r\n                    confirmButtonText={MODAL_INFO[saveState].buttonText}\r\n                    displayDontShow={MODAL_INFO[saveState].notShow}\r\n                    danger={MODAL_INFO[saveState].danger}\r\n                >\r\n                    {MODAL_INFO[saveState].message}\r\n                </StatusModalConfirmation>\r\n            )}\r\n            {editModal && (\r\n                <StatusModalConfirmation\r\n                    onCancel={() => {\r\n                        setEditModal(false);\r\n                    }}\r\n                    onConfirm={() => {\r\n                        setEditModal(false);\r\n                        storeScenarioTemp();\r\n                        edit.action(EditModeValues.EDIT);\r\n                    }}\r\n                    title={EDIT_MODAL_INFO.title}\r\n                    confirmButtonText={EDIT_MODAL_INFO.buttonText}\r\n                    cancelButtonText={EDIT_MODAL_INFO.cancelButtonText}\r\n                    displayDontShow={EDIT_MODAL_INFO.notShow}\r\n                    dontShowHandle={EDIT_MODAL_INFO.id}\r\n                    danger={EDIT_MODAL_INFO.danger}\r\n                >\r\n                    {EDIT_MODAL_INFO.message}\r\n                </StatusModalConfirmation>\r\n            )}\r\n            {cancelEditModal && (\r\n                <StatusModalConfirmation\r\n                    onCancel={() => {\r\n                        setCancelEditModal(false);\r\n                    }}\r\n                    onConfirm={() => {\r\n                        setCancelEditModal(false);\r\n                        restoreScenarioFromTemp();\r\n                        edit.action(EditModeValues.VIEW);\r\n                    }}\r\n                    title={CANCEL_EDIT_MODAL_INFO.title}\r\n                    confirmButtonText={CANCEL_EDIT_MODAL_INFO.buttonText}\r\n                    cancelButtonText={CANCEL_EDIT_MODAL_INFO.cancelButtonText}\r\n                    displayDontShow={CANCEL_EDIT_MODAL_INFO.notShow}\r\n                    dontShowHandle={CANCEL_EDIT_MODAL_INFO.id}\r\n                    danger={CANCEL_EDIT_MODAL_INFO.danger}\r\n                >\r\n                    {CANCEL_EDIT_MODAL_INFO.message}\r\n                </StatusModalConfirmation>\r\n            )}\r\n            <StyledCustomHeader>\r\n                <StyledHeaderInput>\r\n                    <HeaderTitle data-test=\"scenario-page-title\">\r\n                        {buildPageTitle('Scenario', edit.mode as EditModeValues, !scenario.id)}\r\n                    </HeaderTitle>\r\n                </StyledHeaderInput>\r\n                <StyledHeaderActions>\r\n                    <StyledHeaderActionItems>\r\n                        <PublishedDate>\r\n                            {scenario.status === ScenarioStatuses.ACTIVE &&\r\n                                edit.mode === EditModeValues.VIEW && (\r\n                                    <span data-test=\"scenario-publish-date\">\r\n                                        Published{' '}\r\n                                        {formatDate(scenario.updatedAt, true)}\r\n                                    </span>\r\n                                )}\r\n                            {scenario.status === ScenarioStatuses.ARCHIVED &&\r\n                                edit.mode === EditModeValues.VIEW && (\r\n                                    <span data-test=\"scenario-archive-date\">\r\n                                        Archived{' '}\r\n                                        {formatDate(scenario.updatedAt, true)}\r\n                                    </span>\r\n                                )}\r\n                            {scenario.status === ScenarioStatuses.DRAFT && (\r\n                                <span data-test=\"scenario-not-published-yet\">\r\n                                    Not Published Yet\r\n                                </span>\r\n                            )}\r\n                        </PublishedDate>\r\n                    </StyledHeaderActionItems>\r\n                    {EDIT_VIEW_STATUS.includes(scenario.status) ? (\r\n                        edit.mode === EditModeValues.VIEW ? (\r\n                            <StyledHeaderActionItemsWrapper>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        width=\"144px\"\r\n                                        height=\"40px\"\r\n                                        disabled={loadingSave || isViewMode}\r\n                                        action={() =>\r\n                                            handleSaveWithModalAction(\r\n                                                ScenarioStatuses.ARCHIVED\r\n                                            )\r\n                                        }\r\n                                        variant=\"inverse\"\r\n                                        dataTest=\"archive-scenario\"\r\n                                    >\r\n                                        Archive\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave || isViewMode}\r\n                                        action={() => setEditModal(true)}\r\n                                        dataTest=\"edit-scenario\"\r\n                                    >\r\n                                        Edit\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledHeaderActionItemsWrapper>\r\n                        ) : (\r\n                            <StyledHeaderActionItemsWrapper>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"144px\"\r\n                                        disabled={loadingSave}\r\n                                        action={() => cancelEditing()}\r\n                                        variant=\"inverse\"\r\n                                        dataTest=\"cancel-edit\"\r\n                                    >\r\n                                        Cancel\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave}\r\n                                        action={() =>\r\n                                            handleUpdateScenario(null)\r\n                                        }\r\n                                        dataTest=\"save-scenario-changes\"\r\n                                    >\r\n                                        Save\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledHeaderActionItemsWrapper>\r\n                        )\r\n                    ) : scenario.status === ScenarioStatuses.ARCHIVED ? (\r\n                        <StyledHeaderActionItemsWrapper>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"128px\"\r\n                                    disabled={loadingSave || isViewMode}\r\n                                    action={() =>\r\n                                        handleRestoreArchivedScenario(\r\n                                            scenario.id\r\n                                        )\r\n                                    }\r\n                                    dataTest=\"restore-scenario\"\r\n                                >\r\n                                    Restore\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                        </StyledHeaderActionItemsWrapper>\r\n                    ) : (\r\n                        <StyledHeaderActionItemsWrapper>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"144px\"\r\n                                    disabled={\r\n                                        player.status !== 'off' ||\r\n                                        !!player.recording ||\r\n                                        generating ||\r\n                                        loadingSave ||\r\n                                        isViewMode\r\n                                    }\r\n                                    action={() =>\r\n                                        handleUpdateScenario(\r\n                                            null,\r\n                                            ScenarioStatuses.DRAFT\r\n                                        )\r\n                                    }\r\n                                    variant=\"inverse\"\r\n                                    dataTest=\"save-scenario-as-draft\"\r\n                                >\r\n                                    Save as Draft\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"128px\"\r\n                                    disabled={\r\n                                        player.status !== 'off' ||\r\n                                        !!player.recording ||\r\n                                        generating ||\r\n                                        loadingSave ||\r\n                                        isViewMode\r\n                                    }\r\n                                    action={() =>\r\n                                        handleUpdateScenario(\r\n                                            null,\r\n                                            ScenarioStatuses.ACTIVE\r\n                                        )\r\n                                    }\r\n                                    dataTest=\"publish-scenario\"\r\n                                >\r\n                                    Publish\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                        </StyledHeaderActionItemsWrapper>\r\n                    )}\r\n                </StyledHeaderActions>\r\n            </StyledCustomHeader>\r\n            <TableDivider />\r\n        </StyledCustomWrapper>\r\n    );\r\n};\r\n\r\nexport const CustomHeaderContainer: FC<{\r\n    handleUpdateScenario: (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: Status,\r\n        keepModal?: boolean\r\n    ) => any;\r\n    scenario: Scenario;\r\n    modified?: boolean;\r\n    isViewMode?: boolean;\r\n}> = ({ handleUpdateScenario, scenario, modified, isViewMode }) => {\r\n    const player = useSelector(getAudioState);\r\n    const modifyScenario = useModifyScenarioService();\r\n    const resetPlaylist = useResetAudioService();\r\n    const storeScenarioTemp = useStoreScenarioTempCopyService();\r\n    const restoreScenarioFromTemp = useRestoreScenarioFromTempActionService();\r\n\r\n    return (\r\n        <CustomHeader\r\n            handleUpdateScenario={handleUpdateScenario}\r\n            scenario={scenario}\r\n            player={player}\r\n            modified={modified}\r\n            modifyScenario={modifyScenario}\r\n            storeScenarioTemp={storeScenarioTemp}\r\n            restoreScenarioFromTemp={restoreScenarioFromTemp}\r\n            stopPlaylist={resetPlaylist}\r\n            isViewMode={isViewMode}\r\n        />\r\n    );\r\n};\r\n\r\nexport default CustomHeaderContainer;","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { isEmpty } from 'lodash';\n\nimport { updateLibraryScenarioSuccess } from '../../../features/library/store/actions';\nimport {\n    CREATE_SCENARIO_ACTION,\n    UPDATE_SCENARIO_ACTION,\n    UPDATE_SCENARIO_STATUS_ACTION,\n} from '../../../features/library/services/LibraryBulkActionsService/constants';\nimport {\n    Scenario,\n    ScenarioStatuses,\n} from '../../../constants/interfaces/Scenario';\nimport { useHistory } from '../../../tools/router';\nimport ROUTES from '../../../routes/routes';\nimport { useUpdateScenarioStatusApi } from '../../../api';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { useModifyScenarioService } from './store/services';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { StatusItems } from './NewScenario';\n\n/**\n * @function useCreateEditScenarioSuccessCallback\n * @param { Function } setLoadingSave\n * @param { Record<string, unknown> | undefined } responses\n * @returns { void }\n */\nexport const useCreateEditScenarioSuccessCallback = () => {\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (\n            setLoadingSave: (isLoading: boolean) => void,\n            responses?: Record<string, unknown>\n        ) => {\n            setLoadingSave(false);\n\n            if (!isEmpty(responses)) {\n                const createScenarioResponse = responses![\n                    CREATE_SCENARIO_ACTION\n                ] as Scenario | undefined;\n\n                const editScenarioResponse = responses![\n                    UPDATE_SCENARIO_ACTION\n                ] as Scenario | undefined;\n\n                const updateScenarioResponse = responses![\n                    UPDATE_SCENARIO_STATUS_ACTION\n                ] as Scenario | undefined;\n                if (createScenarioResponse) {\n                    dispatch(\n                        updateLibraryScenarioSuccess(\n                            createScenarioResponse,\n                            'update'\n                        )\n                    );\n\n                    const currentStatus = !isEmpty(updateScenarioResponse)\n                        ? ScenarioStatuses.ACTIVE\n                        : ScenarioStatuses.DRAFT;\n\n                    const actionMessage = StatusItems.filter(\n                        (item: any) => item.value === currentStatus\n                    );\n                    showMessage(actionMessage[0].message, 'success');\n                } else if (editScenarioResponse) {\n                    dispatch(\n                        updateLibraryScenarioSuccess(\n                            editScenarioResponse,\n                            'update'\n                        )\n                    );\n                }\n            }\n\n            history.push(ROUTES.LIBRARY_SETTINGS.SCENARIOS.ALL);\n        },\n        [dispatch, history, showMessage]\n    );\n};\n\n/**\n * @function createEditScenarioFailedCallback\n * @param { Function } setIsLoading\n * @param { ErrorResult | undefined } error\n * @param { Record<string, unknown> | undefined } completedResponses\n * @returns { void }\n */\nexport const useCreateEditScenarioFailedCallback = () => {\n    const modifyScenario = useModifyScenarioService();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (\n            setLoadingSave: (isLoading: boolean) => void,\n            error?: ErrorResult,\n            completedResponses?: Record<string, unknown>\n        ) => {\n            if (!isEmpty(completedResponses)) {\n                const createScenarioResponse = completedResponses![\n                    CREATE_SCENARIO_ACTION\n                ] as Scenario | undefined;\n\n                const createdScenarioId = createScenarioResponse?.id;\n\n                // The bulk action failed in other steps\n                // but new scenario created\n                // in the next try it goes to\n                // edit scenario action.\n                if (createdScenarioId) {\n                    modifyScenario(createdScenarioId, 'id');\n                }\n            }\n\n            error?.message && showMessage(error.message, 'error');\n            setLoadingSave(false);\n        },\n        [modifyScenario, showMessage]\n    );\n};\n\n/**\n * @function useHandleArchiveScenario\n * @returns { Promise<void> }\n */\nexport const useHandleArchiveScenario = () => {\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const updateScenarioStatus = useUpdateScenarioStatusApi();\n\n    return useCallback(\n        (scenarioId: number) => {\n            updateScenarioStatus('archive', [scenarioId]).then(response => {\n                dispatch(updateLibraryScenarioSuccess(response, 'update'));\n\n                history.goBack();\n            });\n        },\n        [dispatch, history, updateScenarioStatus]\n    );\n};\n\n/**\n * @function useHandleRestoreArchivedScenario\n * @param { number } scenarioId\n * @returns { void }\n */\nexport const useHandleRestoreArchivedScenario = () => {\n    const dispatch = useDispatch();\n    const modifyScenario = useModifyScenarioService();\n    const updateScenarioStatus = useUpdateScenarioStatusApi();\n\n    return useCallback(\n        (scenarioId: number) => {\n            updateScenarioStatus('draft', [scenarioId]).then(\n                (response: Scenario) => {\n                    dispatch(updateLibraryScenarioSuccess(response, 'update'));\n                    modifyScenario(ScenarioStatuses.DRAFT, 'status', true);\n                }\n            );\n        },\n        [dispatch, modifyScenario, updateScenarioStatus]\n    );\n};","import { motion } from 'framer-motion';\nimport styled from 'styled-components';\n\nimport OutsideActionBox from '../../../../../OutsideActionBox/OutsideActionBox';\n\nexport const StyledSelectForm = styled.div<{\n    disabled?: boolean;\n    border?: boolean;\n    minWidth?: string;\n    height?: number;\n    error?: boolean;\n    isInput?: boolean;\n}>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: 4px;\n    min-width: 128px;\n    cursor: pointer;\n    height: ${props =>\n        props.height ? `${props.height}px` : !!props.isInput ? '100%' : '40px'};\n    width: 100%;\n    background: ${props =>\n        !!props.isInput\n            ? props.theme.Colors.white\n            : props.theme.Colors.whiteFive};\n    color: ${props => props.theme.Colors.black};\n    ${props =>\n        !props.isInput &&\n        `\n        box-shadow: inset 0 0 0 ${props.error ? '2px' : '-1px'}\n            ${props.theme.Colors.coral};\n        ${props.border && `border: 1px solid ${props.theme.Colors.cloudyBlue}`};\n        -webkit-appearance: none;\n    `}\n\n    &.is-disabled {\n        color: ${props => props.theme.Colors.cloudyBlue};\n        pointer-events: none;\n    }\n`;\n\nexport const SelectContainer = styled(OutsideActionBox)`\n    position: relative;\n    width: 100%;\n`;\n\nexport const IconHolder = styled.div<{\n    disabled?: boolean;\n}>`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    position: absolute;\n    right: 15px;\n    top: 0;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n`;\n\nexport const StyledButtonContainer = styled.div`\n    margin-top: 32px;\n`;\n\nexport const LabelsContainer = styled(motion.div)<{\n    displayOver?: boolean;\n    topMargin: number;\n    left?: string;\n    isInput?: boolean;\n}>`\n    padding: 24px;\n    min-width: 208px;\n    position: absolute;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    left: ${props =>\n        props.displayOver ? '16px' : !!props.left ? props.left : '0'};\n    right: ${props => (props.displayOver ? '16px' : '0')};\n    ${props =>\n        !!props.isInput\n            ? 'bottom: 55px;'\n            : `top: ${props.displayOver ? `-${props.topMargin}px` : '8px'}`};\n    border-radius: 8px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n`;\n\nexport const StyledLabelsList = styled.div``;\n\nexport const ScrollableLabelContainer = styled.div`\n    max-height: 312px;\n    overflow: auto;\n    overflow-y: scroll;\n`;\n\nexport const TitleContainer = styled.div`\n    margin-bottom: 15px;\n    font-size: 13px;\n    font-weight: 500;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n`;\n\nexport const SelectedPanel = styled.div`\n    display: flex;\n    justify-content: space-between;\n    height: 24px;\n    align-items: center;\n    margin-bottom: 8px;\n`;\n\nexport const SelectedLabelsStyle = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const ClearSelectedLabels = styled.div<{ disabled?: boolean }>`\n    font-size: 11px;\n    font-weight: 500;\n    cursor: pointer;\n    user-select: none;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.steelGrey\n            : props.theme.Colors.darkSkyBlue};\n    &:hover {\n        color: ${props => props.theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.windowsBlue};\n    }\n    ${props => props.disabled && 'pointer-events: none'}\n`;\n\nexport const StyledLabelListItemContainer = styled.div`\n    overflow: hidden;\n    white-space: nowrap;\n`;\n\nexport const ChildLabelsContainer = styled.div<{\n    expanded: boolean;\n}>`\n    display: ${props => (props.expanded ? 'block' : 'none')};\n    margin-left: 8px;\n`;\n\nexport const LabelItemActions = styled.div<{ menuOpen?: boolean }>`\n    display: flex;\n    user-select: none;\n    align-items: center;\n    height: 100%;\n    width: 30px;\n`;\n\nexport const LabelListItemNameContainer = styled.div`\n    flex: 1;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n`;\n\nexport const LabelListItemLabel = styled.label`\n    font-size: 13px;\n    padding: 0 4px;\n    cursor: pointer;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    height: 100%;\n    width: 100%;\n`;\n\nexport const ArrowContainer = styled.div`\n    width: 8px;\n    margin-right: 4px;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const CollapseArrow = styled.div`\n    height: 8px;\n    display: flex;\n`;\n\nexport const StyledTitleContainer = styled.div<{ disabled?: boolean }>`\n    display: flex;\n    align-items: center;\n    height: 100%;\n    overflow: hidden;\n    cursor: pointer;\n    flex: 1;\n    &:active {\n        opacity: 0.7;\n    }\n    ${props => props.disabled && 'pointer-events: none'}\n`;\n\nexport const StyledLabelListItem = styled.div<{\n    selected?: boolean;\n}>`\n    height: 32px;\n    color: ${props =>\n        props.selected\n            ? props.theme.Colors.black\n            : props.theme.Colors.steelGrey};\n    border-radius: 4px;\n    font-size: 13px;\n    align-items: center;\n    font-weight: 600;\n    display: flex;\n    ${LabelItemActions} {\n        display: flex;\n    }\n    ${ArrowContainer} ${StyledTitleContainer} {\n        color: ${props =>\n            props.selected\n                ? props.theme.Colors.black\n                : props.theme.Colors.steelGrey};\n    }\n    &:hover,\n    :hover ${ArrowContainer} ${StyledTitleContainer} {\n        background: ${props => props.theme.Colors.whiteTwo};\n        color: ${props => props.theme.Colors.black};\n    }\n`;\n\nexport const StyledEmptyLabels = styled.div`\n    display: flex;\n    padding-top: 8px;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const StyledEmptyLabelsContent = styled.div`\n    max-width: 140px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const NoLabelsIcon = styled.div`\n    width: 30px;\n    height: 40px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 16px;\n`;\n\nexport const NoLabelsTitle = styled.div`\n    font-weight: bold;\n    font-size: 13px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nexport const NoLabelsDescription = styled.div`\n    font-size: 11px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    width: 100%;\n    white-space: break-spaces;\n`;\n","import { FC, useState } from 'react';\nimport Checkbox from '../../../../../Checkbox';\nimport { Label } from '../../../../../../../constants/interfaces/Label';\nimport TriangleDown from '../../../../../../icons/TriangleDown';\nimport TriangleRight from '../../../../../../icons/TriangleRight';\nimport { Variables } from '../../../../../../../theme/variables';\nimport {\n    useSetAssignLabelsActionService,\n    useToggleCollapseAssignLabelFieldService,\n} from '../../../../../../../features/labels/store/services';\nimport { useLabelsState } from '../../../../../../../features/labels/store/states';\nimport { useHandleSelectLabels } from '../../../../../../../features/labels/tools';\nimport { listToTree } from '../../../../../../../helpers/functions/list-to-tree';\nimport { usePortableLabelsState } from '../../../../../../../features/portableLabels/store/states';\nimport {\n    ArrowContainer,\n    ChildLabelsContainer,\n    CollapseArrow,\n    LabelItemActions,\n    LabelListItemLabel,\n    LabelListItemNameContainer,\n    StyledLabelListItem,\n    StyledLabelListItemContainer,\n    StyledTitleContainer,\n} from './styles';\n\nexport const LabelsActionItem: FC<{\n    label: Label;\n    labelsCollapseState: number[];\n    onToggleLabelsCollapse(labelId: number): void;\n    openActions: boolean;\n    toggleOpenActions: (open: boolean) => void;\n    selectedLabels: number[];\n    setAssignLabelsAction(labelIds: number[]): void;\n    allLabels?: Label[];\n    dataTest?: string;\n}> = ({\n    label,\n    labelsCollapseState,\n    onToggleLabelsCollapse,\n    openActions,\n    selectedLabels,\n    setAssignLabelsAction,\n    allLabels,\n    dataTest\n}) => {\n    const isLabelSelected = selectedLabels.includes(label.id);\n    const isLabelPartiallySelected = selectedLabels.includes(-label.id);\n\n    const hasChildren = (label?: Label) => {\n        return label && label.children && label.children.length > 0;\n    };\n\n    const handleSelectLabels = useHandleSelectLabels();\n\n    const handleLabelSelection = () => {\n        const labelsTree = listToTree(allLabels);\n        setAssignLabelsAction(\n            handleSelectLabels(label, selectedLabels, labelsTree)\n        );\n    };\n\n    return (\n        <>\n            <StyledLabelListItemContainer data-test={dataTest}>\n                <StyledLabelListItem\n                    selected={isLabelSelected || isLabelPartiallySelected}\n                >\n                    <StyledTitleContainer\n                        onClick={() => onToggleLabelsCollapse(label.id)}\n                        disabled={!hasChildren(label)}\n                    >\n                        <ArrowContainer>\n                            {hasChildren(label) && (\n                                <CollapseArrow>\n                                    {labelsCollapseState.includes(label.id) ? (\n                                        <TriangleDown />\n                                    ) : (\n                                        <TriangleRight />\n                                    )}\n                                </CollapseArrow>\n                            )}\n                        </ArrowContainer>\n                        <LabelListItemNameContainer>\n                            <LabelListItemLabel data-test={dataTest && `${dataTest}-name`}>\n                                {label.name}\n                            </LabelListItemLabel>\n                        </LabelListItemNameContainer>\n                    </StyledTitleContainer>\n                    <LabelItemActions menuOpen={openActions}>\n                        <Checkbox\n                            checked={\n                                isLabelSelected || isLabelPartiallySelected\n                            }\n                            partial={isLabelPartiallySelected}\n                            handleChange={handleLabelSelection}\n                            size={12}\n                            border={Variables.Colors.cloudyBlue}\n                            dataTest={dataTest && `${dataTest}-checkbox`}\n                        />\n                    </LabelItemActions>\n                </StyledLabelListItem>\n            </StyledLabelListItemContainer>\n            {hasChildren(label) && (\n                <ChildLabelsContainer\n                    expanded={labelsCollapseState.includes(label.id)}\n                >\n                    {label.children!.map(childLabel => (\n                        <LabelsActionItemContainer\n                            key={childLabel.id}\n                            label={childLabel}\n                            dataTest={dataTest}\n                        />\n                    ))}\n                </ChildLabelsContainer>\n            )}\n        </>\n    );\n};\n\nconst LabelsActionItemContainer: FC<{\n    label: Label;\n    dataTest?: string;\n}> = ({ label, dataTest }) => {\n    const [open, setOpen] = useState(false);\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const onToggleCollapse = useToggleCollapseAssignLabelFieldService();\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n\n    return (\n        <LabelsActionItem\n            label={label}\n            openActions={open}\n            toggleOpenActions={setOpen}\n            selectedLabels={labels.assignedLabels}\n            allLabels={labelsList.data.items}\n            labelsCollapseState={labels.collapseAssignLabels}\n            onToggleLabelsCollapse={onToggleCollapse}\n            setAssignLabelsAction={setAssignLabelsAction}\n            dataTest={dataTest}\n        />\n    );\n};\n\nexport default LabelsActionItemContainer;\n","import { FC } from 'react';\n\nimport NoLabels from '../../../../../../icons/NoLabels';\nimport {\n    NoLabelsDescription,\n    NoLabelsIcon,\n    NoLabelsTitle,\n    StyledEmptyLabels,\n    StyledEmptyLabelsContent,\n} from './styles';\n\nconst NoAddedLabels: FC = () => {\n    return (\n        <StyledEmptyLabels>\n            <StyledEmptyLabelsContent>\n                <NoLabelsIcon>\n                    <NoLabels />\n                </NoLabelsIcon>\n                <NoLabelsTitle>No Labels</NoLabelsTitle>\n                <NoLabelsDescription>\n                    There are no labels created\n                </NoLabelsDescription>\n            </StyledEmptyLabelsContent>\n        </StyledEmptyLabels>\n    );\n};\n\nexport default NoAddedLabels;\n","import { FC, useState } from 'react';\nimport { ClickAwayListener } from '@material-ui/core';\n\nimport { PaginationResult } from '../../../../../../../constants/interfaces/PaginationResult';\nimport { Label } from '../../../../../../../constants/interfaces/Label';\nimport LabelsActionItem from './LabelsActionItem';\nimport { listToTree } from '../../../../../../../helpers/functions/list-to-tree';\nimport { Button } from '../../../../../Button';\nimport NoAddedLabels from './NoLabels';\nimport { SelectInput, SelectLabel } from '../../../../../SelectDropdown';\nimport UpArrow from '../../../../../../icons/UpArrow';\nimport DownArrow from '../../../../../../icons/DownArrow';\n\nimport { Variables } from '../../../../../../../theme/variables';\nimport {\n    ClearSelectedLabels,\n    IconHolder,\n    LabelsContainer,\n    ScrollableLabelContainer,\n    SelectContainer,\n    SelectedLabelsStyle,\n    SelectedPanel,\n    StyledButtonContainer,\n    StyledLabelsList,\n    StyledSelectForm,\n    TitleContainer,\n} from './styles';\nimport { ANIMATION_SCALE } from './constants';\n\nexport const LabelsAction: FC<{\n    labels?: PaginationResult<Label>;\n    disabled?: boolean;\n    onAssignLabelsSubmit?(): void;\n    title?: string;\n    minWidth?: string;\n    assignedLabelsCount?: number;\n    setAssignLabelsAction?(labelIds: number[]): void;\n    showSelectedPanel?: boolean;\n    buttonTitle?: string;\n    className?: string;\n    textAlignedLeft?: boolean;\n    containerLeftPosition?: string;\n    height?: number;\n    error?: boolean;\n    isInput?: boolean;\n    labelColor?: string;\n    dataTest?: string;\n}> = ({\n    labels,\n    disabled,\n    onAssignLabelsSubmit,\n    title,\n    minWidth,\n    assignedLabelsCount,\n    setAssignLabelsAction,\n    showSelectedPanel,\n    buttonTitle,\n    className,\n    containerLeftPosition,\n    height,\n    error,\n    isInput,\n    labelColor,\n    dataTest\n}) => {\n    const [show, setShow] = useState(false);\n\n    const isDropdownDisabled =\n        disabled || !labels || (!!labels && !labels.items.length);\n\n    return (\n        <ClickAwayListener onClickAway={() => setShow(false)}>\n            <StyledSelectForm\n                disabled={isDropdownDisabled}\n                border={show}\n                minWidth={minWidth}\n                className={[\n                    className,\n                    isDropdownDisabled ? 'is-disabled' : undefined,\n                ].join(' ')}\n                height={height}\n                error={error}\n                isInput={isInput}\n            >\n                <SelectLabel\n                    label={title || 'Assign Labels'}\n                    color={\n                        (!!isInput && !assignedLabelsCount) ||\n                        isDropdownDisabled\n                            ? Variables.Colors.cloudyBlue\n                            : !!labelColor\n                            ? labelColor\n                            : Variables.Colors.steelGrey\n                    }\n                    dataTest={dataTest && `${dataTest}-label`}\n                />\n                <IconHolder disabled={disabled}>\n                    {show && !disabled ? <UpArrow /> : <DownArrow />}\n                </IconHolder>\n                <SelectInput toggleSelect={() => setShow(!show)} dataTest={dataTest && `${dataTest}-button`} />\n                <SelectContainer open={show && !disabled}>\n                    <LabelsContainer\n                        initial={{ scale: 1 / ANIMATION_SCALE }}\n                        animate={{ scale: 1 }}\n                        exit={{ scale: 0 }}\n                        topMargin={5}\n                        left={containerLeftPosition}\n                        isInput={isInput}\n                    >\n                        {labels && labels.items.length < 1 ? (\n                            <NoAddedLabels />\n                        ) : (\n                            <StyledLabelsList>\n                                {!!showSelectedPanel && (\n                                    <>\n                                        <TitleContainer>\n                                            Assign Labels\n                                        </TitleContainer>\n                                        <SelectedPanel>\n                                            <SelectedLabelsStyle>\n                                                {assignedLabelsCount &&\n                                                assignedLabelsCount > 0\n                                                    ? `${assignedLabelsCount} ${\n                                                          assignedLabelsCount >\n                                                          1\n                                                              ? ' labels selected'\n                                                              : ' label selected'\n                                                      }`\n                                                    : 'No label selected'}\n                                            </SelectedLabelsStyle>\n                                            <ClearSelectedLabels\n                                                onClick={() => {\n                                                    setAssignLabelsAction &&\n                                                        setAssignLabelsAction(\n                                                            []\n                                                        );\n                                                }}\n                                                disabled={\n                                                    !(\n                                                        assignedLabelsCount &&\n                                                        assignedLabelsCount > 0\n                                                    )\n                                                }\n                                            >\n                                                Clear\n                                            </ClearSelectedLabels>\n                                        </SelectedPanel>\n                                    </>\n                                )}\n                                <ScrollableLabelContainer>\n                                    {labels &&\n                                        listToTree(labels.items || []).map(\n                                            label => {\n                                                return (\n                                                    <LabelsActionItem\n                                                        key={label.id}\n                                                        label={label}\n                                                        dataTest={`${dataTest}-item`}\n                                                    />\n                                                );\n                                            }\n                                        )}\n                                </ScrollableLabelContainer>\n                                <StyledButtonContainer>\n                                    <Button\n                                        width=\"160px\"\n                                        height=\"40px\"\n                                        action={() => {\n                                            setShow(false);\n                                            onAssignLabelsSubmit &&\n                                                onAssignLabelsSubmit();\n                                        }}\n                                        dataTest={`${dataTest}-save-changes`}\n                                    >\n                                        {buttonTitle || 'Save Changes'}\n                                    </Button>\n                                </StyledButtonContainer>\n                            </StyledLabelsList>\n                        )}\n                    </LabelsContainer>\n                </SelectContainer>\n            </StyledSelectForm>\n        </ClickAwayListener>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const DownloadPDF = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 13 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <path\n                            d=\"M12 15.999H1c-.552 0-1-.448-1-1v-10c0-.553.448-1 1-1h1.5v1h-1c-.276 0-.5.224-.5.5v9c0 .276.224.5.5.5h10c.276 0 .5-.224.5-.5v-9c0-.276-.224-.5-.5-.5h-1v-1H12c.552 0 1 .447 1 1v10c0 .552-.448 1-1 1zm-5.126-4.184c-.004.005-.003.012-.007.017-.006.006-.003.017-.01.024-.006.007-.017.004-.024.01-.083.075-.19.122-.309.128-.005 0-.01.004-.016.004h-.015c-.009 0-.016-.006-.025-.007-.1-.007-.185-.048-.26-.107-.02-.015-.047-.01-.065-.028-.013-.012-.008-.031-.019-.044-.003-.004-.008-.006-.012-.01l-2.47-2.47c-.19-.19-.19-.5 0-.69.192-.191.5-.191.691 0L6 10.308V.5c0-.276.224-.5.5-.5s.5.224.5.5v9.81l1.667-1.667c.19-.191.5-.191.69 0 .191.19.191.5 0 .69l-2.483 2.483z\"\n                            transform=\"translate(-1381 -132) translate(1381 132)\"\n                        />\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default DownloadPDF;\n","import React, { FC, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Scenario } from '../../../../../constants/interfaces/Scenario';\nimport { useModifyScenarioService } from '../../store/services';\nimport { EditModeContext } from '../../NewScenario';\nimport { EditModeValues } from '../../../../../constants/enums/EditModeValues';\nimport { useLabelsState } from '../../../../../features/labels/store/states';\nimport { useDownloadScenarioReportService } from '../../../../../features/library/store/services';\nimport { usePortableLabelsState } from '../../../../../features/portableLabels/store/states';\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { LabelsAction } from '../../../../../ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction';\nimport { Tooltip } from '../../../../../ui/components/Tooltip';\nimport DownloadPDF from '../../../../../ui/icons/DownloadPDF';\nimport { Input } from '../../../../../ui/components/input';\n\nconst Container = styled.div`\n    padding: 15px 0;\n    display: flex;\n`;\n\nconst TextInputContainer = styled.div`\n    flex: 1;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 128px;\n    margin-left: 8px;\n`;\n\nconst DownloadContainer = styled.div<{ disabled?: boolean }>`\n    width: 40px;\n    height: 40px;\n    margin-left: 8px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 4px;\n    background: ${props => props.theme.Colors.whiteFive};\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    &:active {\n        opacity: ${props => (props.disabled ? '1' : '0.7')};\n    }\n`;\n\nconst DownloadIcon = styled.div<{ disabled?: boolean }>`\n    width: 13px;\n    height: 16px;\n    display: flex;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n`;\n\nconst TitleTextInput = styled(Input)`\n    padding: 12px 16px;\n    font-size: 13px;\n    font-weight: normal;\n`;\n\nconst ActionPanel: FC<{ scenario: Scenario, titleError: boolean }> = ({ scenario, titleError }) => {\n    const modifyScenario = useModifyScenarioService();\n    const edit = useContext(EditModeContext);\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState().data;\n    const showMessage = useShowMessage();\n    const downloadScenario = useDownloadScenarioReportService();\n    const disableDownload = !scenario.id;\n\n    useEffect(() => {}, []);\n\n    const handleSaveScenarioLabels = () => {\n        modifyScenario(labels.assignedLabels, 'updatedLabels');\n        showMessage(`labels have been assigned to Scenario`, 'success');\n    };\n\n    const handleDownloadAsPDF = (id?: number) => {\n        if (!id) return;\n        downloadScenario(id);\n    };\n\n    return (\n        <Container>\n            <TextInputContainer>\n                <TitleTextInput\n                    placeholder=\"Scenario Title\"\n                    height={'40px'}\n                    maxLength={100}\n                    handleChange={(event: any) =>\n                        modifyScenario(event.target.value, 'title')\n                    }\n                    value={scenario.title}\n                    readOnly={edit.mode === EditModeValues.VIEW}\n                    error={titleError}\n                    dataTest='scenario-title'\n                />\n            </TextInputContainer>\n            <LabelsContainer>\n                <LabelsAction\n                    title={'Labels'}\n                    labels={labelsList}\n                    disabled={edit.mode === EditModeValues.VIEW}\n                    onAssignLabelsSubmit={handleSaveScenarioLabels}\n                    containerLeftPosition={'unset'}\n                    dataTest='scenario-labels'\n                />\n            </LabelsContainer>\n            <Tooltip label={'Download as PDF'} preset={'button-icon'}>\n                <DownloadContainer\n                    disabled={disableDownload}\n                    onClick={() => {\n                        handleDownloadAsPDF(scenario.id);\n                    }}\n                    data-test='download-scenario-as-pdf'\n                >\n                    <DownloadIcon disabled={disableDownload}>\n                        <DownloadPDF />\n                    </DownloadIcon>\n                </DownloadContainer>\n            </Tooltip>\n        </Container>\n    );\n};\n\nexport default ActionPanel;\n","import { useCallback } from 'react';\nimport { isEmpty, uniqBy } from 'lodash';\n\nimport {\n    useAssignChallengeLabelsApi,\n    useAssignLinesToChallengeApi,\n    useAssignLinesToScenarioApi,\n    useAssignPractisSetContentApi,\n    useAssignPractisSetLabelsApi,\n    useAssignScenarioLabelApi,\n    useCreateChallengeApi,\n    useCreateNewPractisSetApi,\n    useCreateScenarioApi,\n    useDeleteChallengeLabelsApi,\n    useDeletePractisSetLabelsApi,\n    useDeleteScenarioLabelApi,\n    useGetPractisSetContentApi,\n    useUpdateChallengeInfoApi,\n    useUpdateChallengeStatusApi,\n    useUpdatePractisSetApi,\n    useUpdatePractisSetStatusApi,\n    useUpdateScenarioApi,\n    useUpdateScenarioStatusApi,\n} from '../../../../api';\nimport { ChunkRequestActionInterface } from '../../../../services/ChunkRequestService/hooks/types';\nimport { LibraryEntityName } from '../../store/types';\nimport {\n    CreatePractisSetInfo,\n    CreateNewChallengeInfo,\n    CreateNewScenarioInfo,\n    NewPractisSetInfo,\n    EditPractisSetInfo,\n    EditScenarioInfo,\n    EditChallengeInfo,\n} from './types';\nimport {\n    PractisSetContent,\n    PractisSetStatuses,\n    PractisSetStatusType,\n} from '../../../../constants/interfaces/PractisSets';\nimport { ScriptLine } from '../../../../constants/interfaces/ScriptLine';\nimport { ScenarioLabel, ScenarioLine } from '../../../../api/scenarios/types';\nimport {\n    ChallengeLabel,\n    ChallengeLine,\n} from '../../../../api/challenges/types';\nimport {\n    NewPractisSetType,\n    PractisSetLabel,\n    UpdatePractisSetStatusType,\n} from '../../../../api/practis-set/types';\nimport {\n    ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION,\n    ASSIGN_LABELS_TO_CHALLENGE_ACTION,\n    ASSIGN_LABELS_TO_PRACTIS_SET_ACTION,\n    ASSIGN_LABELS_TO_SCENARIO_ACTION,\n    ASSIGN_LINES_TO_CHALLENGE_ACTION,\n    ASSIGN_LINES_TO_SCENARIO_ACTION,\n    CREATE_CHALLENGE_ACTION,\n    CREATE_PRACTIS_SET_ACTION,\n    CREATE_SCENARIO_ACTION,\n    DELETE_LABELS_FROM_CHALLENGE_ACTION,\n    DELETE_LABELS_FROM_PRACTIS_SET_ACTION,\n    DELETE_LABELS_FROM_SCENARIO_ACTION,\n    DELETE_LINES_FROM_SCENARIO_ACTION,\n    GET_PRACTIS_SET_CONTENT_ACTION,\n    UPDATE_CHALLENGE_ACTION,\n    UPDATE_CHALLENGE_STATUS_ACTION,\n    UPDATE_PRACTIS_SET_ACTION,\n    UPDATE_PRACTIS_SET_STATUS_ACTION,\n    UPDATE_SCENARIO_ACTION,\n    UPDATE_SCENARIO_STATUS_ACTION,\n} from './constants';\nimport {\n    ScenarioStatuses,\n    Status as ScenarioStatusType,\n} from '../../../../constants/interfaces/Scenario';\nimport {\n    ChallengeStatuses,\n    Status as ChallengeStatusType,\n} from '../../../../constants/interfaces/Challenge';\n\n/**\n * @dev Use this to assign labels to 'practisSet' | 'scenario' | 'challenge' entities.\n * @function useAssignLibraryEntityLabelsService\n * @returns { CallableFunction }\n */\nexport function useAssignLibraryEntityLabelsService() {\n    const assignPractisSetLabels = useAssignPractisSetLabelsApi();\n    const assignScenarioLabels = useAssignScenarioLabelApi();\n    const assignChallengeLabels = useAssignChallengeLabelsApi();\n\n    /**\n     * @function callback\n     * @param { { id: number, labels: number[] }[] } entityData\n     * @param { LibraryEntityName } entityName\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            labels: number[],\n            entityData: { id: number },\n            entityName: LibraryEntityName\n        ) => {\n            const assignLabelToLibraryActionList = {\n                practisSet: assignPractisSetLabels,\n                scenario: assignScenarioLabels,\n                challenge: assignChallengeLabels,\n            };\n\n            const entityId = entityData?.id;\n\n            if (entityId) {\n                const processedAssignedLabelIds = labels.map(labelId => ({\n                    [`${entityName}Id`]: entityId,\n                    labelId,\n                }));\n\n                if (!isEmpty(processedAssignedLabelIds)) {\n                    const assignLabelFromLibraryAction =\n                        assignLabelToLibraryActionList[entityName];\n\n                    return await assignLabelFromLibraryAction?.(\n                        processedAssignedLabelIds as any\n                    );\n                }\n            }\n        },\n        [assignChallengeLabels, assignPractisSetLabels, assignScenarioLabels]\n    );\n}\n\n/**\n * @dev Use this to update status of 'practisSet' | 'scenario' | 'challenge' entities.\n * @function useUpdateLibraryStatusService\n * @returns { CallableFunction }\n */\nexport const useUpdateLibraryStatusService = () => {\n    const updatePractisSetStatus = useUpdatePractisSetStatusApi();\n    const updateScenarioStatus = useUpdateScenarioStatusApi();\n    const updateChallengeStatus = useUpdateChallengeStatusApi();\n\n    /**\n     * @param { {id: number} } entityData\n     * @param { LibraryEntityName } entityName\n     * @param { PractisSetStatusType } currentStatus\n     */\n    return useCallback(\n        async (\n            entityData: { id: number },\n            entityName: LibraryEntityName,\n            currentStatus: PractisSetStatusType\n        ) => {\n            const updateLibraryStatusActionList = {\n                practisSet: updatePractisSetStatus,\n                scenario: updateScenarioStatus,\n                challenge: updateChallengeStatus,\n            };\n\n            const createdPractisSetId = entityData?.id;\n\n            if (createdPractisSetId) {\n                const updateLibraryStatusAction =\n                    updateLibraryStatusActionList[entityName];\n\n                return await updateLibraryStatusAction?.(\n                    currentStatus?.toLowerCase() as UpdatePractisSetStatusType,\n                    [createdPractisSetId]\n                );\n            }\n        },\n        [updatePractisSetStatus, updateScenarioStatus, updateChallengeStatus]\n    );\n};\n\n/**\n * @description Generates action list to pass to create practisSet service.\n * @function useGenerateCreatePractisSetActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateCreatePractisSetActionList() {\n    const createNewPractisSet = useCreateNewPractisSetApi();\n    const assignLibraryLabels = useAssignLibraryEntityLabelsService();\n    const assignPractisSetContent = useAssignPractisSetContentApi();\n    const updatePractisSetStatusService = useUpdateLibraryStatusService();\n\n    /**\n     * @function handleAssignPractisSetContent\n     * @param { { id: number } } entityData\n     * @returns { Promise<void> }\n     */\n    const handleAssignPractisSetContent = useCallback(\n        async (\n            practisSetContents: PractisSetContent[],\n            entityData: {\n                id: number;\n            }\n        ) => {\n            const { id: practisSetId = 0 } = entityData || {};\n\n            if (!isEmpty(practisSetContents)) {\n                const practisSetContent = practisSetContents?.map(item => ({\n                    contentType: item.type,\n                    scenarioId: item.scenario?.id ?? null,\n                    challengeId: item.challenge?.id ?? null,\n                    minRepsCount:\n                        item.type === 'CHALLENGE'\n                            ? null\n                            : item.minRepsCount ?? null,\n                    position: item.position ?? 0,\n                }));\n\n                return await assignPractisSetContent(\n                    practisSetId,\n                    practisSetContent as any\n                );\n            }\n        },\n        [assignPractisSetContent]\n    );\n\n    /**\n     * @function handleAssignLabelsToPractisSet\n     * @param { number[] } labelIds\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToPractisSet = useCallback(\n        (\n            labelIds: number[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLabelsToEntityServiceOptions = {\n                parameters: {\n                    labels: uniqBy(labelIds, id => id),\n                    entityId: [],\n                    entityName: 'practisSet',\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityId',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LABELS_TO_PRACTIS_SET_ACTION,\n                actionFunction: assignLibraryLabels,\n                actionFunctionOptions:\n                    assignLabelsToEntityServiceOptions as any,\n            });\n        },\n        [assignLibraryLabels]\n    );\n\n    /**\n     * @function handleAssignContentToPractisSet\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignContentToPractisSet = useCallback(\n        (\n            practisSetContents: PractisSetContent[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignPractisSetContentOptions = {\n                parameters: {\n                    practisSetContents,\n                    entityData: [],\n                },\n                fieldName: 'practisSetContents',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION,\n                actionFunction: handleAssignPractisSetContent,\n                actionFunctionOptions: assignPractisSetContentOptions as any,\n                itemPerChunk: 10000\n            });\n        },\n        [handleAssignPractisSetContent]\n    );\n\n    /**\n     * @function handleUpdatePractisSetStatus\n     * @param { PractisSetStatusType } currentStatus\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleUpdatePractisSetStatus = useCallback(\n        (\n            currentStatus: PractisSetStatusType,\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updatePractisSetStatusServiceOptions = {\n                parameters: {\n                    entityData: [],\n                    entityName: 'practisSet',\n                    currentStatus,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: UPDATE_PRACTIS_SET_STATUS_ACTION,\n                actionFunction: updatePractisSetStatusService,\n                actionFunctionOptions:\n                    updatePractisSetStatusServiceOptions as any,\n            });\n        },\n        [updatePractisSetStatusService]\n    );\n\n    /**\n     * @param { CreatePractisSetInfo } newPractisSetInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newPractisSetInfo: CreatePractisSetInfo) => {\n            const {\n                name,\n                description,\n                pacingId,\n                labelIds,\n                status,\n                practisSetContents,\n            } = newPractisSetInfo;\n\n            let actionList: ChunkRequestActionInterface<any> = {\n                actionName: CREATE_PRACTIS_SET_ACTION,\n                actionFunction: createNewPractisSet,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        practisSet: { name, description, pacingId },\n                        itemPerChunk: 1,\n                    },\n                    fieldName: 'itemPerChunk',\n                },\n            };\n\n            const childActionList: ChunkRequestActionInterface<any>[] = [];\n\n            if (!isEmpty(labelIds)) {\n                handleAssignLabelsToPractisSet(labelIds, childActionList);\n            }\n\n            if (!isEmpty(practisSetContents)) {\n                handleAssignContentToPractisSet(\n                    practisSetContents,\n                    childActionList\n                );\n            }\n\n            if (status && status !== PractisSetStatuses.DRAFT) {\n                handleUpdatePractisSetStatus(status, childActionList);\n            }\n\n            actionList = { ...actionList, ...{ childActionList } };\n\n            return actionList;\n        },\n        [\n            createNewPractisSet,\n            handleAssignContentToPractisSet,\n            handleAssignLabelsToPractisSet,\n            handleUpdatePractisSetStatus,\n        ]\n    );\n}\n\n/**\n * @description Generates action list to pass to edit practisSet service.\n * @function useGenerateEditPractisSetActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateEditPractisSetActionList() {\n    const updatePractisSetInfo = useUpdatePractisSetApi();\n    const assignPractisSetContent = useAssignPractisSetContentApi();\n    const assignLabelsToPractisSet = useAssignPractisSetLabelsApi();\n    const deleteLabelsFromPractisSet = useDeletePractisSetLabelsApi();\n    const updatePractisSetStatusService = useUpdatePractisSetStatusApi();\n\n    /**\n     * @function handleUpdatePractisSetInfo\n     * @param { number } practisSetId\n     * @param { NewPractisSetType } practisSetInfo\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     */\n    const handleUpdatePractisSetInfo = useCallback(\n        async (\n            practisSetId: number,\n            practisSetInfo: NewPractisSetType,\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updatePractisSetInfoActionOptions = {\n                parameters: {\n                    practisSetId,\n                    data: practisSetInfo,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n            };\n\n            actionList.push({\n                actionName: UPDATE_PRACTIS_SET_ACTION,\n                actionFunction: updatePractisSetInfo,\n                actionFunctionOptions: updatePractisSetInfoActionOptions,\n            });\n        },\n        [updatePractisSetInfo]\n    );\n\n    /**\n     * @function handleAssignPractisSetContent\n     * @param { number } practisSetId\n     * @param { PractisSetContent[] } practisSetContents\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     */\n    const handleAssignPractisSetContent = useCallback(\n        async (\n            practisSetId: number,\n            practisSetContents: PractisSetContent[],\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            if (!isEmpty(practisSetContents)) {\n                const practisSetContentData = practisSetContents?.map(item => ({\n                    contentType: item.type,\n                    scenarioId: item.scenario?.id ?? null,\n                    challengeId: item.challenge?.id ?? null,\n                    minRepsCount:\n                        item.type === 'CHALLENGE'\n                            ? null\n                            : item.minRepsCount ?? null,\n                    position: item.position ?? 0,\n                }));\n\n                if (!isEmpty(practisSetContentData)) {\n                    actionList.push({\n                        actionName: ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION,\n                        actionFunction: assignPractisSetContent,\n                        actionFunctionOptions: {\n                            parameters: {\n                                practisSetId,\n                                practisSetContentData,\n                            },\n                            fieldName: 'practisSetContentData',\n                        },\n                        itemPerChunk: 10000\n                    });\n                }\n            }\n        },\n        [assignPractisSetContent]\n    );\n\n    /**\n     * @function handleUpdatePractisSetLabels\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleUpdatePractisSetLabels = useCallback(\n        (\n            addedLabelIds: number[],\n            deletedLabelIds: number[],\n            practisSetId: number,\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            if (!isEmpty(addedLabelIds)) {\n                const addedLabels = addedLabelIds.map(\n                    labelId =>\n                        ({\n                            labelId,\n                            practisSetId,\n                        } as PractisSetLabel)\n                );\n\n                const assignLabelsToPractisSetServiceOptions = {\n                    parameters: {\n                        addedPractisSetLabels: addedLabels,\n                    },\n                    fieldName: 'addedPractisSetLabels',\n                };\n\n                actionList.push({\n                    actionName: ASSIGN_LABELS_TO_PRACTIS_SET_ACTION,\n                    actionFunction: assignLabelsToPractisSet,\n                    actionFunctionOptions:\n                        assignLabelsToPractisSetServiceOptions as any,\n                });\n            }\n\n            if (!isEmpty(deletedLabelIds)) {\n                const deletedLabels = deletedLabelIds.map(\n                    labelId =>\n                        ({\n                            labelId,\n                            practisSetId,\n                        } as PractisSetLabel)\n                );\n\n                const deleteLabelsFromPractisSetServiceOptions = {\n                    parameters: {\n                        deletedPractisSetLabels: deletedLabels,\n                    },\n                    fieldName: 'deletedPractisSetLabels',\n                };\n\n                actionList.push({\n                    actionName: DELETE_LABELS_FROM_PRACTIS_SET_ACTION,\n                    actionFunction: deleteLabelsFromPractisSet,\n                    actionFunctionOptions:\n                        deleteLabelsFromPractisSetServiceOptions as any,\n                });\n            }\n        },\n        [assignLabelsToPractisSet, deleteLabelsFromPractisSet]\n    );\n\n    /**\n     * @function handleUpdatePractisSetStatus\n     * @param { number } practisSetId\n     * @param { string } status\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleUpdatePractisSetStatus = useCallback(\n        (\n            practisSetId: number,\n            status: string,\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updatePractisSetStatusServiceOptions = {\n                parameters: {\n                    status,\n                    practisSetIds: [practisSetId],\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n            };\n\n            actionList.push({\n                actionName: UPDATE_PRACTIS_SET_STATUS_ACTION,\n                actionFunction: updatePractisSetStatusService,\n                actionFunctionOptions:\n                    updatePractisSetStatusServiceOptions as any,\n            });\n        },\n        [updatePractisSetStatusService]\n    );\n\n    /**\n     * @param { EditPractisSetInfo } newPractisSetInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newPractisSetInfo: EditPractisSetInfo) => {\n            const {\n                practisSetId,\n                name,\n                description,\n                pacingId,\n                addedLabelIds,\n                deletedLabelIds,\n                practisSetContents,\n                status,\n            } = newPractisSetInfo;\n\n            let actionList: ChunkRequestActionInterface<any>[] = [];\n\n            if (!isEmpty(name) || !isEmpty(description) || !isEmpty(pacingId)) {\n                handleUpdatePractisSetInfo(\n                    practisSetId,\n                    {\n                        name,\n                        description,\n                        pacingId,\n                    },\n                    actionList\n                );\n            }\n\n            if (!isEmpty(addedLabelIds) || !isEmpty(deletedLabelIds)) {\n                handleUpdatePractisSetLabels(\n                    addedLabelIds,\n                    deletedLabelIds,\n                    practisSetId,\n                    actionList\n                );\n            }\n\n            if (!isEmpty(practisSetContents)) {\n                handleAssignPractisSetContent(\n                    practisSetId,\n                    practisSetContents,\n                    actionList\n                );\n            }\n\n            if (status && status !== PractisSetStatuses.DRAFT) {\n                handleUpdatePractisSetStatus(\n                    practisSetId,\n                    status!.toLowerCase(),\n                    actionList\n                );\n            }\n\n            return actionList;\n        },\n        [\n            handleAssignPractisSetContent,\n            handleUpdatePractisSetInfo,\n            handleUpdatePractisSetLabels,\n            handleUpdatePractisSetStatus,\n        ]\n    );\n}\n\n/**\n * @description Generates action list to pass to duplicate practisSet service.\n * @function useGenerateDuplicatePractisSetActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateDuplicatePractisSetActionList() {\n    const createNewPractisSet = useCreateNewPractisSetApi();\n    const assignLibraryLabels = useAssignLibraryEntityLabelsService();\n    const getPractisSetContent = useGetPractisSetContentApi();\n    const assignPractisSetContent = useAssignPractisSetContentApi();\n\n    /**\n     * @function handleGetPractisSetContent\n     * @param { {id: number} } entityData\n     * @param { number } currentPractisSetId\n     * @returns { Promise<unknown> }\n     */\n    const handleGetPractisSetContent = useCallback(\n        async (entityData: { id: number }, currentPractisSetId: number) => {\n            const createdPractisSetId = entityData?.id;\n\n            let newPractisSetContentData = {} as {\n                content: PractisSetContent[];\n                practisSetId: number;\n            };\n\n            if (createdPractisSetId) {\n                await getPractisSetContent(currentPractisSetId).then(\n                    (response: PractisSetContent[]) => {\n                        newPractisSetContentData = {\n                            content: response,\n                            practisSetId: createdPractisSetId,\n                        };\n                    }\n                );\n            }\n\n            return new Promise(resolve => {\n                setTimeout(() => {\n                    resolve([newPractisSetContentData]);\n                }, 0);\n            });\n        },\n        [getPractisSetContent]\n    );\n\n    /**\n     * @function handleAssignPractisSetContent\n     * @param { { content: PractisSetContent[]; practisSetId: number }[] } entityData\n     * @returns { Promise<void> }\n     */\n    const handleAssignPractisSetContent = useCallback(\n        async (\n            entityData: {\n                content: PractisSetContent[];\n                practisSetId: number;\n            }[]\n        ) => {\n            const { content = [], practisSetId = 0 } = entityData?.[0] || {};\n\n            if (!isEmpty(content)) {\n                const practisSetContent = content?.map(item => ({\n                    contentType: item.type,\n                    scenarioId: item.scenario?.id ?? null,\n                    challengeId: item.challenge?.id ?? null,\n                    minRepsCount:\n                        item.type === 'CHALLENGE'\n                            ? null\n                            : item.minRepsCount ?? null,\n                    position: item.position ?? null,\n                }));\n\n                return assignPractisSetContent(\n                    practisSetId,\n                    practisSetContent as any\n                );\n            }\n        },\n        [assignPractisSetContent]\n    );\n\n    /**\n     * @function handleAssignLabelsToPractisSet\n     * @param { number[] } labelIds\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToPractisSet = useCallback(\n        (\n            labelIds: number[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLabelsToEntityServiceOptions = {\n                parameters: {\n                    labels: uniqBy(labelIds, id => id),\n                    entityId: [],\n                    entityName: 'practisSet',\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityId',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LABELS_TO_PRACTIS_SET_ACTION,\n                actionFunction: assignLibraryLabels,\n                actionFunctionOptions:\n                    assignLabelsToEntityServiceOptions as any,\n            });\n        },\n        [assignLibraryLabels]\n    );\n\n    /**\n     * @function handleAssignContentToPractisSet\n     * @param { number } currentPractisSetId\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignContentToPractisSet = useCallback(\n        (\n            currentPractisSetId: number,\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const getPractisSetContentOptions = {\n                parameters: {\n                    entityData: [],\n                    currentPractisSetId,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n                secondaryFieldName: 'entityData',\n            };\n\n            const assignPractisSetContentOptions = {\n                parameters: {\n                    entityData: [],\n                },\n                fieldName: 'entityData',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: GET_PRACTIS_SET_CONTENT_ACTION,\n                actionFunction: handleGetPractisSetContent,\n                actionFunctionOptions: getPractisSetContentOptions as any,\n                itemPerChunk: 1,\n                childActionList: [\n                    {\n                        actionName: ASSIGN_CONTENT_TO_PRACTIS_SET_ACTION,\n                        actionFunction: handleAssignPractisSetContent,\n                        actionFunctionOptions: assignPractisSetContentOptions,\n                        itemPerChunk: 10000\n                    },\n                ],\n            });\n        },\n        [handleAssignPractisSetContent, handleGetPractisSetContent]\n    );\n\n    /**\n     * @param { NewPractisSetInfo } newPractisSetInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newPractisSetInfo: NewPractisSetInfo) => {\n            const {\n                currentPractisSetId,\n                name,\n                description,\n                pacingId,\n                labelIds,\n                scenarioCount,\n                challengeCount,\n            } = newPractisSetInfo;\n\n            let actionList: ChunkRequestActionInterface<any> = {\n                actionName: CREATE_PRACTIS_SET_ACTION,\n                actionFunction: createNewPractisSet,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        practisSet: { name, description, pacingId },\n                        itemPerChunk: 1,\n                    },\n                    fieldName: 'itemPerChunk',\n                },\n            };\n\n            const childActionList: ChunkRequestActionInterface<any>[] = [];\n\n            if (!isEmpty(labelIds)) {\n                handleAssignLabelsToPractisSet(labelIds, childActionList);\n            }\n\n            if (scenarioCount > 0 || challengeCount > 0) {\n                handleAssignContentToPractisSet(\n                    currentPractisSetId,\n                    childActionList\n                );\n            }\n\n            actionList = { ...actionList, ...{ childActionList } };\n\n            return actionList;\n        },\n        [\n            createNewPractisSet,\n            handleAssignContentToPractisSet,\n            handleAssignLabelsToPractisSet,\n        ]\n    );\n}\n\n/**\n * @description Generates action list to pass to create/duplicate scenario service.\n * @function useGenerateCreateDuplicateScenarioActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateCreateDuplicateScenarioActionList() {\n    const createNewScenario = useCreateScenarioApi();\n    const assignLibraryLabels = useAssignLibraryEntityLabelsService();\n    const assignLinesToScenario = useAssignLinesToScenarioApi();\n    const updateScenarioStatusService = useUpdateLibraryStatusService();\n\n    /**\n     * @function handleUpdateScenarioStatus\n     * @param { ScenarioStatusType } currentStatus\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleUpdateScenarioStatus = useCallback(\n        (\n            currentStatus: ScenarioStatusType,\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updateScenarioStatusServiceOptions = {\n                parameters: {\n                    entityData: [],\n                    entityName: 'scenario',\n                    currentStatus,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: UPDATE_SCENARIO_STATUS_ACTION,\n                actionFunction: updateScenarioStatusService,\n                actionFunctionOptions:\n                    updateScenarioStatusServiceOptions as any,\n            });\n        },\n        [updateScenarioStatusService]\n    );\n\n    /**\n     * @function handleAssignLabelsToScenario\n     * @param { number[] } labelIds\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToScenario = useCallback(\n        (\n            labelIds: number[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLabelsToEntityServiceOptions = {\n                parameters: {\n                    labels: uniqBy(labelIds, id => id),\n                    entityId: [],\n                    entityName: 'scenario',\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityId',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LINES_TO_SCENARIO_ACTION,\n                actionFunction: assignLibraryLabels,\n                actionFunctionOptions:\n                    assignLabelsToEntityServiceOptions as any,\n            });\n        },\n        [assignLibraryLabels]\n    );\n\n    /**\n     * @function handleAssignLinesToScenarioService\n     * @param { { id: number} } entityData\n     * @param { ScriptLine[] } currentLines\n     * @returns { Promise<void> }\n     */\n    const handleAssignLinesToScenarioService = useCallback(\n        async (entityData: { id: number }, currentLines: ScriptLine[]) => {\n            const createdScenarioId = entityData?.id;\n\n            if (createdScenarioId) {\n                const createdScenarioLines = currentLines?.map(line => {\n                    const {\n                        audioId = 0,\n                        duration = 0,\n                        position = null,\n                        text = '',\n                        speaker = '',\n                        keywords = [],\n                    } = line || {};\n\n                    return {\n                        audioId,\n                        duration,\n                        position,\n                        text,\n                        speaker,\n                        keywords,\n                    } as ScenarioLine;\n                });\n\n                await assignLinesToScenario(\n                    createdScenarioId,\n                    createdScenarioLines\n                );\n            }\n        },\n        [assignLinesToScenario]\n    );\n\n    /**\n     * @function handleAssignLinesToScenario\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLinesToScenario = useCallback(\n        (\n            currentLines: ScriptLine[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLinesToScenarioOptions = {\n                parameters: {\n                    entityData: [],\n                    currentLines,\n                },\n                fieldName: 'currentLines',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LINES_TO_SCENARIO_ACTION,\n                actionFunction: handleAssignLinesToScenarioService,\n                actionFunctionOptions: assignLinesToScenarioOptions as any,\n                itemPerChunk: 10000\n            });\n        },\n        [handleAssignLinesToScenarioService]\n    );\n\n    /**\n     * @param { CreateNewScenarioInfo } newScenarioInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newScenarioInfo: CreateNewScenarioInfo) => {\n            const { title, description, labelIds, lines, status } =\n                newScenarioInfo;\n\n            let actionList: ChunkRequestActionInterface<any> = {\n                actionName: CREATE_SCENARIO_ACTION,\n                actionFunction: createNewScenario,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        scenarioInfo: { title, description },\n                        itemPerChunk: 1,\n                    },\n                    fieldName: 'itemPerChunk',\n                },\n            };\n\n            const childActionList: ChunkRequestActionInterface<any>[] = [];\n\n            if (!isEmpty(labelIds)) {\n                handleAssignLabelsToScenario(labelIds, childActionList);\n            }\n\n            if (!isEmpty(lines)) {\n                handleAssignLinesToScenario(lines, childActionList);\n            }\n\n            if (status && status !== ScenarioStatuses.DRAFT) {\n                handleUpdateScenarioStatus(status, childActionList);\n            }\n\n            actionList = { ...actionList, ...{ childActionList } };\n\n            return actionList;\n        },\n        [\n            createNewScenario,\n            handleAssignLabelsToScenario,\n            handleAssignLinesToScenario,\n            handleUpdateScenarioStatus,\n        ]\n    );\n}\n\n/**\n * @description Generates action list to pass to edit scenario service.\n * @function useGenerateEditScenarioActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateEditScenarioActionList() {\n    const updateScenarioInfo = useUpdateScenarioApi();\n    const assignLabelsToScenario = useAssignScenarioLabelApi();\n    const deleteLabelsFromScenario = useDeleteScenarioLabelApi();\n    const assignLinesToScenario = useAssignLinesToScenarioApi();\n    const updateScenarioStatusService = useUpdateScenarioStatusApi();\n\n    /**\n     * @function handleUpdateScenarioStatus\n     * @param { number } scenarioId\n     * @param { ScenarioStatusType } currentStatus\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleUpdateScenarioStatus = useCallback(\n        (\n            scenarioId: number,\n            currentStatus: ScenarioStatusType,\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updateScenarioStatusServiceOptions = {\n                parameters: {\n                    currentStatus: currentStatus?.toLowerCase(),\n                    scenarioIds: [scenarioId],\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n            };\n\n            actionList.push({\n                actionName: UPDATE_SCENARIO_STATUS_ACTION,\n                actionFunction: updateScenarioStatusService,\n                actionFunctionOptions:\n                    updateScenarioStatusServiceOptions as any,\n            });\n        },\n        [updateScenarioStatusService]\n    );\n\n    /**\n     * @function handleAssignLabelsToScenario\n     * @param { number } scenarioId\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToScenario = useCallback(\n        (\n            scenarioId: number,\n            addedLabelIds: number[],\n            deletedLabelIds: number[],\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            if (!isEmpty(addedLabelIds)) {\n                const addedLabels = addedLabelIds.map(\n                    labelId =>\n                        ({\n                            scenarioId,\n                            labelId,\n                        } as ScenarioLabel)\n                );\n\n                const assignLabelsToScenarioServiceOptions = {\n                    parameters: {\n                        labels: addedLabels,\n                    },\n                    fieldName: 'labels',\n                };\n\n                actionList.push({\n                    actionName: ASSIGN_LABELS_TO_SCENARIO_ACTION,\n                    actionFunction: assignLabelsToScenario,\n                    actionFunctionOptions:\n                        assignLabelsToScenarioServiceOptions as any,\n                });\n            }\n\n            if (!isEmpty(deletedLabelIds)) {\n                const deletedLabels = deletedLabelIds.map(\n                    labelId =>\n                        ({\n                            scenarioId,\n                            labelId,\n                        } as ScenarioLabel)\n                );\n\n                const deleteLabelsFromScenarioServiceOptions = {\n                    parameters: {\n                        labels: deletedLabels,\n                    },\n                    fieldName: 'labels',\n                };\n\n                actionList.push({\n                    actionName: DELETE_LABELS_FROM_SCENARIO_ACTION,\n                    actionFunction: deleteLabelsFromScenario,\n                    actionFunctionOptions:\n                        deleteLabelsFromScenarioServiceOptions as any,\n                });\n            }\n        },\n        [assignLabelsToScenario, deleteLabelsFromScenario]\n    );\n\n    /**\n     * @function handleAssignLinesToScenarioService\n     * @param { number } scenarioId\n     * @param { ScriptLine[] } currentLines\n     * @returns { Promise<void> }\n     */\n    const handleAssignLinesToScenarioService = useCallback(\n        async (scenarioId: number, currentLines: ScriptLine[]) => {\n            if (scenarioId) {\n                const createdScenarioLines = currentLines?.map(line => {\n                    const {\n                        audioId = 0,\n                        duration = 0,\n                        position = null,\n                        text = '',\n                        speaker = '',\n                        keywords = [],\n                    } = line || {};\n\n                    return {\n                        audioId,\n                        duration,\n                        position,\n                        text,\n                        speaker,\n                        keywords,\n                    } as ScenarioLine;\n                });\n\n                await assignLinesToScenario(scenarioId, createdScenarioLines);\n            }\n        },\n        [assignLinesToScenario]\n    );\n\n    /**\n     * @function handleAssignLinesToScenario\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleAssignLinesToScenario = useCallback(\n        (\n            scenarioId: number,\n            currentLines: ScriptLine[],\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLinesToScenarioOptions = {\n                parameters: {\n                    scenarioId,\n                    currentLines,\n                },\n                fieldName: 'currentLines',\n            };\n\n            actionList.push({\n                actionName: ASSIGN_LINES_TO_SCENARIO_ACTION,\n                actionFunction: handleAssignLinesToScenarioService,\n                actionFunctionOptions: assignLinesToScenarioOptions as any,\n                itemPerChunk: 10000,\n            });\n        },\n        [handleAssignLinesToScenarioService]\n    );\n\n    /**\n     * @function handleDeleteScenarioLines\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleDeleteScenarioLines = useCallback(\n        (\n            scenarioId: number,\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLinesToScenarioOptions = {\n                parameters: {\n                    scenarioId,\n                    currentLines: [],\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n            };\n\n            actionList.push({\n                actionName: DELETE_LINES_FROM_SCENARIO_ACTION,\n                actionFunction: handleAssignLinesToScenarioService,\n                actionFunctionOptions: assignLinesToScenarioOptions as any,\n            });\n        },\n        [handleAssignLinesToScenarioService]\n    );\n\n    /**\n     * @param { EditScenarioInfo } newScenarioInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newScenarioInfo: EditScenarioInfo) => {\n            const {\n                scenarioId,\n                title,\n                description,\n                addedLabelIds,\n                deletedLabelIds,\n                lines,\n                status,\n            } = newScenarioInfo;\n\n            let actionList: ChunkRequestActionInterface<any>[] = [\n                {\n                    actionName: UPDATE_SCENARIO_ACTION,\n                    actionFunction: updateScenarioInfo,\n                    itemPerChunk: 1,\n                    actionFunctionOptions: {\n                        parameters: {\n                            scenarioId,\n                            scenarioInfo: { title, description },\n                            itemPerChunk: 1,\n                        },\n                        fieldName: 'itemPerChunk',\n                    },\n                },\n            ];\n\n            if (!isEmpty(addedLabelIds) || !isEmpty(deletedLabelIds)) {\n                handleAssignLabelsToScenario(\n                    scenarioId,\n                    addedLabelIds,\n                    deletedLabelIds,\n                    actionList\n                );\n            }\n\n            if (!isEmpty(lines)) {\n                handleAssignLinesToScenario(scenarioId, lines, actionList);\n            } else if (status === ScenarioStatuses.DRAFT) {\n                handleDeleteScenarioLines(scenarioId, actionList);\n            }\n\n            if (status && status !== ScenarioStatuses.DRAFT) {\n                handleUpdateScenarioStatus(scenarioId, status, actionList);\n            }\n\n            return actionList;\n        },\n        [\n            handleAssignLabelsToScenario,\n            handleAssignLinesToScenario,\n            handleDeleteScenarioLines,\n            handleUpdateScenarioStatus,\n            updateScenarioInfo,\n        ]\n    );\n}\n\n/**\n * @description Generates action list to pass to create/duplicate challenge service.\n * @function useGenerateCreateDuplicateChallengeActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateCreateDuplicateChallengeActionList() {\n    const createNewChallenge = useCreateChallengeApi();\n    const assignLibraryLabels = useAssignLibraryEntityLabelsService();\n    const assignLinesToChallenge = useAssignLinesToChallengeApi();\n    const updateChallengeStatusService = useUpdateLibraryStatusService();\n\n    /**\n     * @function handleUpdateChallengeStatus\n     * @param { ChallengeStatusType } currentStatus\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleUpdateChallengeStatus = useCallback(\n        (\n            currentStatus: ChallengeStatusType,\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updateChallengeStatusServiceOptions = {\n                parameters: {\n                    entityData: [],\n                    entityName: 'challenge',\n                    currentStatus,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: UPDATE_CHALLENGE_STATUS_ACTION,\n                actionFunction: updateChallengeStatusService,\n                actionFunctionOptions:\n                    updateChallengeStatusServiceOptions as any,\n            });\n        },\n        [updateChallengeStatusService]\n    );\n\n    /**\n     * @function handleAssignLabelsToChallenge\n     * @param { number[] } labelIds\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToChallenge = useCallback(\n        (\n            labelIds: number[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLabelsToEntityServiceOptions = {\n                parameters: {\n                    labels: uniqBy(labelIds, id => id),\n                    entityId: [],\n                    entityName: 'challenge',\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityId',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LABELS_TO_CHALLENGE_ACTION,\n                actionFunction: assignLibraryLabels,\n                actionFunctionOptions:\n                    assignLabelsToEntityServiceOptions as any,\n            });\n        },\n        [assignLibraryLabels]\n    );\n\n    /**\n     * @function handleAssignLinesToChallengeService\n     * @param { { id: number} } entityData\n     * @param { ScriptLine[] } currentLines\n     * @returns { Promise<void> }\n     */\n    const handleAssignLinesToChallengeService = useCallback(\n        async (entityData: { id: number }, currentLines: ScriptLine[]) => {\n            const createdChallengeId = entityData?.id;\n\n            if (createdChallengeId) {\n                const createdChallengeLines = currentLines?.map(line => {\n                    const {\n                        audioId = 0,\n                        duration = 0,\n                        position = null,\n                        text = '',\n                        speaker = '',\n                        keywords = [],\n                    } = line || {};\n\n                    return {\n                        audioId,\n                        duration,\n                        position,\n                        text,\n                        speaker,\n                        keywords,\n                    } as ChallengeLine;\n                });\n\n                await assignLinesToChallenge(\n                    createdChallengeId,\n                    createdChallengeLines\n                );\n            }\n        },\n        [assignLinesToChallenge]\n    );\n\n    /**\n     * @function handleAssignLinesToChallenge\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLinesToChallenge = useCallback(\n        (\n            currentLines: ScriptLine[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLinesToChallengeOptions = {\n                parameters: {\n                    entityData: [],\n                    currentLines,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LINES_TO_CHALLENGE_ACTION,\n                actionFunction: handleAssignLinesToChallengeService,\n                actionFunctionOptions: assignLinesToChallengeOptions as any,\n                itemPerChunk: 10000,\n            });\n        },\n        [handleAssignLinesToChallengeService]\n    );\n\n    /**\n     * @param { CreateNewChallengeInfo } newChallengeInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newChallengeInfo: CreateNewChallengeInfo) => {\n            const {\n                title,\n                description,\n                sourceScenarioId,\n                lines,\n                labelIds,\n                status,\n                tryLimit,\n            } = newChallengeInfo;\n\n            let actionList: ChunkRequestActionInterface<any> = {\n                actionName: CREATE_CHALLENGE_ACTION,\n                actionFunction: createNewChallenge,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        challengeInfo: { title, description, sourceScenarioId, tryLimit },\n                        itemPerChunk: 1,\n                    },\n                    fieldName: 'itemPerChunk',\n                },\n            };\n\n            const childActionList: ChunkRequestActionInterface<any>[] = [];\n\n            if (!isEmpty(labelIds)) {\n                handleAssignLabelsToChallenge(labelIds, childActionList);\n            }\n\n            if (!isEmpty(lines)) {\n                handleAssignLinesToChallenge(lines, childActionList);\n            }\n\n            if (status && status !== ChallengeStatuses.DRAFT) {\n                handleUpdateChallengeStatus(status, childActionList);\n            }\n\n            actionList = { ...actionList, ...{ childActionList } };\n\n            return actionList;\n        },\n        [\n            createNewChallenge,\n            handleAssignLabelsToChallenge,\n            handleAssignLinesToChallenge,\n            handleUpdateChallengeStatus,\n        ]\n    );\n}\n\n/**\n * @description Generates action list to pass to edit challenge service.\n * @function useGenerateEditChallengeActionList\n * @returns { CallableFunction }\n */\nexport function useGenerateEditChallengeActionList() {\n    const updateChallengeInfo = useUpdateChallengeInfoApi();\n    const assignLabelsToChallenge = useAssignChallengeLabelsApi();\n    const deleteLabelsFromChallenge = useDeleteChallengeLabelsApi();\n    const assignLinesToChallenge = useAssignLinesToChallengeApi();\n    const updateChallengeStatusService = useUpdateChallengeStatusApi();\n\n    /**\n     * @function handleUpdateChallengeStatus\n     * @param { number } challengeId\n     * @param { ScenarioStatusType } currentStatus\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleUpdateChallengeStatus = useCallback(\n        (\n            challengeId: number,\n            currentStatus: ChallengeStatusType,\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const updateChallengeStatusServiceOptions = {\n                parameters: {\n                    currentStatus: currentStatus?.toLowerCase(),\n                    challengeIds: [challengeId],\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n            };\n\n            actionList.push({\n                actionName: UPDATE_CHALLENGE_STATUS_ACTION,\n                actionFunction: updateChallengeStatusService,\n                actionFunctionOptions:\n                    updateChallengeStatusServiceOptions as any,\n            });\n        },\n        [updateChallengeStatusService]\n    );\n\n    /**\n     * @function handleAssignLabelsToChallenge\n     * @param { number } challengeId\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToChallenge = useCallback(\n        (\n            challengeId: number,\n            addedLabelIds: number[],\n            deletedLabelIds: number[],\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            if (!isEmpty(addedLabelIds)) {\n                const addedLabels = addedLabelIds.map(\n                    labelId =>\n                        ({\n                            challengeId,\n                            labelId,\n                        } as ChallengeLabel)\n                );\n\n                const assignLabelsToChallengeServiceOptions = {\n                    parameters: {\n                        labels: addedLabels,\n                    },\n                    fieldName: 'labels',\n                };\n\n                actionList.push({\n                    actionName: ASSIGN_LABELS_TO_CHALLENGE_ACTION,\n                    actionFunction: assignLabelsToChallenge,\n                    actionFunctionOptions:\n                        assignLabelsToChallengeServiceOptions as any,\n                });\n            }\n\n            if (!isEmpty(deletedLabelIds)) {\n                const deletedLabels = deletedLabelIds.map(\n                    labelId =>\n                        ({\n                            challengeId,\n                            labelId,\n                        } as ChallengeLabel)\n                );\n\n                const deleteLabelsFromChallengeServiceOptions = {\n                    parameters: {\n                        labels: deletedLabels,\n                    },\n                    fieldName: 'labels',\n                };\n\n                actionList.push({\n                    actionName: DELETE_LABELS_FROM_CHALLENGE_ACTION,\n                    actionFunction: deleteLabelsFromChallenge,\n                    actionFunctionOptions:\n                        deleteLabelsFromChallengeServiceOptions as any,\n                });\n            }\n        },\n        [assignLabelsToChallenge, deleteLabelsFromChallenge]\n    );\n\n    /**\n     * @function handleAssignLinesToChallengeService\n     * @param { number } challengeId\n     * @param { ScriptLine[] } currentLines\n     * @returns { Promise<void> }\n     */\n    const handleAssignLinesToChallengeService = useCallback(\n        async (challengeId: number, currentLines: ScriptLine[]) => {\n            if (challengeId) {\n                const createdChallengeLines = currentLines?.map(line => {\n                    const {\n                        audioId = 0,\n                        duration = 0,\n                        position = null,\n                        text = '',\n                        speaker = '',\n                        keywords = [],\n                    } = line || {};\n\n                    return {\n                        audioId,\n                        duration,\n                        position,\n                        text,\n                        speaker,\n                        keywords,\n                    } as ScenarioLine;\n                });\n\n                await assignLinesToChallenge(\n                    challengeId,\n                    createdChallengeLines\n                );\n            }\n        },\n        [assignLinesToChallenge]\n    );\n\n    /**\n     * @function handleAssignLinesToChallenge\n     * @param { ChunkRequestActionInterface<any>[] } actionList\n     * @returns { void }\n     */\n    const handleAssignLinesToChallenge = useCallback(\n        (\n            challengeId: number,\n            currentLines: ScriptLine[],\n            actionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLinesToChallengeOptions = {\n                parameters: {\n                    challengeId,\n                    currentLines,\n                },\n                fieldName: 'currentLines',\n            };\n\n            actionList.push({\n                actionName: ASSIGN_LINES_TO_CHALLENGE_ACTION,\n                actionFunction: handleAssignLinesToChallengeService,\n                actionFunctionOptions: assignLinesToChallengeOptions as any,\n                itemPerChunk: 10000,\n            });\n        },\n        [handleAssignLinesToChallengeService]\n    );\n\n    /**\n     * @param { EditChallengeInfo } newChallengeInfo\n     * @returns { ChunkRequestActionInterface<any> }\n     */\n    return useCallback(\n        (newChallengeInfo: EditChallengeInfo) => {\n            const {\n                challengeId,\n                title,\n                description,\n                sourceScenarioId,\n                addedLabelIds,\n                deletedLabelIds,\n                lines,\n                status,\n                tryLimit,\n            } = newChallengeInfo;\n\n            let actionList: ChunkRequestActionInterface<any>[] = [\n                {\n                    actionName: UPDATE_CHALLENGE_ACTION,\n                    actionFunction: updateChallengeInfo,\n                    itemPerChunk: 1,\n                    actionFunctionOptions: {\n                        parameters: {\n                            challengeId,\n                            challengeInfo: {\n                                title,\n                                description,\n                                sourceScenarioId,\n                                tryLimit,\n                            },\n                            itemPerChunk: 1,\n                        },\n                        fieldName: 'itemPerChunk',\n                    },\n                },\n            ];\n\n            if (!isEmpty(addedLabelIds) || !isEmpty(deletedLabelIds)) {\n                handleAssignLabelsToChallenge(\n                    challengeId,\n                    addedLabelIds,\n                    deletedLabelIds,\n                    actionList\n                );\n            }\n\n            if (!isEmpty(lines)) {\n                handleAssignLinesToChallenge(challengeId, lines, actionList);\n            }\n\n            if (status && status !== ChallengeStatuses.DRAFT) {\n                handleUpdateChallengeStatus(challengeId, status, actionList);\n            }\n\n            return actionList;\n        },\n        [\n            handleAssignLabelsToChallenge,\n            handleAssignLinesToChallenge,\n            handleUpdateChallengeStatus,\n            updateChallengeInfo,\n        ]\n    );\n\n}","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { capitalize, isEmpty, uniqBy } from 'lodash';\n\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../ui/components/ModalDialogs/store/actions';\nimport { ChunkRequestActionInterface } from '../../../../services/ChunkRequestService/hooks/types';\nimport { useChunkRequestsService } from '../../../../services/ChunkRequestService/hooks';\nimport { GeneralBulkActionModalInterface } from '../../../../ui/components/ModalDialogs/types';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { GenerateChallengeData, LibraryScope } from './types';\nimport { convertPresentVerbToPastVerb } from '../../../../helpers/functions/strings';\nimport {\n    ASSIGN_LABELS_TO_CHALLENGE_ACTION,\n    ASSIGN_LINES_TO_CHALLENGE_ACTION,\n    CREATE_CHALLENGE_ACTION,\n    initialGenerateChallengeData,\n} from './constants';\nimport {\n    useAssignLinesToChallengeApi,\n    useCreateChallengeApi,\n} from '../../../../api';\nimport { ScriptLine } from '../../../../constants/interfaces/ScriptLine';\nimport { ChallengeLine } from '../../../../api/challenges/types';\nimport { useAssignLibraryEntityLabelsService } from './helpers';\nimport {\n    CLIENT_SIDE_ERROR_MESSAGE,\n    PRACTIS_SET_ALREADY_EXISTED_ERROR_MESSAGE,\n} from '../../../../ui/components/ErrorMessages/constants';\n\n/**\n * @description function to create/edit/duplicate a selected library entity (PractisSet. Challenge, Scenario).\n * Create new entity by selected entity's details at first then assign relations to the result.\n * @function useCreateEditDuplicateLibraryBulActionService\n * @param { LibraryScope } scope\n * @param { string } entityTitle\n * @param { Function | undefined } onSuccessCallback\n * @param { Function | undefined } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useCreateEditDuplicateLibraryBulActionService(\n    scope: LibraryScope,\n    entityTitle: string,\n    onSuccessCallback?: (responses?: Record<string, unknown>) => void,\n    onErrorCallback?: (\n        error?: ErrorResult,\n        completedResponses?: Record<string, unknown>\n    ) => void\n) {\n    const actionList = useRef<ChunkRequestActionInterface<any>[]>([]);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const shouldShowModals = !isEmpty(actionList.current);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @param { ErrorResult | undefined } error\n     * @param { Record<string, unknown> | undefined  } completedResponses\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(\n        (error?: ErrorResult, completedResponses?: Record<string, unknown>) => {\n            const isAlreadyExistedErrorMessage =\n                error?.message.includes('already exists');\n\n            if (shouldShowModals) {\n                if (isAlreadyExistedErrorMessage) {\n                    hideModalDialog();\n                } else {\n                    dispatch(\n                        showModalDialog({\n                            modalType: 'BULK_ACTION_FAILED_MODAL',\n                            modalProps: {\n                                modalTitle: `${capitalize(\n                                    scope\n                                )} ${entityTitle}`,\n                                onClose: hideModalDialog,\n                            } as GeneralBulkActionModalInterface,\n                        })\n                    );\n                }\n            }\n\n            actionList.current = [];\n            isRunning && setIsRunning(false);\n\n            if (error?.message) {\n                const message = isAlreadyExistedErrorMessage\n                    ? CLIENT_SIDE_ERROR_MESSAGE[\n                          PRACTIS_SET_ALREADY_EXISTED_ERROR_MESSAGE\n                      ]\n                    : error.message;\n\n                showMessage(message, 'error');\n            }\n\n            onErrorCallback?.(error, completedResponses);\n        },\n        [\n            dispatch,\n            entityTitle,\n            hideModalDialog,\n            isRunning,\n            onErrorCallback,\n            scope,\n            shouldShowModals,\n            showMessage,\n        ]\n    );\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @param { Record<string, unknown> | undefined } responses\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(\n        (responses?: Record<string, unknown>) => {\n            Promise.resolve().then(() => {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n\n                actionList.current = [];\n                isRunning && setIsRunning(false);\n                showMessage(\n                    `${entityTitle} has been ${convertPresentVerbToPastVerb(\n                        scope\n                    )}`,\n                    'success'\n                );\n\n                onSuccessCallback?.(responses);\n            });\n        },\n        [\n            entityTitle,\n            hideModalDialog,\n            isRunning,\n            onSuccessCallback,\n            scope,\n            showMessage,\n        ]\n    );\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList.current,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopDuplicateLibraryBulkActionService\n     * @returns { void }\n     */\n    const handleStopDuplicateLibraryBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            hideModalDialog();\n            isRunning && setIsRunning(false);\n            actionList.current = [];\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, setIsStopped]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle: `${capitalize(scope)} ${entityTitle}`,\n                            onStopBulkActionService:\n                                handleStopDuplicateLibraryBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n        });\n    }, [\n        shouldShowModals,\n        setIsStopped,\n        dispatch,\n        scope,\n        entityTitle,\n        handleStopDuplicateLibraryBulkActionService,\n        hideModalDialog,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    /**\n     * @description Call the service runner.\n     * @function callback\n     * @param { ChunkRequestActionInterface<any>[] } action\n     * @returns { void }\n     */\n    return useCallback(\n        (duplicateLibraryActionList: ChunkRequestActionInterface<any>[]) => {\n            actionList.current = duplicateLibraryActionList;\n\n            setIsRunning(true);\n        },\n        []\n    );\n}\n\n/**\n * @description function to generate challenge from scenario.\n * @function useGenerateChallengeBulActionService\n * @param { Function | undefined } onSuccessCallback\n * @param { Function | undefined } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useGenerateChallengeBulActionService(\n    onSuccessCallback?: (responses?: Record<string, unknown>) => void,\n    onErrorCallback?: (\n        error?: ErrorResult,\n        completedResponses?: Record<string, unknown>\n    ) => void\n) {\n    const generateChallengeData = useRef<GenerateChallengeData>(\n        initialGenerateChallengeData\n    );\n\n    const { title, description, sourceScenarioId, lines, labelIds, tryLimit } =\n        generateChallengeData.current;\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const createNewChallenge = useCreateChallengeApi();\n    const assignLibraryLabels = useAssignLibraryEntityLabelsService();\n    const assignLinesToChallenge = useAssignLinesToChallengeApi();\n\n    const dispatch = useDispatch();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    let actionList: ChunkRequestActionInterface<any> = {\n        actionName: CREATE_CHALLENGE_ACTION,\n        actionFunction: createNewChallenge,\n        actionFunctionOptions: {\n            parameters: {\n                challengeInfo: {\n                    title,\n                    description,\n                    sourceScenarioId,\n                    tryLimit,\n                },\n                itemPerChunk: 1,\n            },\n            fieldName: 'itemPerChunk',\n        },\n    };\n\n    const childActionList: ChunkRequestActionInterface<any>[] = [];\n\n    /**\n     * @function handleAssignLinesToChallengeService\n     * @param { { id: number} } entityData\n     * @param { ScriptLine[] } currentLines\n     * @returns { Promise<void> }\n     */\n    const handleAssignLinesToChallengeService = useCallback(\n        async (entityData: { id: number }, currentLines: ScriptLine[]) => {\n            const createdChallengeId = entityData?.id;\n\n            if (createdChallengeId) {\n                const createdChallengeLines = currentLines?.map(line => {\n                    const {\n                        audioId = 0,\n                        duration = 0,\n                        position = null,\n                        text = '',\n                        speaker = '',\n                        keywords = [],\n                    } = line || {};\n\n                    return {\n                        audioId,\n                        duration,\n                        position,\n                        text,\n                        speaker,\n                        keywords,\n                    } as ChallengeLine;\n                });\n\n                await assignLinesToChallenge(\n                    createdChallengeId,\n                    createdChallengeLines\n                );\n            }\n        },\n        [assignLinesToChallenge]\n    );\n\n    /**\n     * @function handleAssignLinesToChallenge\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLinesToChallenge = useCallback(\n        (\n            currentLines: ScriptLine[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLinesToChallengeOptions = {\n                parameters: {\n                    entityData: [],\n                    currentLines,\n                    itemPerChunk: 1,\n                },\n                fieldName: 'itemPerChunk',\n                secondaryFieldName: 'entityData',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LINES_TO_CHALLENGE_ACTION,\n                actionFunction: handleAssignLinesToChallengeService,\n                actionFunctionOptions: assignLinesToChallengeOptions as any,\n            });\n        },\n        [handleAssignLinesToChallengeService]\n    );\n\n    /**\n     * @function handleAssignLabelsToChallenge\n     * @param { number[] } labelIds\n     * @param { ChunkRequestActionInterface<any>[] } childActionList\n     * @returns { void }\n     */\n    const handleAssignLabelsToChallenge = useCallback(\n        (\n            labelIds: number[],\n            childActionList: ChunkRequestActionInterface<any>[]\n        ) => {\n            const assignLabelsToEntityServiceOptions = {\n                parameters: {\n                    labels: uniqBy(labelIds, id => id),\n                    entityId: [],\n                    entityName: 'challenge',\n                },\n                fieldName: 'labels',\n                secondaryFieldName: 'entityId',\n            };\n\n            childActionList.push({\n                actionName: ASSIGN_LABELS_TO_CHALLENGE_ACTION,\n                actionFunction: assignLibraryLabels,\n                actionFunctionOptions:\n                    assignLabelsToEntityServiceOptions as any,\n            });\n        },\n        [assignLibraryLabels]\n    );\n\n    if (!isEmpty(lines)) {\n        handleAssignLinesToChallenge(lines, childActionList);\n    }\n\n    if (!isEmpty(labelIds)) {\n        handleAssignLabelsToChallenge(labelIds, childActionList);\n    }\n\n    if (!isEmpty(childActionList)) {\n        actionList = { ...actionList, ...{ childActionList } };\n    }\n\n    const shouldShowModals = !isEmpty(generateChallengeData.current);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @param { ErrorResult | undefined } error\n     * @param { Record<string, unknown> | undefined  } completedResponses\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(\n        (error?: ErrorResult, completedResponses?: Record<string, unknown>) => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_FAILED_MODAL',\n                        modalProps: {\n                            modalTitle: `Generating Challenge`,\n                            onClose: hideModalDialog,\n                        } as GeneralBulkActionModalInterface,\n                    })\n                );\n            }\n\n            generateChallengeData.current = initialGenerateChallengeData;\n            isRunning && setIsRunning(false);\n            error?.message && showMessage(error.message, 'error');\n\n            onErrorCallback?.(error, completedResponses);\n        },\n        [\n            dispatch,\n            hideModalDialog,\n            isRunning,\n            onErrorCallback,\n            shouldShowModals,\n            showMessage,\n        ]\n    );\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @param { Record<string, unknown> | undefined } responses\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(\n        (responses?: Record<string, unknown>) => {\n            Promise.resolve().then(() => {\n                setTimeout(() => {\n                    hideModalDialog();\n                }, 900);\n\n                generateChallengeData.current = initialGenerateChallengeData;\n\n                isRunning && setIsRunning(false);\n\n                onSuccessCallback?.(responses);\n            });\n        },\n        [hideModalDialog, isRunning, onSuccessCallback]\n    );\n\n    const { setIsStopped } = useChunkRequestsService(\n        [actionList],\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopDuplicateLibraryBulkActionService\n     * @returns { void }\n     */\n    const handleStopDuplicateLibraryBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            hideModalDialog();\n            isRunning && setIsRunning(false);\n            generateChallengeData.current = initialGenerateChallengeData;\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, setIsStopped]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            if (shouldShowModals) {\n                dispatch(\n                    showModalDialog({\n                        modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                        modalProps: {\n                            modalTitle: `Generating Challenge`,\n                            onStopBulkActionService:\n                                handleStopDuplicateLibraryBulkActionService,\n                            onClose: hideModalDialog,\n                        },\n                    })\n                );\n            }\n\n            setIsStopped(false);\n        });\n    }, [\n        shouldShowModals,\n        setIsStopped,\n        dispatch,\n        handleStopDuplicateLibraryBulkActionService,\n        hideModalDialog,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    /**\n     * @description Call the service runner.\n     * @function callback\n     * @param { GenerateChallengeData } generateChallengeData\n     * @returns { void }\n     */\n    return useCallback((data: GenerateChallengeData) => {\n        generateChallengeData.current = data;\n\n        setIsRunning(true);\n    }, []);\n}\n","import {\r\n    createContext,\r\n    FC,\r\n    useCallback,\r\n    useEffect,\r\n    useRef,\r\n    useState,\r\n} from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { RouteComponentProps, useHistory, withRouter } from 'react-router-dom';\r\nimport NavigationPrompt from 'react-router-navigation-prompt';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport {\r\n    Scenario,\r\n    ScenarioStatuses,\r\n    Status,\r\n} from '../../../constants/interfaces/Scenario';\r\nimport {\r\n    ScriptLine,\r\n    ScriptLineSpeaker,\r\n} from '../../../constants/interfaces/ScriptLine';\r\nimport CustomBody from './components/CustomBody';\r\nimport CustomHeader from './components/CustomHeader/CustomHeader';\r\nimport { getScenarioState, ScenarioCases } from './store/reducers';\r\nimport {\r\n    useClearScriptLinesService,\r\n    useCreateScriptLineService,\r\n    useGetRoleplayForScenario,\r\n    useGetScenarioService,\r\n    useModifyScenarioService,\r\n    useResetScenarioService,\r\n} from './store/services';\r\nimport {\r\n    useCreatePlaylistService,\r\n    useResetAudioService,\r\n} from '../../../features/player/store/services';\r\nimport { validationService } from './tools';\r\nimport { buildPageTitle } from '../../../helpers/functions/page-title-helpers';\r\nimport { EditModeValues } from '../../../constants/enums/EditModeValues';\r\nimport { useLoadVoiceSettingsService } from '../../CompanySettings/store/services';\r\nimport styled from 'styled-components';\r\nimport { usePermissionsState } from '../../../features/permissions/store/state';\r\nimport { CheckPermission } from '../../../features/permissions';\r\nimport ActionPanel from './components/ActionPanel/ActionPanel';\r\nimport { useLabelsState } from '../../../features/labels/store/states';\r\nimport {\r\n    useSetAssignLabelsActionService,\r\n    useSetPreviouslyAssignedLabelsAction,\r\n} from '../../../features/labels/store/services';\r\nimport {\r\n    calculateAssignedLabels,\r\n    calculateRemovedLabels,\r\n    useCalculatePreSelectedLabelsForSingleItem,\r\n} from '../../../features/labels/tools';\r\nimport { isTeamLeader } from '../../../constants/enums';\r\nimport { usePortableLabelsState } from '../../../features/portableLabels/store/states';\r\nimport { UserProfile } from '../../../constants/interfaces/User';\r\nimport { getProfileState } from '../../UserProfile/store/reducers';\r\nimport { ModalPageContainer } from '../../../ui/components/ModalPage';\r\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\r\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\r\nimport {\r\n    useGenerateCreateDuplicateScenarioActionList,\r\n    useGenerateEditScenarioActionList,\r\n} from '../../../features/library/services/LibraryBulkActionsService/helpers';\r\nimport { useCreateEditDuplicateLibraryBulActionService } from '../../../features/library/services/LibraryBulkActionsService';\r\nimport {\r\n    CreateNewScenarioInfo,\r\n    EditScenarioInfo,\r\n} from '../../../features/library/services/LibraryBulkActionsService/types';\r\nimport {\r\n    useCreateEditScenarioFailedCallback,\r\n    useCreateEditScenarioSuccessCallback,\r\n    useHandleArchiveScenario,\r\n} from './services';\r\nimport DialogWrapper from '../../../ui/components/DialogWrapper/DialogWrapper';\r\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\r\n\r\nconst uuid = require('uuid/v1');\r\nconst qs = require('query-string');\r\n\r\nexport const StyledContainer = styled.div`\r\n    overflow: auto;\r\n    height: 100%;\r\n    display: block;\r\n    padding: 0 32px;\r\n    background: ${props => props.theme.Colors.white};\r\n    border-top-left-radius: 8px;\r\n    border-bottom-left-radius: 8px;\r\n`;\r\n\r\nexport const StyledLoadingContainer = styled.div`\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n`;\r\n\r\nconst CreatedByWrapper = styled.div`\r\n    padding: 0 16px 10px;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    font-size: 13px;\r\n`;\r\n\r\nexport const StatusItems: Array<{\r\n    value: string;\r\n    name: string;\r\n    confirm: boolean;\r\n    message: string;\r\n}> = [\r\n        {\r\n            value: 'DRAFT',\r\n            name: 'Draft',\r\n            message: 'Scenario saved as Draft',\r\n            confirm: false,\r\n        },\r\n        {\r\n            value: 'ACTIVE',\r\n            name: 'Active',\r\n            message: 'Scenario published',\r\n            confirm: false,\r\n        },\r\n        {\r\n            value: 'ARCHIVED',\r\n            name: 'Archived',\r\n            message: 'Scenario archived',\r\n            confirm: true,\r\n        },\r\n        {\r\n            value: 'DELETED',\r\n            name: 'Deleted',\r\n            message: 'Scenario deleted',\r\n            confirm: true,\r\n        },\r\n    ];\r\n\r\nexport const LoadingSaveContext = createContext(false);\r\nexport const ScenarioContainerContext = createContext<any>(null);\r\nexport const PlayAudioContext = createContext<any>(null);\r\nexport const EditModeContext = createContext<{\r\n    mode: string;\r\n    action: (mode: EditModeValues) => void;\r\n}>({\r\n    mode: 'view',\r\n    action: () => { },\r\n});\r\n\r\nexport interface NewScenarioInterface extends RouteComponentProps {\r\n    profile?: UserProfile;\r\n    scenario: Scenario;\r\n    scenarioId: string;\r\n    loading: boolean;\r\n    isNew: boolean;\r\n    scenarioCase: ScenarioCases;\r\n    handleFetchScenario: (scenarioId: number) => void;\r\n    handleCreateScriptLine?: any;\r\n    handleCreatePlaylist?: any;\r\n    handleResetPlaylist: () => void;\r\n    handleResetScenario: () => void;\r\n    handleLoadVoiceSettings: () => void;\r\n    itemId?: number;\r\n    location: any;\r\n    match: any;\r\n    dispatch?: any;\r\n    closePath: string;\r\n    closeGoingBack: boolean;\r\n    showMessage: (\r\n        message: string | string[],\r\n        status: 'error' | 'success'\r\n    ) => void;\r\n    clearScriptLines: () => void;\r\n}\r\n\r\nconst NewScenario: FC<NewScenarioInterface> = ({\r\n    history,\r\n    profile,\r\n    scenario,\r\n    scenarioId,\r\n    loading,\r\n    isNew,\r\n    scenarioCase,\r\n    closeGoingBack,\r\n    handleCreateScriptLine,\r\n    handleResetScenario,\r\n    handleFetchScenario,\r\n    handleResetPlaylist,\r\n    handleCreatePlaylist,\r\n    handleLoadVoiceSettings,\r\n    closePath,\r\n    showMessage,\r\n    clearScriptLines,\r\n}) => {\r\n    const createEditScenarioSuccessCallback =\r\n        useCreateEditScenarioSuccessCallback();\r\n    const createEditScenarioFailedCallback =\r\n        useCreateEditScenarioFailedCallback();\r\n    const handleArchiveScenario = useHandleArchiveScenario();\r\n    const getRoleplayForScenario = useGetRoleplayForScenario()\r\n    const location = history.location;\r\n\r\n    const [editMode, setEditMode] = useState<EditModeValues>(\r\n        EditModeValues.VIEW\r\n    );\r\n    const [loadingSave, setLoadingSave] = useState(false);\r\n    const parentRef = useRef(null);\r\n    const permissions = usePermissionsState();\r\n    const isTeamLead = isTeamLeader(profile?.role?.name);\r\n    const [titleError, setTitleError] = useState(false);\r\n    const roleplayId = qs.parse(location.search)?.roleplayId;\r\n    const contentId = qs.parse(location.search)?.contentId;\r\n    const modifyScenario = useModifyScenarioService();\r\n\r\n    useHtmlPageTitle(\r\n        buildPageTitle('Scenario', editMode, isNew),\r\n        [scenario.title]\r\n    );\r\n\r\n    const isLoaded = !!scenario.id;\r\n\r\n    const onUnload = useCallback(\r\n        (e: any) => {\r\n            e.preventDefault();\r\n            if (\r\n                scenarioCase === 'modified' &&\r\n                permissions.includes(NEW_PERMISSIONS.UPDATE_SCENARIO)\r\n            ) {\r\n                e.returnValue = true;\r\n            }\r\n        },\r\n        [scenarioCase, permissions]\r\n    );\r\n\r\n    useEffect(() => {\r\n        setEditMode(\r\n            (isLoaded || isNew) && scenario.status === ScenarioStatuses.DRAFT && !isTeamLead\r\n                ? EditModeValues.EDIT\r\n                : EditModeValues.VIEW\r\n        );\r\n    }, [isLoaded, isNew, scenario.status, setEditMode, isTeamLead]);\r\n\r\n    useEffect(() => {\r\n        if (!isTeamLeader(profile?.role?.name)) {\r\n            handleLoadVoiceSettings();\r\n        }\r\n    }, [handleLoadVoiceSettings, profile?.role?.name]);\r\n\r\n    useEffect(() => {\r\n        if (scenarioId !== 'new') {\r\n            handleFetchScenario(Number(scenarioId));\r\n        } else {\r\n            handleResetScenario();\r\n            handleResetPlaylist();\r\n        }\r\n        return () => {\r\n            handleResetScenario();\r\n            handleResetPlaylist();\r\n        };\r\n    }, [\r\n        handleResetScenario,\r\n        handleFetchScenario,\r\n        handleResetPlaylist,\r\n        scenarioId,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        window.addEventListener('beforeunload', onUnload);\r\n        return () => {\r\n            window.removeEventListener('beforeunload', onUnload);\r\n        };\r\n    }, [onUnload]);\r\n\r\n    const createScriptLine = (speaker: ScriptLineSpeaker, text?: string) => {\r\n        const sendValues = {\r\n            id: `temp_${uuid()}`,\r\n            text: text ?? '',\r\n            speaker: speaker,\r\n            position: scenario.script ? scenario.script.lines.length + 1 : 1,\r\n            scriptId: scenario.scriptId,\r\n            keywords: [],\r\n        };\r\n\r\n        handleCreateScriptLine(sendValues);\r\n    };\r\n\r\n    const playAllAudio = () => {\r\n        handleResetPlaylist();\r\n        const filterItems = scenario.script.lines.filter(\r\n            (script: ScriptLine) => script.audioUrl\r\n        );\r\n        const playlistItems = filterItems.map(\r\n            (script: ScriptLine) => script.id\r\n        );\r\n        setTimeout(() => {\r\n            handleCreatePlaylist(playlistItems);\r\n        }, 150);\r\n    };\r\n\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState().data;\r\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\r\n    const setPreviouslyAssignedLabelsAction =\r\n        useSetPreviouslyAssignedLabelsAction();\r\n    const calculatePreSelectedLabels =\r\n        useCalculatePreSelectedLabelsForSingleItem();\r\n\r\n    const generateCreateScenarioActionList =\r\n        useGenerateCreateDuplicateScenarioActionList();\r\n\r\n    const generateEditScenarioActionList = useGenerateEditScenarioActionList();\r\n\r\n    const createLibraryBulkActionService =\r\n        useCreateEditDuplicateLibraryBulActionService(\r\n            isNew ? 'create' : 'update',\r\n            'Scenario',\r\n            responses =>\r\n                createEditScenarioSuccessCallback(setLoadingSave, responses),\r\n            (error, completedResponses) =>\r\n                createEditScenarioFailedCallback(\r\n                    setLoadingSave,\r\n                    error,\r\n                    completedResponses\r\n                )\r\n        );\r\n\r\n    const handleUpdateScenario = (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: Status\r\n    ) => {\r\n        setLoadingSave(true);\r\n        const response = validationService(\r\n            scenario,\r\n            status ? status : scenario.status\r\n        );\r\n\r\n        if (!response.valid) {\r\n            callbacks && callbacks.onCancel();\r\n            showMessage(response.message, 'error');\r\n            setLoadingSave(false);\r\n\r\n            if (response.name === 'name') {\r\n                setTitleError(true);\r\n            } else {\r\n                setTitleError(false);\r\n            }\r\n            return;\r\n        } else {\r\n            setTitleError(false);\r\n        }\r\n\r\n        const newScenarioInfo: CreateNewScenarioInfo = {\r\n            title: scenario.title,\r\n            description: scenario.description,\r\n            labelIds: calculateAssignedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            lines: scenario.script?.lines ? scenario.script?.lines.map((line, index) => ({ ...line, position: index + 1 })) : [],\r\n            status: status ?? scenario.status,\r\n        };\r\n\r\n        const editScenarioInfo: EditScenarioInfo = {\r\n            scenarioId: scenario.id ?? 0,\r\n            title: scenario.title,\r\n            description: scenario.description,\r\n            addedLabelIds: calculateAssignedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            deletedLabelIds: calculateRemovedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            lines: newScenarioInfo.lines ?? [],\r\n            status: status ?? scenario.status,\r\n        };\r\n\r\n        const createScenarioActionList =\r\n            generateCreateScenarioActionList(newScenarioInfo);\r\n\r\n        const editScenarioActionList =\r\n            generateEditScenarioActionList(editScenarioInfo);\r\n\r\n        if (status !== ScenarioStatuses.ARCHIVED) {\r\n            if (!scenario.id) {\r\n                createLibraryBulkActionService([createScenarioActionList]);\r\n            } else {\r\n                createLibraryBulkActionService(editScenarioActionList);\r\n            }\r\n        } else {\r\n            scenario?.id && handleArchiveScenario(scenario.id);\r\n        }\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (scenario.labels && scenario.labels.length > 0) {\r\n            const selectedLabelIds = scenario.labels;\r\n            const preAssignedLabels = calculatePreSelectedLabels(\r\n                selectedLabelIds,\r\n                labelsList\r\n            );\r\n            setAssignLabelsAction(preAssignedLabels);\r\n        } else {\r\n            setAssignLabelsAction([]);\r\n        }\r\n        return () => {\r\n            setAssignLabelsAction([]);\r\n        };\r\n    }, [\r\n        scenario.labels,\r\n        labelsList,\r\n        calculatePreSelectedLabels,\r\n        setAssignLabelsAction,\r\n    ]);\r\n\r\n    //initially set previousAssignedLabels\r\n    useEffect(() => {\r\n        if (!isEmpty(scenario.labels)) {\r\n            const selectedLabelIds = scenario.labels ?? [];\r\n            const preAssignedLabels = calculatePreSelectedLabels(\r\n                selectedLabelIds,\r\n                labelsList\r\n            );\r\n            setPreviouslyAssignedLabelsAction(preAssignedLabels);\r\n        } else {\r\n            setPreviouslyAssignedLabelsAction([]);\r\n        }\r\n        return () => {\r\n            setPreviouslyAssignedLabelsAction([]);\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [scenario.labels]);\r\n\r\n    useEffect(() => {\r\n        if (roleplayId && contentId) {\r\n            getRoleplayForScenario(roleplayId, contentId).then(({ aiLines, title, description }) => {\r\n                aiLines.forEach(line => createScriptLine(line.speaker, line.text));\r\n\r\n                modifyScenario(title || '', 'title');\r\n                modifyScenario(description || '', 'description');\r\n            });\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [roleplayId, contentId, getRoleplayForScenario])\r\n\r\n    const willBeLoaded = !isNew && scenarioCase === 'init' && !scenario?.id;\r\n    const showEmptyScreen = loading || willBeLoaded;\r\n    if (showEmptyScreen)\r\n        return (\r\n            <ModalPageContainer\r\n                closePath={closePath}\r\n                closeGoingBack={closeGoingBack}\r\n            >\r\n                <StyledLoadingContainer>\r\n                    {loading && <Loading />}\r\n                </StyledLoadingContainer>\r\n            </ModalPageContainer>\r\n        );\r\n    return (\r\n        <ModalPageContainer\r\n            closePath={closePath}\r\n            closeGoingBack={closeGoingBack}\r\n        >\r\n            <StyledContainer ref={parentRef}>\r\n                <EditModeContext.Provider\r\n                    value={{ mode: editMode, action: setEditMode }}\r\n                >\r\n                    <LoadingSaveContext.Provider value={loadingSave}>\r\n                        <CustomHeader\r\n                            scenario={scenario}\r\n                            handleUpdateScenario={handleUpdateScenario}\r\n                            modified={scenarioCase === 'modified'}\r\n                            isViewMode={isTeamLead}\r\n                        />\r\n                    </LoadingSaveContext.Provider>\r\n                    <ActionPanel scenario={scenario} titleError={titleError} />\r\n                    {scenario.creator && (\r\n                        <CreatedByWrapper data-test=\"created-by-subtitle\">\r\n                            Created by {scenario.creator?.firstName}{' '}\r\n                            {scenario.creator?.lastName}\r\n                        </CreatedByWrapper>\r\n                    )}\r\n                    <TableDivider />\r\n                    <ScenarioContainerContext.Provider value={parentRef}>\r\n                        <PlayAudioContext.Provider value={playAllAudio}>\r\n                            <CustomBody\r\n                                createScriptLine={createScriptLine}\r\n                                scenario={scenario}\r\n                            />\r\n                        </PlayAudioContext.Provider>\r\n                    </ScenarioContainerContext.Provider>\r\n                </EditModeContext.Provider>\r\n                <CheckPermission\r\n                    permissions={[NEW_PERMISSIONS.UPDATE_SCENARIO]}\r\n                >\r\n                    <NavigationPrompt when={scenarioCase === 'modified'}>\r\n                        {({ onConfirm, onCancel }) => (\r\n                            <DialogWrapper\r\n                                modalTitle=\"Discard changes?\"\r\n                                description={\r\n                                    'Do you want to save or discard changes?'\r\n                                }\r\n                                cancelButtonText={'Discard'}\r\n                                confirmButtonText={'Save'}\r\n                                onCancel={onConfirm}\r\n                                onConfirm={() => {\r\n                                    handleUpdateScenario({\r\n                                        onConfirm: onConfirm,\r\n                                        onCancel: onCancel,\r\n                                    });\r\n                                }}\r\n                                dataTest=\"confirmation-modal\"\r\n                            />\r\n                        )}\r\n                    </NavigationPrompt>\r\n                </CheckPermission>\r\n            </StyledContainer>\r\n        </ModalPageContainer>\r\n    );\r\n};\r\n\r\nexport interface NewScenarioContainerProps\r\n    extends RouteComponentProps<{ scenarioId: string }> {\r\n    closePath: string;\r\n    closeGoingBack: boolean;\r\n}\r\nexport const NewScenarioContainer: FC<NewScenarioContainerProps> = ({\r\n    closePath,\r\n    closeGoingBack,\r\n    location,\r\n    match,\r\n}) => {\r\n    const history = useHistory();\r\n    const profile = useSelector(getProfileState);\r\n    const isNew = match.params.scenarioId === 'new';\r\n\r\n    const scenario = useSelector(getScenarioState).info;\r\n    const loading = useSelector(getScenarioState).loading;\r\n    const scenarioCase = useSelector(getScenarioState).case;\r\n\r\n    const getScenario = useGetScenarioService();\r\n    const createScriptLine = useCreateScriptLineService();\r\n    const clearScriptLines = useClearScriptLinesService();\r\n    const resetScenario = useResetScenarioService();\r\n    const createScriptPlaylist = useCreatePlaylistService();\r\n    const resetPlaylist = useResetAudioService();\r\n    const showMessage = useShowMessage();\r\n    const loadVoiceSettings = useLoadVoiceSettingsService();\r\n    const handleLoadVoiceSettings = useCallback(\r\n        () => profile?.companyId && loadVoiceSettings(profile?.companyId),\r\n        [loadVoiceSettings, profile?.companyId]\r\n    );\r\n\r\n    return (\r\n        <NewScenario\r\n            location={location}\r\n            history={history}\r\n            profile={profile}\r\n            match={match}\r\n            closeGoingBack={closeGoingBack}\r\n            closePath={closePath}\r\n            scenario={scenario}\r\n            scenarioId={match.params.scenarioId}\r\n            isNew={isNew}\r\n            loading={loading}\r\n            scenarioCase={scenarioCase}\r\n            handleFetchScenario={getScenario}\r\n            handleCreateScriptLine={createScriptLine}\r\n            handleCreatePlaylist={createScriptPlaylist}\r\n            handleResetPlaylist={resetPlaylist}\r\n            handleResetScenario={resetScenario}\r\n            handleLoadVoiceSettings={handleLoadVoiceSettings}\r\n            showMessage={showMessage}\r\n            clearScriptLines={clearScriptLines}\r\n        />\r\n    );\r\n};\r\n\r\nexport default withRouter(NewScenarioContainer);\r\n","import { Scenario } from '../../../../constants/interfaces/Scenario';\nimport {\n    PractisSetContent,\n    PractisSets,\n} from '../../../../constants/interfaces/PractisSets';\nimport { Challenge } from '../../../../constants/interfaces/Challenge';\n\nexport enum ACTIONS {\n    GET_SINGLE_PRACTIS_SET_START = 'GET_SINGLE_PRACTIS_SET_START',\n    GET_SINGLE_PRACTIS_SET_SUCCESS = 'GET_SINGLE_PRACTIS_SET_SUCCESS',\n    GET_SINGLE_PRACTIS_SET_FAILURE = 'GET_SINGLE_PRACTIS_SET_FAILURE',\n\n    SEARCH_PRACTIS_SCENARIOS_START = 'SEARCH_PRACTIS_SCENARIOS_START',\n    SEARCH_PRACTIS_SCENARIOS_SUCCESS = 'SEARCH_PRACTIS_SCENARIOS_SUCCESS',\n    SEARCH_PRACTIS_SCENARIOS_FAILURE = 'SEARCH_PRACTIS_SCENARIOS_FAILURE',\n\n    GET_PRACTIS_SCENARIOS_COUNT_SUCCESS = 'GET_PRACTIS_SCENARIOS_COUNT_SUCCESS',\n\n    SEARCH_PRACTIS_CHALLENGES_START = 'SEARCH_PRACTIS_CHALLENGES_START',\n    SEARCH_PRACTIS_CHALLENGES_SUCCESS = 'SEARCH_PRACTIS_CHALLENGES_SUCCESS',\n    SEARCH_PRACTIS_CHALLENGES_FAILURE = 'SEARCH_PRACTIS_CHALLENGES_FAILURE',\n\n    GET_PRACTIS_CHALLENGES_COUNT_SUCCESS = 'GET_PRACTIS_CHALLENGES_COUNT_SUCCESS',\n\n    RESET_PRACTIS_SETS = 'RESET_PRACTIS_SETS',\n    UPDATE_PRACTIS_CONTENT = 'UPDATE_PRACTIS_CONTENT',\n    PRACTIS_CONTENT_REP_COUNT_INCREASE = 'PRACTIS_CONTENT_REP_COUNT_INCREASE',\n    PRACTIS_CONTENT_REP_COUNT_DECREASE = 'PRACTIS_CONTENT_REP_COUNT_DECREASE',\n\n    STORE_PRACTIS_SET_TEMP_COPY = 'STORE_PRACTIS_SET_TEMP_COPY',\n    RESTORE_PRACTIS_SET_FROM_TEMP = 'RESTORE_PRACTIS_SET_FROM_TEMP',\n\n    MODIFY_PRACTIS_SET = 'MODIFY_PRACTIS_SET',\n}\n\nexport function searchPractisScenariosStart() {\n    return {\n        type: ACTIONS.SEARCH_PRACTIS_SCENARIOS_START as ACTIONS.SEARCH_PRACTIS_SCENARIOS_START,\n    };\n}\n\nexport function searchPractisScenariosSuccess(data: Scenario[]) {\n    return {\n        type: ACTIONS.SEARCH_PRACTIS_SCENARIOS_SUCCESS as ACTIONS.SEARCH_PRACTIS_SCENARIOS_SUCCESS,\n        data,\n    };\n}\n\nexport function searchPractisScenariosFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_PRACTIS_SCENARIOS_FAILURE as ACTIONS.SEARCH_PRACTIS_SCENARIOS_FAILURE,\n        error,\n    };\n}\n\nexport function getPractisScenarioCountSuccess(count: number) {\n    return {\n        type: ACTIONS.GET_PRACTIS_SCENARIOS_COUNT_SUCCESS as ACTIONS.GET_PRACTIS_SCENARIOS_COUNT_SUCCESS,\n        count,\n    };\n}\n\nexport function searchPractisChallengesStart() {\n    return {\n        type: ACTIONS.SEARCH_PRACTIS_CHALLENGES_START as ACTIONS.SEARCH_PRACTIS_CHALLENGES_START,\n    };\n}\n\nexport function searchPractisChallengesSuccess(data: Challenge[]) {\n    return {\n        type: ACTIONS.SEARCH_PRACTIS_CHALLENGES_SUCCESS as ACTIONS.SEARCH_PRACTIS_CHALLENGES_SUCCESS,\n        data,\n    };\n}\n\nexport function searchPractisChallengesFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_PRACTIS_CHALLENGES_FAILURE as ACTIONS.SEARCH_PRACTIS_CHALLENGES_FAILURE,\n        error,\n    };\n}\n\nexport function getPractisChallengesCountSuccess(count: number) {\n    return {\n        type: ACTIONS.GET_PRACTIS_CHALLENGES_COUNT_SUCCESS as ACTIONS.GET_PRACTIS_CHALLENGES_COUNT_SUCCESS,\n        count,\n    };\n}\n\nexport function updatePractisContentAction(data: PractisSetContent[]) {\n    return {\n        type: ACTIONS.UPDATE_PRACTIS_CONTENT as ACTIONS.UPDATE_PRACTIS_CONTENT,\n        data,\n    };\n}\n\nexport function practisContentRepCountIncrease(itemId: number) {\n    return {\n        type: ACTIONS.PRACTIS_CONTENT_REP_COUNT_INCREASE as ACTIONS.PRACTIS_CONTENT_REP_COUNT_INCREASE,\n        itemId,\n    };\n}\n\nexport function practisContentRepCountDecrease(itemId: number) {\n    return {\n        type: ACTIONS.PRACTIS_CONTENT_REP_COUNT_DECREASE as ACTIONS.PRACTIS_CONTENT_REP_COUNT_DECREASE,\n        itemId,\n    };\n}\n\nexport function resetPractisSetsAction() {\n    return {\n        type: ACTIONS.RESET_PRACTIS_SETS as ACTIONS.RESET_PRACTIS_SETS,\n    };\n}\n\nexport function getSinglePractisSetStart() {\n    return {\n        type: ACTIONS.GET_SINGLE_PRACTIS_SET_START as ACTIONS.GET_SINGLE_PRACTIS_SET_START,\n    };\n}\n\nexport function getSinglePractisSetSuccess(data: PractisSets) {\n    return {\n        type: ACTIONS.GET_SINGLE_PRACTIS_SET_SUCCESS as ACTIONS.GET_SINGLE_PRACTIS_SET_SUCCESS,\n        data,\n    };\n}\n\nexport function getSinglePractisSetFailure(error: any) {\n    return {\n        type: ACTIONS.GET_SINGLE_PRACTIS_SET_FAILURE as ACTIONS.GET_SINGLE_PRACTIS_SET_FAILURE,\n        error,\n    };\n}\n\nexport function modifyPractisSetAction(\n    data: PractisSets,\n    field: string,\n    silent?: boolean\n) {\n    return {\n        type: ACTIONS.MODIFY_PRACTIS_SET as ACTIONS.MODIFY_PRACTIS_SET,\n        field: field,\n        data: data,\n        silent: silent,\n    };\n}\n\nexport function storePractisSetTempCopyAction() {\n    return {\n        type: ACTIONS.STORE_PRACTIS_SET_TEMP_COPY as ACTIONS.STORE_PRACTIS_SET_TEMP_COPY,\n    };\n}\n\nexport function restorePractisSetFromTempAction() {\n    return {\n        type: ACTIONS.RESTORE_PRACTIS_SET_FROM_TEMP as ACTIONS.RESTORE_PRACTIS_SET_FROM_TEMP,\n    };\n}\n","import {\n    PractisSetContent,\n    PractisSetStatuses,\n} from '../../../constants/interfaces/PractisSets';\nimport { Variables } from '../../../theme/variables';\n\nexport enum PractisSetEntityTypes {\n    CHALLENGE = 'CHALLENGE',\n    SCENARIO = 'SCENARIO',\n}\n\nconst PractisSetEntityTypeNames = {\n    [PractisSetEntityTypes.CHALLENGE as string]: 'Challenge',\n    [PractisSetEntityTypes.SCENARIO as string]: 'Scenario',\n};\n\nexport function practisSetEntityTypeName(type?: string): string {\n    return (type && PractisSetEntityTypeNames[type]) || type || '';\n}\n\nconst practisSetEntityTypeColors = {\n    [PractisSetEntityTypes.CHALLENGE as string]: Variables.Colors.coral,\n    [PractisSetEntityTypes.SCENARIO as string]: Variables.Colors.softBlue,\n};\n\nexport function practisSetEntityTypeColor(type?: string): string {\n    return (\n        (type && practisSetEntityTypeColors[type]) || Variables.Colors.softBlue\n    );\n}\n\nconst PractisSetStatusNames = {\n    [PractisSetStatuses.ACTIVE as string]: 'Active',\n    [PractisSetStatuses.ARCHIVED as string]: 'Archived',\n    [PractisSetStatuses.DRAFT as string]: 'Draft',\n    [PractisSetStatuses.DELETED as string]: 'Deleted',\n};\n\nexport function PractisSetStatusName(status?: string): string {\n    return (status && PractisSetStatusNames[status]) || status || '';\n}\n\nexport function calculatePractisSetTotalDuration(data: any) {\n    const newDurations = data\n        .filter(\n            (content: PractisSetContent) =>\n                content.type === PractisSetEntityTypes.SCENARIO &&\n                content.scenario?.script?.totalDuration\n        )\n        .map((content: PractisSetContent) => {\n            if (content?.scenario?.script?.totalDuration && content.minRepsCount) {\n                return content.scenario.script.totalDuration* content.minRepsCount;\n            } else {\n                return content.scenario?.script?.totalDuration;\n            }\n        });\n\n    return newDurations.length > 0\n        ? newDurations.reduce((a: number, b: number) => a! + b!)\n        : 0;\n}","import { ScriptLine, ScriptLineSpeaker } from '../../../constants/interfaces/ScriptLine';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\n\nexport const validationService = (scenario: Scenario, status: string) => {\n    const output = {\n        valid: true,\n        message: '',\n        name: '',\n    };\n\n    switch (status) {\n        case 'DELETED':\n            output.valid = true;\n            break;\n        case 'ACTIVE':\n            if (!scenario.title?.trim()) {\n                output.valid = false;\n                output.message = 'Title required';\n                output.name = 'name';\n            } else if (!scenario.script.lines.length) {\n                output.valid = false;\n                output.message = 'Scenario should have at least one line';\n            } else if (!scenario.script.lines.find(line => line.speaker === ScriptLineSpeaker.REP)) {\n                output.valid = false;\n                output.message = 'Rep line required!';\n            } else if (\n                !scenario.script.totalDuration ||\n                scenario.script.totalDuration < 0.1\n            ) {\n                output.valid = false;\n                output.message = 'Audio records required';\n            }\n            scenario.script.lines.map((line: ScriptLine) => {\n                if (!line.audioUrl) {\n                    output.valid = false;\n                    output.message = 'Audio records required';\n                } else if (line.audioUrl && line.text.length === 0) {\n                    output.valid = false;\n                    output.message = 'Text is required';\n                } \n                return output;\n            });\n            break;\n        case 'DRAFT':\n            if (!scenario.title?.trim()) {\n                output.valid = false;\n                output.message = 'Title required';\n                output.name = 'name';\n            } else if (scenario.script.lines.some(line => !line.audioId)) {\n                output.valid = false;\n                output.message = 'Audio records required';\n            }\n            break;\n        case 'ARCHIVED':\n        default:\n            if (scenario.title.length < 1) {\n                output.valid = false;\n                output.message = 'Title required';\n            }\n    }\n    return output;\n};\n","import {\n    PractisSetContent,\n    PractisSets,\n    PractisSetStatuses,\n} from '../../../../constants/interfaces/PractisSets';\nimport { Scenario } from '../../../../constants/interfaces/Scenario';\nimport { Challenge } from '../../../../constants/interfaces/Challenge';\nimport { AppState } from '../../../../store/reducers';\nimport {\n    ACTIONS,\n    getPractisChallengesCountSuccess,\n    getPractisScenarioCountSuccess,\n    getSinglePractisSetFailure,\n    getSinglePractisSetStart,\n    getSinglePractisSetSuccess,\n    modifyPractisSetAction,\n    practisContentRepCountDecrease,\n    practisContentRepCountIncrease,\n    resetPractisSetsAction,\n    restorePractisSetFromTempAction,\n    searchPractisChallengesFailure,\n    searchPractisChallengesStart,\n    searchPractisChallengesSuccess,\n    searchPractisScenariosFailure,\n    searchPractisScenariosStart,\n    searchPractisScenariosSuccess,\n    storePractisSetTempCopyAction,\n    updatePractisContentAction,\n} from './actions';\nimport {\n    ACTIONS as LIBRARY_ACTIONS,\n    updateLibraryPractisSetSuccess,\n} from '../../../../features/library/store/actions';\nimport {\n    calculatePractisSetTotalDuration,\n    PractisSetEntityTypes,\n} from '../tools';\nimport {\n    withLabelsInitialState,\n    withLabelsReducer,\n} from '../../../../features/portableLabels/store/hors/withLabels';\nimport { compose, Reducer } from 'redux';\n\nexport interface PractisSetInterface {\n    info: PractisSets;\n    temp_info?: PractisSets;\n    scenarios: Scenario[];\n    totalScenarios?: number;\n    challenges: Challenge[];\n    totalChallenges?: number;\n    case: 'init' | 'created' | 'modified' | 'loaded' | 'updated' | 'error';\n    isScenariosLoading: boolean;\n    isChallengesLoading: boolean;\n    isLoading: boolean;\n    errors: string;\n}\n\nexport const initialPractisSetsState: PractisSetInterface = withLabelsInitialState(\n    {\n        info: {\n            name: '',\n            description: '',\n            scenarioCount: 0,\n            challengeCount: 0,\n            pacingId: null,\n            status: PractisSetStatuses.DRAFT,\n            content: [],\n            totalDuration: null,\n        },\n        scenarios: [],\n        totalScenarios: undefined,\n        challenges: [],\n        totalChallenges: undefined,\n        isLoading: false,\n        isScenariosLoading: false,\n        isChallengesLoading: false,\n        case: 'init',\n        errors: '',\n    },\n    'practisSet'\n);\n\ntype PractisSetActions =\n    | ReturnType<typeof getSinglePractisSetStart>\n    | ReturnType<typeof getSinglePractisSetSuccess>\n    | ReturnType<typeof getSinglePractisSetFailure>\n    | ReturnType<typeof modifyPractisSetAction>\n    | ReturnType<typeof searchPractisScenariosStart>\n    | ReturnType<typeof searchPractisScenariosSuccess>\n    | ReturnType<typeof searchPractisScenariosFailure>\n    | ReturnType<typeof searchPractisChallengesStart>\n    | ReturnType<typeof searchPractisChallengesSuccess>\n    | ReturnType<typeof searchPractisChallengesFailure>\n    | ReturnType<typeof getPractisChallengesCountSuccess>\n    | ReturnType<typeof getPractisScenarioCountSuccess>\n    | ReturnType<typeof resetPractisSetsAction>\n    | ReturnType<typeof updatePractisContentAction>\n    | ReturnType<typeof practisContentRepCountIncrease>\n    | ReturnType<typeof practisContentRepCountDecrease>\n    | ReturnType<typeof updateLibraryPractisSetSuccess>\n    | ReturnType<typeof storePractisSetTempCopyAction>\n    | ReturnType<typeof restorePractisSetFromTempAction>;\n\nexport const practisSetBaseReducer = (\n    state = initialPractisSetsState,\n    action: PractisSetActions\n): PractisSetInterface => {\n    switch (action.type) {\n        case ACTIONS.GET_SINGLE_PRACTIS_SET_START:\n            return {\n                ...state,\n                isLoading: true,\n            };\n        case ACTIONS.GET_SINGLE_PRACTIS_SET_SUCCESS:\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    ...action.data,\n                },\n                isLoading: false,\n                case: 'created',\n                errors: '',\n            };\n        case ACTIONS.GET_SINGLE_PRACTIS_SET_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                case: 'error',\n                errors: action.error,\n            };\n        case ACTIONS.MODIFY_PRACTIS_SET:\n            const newPractisSetsInfo: any = { ...state.info };\n            newPractisSetsInfo[action.field] = action.data;\n            return {\n                ...state,\n                info: {\n                    ...newPractisSetsInfo,\n                },\n                case: action.silent ? state.case : 'modified',\n            };\n        case ACTIONS.SEARCH_PRACTIS_SCENARIOS_START:\n            return {\n                ...state,\n                isScenariosLoading: true,\n            }\n        case ACTIONS.SEARCH_PRACTIS_SCENARIOS_SUCCESS:\n            return {\n                ...state,\n                scenarios: [\n                    ...action.data.map((scenario: Scenario) => {\n                        scenario.type = 'SCENARIO';\n                        scenario.minRepsCount = 1;\n                        return scenario;\n                    }),\n                ],\n                isScenariosLoading: false,\n                errors: '',\n            };\n        case ACTIONS.SEARCH_PRACTIS_SCENARIOS_FAILURE:\n            return {\n                ...state,\n                case: 'error',\n                isScenariosLoading: false,\n                errors: action.error,\n            };\n        case ACTIONS.SEARCH_PRACTIS_CHALLENGES_START:\n            return {\n                ...state,\n                isChallengesLoading: true,\n            }\n        case ACTIONS.SEARCH_PRACTIS_CHALLENGES_SUCCESS:\n            return {\n                ...state,\n                challenges: [\n                    ...action.data.map((challenge: Challenge) => {\n                        challenge.type = 'CHALLENGE';\n                        return challenge;\n                    }),\n                ],\n                isChallengesLoading: false,\n                errors: '',\n            };\n        case ACTIONS.SEARCH_PRACTIS_CHALLENGES_FAILURE:\n            return {\n                ...state,\n                case: 'error',\n                isChallengesLoading: false,\n                errors: action.error,\n            };\n        case ACTIONS.GET_PRACTIS_SCENARIOS_COUNT_SUCCESS:\n            return {\n                ...state,\n                errors: '',\n                totalScenarios: +action.count,\n            };\n        case ACTIONS.GET_PRACTIS_CHALLENGES_COUNT_SUCCESS:\n            return {\n                ...state,\n                errors: '',\n                totalChallenges: +action.count,\n            };\n        case ACTIONS.UPDATE_PRACTIS_CONTENT:\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    totalDuration: calculatePractisSetTotalDuration(\n                        action.data\n                    ),\n                    content: [...action.data],\n                },\n                case: 'modified',\n            };\n        case ACTIONS.PRACTIS_CONTENT_REP_COUNT_INCREASE: {\n            const newContent = state.info.content.map(\n                (content: PractisSetContent) => {\n                    const isScenario =\n                        content.type === PractisSetEntityTypes.SCENARIO;\n\n                    const contentId = isScenario\n                        ? content.scenario!.id\n                        : content.challenge!.id;    \n\n                    if (contentId === action.itemId && isScenario) {\n                        return {\n                            ...content,\n                            minRepsCount:\n                                content.minRepsCount &&\n                                content.minRepsCount + 1,\n                        };\n                    } else {\n                        return content;\n                    }\n                }\n            );\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    totalDuration: calculatePractisSetTotalDuration(newContent),\n                    content: newContent,\n                },\n                case: 'modified',\n            };\n        }\n        case ACTIONS.PRACTIS_CONTENT_REP_COUNT_DECREASE: {\n            const newContent = state.info.content.map(\n                (content: PractisSetContent) => {\n                    const isScenario =\n                        content.type === PractisSetEntityTypes.SCENARIO;\n\n                    const contentId = isScenario\n                        ? content.scenario!.id\n                        : content.challenge!.id;\n                    if (contentId === action.itemId && isScenario) {\n                        return {\n                            ...content,\n                            minRepsCount: content.minRepsCount\n                                ? content.minRepsCount === 1\n                                    ? 1\n                                    : content.minRepsCount - 1\n                                : 1,\n                        };\n                    } else {\n                        return content;\n                    }\n                }\n            );\n            return {\n                ...state,\n                info: {\n                    ...state.info,\n                    totalDuration: calculatePractisSetTotalDuration(newContent),\n                    content: newContent,\n                },\n                case: 'modified',\n            };\n        }\n        case LIBRARY_ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_SUCCESS:\n            return {\n                ...state,\n                case: 'updated',\n            };\n        case ACTIONS.STORE_PRACTIS_SET_TEMP_COPY:\n            return {\n                ...state,\n                temp_info: JSON.parse(JSON.stringify(state.info)),\n            };\n        case ACTIONS.RESTORE_PRACTIS_SET_FROM_TEMP:\n            return {\n                ...state,\n                info: JSON.parse(JSON.stringify(state.temp_info)),\n                case: 'init',\n            };\n        case ACTIONS.RESET_PRACTIS_SETS:\n            return {\n                ...initialPractisSetsState,\n                info: {\n                    ...initialPractisSetsState.info,\n                    content: [],\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nexport const practisSetReducer = compose<\n    Reducer<PractisSetInterface, PractisSetActions>\n>(withLabelsReducer({ reducerName: 'practisSet' }))(practisSetBaseReducer);\n\nexport const getPractisSetState = (state: AppState) => state.practisSet;\n","export enum PacingType {\n    SEQUENTIAL = 'SEQUENTIAL',\n    FREE = 'FREE',\n}\n\nconst pacingTypeNames = {\n    [PacingType.SEQUENTIAL as string]: 'Sequential',\n    [PacingType.FREE as string]: 'Free-Form',\n};\n\nexport function pacingTypeName(type?: string): string {\n    return (type && pacingTypeNames[type]) || type || '';\n}\n","import { SearchParams } from '../../../../constants/interfaces/filters';\nimport {\n    getPractisChallengesCountSuccess,\n    getPractisScenarioCountSuccess,\n    getSinglePractisSetFailure,\n    getSinglePractisSetStart,\n    getSinglePractisSetSuccess,\n    modifyPractisSetAction,\n    practisContentRepCountDecrease,\n    practisContentRepCountIncrease,\n    resetPractisSetsAction,\n    restorePractisSetFromTempAction,\n    searchPractisChallengesFailure,\n    searchPractisChallengesStart,\n    searchPractisChallengesSuccess,\n    searchPractisScenariosFailure,\n    searchPractisScenariosStart,\n    searchPractisScenariosSuccess,\n    storePractisSetTempCopyAction,\n    updatePractisContentAction,\n} from './actions';\nimport {\n    PractisSetContent,\n    PractisSets,\n} from '../../../../constants/interfaces/PractisSets';\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport {\n    useGetPractisSetApi,\n    useSearchChallengesApi,\n    useSearchScenariosApi,\n    useGetPractisSetContentApi,\n} from '../../../../api';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { createSearchLibraryParams } from '../../../../features/library/tools';\n\nexport const useSearchPractisScenarios = () => {\n    const dispatch = useDispatch();\n    const searchScenariosApi = useSearchScenariosApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (searchParams: SearchParams) => {\n            const searchScenariosParams =\n                createSearchLibraryParams(searchParams);\n\n            dispatch(searchPractisScenariosStart());\n            searchScenariosApi(searchScenariosParams)\n                .then(data => {\n                    dispatch(searchPractisScenariosSuccess(data.items));\n                    if (\n                        !searchParams?.searchTerm &&\n                        !searchParams?.labelIDs?.length\n                    ) {\n                        dispatch(getPractisScenarioCountSuccess(data.count));\n                    }\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchPractisScenariosFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchScenariosApi, showMessage]\n    );\n};\n\nexport const useSearchPractisChallenges = () => {\n    const dispatch = useDispatch();\n    const searchChallengesApi = useSearchChallengesApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (searchParams: SearchParams) => {\n            const searchChallengesParams =\n                createSearchLibraryParams(searchParams);\n            dispatch(searchPractisChallengesStart());\n            searchChallengesApi(searchChallengesParams)\n                .then(data => {\n                    dispatch(searchPractisChallengesSuccess(data.items));\n                    if (\n                        !searchParams?.searchTerm &&\n                        !searchParams?.labelIDs?.length\n                    ) {\n                        dispatch(getPractisChallengesCountSuccess(data.count));\n                    }\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchPractisChallengesFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchChallengesApi, showMessage]\n    );\n};\n\nexport const useGetSinglePractisSetService = () => {\n    const dispatch = useDispatch();\n    const getPractisSetApi = useGetPractisSetApi();\n    const getPractisSetContent = useGetPractisSetContentApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (practisSetid: number) => {\n            dispatch(getSinglePractisSetStart());\n            getPractisSetApi(practisSetid)\n                .then(data => {\n                    getPractisSetContent(practisSetid)\n                        .then(practisSetContentData => {\n                            const practisSetData = {\n                                ...data,\n                                content: practisSetContentData,\n                            };\n                            dispatch(\n                                getSinglePractisSetSuccess(practisSetData)\n                            );\n                        })\n                        .catch(() => {\n                            getSinglePractisSetSuccess(data);\n                        });\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(getSinglePractisSetFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getPractisSetApi, getPractisSetContent, showMessage]\n    );\n};\n\nexport const useUpdatePractisContentService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (data: PractisSetContent[]) => {\n            dispatch(updatePractisContentAction(data));\n        },\n        [dispatch]\n    );\n};\n\nexport const usePractisContentRepCountIncrease = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (itemId: number) => {\n            dispatch(practisContentRepCountIncrease(itemId));\n        },\n        [dispatch]\n    );\n};\n\nexport const usePractisContentRepCountDecrease = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (itemId: number) => {\n            dispatch(practisContentRepCountDecrease(itemId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useResetPractisSetService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetPractisSetsAction());\n    }, [dispatch]);\n};\n\nexport const useStorePractisSetTempCopyService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(storePractisSetTempCopyAction());\n    }, [dispatch]);\n};\n\nexport const useRestorePractisSetFromTempActionService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(restorePractisSetFromTempAction());\n    }, [dispatch]);\n};\n\nexport const useModifyPractisSetService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (value: any, field: keyof PractisSets, silent?: boolean) => {\n            dispatch(modifyPractisSetAction(value, field, silent));\n        },\n        [dispatch]\n    );\n};","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ArchiveIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M3.5 1.75a.25.25 0 0 1 .25-.25h3a.75.75 0 0 0 0 1.5h.5a.75.75 0 0 0 0-1.5h2.086a.25.25 0 0 1 .177.073l2.914 2.914a.25.25 0 0 1 .073.177v8.586a.25.25 0 0 1-.25.25h-.5a.75.75 0 0 0 0 1.5h.5A1.75 1.75 0 0 0 14 13.25V4.664c0-.464-.184-.909-.513-1.237L10.573.513A1.75 1.75 0 0 0 9.336 0H3.75A1.75 1.75 0 0 0 2 1.75v11.5c0 .649.353 1.214.874 1.515a.75.75 0 1 0 .752-1.298.25.25 0 0 1-.126-.217V1.75zM8.75 3a.75.75 0 0 0 0 1.5h.5a.75.75 0 0 0 0-1.5h-.5zM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25zm2 1.5A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75zm-1.25.75a.75.75 0 0 0 0 1.5h.5a.75.75 0 0 0 0-1.5h-.5zM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75zm-.75.75a1.75 1.75 0 0 0-1.75 1.75v3c0 .414.336.75.75.75h2.5a.75.75 0 0 0 .75-.75v-3a1.75 1.75 0 0 0-1.75-1.75h-.5zM7 12.25a.25.25 0 0 1 .25-.25h.5a.25.25 0 0 1 .25.25v2.25H7v-2.25z\"\n                    fill=\"currentColor\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default ArchiveIcon;\n","import React, { FC, useContext, useState } from 'react';\r\n\r\nimport { useSelector } from 'react-redux';\r\nimport styled from 'styled-components';\r\nimport { EditModeContext, LoadingSaveContext } from '../../PractisSets';\r\nimport { getPractisSetState } from '../../store/reducers';\r\nimport {\r\n    PractisSets,\r\n    PractisSetStatuses,\r\n} from '../../../../../constants/interfaces/PractisSets';\r\nimport { StatusModalConfirmation } from '../../../StatusModalConfirmation/StatusModalConfirmation';\r\nimport {\r\n    useModifyPractisSetService,\r\n    useRestorePractisSetFromTempActionService,\r\n    useStorePractisSetTempCopyService,\r\n} from '../../store/services';\r\nimport { buildPageTitle } from '../../../../../helpers/functions/page-title-helpers';\r\nimport { EditModeValues } from '../../../../../constants/enums/EditModeValues';\r\nimport { formatDate } from '../../../../../helpers/functions/date-convert';\r\nimport { Button } from '../../../../../ui/components/Button';\r\nimport ArchiveIcon from '../../../../../ui/icons/ArchiveIcon';\r\nimport { TableDivider } from '../../../../../ui/components/table-wrapper/table-divider';\r\nimport { useHandleRestoreArchivedPractisSet } from '../../services';\r\n\r\nconst StyledCustomWrapper = styled.div``;\r\n\r\nconst StyledCustomHeader = styled.div`\r\n    padding-left: 16px;\r\n    display: flex;\r\n    align-items: center;\r\n    flex-wrap: wrap;\r\n    height: 90px;\r\n`;\r\n\r\nconst StyledHeaderInput = styled.div`\r\n    flex: 1;\r\n    min-width: 150px;\r\n    margin-right: 16px;\r\n`;\r\n\r\nconst HeaderTitle = styled.div`\r\n    font-size: 20px;\r\n    font-weight: 800;\r\n    color: ${props => props.theme.Colors.black};\r\n`;\r\n\r\nconst PublishedDate = styled.div`\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst StyledHeaderActionItems = styled.div`\r\n    margin-left: 16px;\r\n`;\r\n\r\nconst StyledHeaderBottomActionItemsWrapper = styled.div`\r\n    display: flex;\r\n    flex-direction: row-reverse;\r\n    margin-bottom: 6px;\r\n`;\r\n\r\nconst StyledHeaderActionItemsWrapper = styled.div`\r\n    display: flex;\r\n`;\r\n\r\nconst StyledHeaderActions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 10px 0;\r\n    flex-wrap: wrap;\r\n`;\r\n\r\nconst EDIT_MODAL_INFO = {\r\n    id: 'practis_set_edit_message',\r\n    message:\r\n        'Editing the items or the sequence of content in the Practis Set will effect all currently enrolled Users. They will receive a notification.',\r\n    buttonText: 'Proceed',\r\n    cancelButtonText: 'Go Back',\r\n    title: 'Are you sure?',\r\n    notShow: false,\r\n    danger: true,\r\n};\r\n\r\nconst CANCEL_EDIT_MODAL_INFO = {\r\n    id: 'practis_set_cancel_edit_message',\r\n    message: 'Do you want to discard changes?',\r\n    buttonText: 'Discard',\r\n    cancelButtonText: 'No',\r\n    title: 'Discard Changes?',\r\n    notShow: false,\r\n    danger: true,\r\n};\r\n\r\nconst VerticalDivider = styled.span`\r\n    width: 1px;\r\n    height: 18px;\r\n    background-color: ${({ theme }) => theme.Colors.paleGrey};\r\n    margin: 0 8px;\r\n`;\r\n\r\nconst ButtonIcon = styled.div<{ disabled?: boolean }>`\r\n    width: 16px;\r\n    height: 16px;\r\n    cursor: pointer;\r\n`;\r\n\r\nconst ButtonText = styled.span`\r\n    margin-left: 4px;\r\n    line-height: 18px;\r\n`;\r\n\r\nconst ArchiveButtonContainer = styled.button`\r\n    background: none;\r\n    display: flex;\r\n    outline: none;\r\n    border: none;\r\n    font-size: 13px;\r\n    font-family: ${props => props.theme.Fonts.manrope};\r\n    font-weight: normal;\r\n    color: ${({ theme, disabled }) =>\r\n        disabled ? theme.Colors.cloudyBlue : theme.Colors.darkSkyBlue};\r\n    cursor: pointer;\r\n    pointer-events: ${({ disabled }) => (disabled ? 'none' : 'all')};\r\n\r\n    &:hover {\r\n        color: ${({ theme }) => theme.Colors.lightBlue};\r\n    }\r\n    &:active {\r\n        color: ${({ theme }) => theme.Colors.windowBlue};\r\n    }\r\n\r\n    &:hover ${ButtonIcon} {\r\n        color: ${({ theme }) => theme.Colors.lightBlue};\r\n    }\r\n    &:active ${ButtonIcon} {\r\n        color: ${({ theme }) => theme.Colors.windowBlue};\r\n    }\r\n\r\n    padding: 0;\r\n`;\r\n\r\nconst MODAL_INFO = (pacing?: string) => {\r\n    return {\r\n        DELETED: {\r\n            id: 'practis_set_delete_message',\r\n            message: 'Are you sure you want to delete?',\r\n            buttonText: 'Yes, Delete',\r\n            title: 'Delete Practis Set',\r\n            notShow: false,\r\n            danger: false,\r\n        },\r\n        DRAFT: {\r\n            id: 'practis_set_draft_message',\r\n            message: '',\r\n            buttonText: 'Proceed',\r\n            title: 'Are you sure?',\r\n            notShow: false,\r\n            danger: true,\r\n        },\r\n        ARCHIVED: {\r\n            id: 'practis_set_archive_message',\r\n            message: 'Are you sure you want to archive?',\r\n            buttonText: 'Yes, Archive',\r\n            title: 'Archive Practis Set',\r\n            notShow: false,\r\n            danger: true,\r\n        },\r\n        ACTIVE: {\r\n            id: 'practis_set_active_message',\r\n            message: `You're about to publish a Practis Set that has a '${\r\n                pacing ? pacing : 'free-form'\r\n            }' pacing setting. This means that once you publish it you will not be able to add, remove, or change the scenarios in the set.`,\r\n            buttonText: 'Publish',\r\n            title: 'Publish Practis Set',\r\n            notShow: true,\r\n            danger: false,\r\n        },\r\n    };\r\n};\r\n\r\nconst EDIT_VIEW_STATUS = [PractisSetStatuses.ACTIVE];\r\n\r\nconst CustomHeader: React.FC<{\r\n    practisSet: PractisSets;\r\n    modified?: boolean;\r\n    modifyPractisSet: (\r\n        value: any,\r\n        field: keyof PractisSets,\r\n        silent?: boolean\r\n    ) => void;\r\n    storePractisSetTemp: () => void;\r\n    restorePractisSetFromTemp: () => void;\r\n    handleUpdatePractisSet: (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: string,\r\n        keepModal?: boolean\r\n    ) => any;\r\n    handleViewAssignUsers?: (id: number | undefined) => void;\r\n    isViewMode?: boolean;\r\n}> = ({\r\n    practisSet,\r\n    modified,\r\n    modifyPractisSet,\r\n    handleUpdatePractisSet,\r\n    handleViewAssignUsers,\r\n    storePractisSetTemp,\r\n    restorePractisSetFromTemp,\r\n    isViewMode,\r\n}) => {\r\n    const [publishModal, setPublishModal] = useState(false);\r\n    const [editModal, setEditModal] = useState(false);\r\n    const [cancelEditModal, setCancelEditModal] = useState(false);\r\n    const [saveState, setSaveState] = useState<PractisSetStatuses>(\r\n        PractisSetStatuses.ACTIVE\r\n    );\r\n\r\n    const handleRestoreArchivedPractisSet =\r\n        useHandleRestoreArchivedPractisSet();\r\n\r\n    const handleSaveWithModalAction = (status: PractisSetStatuses) => {\r\n        setSaveState(status);\r\n        setPublishModal(true);\r\n    };\r\n\r\n    const loadingSave = useContext(LoadingSaveContext);\r\n    const edit = useContext(EditModeContext);\r\n\r\n    const cancelEditing = () => {\r\n        if (modified) {\r\n            setCancelEditModal(true);\r\n        } else {\r\n            restorePractisSetFromTemp();\r\n            edit.action(EditModeValues.VIEW);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <StyledCustomWrapper>\r\n            <StyledCustomHeader>\r\n                {publishModal && (\r\n                    <StatusModalConfirmation\r\n                        onCancel={() => {\r\n                            setPublishModal(false);\r\n                        }}\r\n                        onConfirm={() => {\r\n                            setPublishModal(false);\r\n                            handleUpdatePractisSet(null, saveState);\r\n                        }}\r\n                        title={MODAL_INFO()[saveState].title}\r\n                        confirmButtonText={MODAL_INFO()[saveState].buttonText}\r\n                        displayDontShow={MODAL_INFO()[saveState].notShow}\r\n                        dontShowHandle={MODAL_INFO()[saveState].id}\r\n                        danger={MODAL_INFO()[saveState].danger}\r\n                    >\r\n                        {\r\n                            MODAL_INFO(\r\n                                practisSet?.pacing?.type?.toLowerCase()\r\n                            )?.[saveState]?.message\r\n                        }\r\n                    </StatusModalConfirmation>\r\n                )}\r\n                {editModal && (\r\n                    <StatusModalConfirmation\r\n                        onCancel={() => {\r\n                            setEditModal(false);\r\n                        }}\r\n                        onConfirm={() => {\r\n                            setEditModal(false);\r\n                            storePractisSetTemp();\r\n                            edit.action(EditModeValues.EDIT);\r\n                        }}\r\n                        title={EDIT_MODAL_INFO.title}\r\n                        confirmButtonText={EDIT_MODAL_INFO.buttonText}\r\n                        cancelButtonText={EDIT_MODAL_INFO.cancelButtonText}\r\n                        displayDontShow={EDIT_MODAL_INFO.notShow}\r\n                        dontShowHandle={EDIT_MODAL_INFO.id}\r\n                        danger={EDIT_MODAL_INFO.danger}\r\n                    >\r\n                        {EDIT_MODAL_INFO.message}\r\n                    </StatusModalConfirmation>\r\n                )}\r\n                {cancelEditModal && (\r\n                    <StatusModalConfirmation\r\n                        onCancel={() => {\r\n                            setCancelEditModal(false);\r\n                        }}\r\n                        onConfirm={() => {\r\n                            setCancelEditModal(false);\r\n                            restorePractisSetFromTemp();\r\n                            edit.action(EditModeValues.VIEW);\r\n                        }}\r\n                        title={CANCEL_EDIT_MODAL_INFO.title}\r\n                        confirmButtonText={CANCEL_EDIT_MODAL_INFO.buttonText}\r\n                        cancelButtonText={\r\n                            CANCEL_EDIT_MODAL_INFO.cancelButtonText\r\n                        }\r\n                        displayDontShow={CANCEL_EDIT_MODAL_INFO.notShow}\r\n                        dontShowHandle={CANCEL_EDIT_MODAL_INFO.id}\r\n                        danger={CANCEL_EDIT_MODAL_INFO.danger}\r\n                    >\r\n                        {CANCEL_EDIT_MODAL_INFO.message}\r\n                    </StatusModalConfirmation>\r\n                )}\r\n                <StyledHeaderInput>\r\n                    <HeaderTitle data-test=\"practis-set-page-title\">\r\n                        {buildPageTitle('Practis Set', edit.mode as EditModeValues, !practisSet.id)}\r\n                    </HeaderTitle>\r\n                </StyledHeaderInput>\r\n                <StyledHeaderActions>\r\n                    {EDIT_VIEW_STATUS.includes(practisSet.status) ? (\r\n                        edit.mode === EditModeValues.VIEW ? (\r\n                            <StyledHeaderActionItemsWrapper>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        width=\"144px\"\r\n                                        height=\"40px\"\r\n                                        disabled={loadingSave}\r\n                                        action={() =>\r\n                                            handleViewAssignUsers?.(\r\n                                                practisSet?.id\r\n                                            )\r\n                                        }\r\n                                        variant=\"inverse\"\r\n                                        dataTest=\"assign-practis-set-users\"\r\n                                    >\r\n                                        Assign Users\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave || isViewMode}\r\n                                        action={() => setEditModal(true)}\r\n                                        dataTest=\"edit-practis-set\"\r\n                                    >\r\n                                        Edit\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledHeaderActionItemsWrapper>\r\n                        ) : (\r\n                            <StyledHeaderActionItemsWrapper>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave}\r\n                                        action={() => cancelEditing()}\r\n                                        variant=\"inverse\"\r\n                                        dataTest=\"cancel-practis-set\"\r\n                                    >\r\n                                        Cancel\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave || isViewMode}\r\n                                        action={() =>\r\n                                            handleUpdatePractisSet(null)\r\n                                        }\r\n                                        dataTest=\"save-practis-set\"\r\n                                    >\r\n                                        Save\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledHeaderActionItemsWrapper>\r\n                        )\r\n                    ) : practisSet.status === PractisSetStatuses.ARCHIVED ? (\r\n                        <StyledHeaderActionItemsWrapper>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"128px\"\r\n                                    disabled={loadingSave || isViewMode}\r\n                                    action={() =>\r\n                                        handleRestoreArchivedPractisSet(\r\n                                            practisSet.id\r\n                                        )\r\n                                    }\r\n                                    dataTest=\"restore-practis-set\"\r\n                                >\r\n                                    Restore\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                        </StyledHeaderActionItemsWrapper>\r\n                    ) : (\r\n                        <StyledHeaderActionItemsWrapper>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"144px\"\r\n                                    disabled={loadingSave || isViewMode}\r\n                                    action={() =>\r\n                                        handleUpdatePractisSet(\r\n                                            null,\r\n                                            PractisSetStatuses.DRAFT\r\n                                        )\r\n                                    }\r\n                                    variant=\"inverse\"\r\n                                    dataTest=\"save-practis-set-as-draft\"\r\n                                >\r\n                                    Save as Draft\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"128px\"\r\n                                    disabled={loadingSave || isViewMode}\r\n                                    action={() =>\r\n                                        handleSaveWithModalAction(\r\n                                            PractisSetStatuses.ACTIVE\r\n                                        )\r\n                                    }\r\n                                    dataTest=\"publish-practis-set\"\r\n                                >\r\n                                    Publish\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                        </StyledHeaderActionItemsWrapper>\r\n                    )}\r\n                </StyledHeaderActions>\r\n            </StyledCustomHeader>\r\n\r\n            <StyledHeaderBottomActionItemsWrapper>\r\n                <PublishedDate>\r\n                    {practisSet.status === PractisSetStatuses.ACTIVE &&\r\n                        edit.mode === EditModeValues.VIEW && (\r\n                            <span data-test=\"practis-set-publish-date\">\r\n                                Published{' '}\r\n                                {formatDate(practisSet.updatedAt, true)}\r\n                            </span>\r\n                        )}\r\n                    {practisSet.status === PractisSetStatuses.ARCHIVED &&\r\n                        edit.mode === EditModeValues.VIEW && (\r\n                            <span data-test=\"practis-set-archive-date\">\r\n                                Archived{' '}\r\n                                {formatDate(practisSet.updatedAt, true)}\r\n                            </span>\r\n                        )}\r\n                    {practisSet.status === PractisSetStatuses.DRAFT && (\r\n                        <span data-test=\"practis-set-not-published-yet\">\r\n                            Not Published Yet\r\n                        </span>\r\n                    )}\r\n                </PublishedDate>\r\n                {practisSet.status === PractisSetStatuses.ACTIVE && (\r\n                    <>\r\n                        {edit.mode === EditModeValues.VIEW && (\r\n                            <VerticalDivider />\r\n                        )}\r\n\r\n                        <ArchiveButtonContainer\r\n                            onClick={() =>\r\n                                handleSaveWithModalAction(\r\n                                    PractisSetStatuses.ARCHIVED\r\n                                )\r\n                            }\r\n                            disabled={loadingSave || isViewMode}\r\n                            data-test=\"archive-practis-set\"\r\n                        >\r\n                            <ButtonIcon>\r\n                                <ArchiveIcon />\r\n                            </ButtonIcon>\r\n                            <ButtonText>Archive</ButtonText>\r\n                        </ArchiveButtonContainer>\r\n                    </>\r\n                )}\r\n            </StyledHeaderBottomActionItemsWrapper>\r\n\r\n            <TableDivider />\r\n        </StyledCustomWrapper>\r\n    );\r\n};\r\n\r\nexport const CustomHeaderContainer: FC<{\r\n    handleUpdatePractisSet: (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: string,\r\n        keepModal?: boolean\r\n    ) => void;\r\n    handleViewAssignUsers?: (id: number | undefined) => void;\r\n    isViewMode?: boolean;\r\n}> = ({ handleUpdatePractisSet, handleViewAssignUsers, isViewMode }) => {\r\n    const practisSet = useSelector(getPractisSetState);\r\n    const modifyPractisSet = useModifyPractisSetService();\r\n    const storePractisSetTemp = useStorePractisSetTempCopyService();\r\n    const restorePractisSetFromTemp =\r\n        useRestorePractisSetFromTempActionService();\r\n\r\n    return (\r\n        <CustomHeader\r\n            practisSet={practisSet.info}\r\n            modified={practisSet.case === 'modified'}\r\n            handleUpdatePractisSet={handleUpdatePractisSet}\r\n            handleViewAssignUsers={handleViewAssignUsers}\r\n            modifyPractisSet={modifyPractisSet}\r\n            storePractisSetTemp={storePractisSetTemp}\r\n            restorePractisSetFromTemp={restorePractisSetFromTemp}\r\n            isViewMode={isViewMode}\r\n        />\r\n    );\r\n};\r\n\r\nexport default CustomHeaderContainer;\r\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { isEmpty } from 'lodash';\n\nimport {\n    PractisSets,\n    PractisSetStatuses,\n} from '../../../constants/interfaces/PractisSets';\nimport {\n    CREATE_PRACTIS_SET_ACTION,\n    UPDATE_PRACTIS_SET_ACTION,\n    UPDATE_PRACTIS_SET_STATUS_ACTION,\n} from '../../../features/library/services/LibraryBulkActionsService/constants';\nimport { updateLibraryPractisSetSuccess } from '../../../features/library/store/actions';\nimport ROUTES from '../../../routes/routes';\nimport { pushModal, useHistory } from '../../../tools/router';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { useModifyPractisSetService } from './store/services';\nimport { useUpdatePractisSetStatusApi } from '../../../api';\n\n/**\n * @function useCreateEditPractisSetSuccessCallback\n * @param { Function } setLoadingSave\n * @param { number | undefined } existedPractisSetId\n * @param { Record<string, unknown> | undefined } responses\n * @returns { void }\n */\nexport const useCreateEditPractisSetSuccessCallback = () => {\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (\n            setLoadingSave: (isLoading: boolean) => void,\n            existedPractisSetId?: number,\n            responses?: Record<string, unknown>\n        ) => {\n            let newPractisSetId: number | null = null;\n\n            setLoadingSave(false);\n\n            if (!isEmpty(responses)) {\n                const createPractisSetResponse = responses![\n                    CREATE_PRACTIS_SET_ACTION\n                ] as PractisSets | undefined;\n\n                const editPractisSetResponse = responses![\n                    UPDATE_PRACTIS_SET_ACTION\n                ] as PractisSets | undefined;\n\n                const updatePractisSetStatusResponse = responses![\n                    UPDATE_PRACTIS_SET_STATUS_ACTION\n                ] as PractisSets[] | undefined;\n\n                if (createPractisSetResponse) {\n                    dispatch(\n                        updateLibraryPractisSetSuccess(\n                            createPractisSetResponse,\n                            'create'\n                        )\n                    );\n\n                    newPractisSetId = createPractisSetResponse?.id ?? null;\n                }\n\n                if (editPractisSetResponse) {\n                    dispatch(\n                        updateLibraryPractisSetSuccess(\n                            editPractisSetResponse,\n                            'update'\n                        )\n                    );\n                }\n\n                const isPublished =\n                    updatePractisSetStatusResponse?.[0]?.status ===\n                    PractisSetStatuses.ACTIVE;\n\n                const isEditMode = existedPractisSetId;\n\n                if (!isPublished) {\n                    !isEditMode &&\n                        showMessage('Practis Set Saved as Draft', 'success');\n                    history.goBack();\n                } else {\n                    history.push(ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL);\n                    if (newPractisSetId) {\n                        pushModal(\n                            history,\n                            ROUTES.LIBRARY_SETTINGS.PRACTISSETS.QUICK_ASSIGNMENT.replace(\n                                ':practisSetId',\n                                newPractisSetId.toString()\n                            )\n                        );\n                    }\n                    !isEditMode &&\n                        showMessage('Practis Set Published', 'success');\n                }\n            }\n        },\n        [dispatch, history, showMessage]\n    );\n};\n\n/**\n * @function useCreateEditPractisSetFailedCallback\n * @param { Function } setLoadingSave\n * @param { Function } setTitleError\n * @param { ErrorResult | undefined } error\n * @param { Record<string, unknown> | undefined } completedResponses\n * @returns { void }\n */\nexport const useCreateEditPractisSetFailedCallback = () => {\n    const modifyPractisSet = useModifyPractisSetService();\n\n    return useCallback(\n        (\n            setLoadingSave: (isLoading: boolean) => void,\n            setTitleError: (isError: boolean) => void,\n            error?: ErrorResult,\n            completedResponses?: Record<string, unknown>\n        ) => {\n            if (!isEmpty(completedResponses)) {\n                const createPractisSetResponse = completedResponses![\n                    CREATE_PRACTIS_SET_ACTION\n                ] as PractisSets | undefined;\n\n                const createdPractisSetId = createPractisSetResponse?.id;\n\n                // The bulk action failed in other steps\n                // but new practisSet created\n                // in the next try it goes to\n                // edit practisSet action.\n                if (createdPractisSetId) {\n                    modifyPractisSet(createdPractisSetId, 'id');\n                }\n            }\n\n            setLoadingSave(false);\n\n            if (error?.message?.includes('already exists')) {\n                setTitleError(true);\n            }\n        },\n        [modifyPractisSet]\n    );\n};\n\n/**\n * @function useHandleArchivePractisSet\n * @returns { void }\n */\nexport const useHandleArchivePractisSet = () => {\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const updatePractisSetStatus = useUpdatePractisSetStatusApi();\n\n    return useCallback(\n        (practisSetId: number) => {\n            updatePractisSetStatus('archive', [practisSetId]).then(response => {\n                dispatch(updateLibraryPractisSetSuccess(response, 'update'));\n\n                history.goBack();\n            });\n        },\n        [dispatch, history, updatePractisSetStatus]\n    );\n};\n\n/**\n * @function useHandleRestoreArchivedPractisSet\n * @param { number } practisSetId\n * @returns\n */\nexport const useHandleRestoreArchivedPractisSet = () => {\n    const dispatch = useDispatch();\n    const updatePractisSetStatus = useUpdatePractisSetStatusApi();\n    const modifyPractisSet = useModifyPractisSetService();\n\n    return useCallback(\n        (practisSetId?: number) => {\n            if (practisSetId) {\n                updatePractisSetStatus('draft', [practisSetId]).then(\n                    (response: PractisSets) => {\n                        dispatch(\n                            updateLibraryPractisSetSuccess(response, 'update')\n                        );\n                        modifyPractisSet(\n                            PractisSetStatuses.DRAFT,\n                            'status',\n                            true\n                        );\n                    }\n                );\n            }\n        },\n        [dispatch, modifyPractisSet, updatePractisSetStatus]\n    );\n};","import { Challenge } from '../../../../../../../../constants/interfaces/Challenge';\nimport { Scenario } from '../../../../../../../../constants/interfaces/Scenario';\nimport { PractisSetContent } from '../../../../../../../../constants/interfaces/PractisSets';\nimport { PractisSetEntityTypes } from '../../../../../tools';\nimport { EditModeValues } from '../../../../../../../../constants/enums/EditModeValues';\n\n/**\n * @function isInViewMode\n * @param { string  } edit\n * @returns { boolean }\n */\nconst isInViewMode = (mode: string): boolean => mode === EditModeValues.VIEW;\n\n/**\n * @function checkIsPractisContentDisabled\n * @param { PractisSetContent[] } practisSetsContent\n * @param { Scenario | Challenge } currentContent\n * @param { string } mode\n * @returns { boolean }\n */\nexport const checkIsPractisContentDisabled = (\n    practisSetsContent: PractisSetContent[],\n    currentContent: Scenario | Challenge,\n    mode: string\n): boolean => {\n\n    const allContents =\n        practisSetsContent?.map(\n            item =>\n                item.scenario\n                    ? { ...item.scenario, type: PractisSetEntityTypes.SCENARIO }\n                    : { ...item.challenge, type: PractisSetEntityTypes.CHALLENGE }\n        ) ?? [];\n\n    return (\n        allContents.filter(\n            content =>\n                content.id === currentContent.id &&\n                content.type === currentContent.type\n        ).length > 0 || isInViewMode(mode)\n    );\n};","import { FC } from 'react';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { PRACTIS_SET_DRAGGABLE_ID } from '../../Content';\nimport secondsToMin from '../../../../../../../../helpers/functions/convert-time';\nimport styled from 'styled-components';\nimport { Variables } from '../../../../../../../../theme/variables';\nimport { PractisSetContent } from '../../../../../../../../constants/interfaces/PractisSets';\nimport { checkIsPractisContentDisabled } from './helpers';\nimport { Scenario } from '../../../../../../../../constants/interfaces/Scenario';\nimport { Challenge } from '../../../../../../../../constants/interfaces/Challenge';\n\nconst StyledListItemRow = styled.div<{\n    disabled?: boolean;\n    isDragging: boolean;\n    background?: string;\n}>`\n    background: ${props =>\n        !!props.background\n            ? props.background\n            : props.disabled\n            ? Variables.Colors.lighterGray\n            : Variables.Colors.white};\n    border-radius: ${props => (props.isDragging ? '16px' : '2px')};\n    display: flex;\n    height: 48px;\n    align-items: center;\n    font-size: 13px;\n    border-radius: 4px;\n    &:hover {\n        background: ${props => props.theme.Colors.whiteTwo};\n    }\n`;\n\nconst StyledListTitleItemCell = styled.div<{\n    disabled?: boolean;\n    isDragging: boolean;\n    flex: number;\n}>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.coolGray\n            : props.theme.Colors.black};\n    ${props =>\n        !props.disabled &&\n        `\n    cursor: grab;\n    `};\n    padding: 8px 16px 8px 17px;\n    flex: ${props => props.flex};\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n`;\n\nconst StyledListItemCell = styled.div<{\n    disabled?: boolean;\n    isDragging: boolean;\n    flex: number;\n}>`\n    color: ${props =>\n        props.disabled\n            ? props => props.theme.Colors.coolGray\n            : props.theme.Colors.black};\n    ${props =>\n        !props.disabled &&\n        `\n    cursor: grab;\n    `};\n    padding: 8px 16px 8px 17px;\n    flex: ${props => props.flex};\n`;\n\nexport const GenerateTableCells: FC<{\n    content: Scenario[] | Challenge[];\n    practisSetContent: PractisSetContent[];\n    mode: string;\n    background?: string;\n    addToBuilder?: (itemId?: number | string) => void;\n    dataTest?: string;\n}> = ({\n    content,\n    practisSetContent,\n    mode,\n    background,\n    addToBuilder,\n    dataTest\n}): any => {\n    return content.map((item: Scenario | Challenge, index: number) => {\n        const isDisabled =\n            checkIsPractisContentDisabled(practisSetContent, item, mode) ??\n            false;\n\n\n        return (\n            <Draggable\n                key={item.id}\n                draggableId={`${PRACTIS_SET_DRAGGABLE_ID}-${item.id}`}\n                index={index}\n                isDragDisabled={isDisabled}\n            >\n                {(provided: any, snapshot: any) => {\n                    return (\n                        <StyledListItemRow\n                            provided={provided}\n                            ref={provided.innerRef}\n                            {...provided.draggableProps}\n                            {...provided.dragHandleProps}\n                            disabled={isDisabled}\n                            isDragging={snapshot.isDragging}\n                            background={background}\n                            onDoubleClick={() =>\n                                !isDisabled &&\n                                addToBuilder &&\n                                addToBuilder(item.id)\n                            }\n                            data-test={dataTest}\n                        >\n                            <StyledListTitleItemCell\n                                disabled={isDisabled}\n                                isDragging={snapshot.isDragging}\n                                flex={62}\n                                data-test={dataTest && `${dataTest}-title`}\n                            >\n                                {item.title}\n                            </StyledListTitleItemCell>\n                            <StyledListItemCell\n                                disabled={isDisabled}\n                                isDragging={snapshot.isDragging}\n                                flex={38}\n                                data-test={dataTest && `${dataTest}-duration`}\n                            >\n                                {item.script.totalDuration\n                                    ? secondsToMin(item.script.totalDuration)\n                                    : '-'}\n                            </StyledListItemCell>\n                        </StyledListItemRow>\n                    );\n                }}\n            </Draggable>\n        );\n    });\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledNavigationItemContainer = styled.div<{\n    isActive: boolean;\n}>`\n    height: 43px;\n    margin-bottom: 2px;\n    flex: 1;\n    font-size: 13px;\n    font-weight: 600;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    cursor: pointer;\n    border: 1px solid ${props => props.theme.Colors.paleGrey};\n    border-radius: 4px;\n    color: ${props =>\n        props.isActive\n            ? props.theme.Colors.black\n            : props.theme.Colors.steelGrey};\n    background: ${props =>\n        props.isActive ? 'unset' : props.theme.Colors.whiteFive};\n    position: relative;\n`;\n\nconst NavigationCover = styled.div`\n    position: absolute;\n    left: -1px;\n    right: -1px;\n    height: 10px;\n    background: ${props => props.theme.Colors.white};\n    bottom: -4px;\n    border-left: 1px solid ${props => props.theme.Colors.paleGrey};\n    border-right: 1px solid ${props => props.theme.Colors.paleGrey};\n`;\n\nconst NavigationItem: React.FC<{\n    title: string;\n    action?: () => void;\n    active?: boolean;\n    dataTest?: string;\n}> = ({ title, action, active, dataTest }) => {\n    return (\n        <StyledNavigationItemContainer onClick={action} isActive={!!active} data-test={dataTest}>\n            {title}\n            {active && <NavigationCover />}\n        </StyledNavigationItemContainer>\n    );\n};\n\nexport default NavigationItem;\n","import React from 'react';\nimport styled from 'styled-components';\nimport NavigationItem from './NavigationItem';\n\nexport type MenuInterface = {\n    key: string;\n    title: string;\n    space?: boolean;\n    url?: string;\n};\n\nconst StyledNavigationContainer = styled.div`\n    display: flex;\n`;\n\nconst Spacer = styled.div`\n    width: 5px;\n    height: 100%;\n`;\n\nconst Navigation: React.FC<{\n    menu: Array<MenuInterface>;\n    active?: string;\n    setActive?: (key: string) => void;\n    dataTest: string;\n}> = ({ menu, active, setActive, dataTest }) => {\n    let menuItems;\n    menuItems = menu.map((menu: MenuInterface) => {\n        return (\n            <React.Fragment key={menu.key}>\n                <NavigationItem\n                    title={menu.title}\n                    action={() => setActive && setActive(menu.key)}\n                    active={active === menu.key}\n                    dataTest={`${dataTest}-${menu.key}`}\n                />\n                {menu.space && <Spacer />}\n            </React.Fragment>\n        );\n    });\n\n    return <StyledNavigationContainer>{menuItems}</StyledNavigationContainer>;\n};\n\nexport default Navigation;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { useSelector } from 'react-redux';\nimport { getPractisSetState } from '../../store/reducers';\nimport Navigation from '../CustomBody/Content/ListContent/components/Navigation/Navigation';\n\nconst StyledLibraryNavigationContainer = styled.div``;\n\nconst PractisContentNavigation: React.FC<{\n    scenariosCount?: number;\n    scenarioCountFiltered?: number;\n    challengeCountFiltered?: number;\n    challengesCount?: number;\n    page: string;\n    setPage: (value: string) => void;\n}> = ({\n    scenariosCount,\n    scenarioCountFiltered,\n    challengeCountFiltered,\n    challengesCount,\n    page,\n    setPage,\n}) => {\n    const scenarios =\n        scenarioCountFiltered !== undefined\n            ? scenarioCountFiltered\n            : scenariosCount\n            ? scenariosCount\n            : '0';\n\n    const challenges =\n        challengeCountFiltered !== undefined\n            ? challengeCountFiltered\n            : challengesCount\n            ? challengesCount\n            : '0';\n\n    return (\n        <StyledLibraryNavigationContainer>\n            <Navigation\n                menu={[\n                    {\n                        key: 'scenarios',\n                        title: `Scenarios (${scenarios})`,\n                        space: true\n                    },\n                    {\n                        key: 'challenges',\n                        title: `Challenges (${challenges})`\n                    },\n                ]}\n                active={page}\n                setActive={setPage}\n                dataTest='practis-set-tab'\n            />\n        </StyledLibraryNavigationContainer>\n    );\n};\n\nexport const PractisContentNavigationContainer: FC<{\n    page: string;\n    setPage: (value: string) => void;\n    scenarioCountFiltered?: number;\n    challengeCountFiltered?: number;\n}> = ({ page, setPage, scenarioCountFiltered, challengeCountFiltered }) => {\n    const scenarios = useSelector(getPractisSetState).totalScenarios;\n    const challenges = useSelector(getPractisSetState).totalChallenges;\n\n    return (\n        <PractisContentNavigation\n            scenariosCount={scenarios}\n            scenarioCountFiltered={scenarioCountFiltered}\n            challengeCountFiltered={challengeCountFiltered}\n            challengesCount={challenges}\n            page={page}\n            setPage={setPage}\n        />\n    );\n};\n\nexport default PractisContentNavigationContainer;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Stack = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 28 28\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.2%\"\n                            x=\"-14.3%\"\n                            y=\"-1.2%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M24.322 17.539c.533-.14 1.099.113 1.299.563.166.45-.134.901-.666 1.042L14.3 21.847c-.1.028-.2.028-.3.028-.1 0-.2 0-.3-.028L3.045 19.144c-.532-.113-.832-.591-.666-1.042.134-.45.7-.704 1.232-.563l10.356 2.618zm1.299-3.812c.154.418-.093.837-.556 1.007l-.11.035-10.661 2.703c-.1.028-.2.028-.3.028-.067 0-.133 0-.2-.008l-.1-.02-10.66-2.703c-.533-.113-.8-.591-.667-1.042.124-.418.621-.667 1.118-.587l.115.024 10.36 2.618 10.361-2.618c.533-.14 1.1.113 1.3.563zM14.165 5.849l.12.028 10.68 2.772c.401.115.702.462.702.837 0 .364-.217.658-.576.797l-.125.04-10.681 2.773c-.1.029-.2.029-.3.029-.067 0-.134 0-.2-.009l-.1-.02-10.682-2.772c-.4-.087-.7-.433-.667-.838 0-.363.216-.657.576-.796l.125-.041 10.68-2.772a.902.902 0 0 1 .448-.028z\"\n                    filter={!!shadow ? 'url(#a)' : undefined}\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Stack;\n","import React, { FC, useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { PortableLabelsWithStore } from '../../../../../../../../../features/portableLabels';\nimport { useDeselectAllLabels, useSaveLabels } from '../../../../../../../../../features/portableLabels/store/hors/withLabels/services';\nimport { useLabelsState } from '../../../../../../../../../features/portableLabels/store/hors/withLabels/states';\nimport { Button } from '../../../../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../../../../ui/components/Fieldset';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    height: 100%;\n\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nexport const LabelFilters: FC<{\n    onLabelsChange: (ids: number[]) => void;\n    onSuccessApply: () => void;\n}> = ({ onLabelsChange, onSuccessApply }) => {\n    const [labelIds, setLabelIds] = useState<number[]>([]);\n    const saveLabels = useSaveLabels();\n    const deselectLabels = useDeselectAllLabels();\n    const labels = useLabelsState();\n\n    const onLabelChangeHandler = useCallback(\n        (ids: number[]) => setLabelIds(ids),\n        [setLabelIds]\n    );\n\n    const onApplyHandler = useCallback(() => {\n        onLabelsChange(labelIds);\n        saveLabels();\n        onSuccessApply();\n    }, [onLabelsChange, labelIds, onSuccessApply, saveLabels]);\n\n    const onClearHandler = useCallback(() => {\n        deselectLabels();\n    }, [deselectLabels])\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            onSetSelected={onLabelChangeHandler}\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <ButtonWrapper>\n                    <Button disabled={!labels.selected.length} variant='inverse' width={'122px'} action={() => onClearHandler()}>\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button width={'122px'} action={() => onApplyHandler()}>\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import { FC, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Label } from '../../../../../../../../../constants/interfaces/Label';\r\nimport { useHandleSelectLabels } from '../../../../../../../../../features/labels/tools';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../../../../../../../features/portableLabels/store/hors/withLabels/services';\r\nimport { useLabelsState } from '../../../../../../../../../features/portableLabels/store/hors/withLabels/states';\r\nimport { LabelFilters } from './LabelFilters';\r\nimport { listToTree } from '../../../../../../../../../helpers/functions/list-to-tree';\r\nimport { usePortableLabelsState } from '../../../../../../../../../features/portableLabels/store/states';\r\nimport { TableSearchInput } from '../../../../../../../../../ui/components/table-wrapper/table-tools/table-search-input';\r\nimport { TableDivider } from '../../../../../../../../../ui/components/table-wrapper/table-divider';\r\nimport { TableHeaderFilter } from '../../../../../../../../../ui/components/table-wrapper/table-header-filter';\r\nimport { Popup } from '../../../../../../../../../ui/components/Popup';\r\nimport FilterByHandler from '../../../../../../../../../ui/components/Filters/FilterByHandler';\r\n\r\nconst Container = styled.div`\r\n    padding: 0 24px;\r\n`;\r\n\r\nconst TableTools = styled.div`\r\n    margin-top: 24px;\r\n    margin-bottom: 16px;\r\n    display: flex;\r\n`;\r\n\r\nconst FilteredByWrapper = styled.div`\r\n    padding: 0 8px;\r\n    display: flex;\r\n    justify-content: center;\r\n    flex-direction: column;\r\n`;\r\n\r\nconst SearchContainer = styled.div`\r\n    flex: 1;\r\n`;\r\n\r\nconst LabelsContainer = styled.div`\r\n    height: 40px;\r\n    width: 40px;\r\n    margin-left: 16px;\r\n`;\r\n\r\nconst TableFilters: FC<{\r\n    setSearchTerm(value: string): void;\r\n    setLabelIDs(labels: number[]): void;\r\n    isViewMode?: boolean;\r\n    dataTest?: string;\r\n}> = ({ setSearchTerm, setLabelIDs, isViewMode, dataTest }) => {\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState();\r\n    const setSelectLabels = useSelectLabels();\r\n    const saveLabels = useSaveLabels();\r\n\r\n    useEffect(() => {\r\n        setLabelIDs(labels.saved);\r\n    }, [labels.saved, setLabelIDs]);\r\n\r\n    const labelsTree = listToTree(labelsList.data.items);\r\n    const handleSelectLabels = useHandleSelectLabels();\r\n\r\n    const onRemoveLabel = (label: Label) => {\r\n        setSelectLabels(handleSelectLabels(label, labels.saved, labelsTree));\r\n        saveLabels();\r\n    };\r\n\r\n    return (\r\n        <Container>\r\n            <TableTools>\r\n                <SearchContainer>\r\n                    <TableSearchInput\r\n                        onChange={setSearchTerm}\r\n                        disabled={isViewMode}\r\n                        dataTest={dataTest && `${dataTest}-search-input`}\r\n                    />\r\n                </SearchContainer>\r\n                <LabelsContainer>\r\n                    <Popup<HTMLButtonElement>\r\n                        content={({ hide }) => (\r\n                            <LabelFilters\r\n                                onLabelsChange={setLabelIDs}\r\n                                onSuccessApply={() => hide()}\r\n                            />\r\n                        )}\r\n                    >\r\n                        {(ref, { toggleShown, shown }) => (\r\n                            <FilterByHandler\r\n                                ref={ref}\r\n                                open={shown}\r\n                                disabled={isViewMode}\r\n                                toggleOpen={toggleShown}\r\n                                filtersCount={labels.saved.length}\r\n                                dataTest={dataTest && `${dataTest}-filters`}\r\n                            />\r\n                        )}\r\n                    </Popup>\r\n                </LabelsContainer>\r\n            </TableTools>\r\n            {labels.saved && !!labels.saved.length && (\r\n                <FilteredByWrapper>\r\n                    <TableDivider />\r\n                    <TableHeaderFilter\r\n                        selectedLabels={labels.saved}\r\n                        onRemoveLabel={onRemoveLabel}\r\n                    />\r\n                </FilteredByWrapper>\r\n            )}\r\n            <TableDivider />\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default TableFilters;\r\n","import { FC, useContext, useEffect, useRef } from 'react';\r\n\r\nimport { Droppable } from 'react-beautiful-dnd';\r\nimport { useSelector } from 'react-redux';\r\nimport { PRACTIS_SET_SCENARIO_LIST_DROP_ID } from '../../Content';\r\nimport { ScrollPagination } from '../../../../../../../../ui/components/ScrollPagination';\r\nimport styled from 'styled-components';\r\nimport { Variables } from '../../../../../../../../theme/variables';\r\nimport { GenerateTableCells } from './GenerateTableCells';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../../../../../constants/interfaces/filters';\r\nimport { PractisSetContent } from '../../../../../../../../constants/interfaces/PractisSets';\r\nimport { Scenario } from '../../../../../../../../constants/interfaces/Scenario';\r\nimport PractisContentNavigationContainer from '../../../../PractisContentNavigation/PractisContentNavigation';\r\nimport { EditModeContext } from '../../../../../PractisSets';\r\nimport StackIcon from '../../../../../../../../ui/icons/Stack';\r\nimport TableFilters from '../components/Filters/TableFilters';\r\nimport { UserProfile } from '../../../../../../../../constants/interfaces/User';\r\nimport { isTeamLeader } from '../../../../../../../../constants/enums';\r\nimport { TableRow } from '../../../../../../../../ui/components/table-wrapper/table/table-row';\r\nimport { TableContainer } from '../../../../../../../../ui/components/table-wrapper/styles';\r\nimport { getPractisSetState } from '../../../../../store/reducers';\r\nimport { useOrderBy } from '../../../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { TableNoResult } from '../../../../../../../../ui/components/table-wrapper/table/TableNoResult';\r\nimport { TableHead } from '../../../../../../../../ui/components/Table';\r\nimport { TableHeaderCell } from '../../../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell';\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst StyledScenarioList = styled.div`\r\n    overflow: hidden;\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n`;\r\n\r\nconst StyledTable = styled.table`\r\n    border: none;\r\n    overflow: hidden;\r\n    width: 100%;\r\n    border-spacing: 0;\r\n`;\r\n\r\nconst StyledTableHeaderRow = styled(TableRow)`\r\n    border-radius: 2px;\r\n    & > th {\r\n        font-size: 13px;\r\n        padding: 24px 14px 15px 14px;\r\n    }\r\n`;\r\n\r\nconst StyledBodyWrapper = styled.div`\r\n    border-radius: 0px 4px 4px 4px;\r\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\r\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst StyledBody = styled.div`\r\n    background: ${props => props.theme.Colors.white};\r\n    border-top-right-radius: 16px;\r\n    border-bottom-right-radius: 16px;\r\n    border-bottom-left-radius: 16px;\r\n    padding: 0 24px;\r\n    flex: 1;\r\n    overflow: auto;\r\n`;\r\n\r\nconst StyledTableContainer = styled(TableContainer)`\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100%;\r\n`;\r\n\r\nconst StyledBodyContainer = styled.div`\r\n    overflow: auto;\r\n    flex: 1;\r\n    height: 100%;\r\n    padding-bottom: 16px;\r\n    &::-webkit-scrollbar-thumb {\r\n        background: ${props => props.theme.Colors.paleGrey};\r\n        border-radius: 4px;\r\n    }\r\n    &::-webkit-scrollbar {\r\n        width: 4px;\r\n        height: 4px;\r\n    }\r\n`;\r\n\r\nconst StyledTablePagination = styled(ScrollPagination)`\r\n    width: 100%;\r\n`;\r\n\r\nconst StyledTableHeaderCell = styled(TableHeaderCell)`\r\n    padding: 16px !important;\r\n`;\r\n\r\nconst TableBody = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    flex: 1;\r\n    min-height: 100px;\r\n    overflow: auto;\r\n`;\r\n\r\nexport const ScenarioList: FC<{\r\n    profile?: UserProfile;\r\n    scenarios: Array<Scenario>;\r\n    practisSetContent: PractisSetContent[];\r\n    initialSearchParams: SearchParams;\r\n    onChangeSearchParams(searchParams: SearchParams): void;\r\n    page: string;\r\n    setPage: (value: string) => void;\r\n    addToBuilder?: (scenarioId?: number | string) => void;\r\n    isLoading: boolean;\r\n}> = ({\r\n    profile,\r\n    onChangeSearchParams,\r\n    scenarios,\r\n    practisSetContent,\r\n    initialSearchParams,\r\n    page,\r\n    setPage,\r\n    addToBuilder,\r\n    isLoading,\r\n}) => {\r\n    const isViewMode = isTeamLeader(profile?.role?.name);\r\n    const totalScenarios = useSelector(getPractisSetState).totalScenarios;\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setLimit,\r\n        setLabelIDs,\r\n    } = useSearchParamsState(initialSearchParams);\r\n\r\n    const edit = useContext(EditModeContext);\r\n    const scrollableRef = useRef<HTMLDivElement>(null);\r\n\r\n    useEffect(() => {\r\n        if (searchParams !== initialSearchParams) {\r\n            onChangeSearchParams(searchParams as SearchParams);\r\n        }\r\n    }, [searchParams, initialSearchParams, onChangeSearchParams]);\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const sortName = useOrderBy('title', orderBy, setOrderBy);\r\n    const sortDuration = useOrderBy(\r\n        'total_duration',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n\r\n    return (\r\n        <StyledScenarioList>\r\n            <PractisContentNavigationContainer\r\n                page={page}\r\n                setPage={setPage}\r\n                scenarioCountFiltered={totalScenarios}\r\n            />\r\n            <StyledBodyWrapper>\r\n                <TableFilters\r\n                    setSearchTerm={setSearchTerm}\r\n                    setLabelIDs={setLabelIDs}\r\n                    isViewMode={isViewMode}\r\n                    dataTest=\"practis-set-scenarios\"\r\n                />\r\n                <StyledBody>\r\n                    <StyledTableContainer>\r\n                        <StyledTable>\r\n                            <TableHead>\r\n                                <StyledTableHeaderRow>\r\n                                    <StyledTableHeaderCell\r\n                                        width={60}\r\n                                        {...sortName}\r\n                                        dataTest=\"practis-set-scenarios-column\"\r\n                                    >\r\n                                        Scenarios\r\n                                    </StyledTableHeaderCell>\r\n                                    <StyledTableHeaderCell\r\n                                        width={40}\r\n                                        {...sortDuration}\r\n                                        dataTest=\"practis-set-scenarios-duration-column\"\r\n                                    >\r\n                                        Duration\r\n                                    </StyledTableHeaderCell>\r\n                                </StyledTableHeaderRow>\r\n                            </TableHead>\r\n                        </StyledTable>\r\n                        {!isLoading && scenarios.length < 1 ? (\r\n                            <TableNoResult icon={StackIcon}>\r\n                                {searchParams.searchTerm.length > 0\r\n                                    ? 'No Scenarios were found'\r\n                                    : 'No Scenarios'}\r\n                            </TableNoResult>\r\n                        ) : (\r\n                            <TableBody ref={scrollableRef}>\r\n                                <StyledTablePagination\r\n                                    itemsPerPage={ITEMS_PER_PAGE}\r\n                                    itemCount={scenarios ? scenarios.length : 0}\r\n                                    totalCount={totalScenarios}\r\n                                    onLimitChange={setLimit}\r\n                                    scrollableRef={scrollableRef}\r\n                                    hideLoading={\r\n                                        scenarios.length < ITEMS_PER_PAGE\r\n                                    }\r\n                                >\r\n                                    <Droppable\r\n                                        droppableId={\r\n                                            PRACTIS_SET_SCENARIO_LIST_DROP_ID\r\n                                        }\r\n                                    >\r\n                                        {(provided: any) => {\r\n                                            return (\r\n                                                <StyledBodyContainer\r\n                                                    {...provided.droppableProps}\r\n                                                    ref={provided.innerRef}\r\n                                                >\r\n                                                    {\r\n                                                        <GenerateTableCells\r\n                                                            content={scenarios}\r\n                                                            mode={edit.mode}\r\n                                                            practisSetContent={\r\n                                                                practisSetContent\r\n                                                            }\r\n                                                            background={\r\n                                                                Variables.Colors\r\n                                                                    .white\r\n                                                            }\r\n                                                            addToBuilder={\r\n                                                                addToBuilder\r\n                                                            }\r\n                                                            dataTest=\"practis-set-scenario-item\"\r\n                                                        />\r\n                                                    }\r\n                                                    {provided.placeholder}\r\n                                                </StyledBodyContainer>\r\n                                            );\r\n                                        }}\r\n                                    </Droppable>\r\n                                </StyledTablePagination>\r\n                            </TableBody>\r\n                        )}\r\n                    </StyledTableContainer>\r\n                </StyledBody>\r\n            </StyledBodyWrapper>\r\n        </StyledScenarioList>\r\n    );\r\n};\r\n","import { FC, useContext, useEffect, useRef } from 'react';\r\n\r\nimport styled from 'styled-components';\r\nimport { useSelector } from 'react-redux';\r\nimport { Variables } from '../../../../../../../../theme/variables';\r\nimport { ScrollPagination } from '../../../../../../../../ui/components/ScrollPagination';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../../../../../constants/interfaces/filters';\r\nimport { PractisSetContent } from '../../../../../../../../constants/interfaces/PractisSets';\r\nimport { Challenge } from '../../../../../../../../constants/interfaces/Challenge';\r\nimport { Droppable } from 'react-beautiful-dnd';\r\nimport { PRACTIS_SET_CHALLENGER_LIST_DROP_ID } from '../../Content';\r\nimport { GenerateTableCells } from './GenerateTableCells';\r\nimport PractisContentNavigationContainer from '../../../../PractisContentNavigation/PractisContentNavigation';\r\nimport { EditModeContext } from '../../../../../PractisSets';\r\nimport TableFilters from '../components/Filters/TableFilters';\r\nimport { isTeamLeader } from '../../../../../../../../constants/enums';\r\nimport { UserProfile } from '../../../../../../../../constants/interfaces/User';\r\nimport { TableRow } from '../../../../../../../../ui/components/table-wrapper/table/table-row';\r\nimport { TableContainer } from '../../../../../../../../ui/components/table-wrapper/styles';\r\nimport { getPractisSetState } from '../../../../../store/reducers';\r\nimport { useOrderBy } from '../../../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { TableHead } from '../../../../../../../../ui/components/Table';\r\nimport { TableNoResult } from '../../../../../../../../ui/components/table-wrapper/table/TableNoResult';\r\nimport { TableHeaderCell } from '../../../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell';\r\nimport StackIcon from '../../../../../../../../ui/icons/Stack';\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst StyledChallengeList = styled.div`\r\n    overflow: hidden;\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n`;\r\n\r\nconst StyledTable = styled.table`\r\n    width: 100%;\r\n    border: none;\r\n    overflow: hidden;\r\n    border-spacing: 0;\r\n`;\r\n\r\nconst StyledTableHeaderRow = styled(TableRow)`\r\n    border-radius: 2px;\r\n    & > th {\r\n        font-size: 13px;\r\n        padding: 24px 14px 15px 14px;\r\n    }\r\n`;\r\n\r\nconst StyledBodyWrapper = styled.div`\r\n    border-radius: 4px;\r\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\r\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst StyledBody = styled.div`\r\n    border-top-right-radius: 16px;\r\n    border-bottom-right-radius: 16px;\r\n    border-bottom-left-radius: 16px;\r\n    padding: 0 24px;\r\n    flex: 1;\r\n    overflow: auto;\r\n`;\r\n\r\nconst StyledTableContainer = styled(TableContainer)`\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100%;\r\n`;\r\n\r\nconst StyledBodyContainer = styled.div`\r\n    overflow: auto;\r\n    flex: 1;\r\n    height: 100%;\r\n    padding-bottom: 16px;\r\n    &::-webkit-scrollbar-thumb {\r\n        background: ${props => props.theme.Colors.paleGrey};\r\n        border-radius: 4px;\r\n    }\r\n    &::-webkit-scrollbar {\r\n        width: 4px;\r\n        height: 4px;\r\n    }\r\n`;\r\n\r\nconst StyledTablePagination = styled(ScrollPagination)`\r\n    width: 100%;\r\n`;\r\n\r\nconst StyledTableHeaderCell = styled(TableHeaderCell)`\r\n    padding: 16px !important;\r\n`;\r\n\r\nconst TableBody = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    flex: 1;\r\n    min-height: 100px;\r\n    overflow: auto;\r\n`;\r\n\r\nexport const ChallengeList: FC<{\r\n    profile?: UserProfile;\r\n    challenges: Array<Challenge>;\r\n    practisSetContent: PractisSetContent[];\r\n    initialSearchParams: SearchParams;\r\n    onChangeSearchParams(searchParams: SearchParams): void;\r\n    page: string;\r\n    setPage: (value: string) => void;\r\n    addToBuilder?: (scenarioId?: number | string) => void;\r\n    isLoading: boolean;\r\n}> = ({\r\n    profile,\r\n    onChangeSearchParams,\r\n    challenges,\r\n    practisSetContent,\r\n    initialSearchParams,\r\n    page,\r\n    setPage,\r\n    addToBuilder,\r\n    isLoading,\r\n}) => {\r\n    const isViewMode = isTeamLeader(profile?.role?.name);\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setLimit,\r\n        setLabelIDs,\r\n    } = useSearchParamsState(initialSearchParams);\r\n    const edit = useContext(EditModeContext);\r\n    const scrollableRef = useRef<HTMLDivElement>(null);\r\n    const totalChallenges = useSelector(getPractisSetState).totalChallenges;\r\n\r\n    useEffect(() => {\r\n        if (searchParams !== initialSearchParams) {\r\n            onChangeSearchParams(searchParams as SearchParams);\r\n        }\r\n    }, [searchParams, initialSearchParams, onChangeSearchParams]);\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const sortName = useOrderBy('title', orderBy, setOrderBy);\r\n    const sortDuration = useOrderBy(\r\n        'total_duration',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n\r\n    return (\r\n        <StyledChallengeList>\r\n            <PractisContentNavigationContainer\r\n                page={page}\r\n                setPage={setPage}\r\n                challengeCountFiltered={totalChallenges}\r\n            />\r\n            <StyledBodyWrapper>\r\n                <TableFilters\r\n                    setSearchTerm={setSearchTerm}\r\n                    setLabelIDs={setLabelIDs}\r\n                    isViewMode={isViewMode}\r\n                    dataTest=\"practis-set-challenges\"\r\n                />\r\n                <StyledBody>\r\n                    <StyledTableContainer>\r\n                        <StyledTable>\r\n                            <TableHead>\r\n                                <StyledTableHeaderRow>\r\n                                    <StyledTableHeaderCell\r\n                                        width={60}\r\n                                        {...sortName}\r\n                                        dataTest=\"practis-set-challenges-column\"\r\n                                    >\r\n                                        Challenges\r\n                                    </StyledTableHeaderCell>\r\n                                    <StyledTableHeaderCell\r\n                                        width={40}\r\n                                        {...sortDuration}\r\n                                        dataTest=\"practis-set-challenges-duration-column\"\r\n                                    >\r\n                                        Duration\r\n                                    </StyledTableHeaderCell>\r\n                                </StyledTableHeaderRow>\r\n                            </TableHead>\r\n                        </StyledTable>\r\n                        {!isLoading && challenges.length < 1 ? (\r\n                            <TableNoResult icon={StackIcon}>\r\n                                {searchParams.searchTerm.length > 0\r\n                                    ? 'No Challenges were found'\r\n                                    : 'No Challenges'}\r\n                            </TableNoResult>\r\n                        ) : (\r\n                            <TableBody ref={scrollableRef}>\r\n                                <StyledTablePagination\r\n                                    itemsPerPage={ITEMS_PER_PAGE}\r\n                                    itemCount={\r\n                                        challenges ? challenges.length : 0\r\n                                    }\r\n                                    totalCount={totalChallenges}\r\n                                    onLimitChange={setLimit}\r\n                                    scrollableRef={scrollableRef}\r\n                                    hideLoading={\r\n                                        challenges?.length < ITEMS_PER_PAGE\r\n                                    }\r\n                                >\r\n                                    <Droppable\r\n                                        droppableId={\r\n                                            PRACTIS_SET_CHALLENGER_LIST_DROP_ID\r\n                                        }\r\n                                    >\r\n                                        {(provided: any) => {\r\n                                            return (\r\n                                                <StyledBodyContainer\r\n                                                    {...provided.droppableProps}\r\n                                                    ref={provided.innerRef}\r\n                                                >\r\n                                                    {\r\n                                                        <GenerateTableCells\r\n                                                            content={challenges}\r\n                                                            mode={edit.mode}\r\n                                                            practisSetContent={\r\n                                                                practisSetContent\r\n                                                            }\r\n                                                            background={\r\n                                                                Variables.Colors\r\n                                                                    .white\r\n                                                            }\r\n                                                            addToBuilder={\r\n                                                                addToBuilder\r\n                                                            }\r\n                                                            dataTest=\"practis-set-challenge-item\"\r\n                                                        />\r\n                                                    }\r\n                                                    {provided.placeholder}\r\n                                                </StyledBodyContainer>\r\n                                            );\r\n                                        }}\r\n                                    </Droppable>\r\n                                </StyledTablePagination>\r\n                            </TableBody>\r\n                        )}\r\n                    </StyledTableContainer>\r\n                </StyledBody>\r\n            </StyledBodyWrapper>\r\n        </StyledChallengeList>\r\n    );\r\n};\r\n","import { useState, FC, useContext, useMemo, useCallback, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { ScenarioList } from './pages/Scenarios';\nimport { ChallengeList } from './pages/Challenges';\nimport {\n    PractisSetContent,\n    PractisSets,\n} from '../../../../../../../constants/interfaces/PractisSets';\nimport { Variables } from '../../../../../../../theme/variables';\nimport { EditModeValues } from '../../../../../../../constants/enums/EditModeValues';\nimport { EditModeContext } from '../../../../PractisSets';\nimport { useModifyPractisSetService, useSearchPractisChallenges, useSearchPractisScenarios } from '../../../../store/services';\nimport { useSelector } from 'react-redux';\nimport { getPractisSetState } from '../../../../store/reducers';\nimport { WithLabelsContext } from '../../../../../../../features/portableLabels';\nimport { UserProfile } from '../../../../../../../constants/interfaces/User';\nimport { Scenario } from '../../../../../../../constants/interfaces/Scenario';\nimport { SearchParams } from '../../../../../../../constants/interfaces/filters';\nimport { Challenge } from '../../../../../../../constants/interfaces/Challenge';\nimport { getProfileState } from '../../../../../../UserProfile/store/reducers';\nimport { useSearchDebounced } from '../../../../../../../helpers/hooks/useSearch';\nimport { useLabelsState } from '../../../../../../../features/portableLabels/store/hors/withLabels/states';\nimport { LibraryItemsStatus } from '../../../../../../../features/library/tools';\nimport TextAreaBox from '../../../../../../../ui/components/TextAreaBox/TextAreaBox';\n\n\nconst ITEMS_PER_PAGE = 20;\n\nconst StyledListContent = styled.div`\n    flex: 1;\n    margin-bottom: 16px;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n`;\n\nconst StyledDescriptionInfoContent = styled.div`\n    padding: 16px;\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    margin-bottom: 16px;\n`;\n\nconst StyledInputDivs = styled.div``;\n\nconst ListContent: FC<{\n    practisSet?: PractisSets;\n    practisSetContent: PractisSetContent[];\n    profile?: UserProfile;\n    scenarios: Array<Scenario>;\n    isScenariosLoading: boolean;\n    isChallengesLoading: boolean;\n    getScenarios(searchParams: SearchParams): void;\n    challenges: Array<Challenge>;\n    getChallenges(searchParams: SearchParams): void;\n    addScenarioToBuilder?: (scenarioId?: number | string) => void;\n    addChallengeToBuilder?: (challengeId?: number | string) => void;\n}> = ({\n    practisSet,\n    practisSetContent,\n    profile,\n    scenarios,\n    getScenarios,\n    challenges,\n    isScenariosLoading,\n    isChallengesLoading,\n    getChallenges,\n    addScenarioToBuilder,\n    addChallengeToBuilder,\n}) => {\n    const [page, setPage] = useState<string>('');\n    const edit = useContext(EditModeContext);\n    const modifyPractisSet = useModifyPractisSetService();\n    const labels = useLabelsState();\n\n    const initialSearchParams: SearchParams = useMemo(\n        () => ({\n            searchTerm: '',\n            filters: [{ field: 'status', value: [LibraryItemsStatus.ACTIVE] }],\n            orderBy: {\n                field: 'updated_at',\n                asc: false,\n            },\n            labelIDs: labels.saved,\n            offset: 0,\n            limit: ITEMS_PER_PAGE,\n            totalCount: 0,\n            numberOfPages: 0,\n            companyId: profile?.companyId\n        }),\n        [labels.saved, profile?.companyId]\n    );\n\n    const handleChange = useCallback((event: { target: HTMLInputElement }) => {\n        modifyPractisSet(event.target.value, 'description');\n    }, [modifyPractisSet]);\n\n    useEffect(() => {\n        if (!page || page === 'scenarios') {\n            getScenarios(initialSearchParams);\n        }\n        if (!page || page === 'challenges') {\n            getChallenges(initialSearchParams);\n        }\n    }, [page, getScenarios, getChallenges, initialSearchParams]);\n\n    return (\n        <StyledListContent>\n            <StyledDescriptionInfoContent>\n                <StyledInputDivs>\n                    <TextAreaBox\n                        background={Variables.Colors.whiteFive}\n                        value={practisSet && practisSet.description}\n                        onChange={handleChange}\n                        name=\"description\"\n                        placeholder=\"Description\"\n                        max={500}\n                        minRows={1}\n                        padding=\"6px 12px\"\n                        readOnly={edit.mode === EditModeValues.VIEW}\n                        dataTest='practis-set-description'\n                    />\n                </StyledInputDivs>\n            </StyledDescriptionInfoContent>\n            {!page || page === 'scenarios' ? (\n                <ScenarioList\n                    profile={profile}\n                    initialSearchParams={initialSearchParams}\n                    scenarios={scenarios}\n                    onChangeSearchParams={getScenarios}\n                    practisSetContent={practisSetContent}\n                    addToBuilder={addScenarioToBuilder}\n                    page={page || 'scenarios'}\n                    setPage={setPage}\n                    isLoading={isScenariosLoading}\n                />\n            ) : (\n                <ChallengeList\n                    profile={profile}\n                    initialSearchParams={initialSearchParams}\n                    challenges={challenges}\n                    onChangeSearchParams={getChallenges}\n                    practisSetContent={practisSetContent}\n                    addToBuilder={addChallengeToBuilder}\n                    page={page}\n                    setPage={setPage}\n                    isLoading={isChallengesLoading}\n                />\n            )}\n        </StyledListContent>\n    );\n};\n\nexport const ListContentContainer: FC<{\n    practisSetContent: PractisSetContent[];\n    addScenarioToBuilder?: (scenarioId?: number | string) => void;\n    addChallengeToBuilder?: (challengeId?: number | string) => void;\n}> = ({ practisSetContent, addScenarioToBuilder, addChallengeToBuilder }) => {\n    const practisSet = useSelector(getPractisSetState).info;\n    const profile = useSelector(getProfileState);\n    const scenarios = useSelector(getPractisSetState).scenarios;\n    const isScenariosLoading = useSelector(getPractisSetState).isScenariosLoading;\n    const isChallengesLoading = useSelector(getPractisSetState).isChallengesLoading;\n    const searchPractisScenarios = useSearchPractisScenarios();\n    const searchPractisScenariosDebounced = useSearchDebounced(\n        searchPractisScenarios\n    );\n    const challenges = useSelector(getPractisSetState).challenges;\n    const searchPractisChallenges = useSearchPractisChallenges();\n    const searchPractisChallengesDebounced = useSearchDebounced(\n        searchPractisChallenges\n    );\n\n    return (\n        <WithLabelsContext.Provider\n            value={{\n                reducerName: 'practisSet',\n                scope: 'applyLabels',\n            }}\n        >\n            <ListContent\n                practisSet={practisSet}\n                practisSetContent={practisSetContent}\n                profile={profile}\n                scenarios={scenarios}\n                isScenariosLoading={isScenariosLoading}\n                isChallengesLoading={isChallengesLoading}\n                getScenarios={searchPractisScenariosDebounced}\n                challenges={challenges}\n                getChallenges={searchPractisChallengesDebounced}\n                addScenarioToBuilder={addScenarioToBuilder}\n                addChallengeToBuilder={addChallengeToBuilder}\n            />\n        </WithLabelsContext.Provider>\n    );\n};\n\nexport default ListContentContainer;\n","import React, { useEffect } from 'react';\nimport styled from 'styled-components';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../../UserProfile/store/reducers';\nimport { getCompanyState } from '../../../../../../../CompanySettings/store/reducers';\nimport { useGetCompanyService } from '../../../../../../../CompanySettings/store/services';\n\n//region Styles\nconst StyledBuilderConfigs = styled.div`\n    flex: 1;\n    background: ${props => props.theme.Colors.dark};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    margin-bottom: 5px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst StyledValue = styled.div<{ disabled?: boolean }>`\n    font-size: 17px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.white};\n    margin: 0;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n`;\n\nconst MinimumAccuracy = () => {\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n    const getCompany = useGetCompanyService();\n\n    useEffect(() => {\n        if (!company?.id && profile?.companyId) {\n            getCompany(profile.companyId);\n        }\n    }, [company?.id, profile?.companyId, getCompany]);\n    \n    const minimumAccuracy = company?.minTrainingScore || 65;\n\n    return (\n        <StyledBuilderConfigs>\n            <StyledDescription data-test='practis-set-minimum-accuracy-text'>\n                Minimum Accuracy\n            </StyledDescription>\n            <StyledValue\n                disabled={true}\n                data-test='practis-set-minimum-accuracy-value'>\n                    {minimumAccuracy}%\n            </StyledValue>\n        </StyledBuilderConfigs>\n    );\n};\n\nexport default MinimumAccuracy;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport secondsToMin from '../../../../../../../../helpers/functions/convert-time';\n\nconst StyledBuilderDuration = styled.div`\n    flex: 1;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst StyledValue = styled.div`\n    font-size: 17px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.white};\n    margin: 0;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    margin-bottom: 5px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst BuilderDuration: FC<{ duration?: number | null }> = ({ duration }) => {\n    return (\n        <StyledBuilderDuration>\n            <StyledDescription data-test='practis-set-total-duration-text'>\n                Total Duration\n            </StyledDescription>\n            <StyledValue data-test='practis-set-total-duration-value'>\n                {secondsToMin(duration)}\n            </StyledValue>\n        </StyledBuilderDuration>\n    );\n};\n\nexport default BuilderDuration;\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport {\n    practisSetEntityTypeName,\n    PractisSetEntityTypes,\n} from '../../../../../../tools';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../../../../../../constants/interfaces/ScriptLine';\nimport { PractisSetContent } from '../../../../../../../../../constants/interfaces/PractisSets';\nimport useWindowDimensions from '../../../../../../../../../helpers/hooks/useWindowDimensions';\nimport Close from '../../../../../../../../../ui/icons/Close';\nimport { Keywords } from '../../../../../../../../../constants/interfaces/Keywords';\n\n\nconst PreviewItemContainer = styled.div<{\n    top: number;\n    left: number;\n    bottom?: number;\n}>`\n    padding: 15px 12px;\n    box-shadow: 0 3px 20px 0 rgba(0, 0, 0, 0.05);\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    background: ${props => props.theme.Colors.white};\n    width: 344px;\n    max-height: 496px;\n    position: absolute;\n    display: flex;\n    flex-direction: column;\n    left: ${props => props.left}px;\n    top: ${props => (props.bottom ? 'unset' : `${props.top}px`)};\n    bottom: ${props => (props.bottom ? `${props.bottom}px` : 'unset')};\n    border-radius: 8px;\n\n    .keyword-item {\n        color: var(--ps-blue-main);\n        font-weight: bold;\n        display: inline;\n    }\n`;\n\nconst ScrollContainer = styled.div`\n    padding: 15px 12px;\n    height: 100%;\n    flex: 1;\n    overflow: auto;\n    position: relative;\n`;\n\nconst PreviewHeader = styled.div`\n    padding: 0 8px;\n    margin-bottom: 18px;\n`;\n\nconst IconContainer = styled.div`\n    height: 10px;\n    width: 10px;\n    position: absolute;\n    right: 0;\n    top: 0;\n    cursor: pointer;\n    color: ${props => props.theme.Colors.paleGrey};\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst Content = styled.div`\n    flex: 1;\n    overflow: auto;\n`;\n\nconst Type = styled.div`\n    font-size: 11px;\n    font-weight: 600;\n`;\n\nconst ChallengeType = styled(Type)`\n    color: ${props => props.theme.Colors.coral};\n`;\n\nconst ScenarioType = styled(Type)`\n    color: ${props => props.theme.Colors.darkSkyBlue};\n`;\n\nconst Title = styled.div`\n    font-size: 15px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.black};\n    margin-bottom: 8px;\n`;\n\nconst Description = styled.div`\n    font-size: 13px;\n    font-weight: normal;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst ScriptLineCard = styled.div`\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    padding: 16px 24px;\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    margin-bottom: 8px;\n`;\n\nconst LineTitle = styled.div`\n    font-size: 11px;\n    font-weight: 600;\n    margin-bottom: 8px;\n`;\n\nconst LineDescription = styled.div`\n    font-size: 11px;\n    font-weight: normal;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst LineCustomerTitle = styled(LineTitle)`\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst LineRepTitle = styled(LineTitle)`\n    color: ${props => props.theme.Colors.darkSkyBlue};\n`;\n\nconst PreviewItem: FC<{\n    item: PractisSetContent;\n    position: { y: number; x: number };\n    handleClose(): void;\n}> = ({ item, position, handleClose }) => {\n    const windowDimensions = useWindowDimensions();\n    const cardRef = useRef<any>(null);\n    const [cardPositions, setCardPositions] = useState<{\n        top: number | undefined;\n        left: number | undefined;\n        bottom: number | undefined;\n    }>({\n        top: position.y - 150,\n        left: position.x - 600,\n        bottom: undefined,\n    });\n\n    const isScenario = item.type === PractisSetEntityTypes.SCENARIO;\n    const content = isScenario ? item.scenario : item.challenge;\n\n    const buildText = useCallback((line: ScriptLine) => {\n        if (!line.keywords.length || !isScenario) {\n            return line.text;\n        }\n\n        return line.keywords\n            .reduce((str: any, keyword: Keywords) => {\n                str[\n                    keyword.start\n                ] = `<span class=\"keyword-item\">${str[keyword.start]}`;\n                str[keyword.end] = `${str[keyword.end]}</span>`;\n                return str;\n            }, line.text.split(''))\n            .join('');\n    }, [isScenario]);\n\n    useEffect(() => {\n        if (cardRef.current) {\n            const cardPosition = cardRef.current.getBoundingClientRect();\n            const bottom =\n                position.y + cardPosition.height > windowDimensions.height\n                    ? 100\n                    : undefined;\n            const top = position.y - 150;\n            const left = position.x - 600;\n\n            setCardPositions({\n                top: top,\n                left: left,\n                bottom: bottom,\n            });\n        }\n    }, [position.x, position.y, windowDimensions.height]);\n\n    if (!cardPositions.top || !cardPositions.left) {\n        return <div />;\n    }\n    return (\n        <PreviewItemContainer\n            top={cardPositions.top}\n            left={cardPositions.left}\n            bottom={cardPositions.bottom}\n            ref={cardRef}\n        >\n            <ScrollContainer>\n                <IconContainer onClick={handleClose}>\n                    <Close />\n                </IconContainer>\n                <PreviewHeader>\n                    {!isScenario ? (\n                        <ChallengeType>\n                            {practisSetEntityTypeName(item.type)}\n                        </ChallengeType>\n                    ) : (\n                        <ScenarioType>\n                            {practisSetEntityTypeName(item.type)}\n                        </ScenarioType>\n                    )}\n                    <Title>{content?.title}</Title>\n                    <Description>{content?.description}</Description>\n                </PreviewHeader>\n                <Content>\n                    {content?.script?.lines?.map((line: ScriptLine) => {\n                        return (\n                            <ScriptLineCard key={line.id}>\n                                {line.speaker === ScriptLineSpeaker.CUSTOMER ? (\n                                    <LineCustomerTitle>\n                                        Customer\n                                    </LineCustomerTitle>\n                                ) : (\n                                    <LineRepTitle>Rep</LineRepTitle>\n                                )}\n                                <LineDescription\n                                    dangerouslySetInnerHTML={{ __html: buildText(line) }}\n                                />\n                            </ScriptLineCard>\n                        );\n                    })}\n                </Content>\n            </ScrollContainer>\n        </PreviewItemContainer>\n    );\n};\n\nexport default PreviewItem;\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport {\n    practisSetEntityTypeColor,\n    practisSetEntityTypeName,\n    PractisSetEntityTypes,\n} from '../../../../../tools';\nimport secondsToMin from '../../../../../../../../helpers/functions/convert-time';\nimport {\n    PractisSetContent,\n    PractisSetContentEntities,\n} from '../../../../../../../../constants/interfaces/PractisSets';\nimport styled from 'styled-components';\nimport {\n    usePractisContentRepCountDecrease,\n    usePractisContentRepCountIncrease,\n} from '../../../../../store/services';\nimport PreviewItem from './PreviewItem/PreviewItem';\nimport OutsideActionBox from '../../../../../../../../ui/components/OutsideActionBox/OutsideActionBox';\nimport Trash from '../../../../../../../../ui/icons/Trash';\n\nconst StyledBuilderListItem = styled.div<{\n    disabled?: boolean;\n    isDragging: boolean;\n}>`\n    background: ${props => props.theme.Colors.white};\n    border-radius: 4px;\n    padding: 14px 0 14px 32px;\n    display: flex;\n    margin-bottom: 16px;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n`;\n\nconst StyledRemoveSection = styled.div`\n    margin: 0 24px 0 8px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nconst StyledRemoveIcon = styled.div<{ disabled?: boolean }>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n    width: 15px;\n    height: 16px;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    &:hover {\n        color: ${props =>\n            props.disabled\n                ? props.theme.Colors.cloudyBlue\n                : props.theme.Colors.paleRed};\n    }\n`;\n\nconst InfoSection = styled.div`\n    padding: 8px 0;\n    flex: 1;\n`;\n\nconst EntityName = styled.div<{ color: string }>`\n    font-size: 11px;\n    font-weight: 600;\n    color: ${props => props.color};\n`;\n\nconst EntityItemTitle = styled.div`\n    font-size: 15px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.black};\n    margin-bottom: 4px;\n    word-break: break-all;\n`;\n\nconst EntityItemActions = styled.div`\n    display: flex;\n`;\n\nconst EntityItemDuration = styled.div`\n    font-size: 13px;\n    font-weight: normal;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-right: 8px;\n`;\n\nconst PreviewButton = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.darkSkyBlue};\n    cursor: pointer;\n    &:hover {\n        color: ${props => props.theme.Colors.lightBlue};\n    }\n    &:active {\n        color: ${props => props.theme.Colors.windowsBlue};\n    }\n`;\n\nconst SectionDivider = styled.div`\n    width: 1px;\n    margin: 0 16px;\n    background: ${props => props.theme.Colors.paleGrey};\n`;\n\nconst RepsSection = styled.div`\n    padding: 8px 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n`;\n\nconst RepsTitle = styled.div<{ disabled?: boolean }>`\n    font-size: 11px;\n    font-weight: 600;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n    margin-bottom: 8px;\n`;\n\nconst RepsCounter = styled.div`\n    display: flex;\n    height: 24px;\n    justify-content: space-evenly;\n    text-align: center;\n`;\n\nconst RepsCount = styled.div<{ disabled?: boolean }>`\n    font-size: 17px;\n    font-weight: bold;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.black};\n`;\n\nconst SetCountContainer = styled.div<{ disabled?: boolean }>`\n    width: 24px;\n    height: 24px;\n    font-size: 15px;\n    font-weight: bold;\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: ${props => (props.disabled ? 'auto' : 'pointer')};\n    user-select: none;\n    &:active {\n        opacity: ${props => (props.disabled ? 1 : 0.7)};\n    }\n`;\n\nconst BuilderListItem: FC<{\n    item: PractisSetContent;\n    provided: any;\n    snapshot: any;\n    onRemove(id: number | string, type: PractisSetContentEntities): void;\n    disabled?: boolean;\n    showPreview: any;\n    setShowPreview(show: any): void;\n    dataTest: string;\n}> = ({\n    item,\n    provided,\n    snapshot,\n    onRemove,\n    disabled,\n    showPreview,\n    setShowPreview,\n    dataTest\n}) => {\n    const increaseContentMinRepCount = usePractisContentRepCountIncrease();\n    const decreaseContentMinRepCount = usePractisContentRepCountDecrease();\n    const isScenario = item.type === PractisSetEntityTypes.SCENARIO;\n    const itemId = isScenario ? item.scenario!.id : item.challenge!.id;\n    const content = isScenario ? item.scenario : item.challenge;\n    const itemRef = useRef<any>(null);\n    const [position, setPosition] = useState({ y: 0, x: 0 });\n\n    useEffect(() => {\n        if (itemRef && itemRef.current) {\n            const itemPositions = itemRef.current.getBoundingClientRect();\n            setPosition({ y: itemPositions.y, x: itemPositions.x });\n        }\n    }, [setPosition, snapshot.isDragging]);\n\n    const decreaseContentDisabled = isScenario\n        ? !item.minRepsCount || item.minRepsCount < 2\n        : true;\n    const dataTestPrefix = `${dataTest}-${item.type?.toLowerCase()}`;\n\n    return (\n        <StyledBuilderListItem\n            provided={provided}\n            ref={provided.innerRef}\n            {...provided.draggableProps}\n            {...provided.dragHandleProps}\n            disabled={disabled}\n            isDragging={snapshot.isDragging}\n            onMouseDown={() => {\n                setShowPreview(null);\n            }}\n        >\n            <InfoSection\n                ref={itemRef}\n                onDoubleClick={() =>\n                    !disabled && onRemove(item?.uniqueId!, item.type!)\n                }\n            >\n                <EntityName\n                    color={practisSetEntityTypeColor(item.type)}\n                    data-test={`${dataTestPrefix}-label`}\n                >\n                    {practisSetEntityTypeName(item.type)}\n                </EntityName>\n                <EntityItemTitle data-test={`${dataTestPrefix}-title`}>\n                    {content?.title}\n                </EntityItemTitle>\n                <EntityItemActions>\n                    {isScenario && (\n                        <EntityItemDuration\n                            data-test={`${dataTestPrefix}-duration`}\n                        >\n                            {item.scenario?.script?.totalDuration\n                                ? secondsToMin(\n                                    content?.script?.totalDuration\n                                  )\n                                : '-'}\n                        </EntityItemDuration>\n                    )}\n                    <PreviewButton\n                        onClick={e => {\n                            e.stopPropagation();\n                            e.preventDefault();\n                            setShowPreview(itemId);\n                        }}\n                        data-test={`${dataTestPrefix}-preview`}\n                    >\n                        Preview\n                    </PreviewButton>\n                </EntityItemActions>\n            </InfoSection>\n            {isScenario && (\n                <>\n                    <SectionDivider />\n                    <RepsSection>\n                        <RepsTitle\n                            disabled={disabled}\n                            data-test={`${dataTestPrefix}-min-reps-label`}\n                        >\n                            Minimum Reps\n                        </RepsTitle>\n                        <RepsCounter>\n                            <SetCountContainer\n                                disabled={decreaseContentDisabled || disabled}\n                                onClick={() =>\n                                    itemId &&\n                                    !decreaseContentDisabled &&\n                                    !disabled &&\n                                    decreaseContentMinRepCount(itemId)\n                                }\n                                data-test={`${dataTestPrefix}-min-reps-minus`}\n                            >\n                                -\n                            </SetCountContainer>\n                            <RepsCount\n                                disabled={disabled}\n                                data-test={`${dataTestPrefix}-min-reps-value`}\n                            >\n                                {item.minRepsCount}\n                            </RepsCount>\n                            <SetCountContainer\n                                disabled={disabled}\n                                onClick={() =>\n                                    itemId &&\n                                    !disabled &&\n                                    increaseContentMinRepCount(itemId)\n                                }\n                                data-test={`${dataTestPrefix}-min-reps-plus`}\n                            >\n                                +\n                            </SetCountContainer>\n                        </RepsCounter>\n                    </RepsSection>\n                </>\n            )}\n            <SectionDivider />\n            <StyledRemoveSection>\n                <StyledRemoveIcon\n                    onClick={() => {\n                        !disabled && onRemove(item?.uniqueId!, item.type!);\n                    }}\n                    disabled={disabled}\n                    data-test={`${dataTestPrefix}-delete`}\n                >\n                    <Trash />\n                </StyledRemoveIcon>\n            </StyledRemoveSection>\n            <OutsideActionBox\n                open={showPreview === itemId}\n                toggleOpen={setShowPreview}\n            >\n                <PreviewItem\n                    item={item}\n                    position={position}\n                    handleClose={() => setShowPreview(null)}\n                />\n            </OutsideActionBox>\n        </StyledBuilderListItem>\n    );\n};\n\nexport default BuilderListItem;","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst StyledBuilderDuration = styled.div`\n    flex: 1;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst StyledValue = styled.div`\n    font-size: 17px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.white};\n    margin: 0;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    font-weight: 600;\n    margin-bottom: 5px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst RepsRequired: FC<{ reps?: number | null }> = ({ reps }) => {\n    return (\n        <StyledBuilderDuration>\n            <StyledDescription data-test='practis-set-total-reps-text'>\n                    Total Reps Req'd\n            </StyledDescription>\n            <StyledValue data-test='practis-set-total-reps-value'>\n                {reps ? reps : 0}\n            </StyledValue>\n        </StyledBuilderDuration>\n    );\n};\n\nexport default RepsRequired;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Documents = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 64 64\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    fill=\"currentColor\"\n                    d=\"M59.429 55.465H13.714c-2.524 0-4.571-1.907-4.571-4.266V4.267C9.143 1.909 11.19 0 13.714 0H59.43C61.953 0 64 1.91 64 4.267v46.932c0 2.36-2.047 4.266-4.571 4.266zm0-49.064c0-1.179-1.023-2.133-2.286-2.133H16c-1.262 0-2.286.954-2.286 2.133v42.666c0 1.176 1.024 2.133 2.286 2.133h41.143c1.263 0 2.286-.956 2.286-2.133V6.4zM52.57 42.667h-32c-1.262 0-2.285-.956-2.285-2.135 0-1.178 1.024-2.134 2.285-2.134h32c1.262 0 2.286.956 2.286 2.134 0 1.18-1.023 2.135-2.286 2.135zm0-12.8h-32c-1.262 0-2.285-.957-2.285-2.134 0-1.178 1.024-2.133 2.285-2.133h32c1.262 0 2.286.955 2.286 2.133 0 1.177-1.023 2.133-2.286 2.133zm-13.714-12.8H20.571c-1.262 0-2.285-.955-2.285-2.133s1.024-2.133 2.285-2.133h18.286c1.262 0 2.286.955 2.286 2.133s-1.023 2.132-2.286 2.132zm16 46.933H4.571C2.047 64 0 62.09 0 59.732V12.801c0-2.356 2.047-4.265 4.571-4.265v51.196H59.43c0 2.358-2.047 4.268-4.572 4.268z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Documents;\n","import React, { FC, useContext, useState } from 'react';\nimport styled from 'styled-components';\nimport { getPractisSetState } from '../../../../store/reducers';\nimport { useSelector } from 'react-redux';\nimport {\n    PractisSetContent,\n    PractisSetContentEntities,\n    PractisSets,\n} from '../../../../../../../constants/interfaces/PractisSets';\nimport { Draggable, Droppable } from 'react-beautiful-dnd';\nimport { PRACTIS_SET_BUILDER_DROP_ID } from '../Content';\nimport { useModifyPractisSetService } from '../../../../store/services';\nimport { PractisSetEntityTypes } from '../../../../tools';\nimport { EditModeValues } from '../../../../../../../constants/enums/EditModeValues';\nimport { EditModeContext } from '../../../../PractisSets';\nimport MinimumAccuracy from './components/MinimumAccuracy';\nimport BuilderDuration from './components/BuilderDuration';\nimport BuilderListItem from './components/BuilderListItem';\nimport RepsRequired from './components/RepsRequired';\nimport Documents from '../../../../../../../ui/icons/Documents';\nimport { TableContainer } from '../../../../../../../ui/components/table-wrapper/styles';\n\nconst StyledBuilderContent = styled.div`\n    flex: 1;\n    margin-bottom: 16px;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    margin-left: 32px;\n`;\n\nconst BuilderContent = styled.div`\n    overflow: hidden;\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n`;\n\nconst BuilderActions = styled.div`\n    height: 96px;\n    display: flex;\n    background: ${props => props.theme.Colors.darkTwo};\n    border-radius: 4px;\n    margin-bottom: 16px;\n    overflow: hidden;\n    flex-shrink: 0;\n`;\n\nconst BuilderBody = styled.div`\n    overflow: hidden;\n    display: flex;\n    flex: 1;\n`;\n\nconst StyledTableContainer = styled(TableContainer)`\n    overflow: auto;\n    flex-grow: 1;\n    display: flex;\n    && > div {\n        overflow: auto;\n    }\n    &::-webkit-scrollbar-thumb {\n        background: ${props => props.theme.Colors.paleGrey};\n        border-radius: 4px;\n    }\n    &::-webkit-scrollbar {\n        width: 4px;\n        height: 4px;\n    }\n`;\n\nconst StyledBuilderBodyArea = styled.div`\n    flex: 1;\n    height: 100%;\n`;\n\nconst NoResultContainer = styled.div`\n    display: flex;\n    justify-content: center;\n    padding: 100px 0;\n    font-size: 20px;\n    color: ${props => props.theme.Colors.coolGray};\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst NoResultLogo = styled.div`\n    height: 64px;\n    width: 64px;\n    margin-bottom: 20px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst NoResultHeader = styled.div`\n    font-size: 20px;\n    font-weight: bold;\n    margin: 8px 0;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst NoResultText = styled.div`\n    font-size: 15px;\n    text-align: center;\n    margin: 8px 0;\n    max-width: 224px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst StyledEmptyDroppableArea = styled.div``;\n\nexport const StyledTableBody = styled('tbody')<{\n    emptyDropArea?: boolean;\n    isDraggingOver?: any;\n}>`\n    min-height: 50px;\n`;\n\ninterface PractisSetBuilderProps {\n    practisSetContent: PractisSetContent[];\n    practisSet: PractisSets;\n    handleRemoveContent: (\n        index: number | string,\n        type: PractisSetContentEntities\n    ) => void;\n    modifyPractisSet: (\n        value: string | number,\n        field: keyof PractisSets,\n        silent?: boolean\n    ) => void;\n}\n\nconst GenerateTableCells: FC<{\n    content: PractisSetContent[];\n    handleRemoveContent: (\n        index: number | string,\n        type: PractisSetContentEntities\n    ) => void;\n    disabled?: boolean;\n}> = ({ content, handleRemoveContent, disabled }): any => {\n    const [showPreview, setShowPreview] = useState<any>(null);\n\n    return content.map((item: PractisSetContent, index: number) => (\n        <Draggable\n            key={item?.uniqueId}\n            draggableId={`${PRACTIS_SET_BUILDER_DROP_ID}-${item?.uniqueId}`}\n            index={index}\n            isDragDisabled={disabled}\n        >\n            {(provided: any, snapshot: any) => {\n                return (\n                    <BuilderListItem\n                        item={item}\n                        provided={provided}\n                        snapshot={snapshot}\n                        disabled={disabled}\n                        onRemove={handleRemoveContent}\n                        showPreview={showPreview}\n                        setShowPreview={setShowPreview}\n                        dataTest=\"practis-set-content\"\n                    />\n                );\n            }}\n        </Draggable>\n    ));\n};\n\nconst PractisSetBuilder: React.FC<PractisSetBuilderProps> = ({\n    practisSetContent,\n    practisSet,\n    handleRemoveContent,\n    modifyPractisSet,\n}) => {\n    const edit = useContext(EditModeContext);\n\n    // Change to minRepsCountTotal TODO\n    const totalRepsReqD = practisSet.content\n        .filter(\n            (item: PractisSetContent) =>\n                item.type === PractisSetEntityTypes.SCENARIO\n        )\n        .reduce((prev: any, cur: any) => {\n            return prev + cur.minRepsCount;\n        }, 0);\n\n    return (\n        <StyledBuilderContent>\n            <BuilderContent>\n                <BuilderActions>\n                    <BuilderDuration duration={practisSet.totalDuration} />\n                    <RepsRequired reps={totalRepsReqD} />\n                    <MinimumAccuracy\n\n                    />\n                </BuilderActions>\n                <BuilderBody>\n                    <StyledTableContainer>\n                        <Droppable\n                            droppableId={\n                                practisSetContent &&\n                                practisSetContent.length < 1\n                                    ? 'empty-drop'\n                                    : PRACTIS_SET_BUILDER_DROP_ID\n                            }\n                        >\n                            {(provided: any) => {\n                                if (\n                                    practisSetContent &&\n                                    practisSetContent.length < 1\n                                ) {\n                                    return (\n                                        <StyledBuilderBodyArea\n                                            ref={provided.innerRef}\n                                            {...provided.droppableProps}\n                                        >\n                                            <StyledEmptyDroppableArea>\n                                                <NoResultContainer>\n                                                    <NoResultLogo data-test='practis-set-no-result-logo'>\n                                                        <Documents />\n                                                    </NoResultLogo>\n                                                    <NoResultHeader data-test='practis-set-no-result-text'>\n                                                        No Content\n                                                    </NoResultHeader>\n                                                    <NoResultText data-test='practis-set-no-result-description'>\n                                                        Add Scenarios &\n                                                        Challenges from the left\n                                                        in order to build this\n                                                        practis set.\n                                                    </NoResultText>\n                                                </NoResultContainer>\n                                            </StyledEmptyDroppableArea>\n                                            {provided.placeholder}\n                                        </StyledBuilderBodyArea>\n                                    );\n                                }\n                                return (\n                                    <StyledBuilderBodyArea\n                                        {...provided.droppableProps}\n                                        ref={provided.innerRef}\n                                    >\n                                        <GenerateTableCells\n                                            content={practisSetContent}\n                                            disabled={\n                                                edit.mode ===\n                                                EditModeValues.VIEW\n                                            }\n                                            handleRemoveContent={\n                                                handleRemoveContent\n                                            }\n                                        />\n                                        {provided.placeholder}\n                                    </StyledBuilderBodyArea>\n                                );\n                            }}\n                        </Droppable>\n                    </StyledTableContainer>\n                </BuilderBody>\n            </BuilderContent>\n        </StyledBuilderContent>\n    );\n};\n\nexport const PractisSetBuilderContainer: FC<{\n    practisSetContent: PractisSetContent[];\n    handleRemoveContent: (\n        index: number | string,\n        type: PractisSetContentEntities\n    ) => void;\n}> = ({ practisSetContent, handleRemoveContent }) => {\n    const practisSet = useSelector(getPractisSetState).info;\n    const modifyPractisSet = useModifyPractisSetService();\n    return (\n        <PractisSetBuilder\n            handleRemoveContent={handleRemoveContent}\n            practisSetContent={practisSetContent}\n            practisSet={practisSet}\n            modifyPractisSet={modifyPractisSet}\n        />\n    );\n};\n\nexport default PractisSetBuilderContainer;\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport ListContentContainer from './ListContent';\nimport PractisSetBuilder from './PractisSetBuilder';\nimport { DragDropContext, DropResult } from 'react-beautiful-dnd';\nimport { getPractisSetState } from '../../../store/reducers';\nimport { useSelector } from 'react-redux';\nimport {\n    PractisSetContent,\n    PractisSetContentEntities,\n} from '../../../../../../constants/interfaces/PractisSets';\nimport { Scenario } from '../../../../../../constants/interfaces/Scenario';\nimport { useUpdatePractisContentService } from '../../../store/services';\nimport { Challenge } from '../../../../../../constants/interfaces/Challenge';\nimport { PractisSetEntityTypes } from '../../../tools';\n\nexport const PRACTIS_SET_BUILDER_DROP_ID = 'PRACTIS_SET_BUILDER_DROP_ID';\nexport const PRACTIS_SET_SCENARIO_LIST_DROP_ID =\n    'PRACTIS_SET_SCENARIO_LIST_DROP_ID';\nexport const PRACTIS_SET_CHALLENGER_LIST_DROP_ID =\n    'PRACTIS_SET_CHALLENGER_LIST_DROP_ID';\nexport const PRACTIS_SET_DRAGGABLE_ID = 'PRACTIS_SET_DRAGGABLE_ID';\n\nconst Content: React.FC<{\n    allScenarios: Scenario[];\n    allChallenges: Challenge[];\n    practisSetContent: PractisSetContent[];\n    handleUpdatePractisContent: (data: PractisSetContent[]) => void;\n}> = ({\n    allScenarios,\n    allChallenges,\n    practisSetContent,\n    handleUpdatePractisContent,\n}) => {\n    const [content, setContent] =\n        useState<PractisSetContent[]>(practisSetContent);\n\n    const positionRef = useRef(0);    \n\n    useEffect(() => {\n        setContent(practisSetContent);\n    }, [practisSetContent]);\n\n    const reorderAndUpdate = useCallback((result: PractisSetContent[]) => {\n        const reOrderedResult = result.map((item, index) => ({\n            ...item,\n            position: index,\n        }));\n        setContent(reOrderedResult);\n        handleUpdatePractisContent(reOrderedResult);\n    }, [handleUpdatePractisContent]);\n\n    const changePosition = useCallback((startIndex: number, endIndex: number) => {\n        const result = Array.from(content);\n        const [removed] = result.splice(startIndex, 1);\n        result.splice(endIndex, 0, removed);\n        reorderAndUpdate(result);\n    }, [reorderAndUpdate, content]);\n\n    const addScenarioToPractisSet = useCallback((startIndex: number, endIndex: number) => {\n        const addedScenario = allScenarios[startIndex];\n        \n        if (positionRef.current === endIndex) {\n            positionRef.current++;\n        }\n\n        const addedContent = {\n            id: addedScenario?.id ?? 0,\n            uniqueId: addedScenario?.uniqueId ?? '',\n            type: PractisSetEntityTypes.SCENARIO,\n            position: endIndex,\n            minRepsCount: 1,\n            scenario: addedScenario,\n        } as PractisSetContent;\n\n        const result = Array.from(content);\n\n        result.splice(endIndex, 0, addedContent);\n        reorderAndUpdate(result);\n    }, [allScenarios, content, reorderAndUpdate]);\n\n    const addScenarioAsLastToPractisSet = useCallback((\n        scenarioId: number | string | undefined\n    ) => {\n\n        if (!scenarioId) return;\n        const result = Array.from(content);\n\n        const addedScenario = allScenarios.filter(\n            item => item.id === scenarioId\n        )[0];\n\n        const addedContent = {\n            id: addedScenario?.id ?? 0,\n            uniqueId: addedScenario?.uniqueId ?? '',\n            type: PractisSetEntityTypes.SCENARIO,\n            minRepsCount: 1,\n            scenario: addedScenario,\n            position: positionRef.current,\n        } as PractisSetContent;\n\n        positionRef.current++;\n        result.splice(content.length, 0, addedContent);\n        reorderAndUpdate(result);\n    }, [allScenarios, content, reorderAndUpdate]);\n\n    const addChallengeAsLastToPractisSet = useCallback((\n        challengeId: number | string | undefined\n    ) => {\n        if (!challengeId) return;\n\n        const addedChallenge = allChallenges.filter(\n            item => item.id === challengeId\n        )[0];\n\n        const addedContent = {\n            id: addedChallenge?.id ?? 0,\n            uniqueId: addedChallenge?.uniqueId ?? '',\n            type: PractisSetEntityTypes.CHALLENGE,\n            minRepsCount: 1,\n            challenge: addedChallenge,\n            position: positionRef.current,\n        } as PractisSetContent;\n\n        positionRef.current++;\n        const result = Array.from(content);\n        result.splice(content.length, 0, addedContent);\n        reorderAndUpdate(result);\n    }, [allChallenges, content, reorderAndUpdate]);\n\n    const addChallengeToPractisSet = useCallback((startIndex: number, endIndex: number) => {\n        if (positionRef.current === endIndex) {\n            positionRef.current++;\n        }\n\n        const result = Array.from(content);\n        const addedChallenge = allChallenges[startIndex];\n        const addedContent = {\n            id: addedChallenge?.id ?? 0,\n            uniqueId: addedChallenge?.uniqueId ?? '',\n            type: PractisSetEntityTypes.CHALLENGE,\n            minRepsCount: 1,\n            challenge: addedChallenge,\n            position: endIndex,\n        } as PractisSetContent;\n\n        result.splice(endIndex, 0, addedContent);\n        reorderAndUpdate(result);\n    }, [allChallenges, content, reorderAndUpdate]);\n\n    const removeFromPractisSet = useCallback((startIndex: number) => {\n        const result = Array.from(content);\n        result.splice(result.indexOf(result[startIndex]), 1);\n        reorderAndUpdate(result);\n    }, [content, reorderAndUpdate]);\n\n    const removePractisSetWithId = useCallback((\n        uniqueId: number | string,\n        type: PractisSetContentEntities\n    ) => {\n        const result = Array.from(content).filter(content => {\n            return !(content.uniqueId === uniqueId && content.type === type);\n        });\n        reorderAndUpdate(result);\n    }, [content, reorderAndUpdate]);\n\n    const onDragEnd = useCallback((result: DropResult) => {\n        if (!result.destination) {\n            return;\n        }\n\n        if (\n            result.destination.droppableId === PRACTIS_SET_BUILDER_DROP_ID &&\n            result.source.droppableId === result.destination.droppableId\n        ) {\n            changePosition(result.source.index, result.destination.index);\n        }\n\n        if (\n            (result.destination.droppableId === PRACTIS_SET_BUILDER_DROP_ID ||\n                result.destination.droppableId === 'empty-drop') &&\n            result.source.droppableId === PRACTIS_SET_SCENARIO_LIST_DROP_ID\n        ) {\n            addScenarioToPractisSet(\n                result.source.index,\n                result.destination.index\n            );\n        }\n\n        if (\n            result.destination.droppableId ===\n                PRACTIS_SET_SCENARIO_LIST_DROP_ID &&\n            result.source.droppableId !== result.destination.droppableId\n        ) {\n            removeFromPractisSet(result.source.index);\n        }\n\n        if (\n            (result.destination.droppableId === PRACTIS_SET_BUILDER_DROP_ID ||\n                result.destination.droppableId === 'empty-drop') &&\n            result.source.droppableId === PRACTIS_SET_CHALLENGER_LIST_DROP_ID\n        ) {\n            addChallengeToPractisSet(\n                result.source.index,\n                result.destination.index\n            );\n        }\n\n        if (\n            result.destination.droppableId ===\n                PRACTIS_SET_CHALLENGER_LIST_DROP_ID &&\n            result.source.droppableId !== result.destination.droppableId\n        ) {\n            removeFromPractisSet(result.source.index);\n        }\n    }, [addChallengeToPractisSet, addScenarioToPractisSet, changePosition, removeFromPractisSet]);\n\n    return (\n        <DragDropContext onDragEnd={onDragEnd}>\n            <ListContentContainer\n                practisSetContent={content}\n                addScenarioToBuilder={addScenarioAsLastToPractisSet}\n                addChallengeToBuilder={addChallengeAsLastToPractisSet}\n            />\n            <PractisSetBuilder\n                practisSetContent={content}\n                handleRemoveContent={removePractisSetWithId}\n            />\n        </DragDropContext>\n    );\n};\n\nexport const ContentContainer: FC = () => {\n    const practisSetContent = useSelector(getPractisSetState).info.content;\n    const allScenarios = useSelector(getPractisSetState).scenarios;\n    const allChallenges = useSelector(getPractisSetState).challenges;\n    const updatePractisContent = useUpdatePractisContentService();\n    const uuid = require('uuid/v1');\n\n    return (\n        <Content\n            practisSetContent={practisSetContent.map(item => ({\n                ...item,\n                uniqueId: uuid(),\n            }))}\n            allScenarios={allScenarios}\n            allChallenges={allChallenges}\n            handleUpdatePractisContent={updatePractisContent}\n        />\n    );\n};\n\nexport default ContentContainer;\n","import { FC } from 'react';\nimport styled from 'styled-components';\nimport Content from './Content/Content';\n\nexport type MenuInterface = { key: string; title: string };\n\nconst CustomBodyContainerWrapper = styled.div`\n    display: flex;\n    flex-direction: column;\n    flex: 1;\n    overflow: hidden;\n    padding-top: 24px;\n`;\n\nconst ContainerBody = styled.div`\n    display: flex;\n    overflow: hidden;\n    flex: 1;\n`;\n\nconst CustomBodyContainer: FC = () => {\n    return (\n        <CustomBodyContainerWrapper>\n            <ContainerBody>\n                <Content />\n            </ContainerBody>\n        </CustomBodyContainerWrapper>\n    );\n};\n\nexport default CustomBodyContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Label = styled.div<{ focused?: boolean; color?: string }>`\n    position: absolute;\n    top: ${props => (props.focused ? '-10px' : '0')};\n    left: 24px;\n    pointer-events: none;\n    font-size: ${props => (props.focused ? '11px' : '12px')};\n    -webkit-transition: all 0.18s ease;\n    transition: all 0.18s ease;\n    display: flex;\n    align-items: center;\n    height: 100%;\n    color: ${props =>\n        props.color ? props.color : props.theme.Colors.steelGrey};\n    font-weight: 500;\n`;\n\nexport const SelectLabel: FC<{\n    label: string;\n    children?: string;\n    focused?: boolean;\n    color?: string;\n    className?: string;\n    dataTest?: string;\n}> = ({ children, label, focused, color, className, dataTest }) => {\n    return (\n        <Label focused={focused} color={color} className={className} data-test={dataTest}>\n            {children || label}\n        </Label>\n    );\n};\n","import React, { FC, ReactNode } from 'react';\nimport styled from 'styled-components';\nimport { motion } from 'framer-motion';\n\nconst MenuItem = styled(motion.div)<{\n    displayOver?: 'bottom' | 'over' | 'top';\n}>`\n    min-width: 150px;\n    position: absolute;\n    background: ${props => props.theme.Colors.white};\n    z-index: 1100;\n    left: ${props => (props.displayOver === 'over' ? '16px' : '0')};\n    right: ${props => (props.displayOver === 'over' ? '16px' : '0')};\n    top:  ${props => (props.displayOver === 'top' ? 'unset' : '8px')};\n    bottom:  ${props => (props.displayOver === 'top' ? '44px' : 'unset')};\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    transition: max-height 1s;\n    overflow: hidden;\n`;\n\nconst ContentArea = styled.div`\n    max-height: 300px;\n    overflow-y: auto;\n    padding: 16px;\n`;\n\nconst ANIMATION_SCALE = 5;\n\nexport const SelectMenu: FC<{\n    children?: ReactNode;\n    displayOver?: 'bottom' | 'over' | 'top';\n}> = ({ children, displayOver }) => {\n    return (\n        <MenuItem\n            initial={{ scale: 1 / ANIMATION_SCALE }}\n            animate={{ scale: 1 }}\n            exit={{ scale: 0 }}\n            displayOver={displayOver}\n        >\n            <ContentArea className='content-area'>{children}</ContentArea>\n        </MenuItem>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst MenuItem = styled.div<{ selected?: boolean }>`\n    min-height: 40px;\n    color: ${props => props.theme.Colors.black};\n    border-radius: 4px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 8px;\n    margin-bottom: 8px;\n    display: flex;\n    align-items: center;\n    word-break: break-word;\n    background: ${props =>\n        props.selected\n            ? props.theme.Colors.whiteTwo\n            : props.theme.Colors.white};\n    &:hover {\n        background: ${props => props.theme.Colors.whiteTwo};\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const SelectMenuItem: FC<{\n    forwardedRef?: any;\n    name?: string;\n    value: string | number;\n    children: string | JSX.Element;\n    onClick: any;\n    hideAction: () => void;\n    selected?: boolean;\n    multiSelect?: boolean;\n    dataTest?: string;\n}> = ({\n    children,\n    onClick,\n    value,\n    name,\n    hideAction,\n    selected,\n    forwardedRef,\n    multiSelect,\n    dataTest\n}) => {\n    const handleSelectItem = () => {\n        onClick({ target: { value: value, name: name } });\n        if (!multiSelect) hideAction();\n    };\n\n    return (\n        <MenuItem\n            onClick={handleSelectItem}\n            selected={selected}\n            ref={forwardedRef}\n            className={selected ? 'selected-item' : undefined}\n            data-test={dataTest}\n        >\n            {children}\n        </MenuItem>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst StyledSelect = styled.div<{\n    height?: number;\n    padding?: string;\n    fontSize?: string;\n}>`\n    width: 100%;\n    height: 100%;\n    padding: ${props =>\n        !!props.padding\n            ? props.padding\n            : `${props.height ? props.height / 2 - 4 : 29}px 24px\n        15px 24px;`};\n    box-sizing: border-box;\n    font-size: ${props => (!!props.fontSize ? props.fontSize : '13px')};\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    display: flex;\n    align-items: center;\n`;\n\nconst StyledSelectValue = styled.div<{\n    color?: string;\n    disabled?: boolean;\n}>`\n    overflow: hidden;\n    color: ${props => props.disabled ? props.theme.Colors.cloudyBlue : (props.color ?? props.theme.Colors.steelGrey)};\n    text-overflow: ellipsis;\n    padding-right: 4px;\n`;\n\nexport const SelectInput: FC<{\n    children?: any;\n    items?: any;\n    value?: string | number;\n    height?: number;\n    padding?: string;\n    toggleSelect?: (e?: any) => void;\n    fontSize?: string;\n    disabled?: boolean;\n    color?: string;\n    className?: string;\n    dataTest?: string;\n}> = ({ value, toggleSelect, height, padding, fontSize, disabled, color, className, dataTest }) => {\n    return (\n        <StyledSelect\n            height={height}\n            onClick={toggleSelect}\n            padding={padding}\n            fontSize={fontSize}\n            className={className}\n            data-test={dataTest}\n        >\n            <StyledSelectValue color={color} disabled={disabled}>{value}</StyledSelectValue>\n        </StyledSelect>\n    );\n};\n","import React, { FC, useRef, useState } from 'react';\nimport styled, { css} from 'styled-components';\nimport OutsideActionBox from '../OutsideActionBox/OutsideActionBox';\nimport { Variables } from '../../../theme/variables';\nimport UpArrow from '../../icons/UpArrow';\nimport DownArrow from '../../icons/DownArrow';\nimport { SelectLabel } from './SelectLabel';\nimport { SelectMenu } from './SelectMenu';\nimport { SelectMenuItem } from './SelectMenuItem';\nimport { SelectInput } from './SelectInput';\n\nconst COLORS: any = {\n    light: {\n        background: Variables.Colors.whiteFive,\n        color: Variables.Colors.black,\n    },\n    dark: {\n        background: Variables.Colors.darkTwo,\n        color: Variables.Colors.whiteTwo,\n    },\n    gray: {\n        background: Variables.Colors.whiteTwo,\n        color: Variables.Colors.black,\n    },\n    transparent: {\n        background: Variables.Colors.transparent,\n        color: Variables.Colors.black,\n    },\n};\n\nconst StyledSelectForm = styled.div<{\n    height?: number;\n    error?: boolean;\n    borderRadius?: number;\n    variant: string;\n    border?: boolean;\n    disabled?: boolean;\n}>`\n    box-sizing: border-box;\n    position: relative;\n    border-radius: ${props => (props.borderRadius ? props.borderRadius : 4)}px;\n    border: ${props => (props.border ? 1 : 0)}px solid\n        ${props => props.theme.Colors.cloudyBlue};\n    min-width: 128px;\n    cursor: pointer;\n    height: ${props => (props.height ? `${props.height}px` : '56px')};\n    width: 100%;\n    background: ${props => COLORS[props.variant].background};\n    color: ${props => COLORS[props.variant].color};\n    box-shadow: inset 0 0 0 ${props => (props.error ? '2px' : '-1px')};\n        ${props => props.theme.Colors.coral};\n    -webkit-appearance: none;\n    \n    ${({ disabled, theme }) => disabled && css`\n        color: ${theme.Colors.cloudyBlue};\n        cursor: default;\n    `}\n`;\n\nconst Container = styled(OutsideActionBox)`\n    position: relative;\n`;\n\nconst IconHolder = styled.div<{\n    disabled?: boolean;\n}>`\n    position: absolute;\n    right: 24px;\n    width: 8px;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    color: ${props => props.disabled ? props.theme.Colors.cloudyBlue : props.theme.Colors.steelGrey};\n`;\n\nexport const Select: FC<{\n    label?: string;\n    placeholder?: string;\n    labelColor?: string;\n    id?: string;\n    items?: Array<any>;\n    children?: Array<any>;\n    value?: string | number | string[] | number[] | null;\n    name?: string;\n    defaultValue?: string | number;\n    colorTheme?: 'light' | 'dark' | 'gray' | 'transparent';\n    valueColor?: string;\n    onChange?: any;\n    disabled?: boolean;\n    error?: boolean;\n    menuPosition?: 'bottom' | 'over' | 'top';\n    height?: number;\n    fontSize?: string;\n    className?: string;\n    borderRadius?: number;\n    dataTest?: string;\n    customMenuItem?: (item: {name: string, value: string}) => JSX.Element\n}> = ({\n    label,\n    placeholder,\n    labelColor,\n    items,\n    value,\n    onChange,\n    name,\n    colorTheme,\n    valueColor,\n    menuPosition,\n    height,\n    fontSize,\n    disabled,\n    className,\n    error,\n    borderRadius,\n    customMenuItem,\n    dataTest\n}) => {\n    const [show, setShow] = useState(false);\n    const selectedRef = useRef(null);\n    const multiSelect = Array.isArray(value);\n\n    const findNameByValue = () => {\n        if (items) {\n            let selectedItems = items.filter(item =>\n                Array.isArray(value)\n                    ? value.includes(item.value as never)\n                    : item.value === value\n            );\n\n            if (selectedItems.length < 2) {\n                return selectedItems[0] && selectedItems[0].name;\n            } else {\n                return (\n                    selectedItems &&\n                    selectedItems\n                        .map(item => {\n                            return item.name;\n                        })\n                        .join(', ')\n                );\n            }\n        }\n    };\n\n    const selectedName = findNameByValue();\n\n    return (\n        <StyledSelectForm\n            variant={colorTheme ? colorTheme : 'light'}\n            error={error}\n            height={height}\n            className={className && `${className} ${show ? `${className}-open` : ''}`}\n            borderRadius={borderRadius}\n            border={(show || !!value) && !disabled}\n            disabled={disabled}\n        >\n            {label && (\n                <SelectLabel\n                    focused={Array.isArray(value) ? value.length > 0 : !!value}\n                    label={label}\n                    color={labelColor}\n                    className={className && `${className}-label`}\n                    dataTest={dataTest && `${dataTest}-label`}\n                />\n            )}\n            {placeholder && !value && (\n                <SelectLabel\n                    label={placeholder}\n                    color={labelColor}\n                    className={className && `${className}-label`}\n                    dataTest={dataTest && `${dataTest}-label`}\n                />\n            )}\n            <IconHolder\n                disabled={disabled}\n                className={className && `${className}-arrow`}\n                onClick={() => !disabled && setShow(!show)}\n            >\n                {show ? <UpArrow /> : <DownArrow />}\n            </IconHolder>\n            <SelectInput\n                value={customMenuItem?.({name: selectedName, value: value as string}) || selectedName}\n                toggleSelect={() => !disabled && setShow(!show)}\n                height={height}\n                fontSize={fontSize}\n                padding={!label ? '0px 16px' : undefined}\n                disabled={disabled}\n                color={valueColor}\n                className={className && `${className}-input`}\n                dataTest={dataTest && `${dataTest}-selected-value`}\n            />\n            <Container open={show} toggleOpen={setShow}>\n                <SelectMenu\n                    displayOver={menuPosition}\n                >\n                    {items &&\n                        items.map((item: { value: string; name: string }) => (\n                            <SelectMenuItem\n                                forwardedRef={\n                                    (\n                                        Array.isArray(value)\n                                            ? value.includes(\n                                                  item.value as never\n                                              )\n                                            : item.value === value\n                                    )\n                                        ? selectedRef\n                                        : null\n                                }\n                                key={item.value}\n                                value={item.value}\n                                name={name}\n                                hideAction={() => setShow(false)}\n                                onClick={onChange}\n                                selected={\n                                    Array.isArray(value)\n                                        ? value.includes(item.value as never)\n                                        : item.value === value\n                                }\n                                multiSelect={multiSelect}\n                                dataTest={dataTest && `${dataTest}-select-item`}\n                            >                              \n                                {customMenuItem?.(item) ||  item.name}\n                            </SelectMenuItem>\n                        ))}\n                </SelectMenu>\n            </Container>\n        </StyledSelectForm>\n    );\n};\n\nexport default Select;\n","import { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { Pacings } from '../../../constants/interfaces/Pacings';\n\nexport enum ACTIONS {\n    SEARCH_PACINGS_START = 'SEARCH_PACINGS_START',\n    SEARCH_PACINGS_SUCCESS = 'SEARCH_PACINGS_SUCCESS',\n    SEARCH_PACINGS_FAILURE = 'SEARCH_PACINGS_FAILURE',\n}\n\nexport function searchPacingsStart() {\n    return {\n        type: ACTIONS.SEARCH_PACINGS_START as ACTIONS.SEARCH_PACINGS_START,\n    };\n}\n\nexport function searchPacingsSuccess(pacings: PaginationResult<Pacings>) {\n    return {\n        type: ACTIONS.SEARCH_PACINGS_SUCCESS as ACTIONS.SEARCH_PACINGS_SUCCESS,\n        pacings,\n    };\n}\n\nexport function searchPacingsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_PACINGS_FAILURE as ACTIONS.SEARCH_PACINGS_FAILURE,\n        error,\n    };\n}\n","import { Reducer } from 'redux';\nimport {\n    ACTIONS,\n    searchPacingsFailure,\n    searchPacingsStart,\n    searchPacingsSuccess,\n} from './actions';\nimport { PacingsState } from './states';\nimport { AppState } from '../../../store/reducers';\n\nconst initialPacingsState: PacingsState = {};\n\nexport type PacingsAction =\n    | ReturnType<typeof searchPacingsStart>\n    | ReturnType<typeof searchPacingsSuccess>\n    | ReturnType<typeof searchPacingsFailure>;\n\nexport const pacingsReducer: Reducer<PacingsState, PacingsAction> = (\n    state = initialPacingsState,\n    action: PacingsAction\n): PacingsState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_PACINGS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_PACINGS_SUCCESS:\n            return {\n                ...state,\n                data: action.pacings,\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_PACINGS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        default:\n            return state;\n    }\n};\nexport const getPacingsState = (state: AppState) => state.pacings;\n","import { SearchParams } from '../../../constants/interfaces/filters';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    searchPacingsFailure,\n    searchPacingsStart,\n    searchPacingsSuccess,\n} from './actions';\nimport { useDispatch } from 'react-redux';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport { useSearchPacingsApi } from '../../../api';\n\nexport const useSearchPacingsService = () => {\n    const dispatch = useDispatch();\n    const searchPacingsApi = useSearchPacingsApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p?: SearchParams) => {\n            dispatch(searchPacingsStart());\n            searchPacingsApi(p)\n                .then(data => {\n                    dispatch(searchPacingsSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchPacingsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchPacingsApi, showMessage]\n    );\n};\n","import { FC, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { EditModeValues } from '../../../../../constants/enums/EditModeValues';\nimport { useLabelsState } from '../../../../../features/labels/store/states';\nimport { useModifyPractisSetService } from '../../store/services';\nimport { EditModeContext } from '../../PractisSets';\nimport { PractisSets } from '../../../../../constants/interfaces/PractisSets';\nimport PractisSelect from '../../../../../ui/components/Select/Select';\nimport { PacingType, pacingTypeName } from '../../../../../features/pacings/tools';\nimport { useSelector } from 'react-redux';\nimport { getPacingsState } from '../../../../../features/pacings/store/reducers';\nimport { useSearchPacingsService } from '../../../../../features/pacings/store/services';\nimport { useSearchDebounced } from '../../../../../helpers/hooks/useSearch';\nimport { usePortableLabelsState } from '../../../../../features/portableLabels/store/states';\nimport { LabelsAction } from '../../../../../ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction';\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { Input } from '../../../../../ui/components/input';\n\nconst Container = styled.div`\n    padding: 15px 0;\n    display: flex;\n`;\n\nconst TextInputContainer = styled.div`\n    flex: 1;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 128px;\n    margin-left: 16px;\n`;\n\nconst TitleTextInput = styled(Input)`\n    padding: 12px 16px;\n    font-size: 13px;\n    font-weight: normal;\n`;\n\nconst ActionPanel: FC<{\n    practisSet: PractisSets;\n    titleError: boolean;\n    isTeamLeader?: boolean;\n}> = ({ practisSet, titleError, isTeamLeader }) => {\n    const modifyPractisSet = useModifyPractisSetService();\n    const edit = useContext(EditModeContext);\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState().data;\n    const showMessage = useShowMessage();\n    const pacings = useSelector(getPacingsState).data;\n    const searchPacings = useSearchPacingsService();\n    const handleSearchPacings = useSearchDebounced(searchPacings);\n\n    useEffect(() => {}, []);\n\n    const handleSavePractisSetLabels = () => {\n        modifyPractisSet(labels.assignedLabels, 'updatedLabels');\n        showMessage(`labels have been assigned to Practis Set`, 'success');\n    };\n\n    useEffect(() => {\n        handleSearchPacings();\n    }, [handleSearchPacings]);\n\n    useEffect(() => {\n        if (!practisSet.pacing?.id && pacings) {\n            const pacingId =\n                pacings.items && pacings.items[1] && pacings.items[1].id;\n \n            modifyPractisSet({ id: pacingId }, 'pacing', true);\n        }\n    }, [practisSet, pacings, modifyPractisSet]);\n\n    const pacingItems =\n        pacings &&\n        pacings.items.map(pacing => {\n            return { value: pacing.id, name: pacingTypeName(pacing.type) };\n        });\n\n    const handlePacingChange = (e: any) => {\n        const newPacing = { id: e.target.value, type: e.target.name };\n        modifyPractisSet(newPacing, 'pacing');\n    };\n\n    return (\n        <Container>\n            <TextInputContainer>\n                <TitleTextInput\n                    placeholder=\"Practis Set Title\"\n                    height={'40px'}\n                    maxLength={90}\n                    handleChange={(event: any) =>\n                        modifyPractisSet(event.target.value, 'name')\n                    }\n                    value={practisSet.name}\n                    readOnly={edit.mode === EditModeValues.VIEW || isTeamLeader}\n                    error={titleError}\n                    dataTest=\"practis-set-title\"\n                />\n            </TextInputContainer>\n            <LabelsContainer>\n                <LabelsAction\n                    title={'Labels'}\n                    labels={labelsList}\n                    disabled={edit.mode === EditModeValues.VIEW || isTeamLeader}\n                    onAssignLabelsSubmit={handleSavePractisSetLabels}\n                    containerLeftPosition={'unset'}\n                    dataTest=\"practis-set-labels\"\n                />\n            </LabelsContainer>\n            <LabelsContainer>\n                <PractisSelect\n                    items={pacingItems}\n                    value={practisSet.pacing?.id ?? ''}\n                    name={\n                        practisSet.pacing?.id === 1\n                            ? pacingTypeName(PacingType.FREE)\n                            : pacingTypeName(PacingType.SEQUENTIAL)\n                    }\n                    placeholder={'Pacings'}\n                    height={40}\n                    onChange={handlePacingChange}\n                    disabled={edit.mode === EditModeValues.VIEW || isTeamLeader}\n                    dataTest=\"practis-set-pacing\"\n                />\n            </LabelsContainer>\n        </Container>\n    );\n};\n\nexport default ActionPanel;","import styled from 'styled-components';\n\nexport const StyledContainer = styled.div`\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    padding: 0 32px;\n    background: ${props => props.theme.Colors.white};\n    border-top-left-radius: 8px;\n    border-bottom-left-radius: 8px;\n`;\n\nexport const StyledLoadingContainer = styled.div`\n    height: 100%;\n    display: flex;\n    align-items: center;\n`;\n\nexport const CreatedByWrapper = styled.div`\n    padding: 0 16px 10px;\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 13px;\n`;","import { createContext, FC, useCallback, useEffect, useState } from 'react';\r\nimport { Dispatch } from 'redux';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport CustomHeader from './components/CustomHeader/CustomHeader';\r\nimport {\r\n    useGetSinglePractisSetService,\r\n    useResetPractisSetService,\r\n} from './store/services';\r\nimport { getPractisSetState } from './store/reducers';\r\nimport {\r\n    PractisSets,\r\n    PractisSetStatuses,\r\n    PractisSetStatusType,\r\n} from '../../../constants/interfaces/PractisSets';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport NavigationPrompt from 'react-router-navigation-prompt';\r\nimport ROUTES from '../../../routes/routes';\r\nimport CustomBodyContainer from './components/CustomBody';\r\nimport { PractisSetStatusName } from './tools';\r\nimport { buildPageTitle } from '../../../helpers/functions/page-title-helpers';\r\nimport { EditModeValues } from '../../../constants/enums/EditModeValues';\r\nimport { usePermissionsState } from '../../../features/permissions/store/state';\r\nimport { CheckPermission } from '../../../features/permissions';\r\nimport { pushModal } from '../../../tools/router';\r\nimport { useLabelsState } from '../../../features/labels/store/states';\r\nimport {\r\n    calculateAssignedLabels,\r\n    calculateRemovedLabels,\r\n    useCalculatePreSelectedLabelsForSingleItem,\r\n} from '../../../features/labels/tools';\r\nimport { isTeamLeader } from '../../../constants/enums';\r\nimport {\r\n    useSetAssignLabelsActionService,\r\n    useSetPreviouslyAssignedLabelsAction,\r\n} from '../../../features/labels/store/services';\r\nimport { usePortableLabelsState } from '../../../features/portableLabels/store/states';\r\nimport { UserProfile } from '../../../constants/interfaces/User';\r\nimport { getProfileState } from '../../UserProfile/store/reducers';\r\nimport { handleMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { ModalPageContainer } from '../../../ui/components/ModalPage';\r\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\r\nimport ActionPanel from './components/ActionPanel/ActionPanel';\r\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\r\nimport { useCreateEditDuplicateLibraryBulActionService } from '../../../features/library/services/LibraryBulkActionsService';\r\nimport {\r\n    useGenerateCreatePractisSetActionList,\r\n    useGenerateEditPractisSetActionList,\r\n} from '../../../features/library/services/LibraryBulkActionsService/helpers';\r\nimport {\r\n    CreatePractisSetInfo,\r\n    EditPractisSetInfo,\r\n} from '../../../features/library/services/LibraryBulkActionsService/types';\r\nimport {\r\n    CreatedByWrapper,\r\n    StyledContainer,\r\n    StyledLoadingContainer,\r\n} from './styles';\r\nimport {\r\n    useCreateEditPractisSetFailedCallback,\r\n    useCreateEditPractisSetSuccessCallback,\r\n    useHandleArchivePractisSet,\r\n} from './services';\r\nimport DialogWrapper from '../../../ui/components/DialogWrapper/DialogWrapper';\r\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\r\n\r\ninterface PractisSetsInterface {\r\n    profile?: UserProfile;\r\n    history: any;\r\n    handleFetchPractisSet: (practisSetId: number) => void;\r\n    practisSet: PractisSets;\r\n    practisSetId: string;\r\n    dispatch: Dispatch<any>;\r\n    loading: boolean;\r\n    handleResetPractisSet: () => void;\r\n    isNew: boolean;\r\n    modified: 'init' | 'created' | 'modified' | 'loaded' | 'updated' | 'error';\r\n    closePath: string;\r\n    closeGoingBack: boolean;\r\n}\r\n\r\nexport const StatusItems: Array<{\r\n    value: string;\r\n    name: string;\r\n    confirm: boolean;\r\n    message: string;\r\n}> = [\r\n    {\r\n        value: PractisSetStatuses.DRAFT,\r\n        name: PractisSetStatusName(PractisSetStatuses.DRAFT),\r\n        message: 'Practis Set saved as Draft',\r\n        confirm: true,\r\n    },\r\n    {\r\n        value: PractisSetStatuses.ACTIVE,\r\n        name: PractisSetStatusName(PractisSetStatuses.ACTIVE),\r\n        message: 'Practis Set published',\r\n        confirm: true,\r\n    },\r\n    {\r\n        value: PractisSetStatuses.ARCHIVED,\r\n        name: PractisSetStatusName(PractisSetStatuses.ARCHIVED),\r\n        message: 'Practis Set archived',\r\n        confirm: true,\r\n    },\r\n    {\r\n        value: PractisSetStatuses.DELETED,\r\n        name: PractisSetStatusName(PractisSetStatuses.DELETED),\r\n        message: 'Practis Set deleted',\r\n        confirm: true,\r\n    },\r\n];\r\n\r\nexport const LoadingSaveContext = createContext(false);\r\nexport const EditModeContext = createContext<{\r\n    mode: string;\r\n    action: (mode: EditModeValues) => void;\r\n}>({\r\n    mode: 'view',\r\n    action: () => {},\r\n});\r\n\r\nconst PractisSetsComponent: FC<PractisSetsInterface> = ({\r\n    history,\r\n    profile,\r\n    practisSet,\r\n    loading,\r\n    isNew,\r\n    modified,\r\n    closeGoingBack,\r\n    practisSetId,\r\n    closePath,\r\n    dispatch,\r\n    handleFetchPractisSet,\r\n    handleResetPractisSet,\r\n}) => {\r\n    const [editMode, setEditMode] = useState<EditModeValues>(\r\n        EditModeValues.VIEW\r\n    );\r\n    const createEditPractisSetSuccessCallback =\r\n        useCreateEditPractisSetSuccessCallback();\r\n    const createEditPractisSetFailedCallback =\r\n        useCreateEditPractisSetFailedCallback();\r\n\r\n    useHtmlPageTitle(\r\n        buildPageTitle('Practis Set', editMode, isNew),\r\n        [practisSet.name]\r\n    );\r\n\r\n    const handleArchivePractisSet = useHandleArchivePractisSet();\r\n    const [loadingSave, setLoadingSave] = useState(false);\r\n    const [titleError, setTitleError] = useState(false);\r\n    const isTeamLead = isTeamLeader(profile?.role?.name);\r\n    const isLoaded = !!practisSet.id;\r\n    const permissions = usePermissionsState();\r\n    const onUnload = useCallback(\r\n        (e: any) => {\r\n            e.preventDefault();\r\n            if (\r\n                modified === 'modified' &&\r\n                permissions.includes(NEW_PERMISSIONS.UPDATE_PRACTIS_SET)\r\n            ) {\r\n                e.returnValue = true;\r\n            }\r\n        },\r\n        [modified, permissions]\r\n    );\r\n\r\n    useEffect(() => {\r\n        window.addEventListener('beforeunload', onUnload);\r\n        return () => {\r\n            window.removeEventListener('beforeunload', onUnload);\r\n        };\r\n    }, [onUnload]);\r\n\r\n    useEffect(() => {\r\n        setEditMode(\r\n            (isLoaded || isNew) && practisSet.status === PractisSetStatuses.DRAFT && !isTeamLead\r\n                ? EditModeValues.EDIT\r\n                : EditModeValues.VIEW\r\n        );\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [isLoaded, isNew, practisSet.status, setEditMode]);\r\n\r\n    useEffect(() => {\r\n        if (practisSetId !== 'new') {\r\n            handleFetchPractisSet(+practisSetId);\r\n        } else {\r\n            handleResetPractisSet();\r\n        }\r\n        return () => {\r\n            handleResetPractisSet();\r\n        };\r\n    }, [handleResetPractisSet, handleFetchPractisSet, practisSetId]);\r\n\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState().data;\r\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\r\n    const setPreviousAssignedLabelsAction =\r\n        useSetPreviouslyAssignedLabelsAction();\r\n    const calculatePreSelectedLabels =\r\n        useCalculatePreSelectedLabelsForSingleItem();\r\n\r\n    useEffect(() => {\r\n        if (!isEmpty(practisSet.labels)) {\r\n            const practisSetLabelIds = practisSet.labels ?? [];\r\n            const preAssignedLabels = calculatePreSelectedLabels(\r\n                practisSetLabelIds,\r\n                labelsList\r\n            );\r\n            setAssignLabelsAction(preAssignedLabels);\r\n        } else {\r\n            setAssignLabelsAction([]);\r\n        }\r\n        return () => {\r\n            setAssignLabelsAction([]);\r\n        };\r\n    }, [\r\n        practisSet.labels,\r\n        labelsList,\r\n        calculatePreSelectedLabels,\r\n        setAssignLabelsAction,\r\n    ]);\r\n\r\n    //initially set previousAssignedLabels\r\n    useEffect(() => {\r\n        if (!isEmpty(practisSet.labels)) {\r\n            const practisSetLabelIds = practisSet.labels;\r\n\r\n            if (practisSetLabelIds) {\r\n                const preAssignedLabels = calculatePreSelectedLabels(\r\n                    practisSetLabelIds,\r\n                    labelsList\r\n                );\r\n                setPreviousAssignedLabelsAction(preAssignedLabels);\r\n            }\r\n        } else {\r\n            setPreviousAssignedLabelsAction([]);\r\n        }\r\n\r\n        return () => {\r\n            setPreviousAssignedLabelsAction([]);\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [practisSet.labels]);\r\n\r\n    /**\r\n     * @function handleViewAssignUsers\r\n     * @param { number } practisSetId\r\n     * @returns { void }\r\n     */\r\n    const handleViewAssignUsers = useCallback(\r\n        (practisSetId?: number): void => {\r\n            if (!practisSetId) return;\r\n\r\n            pushModal(\r\n                history,\r\n                ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ASSIGN_USERS.replace(\r\n                    ':practisSetId',\r\n                    practisSetId.toString()\r\n                )\r\n            );\r\n        },\r\n        [history]\r\n    );\r\n\r\n    const generateCreatePractisSetActionList =\r\n        useGenerateCreatePractisSetActionList();\r\n    const generateEditPractisSetActionList =\r\n        useGenerateEditPractisSetActionList();\r\n\r\n    const createEditPractisSetService =\r\n        useCreateEditDuplicateLibraryBulActionService(\r\n            isNew ? 'create' : 'update',\r\n            'Practis Set',\r\n            responses =>\r\n                createEditPractisSetSuccessCallback(\r\n                    setLoadingSave,\r\n                    practisSet.id,\r\n                    responses\r\n                ),\r\n            (error, completedResponses) =>\r\n                createEditPractisSetFailedCallback(\r\n                    setLoadingSave,\r\n                    setTitleError,\r\n                    error,\r\n                    completedResponses\r\n                )\r\n        );\r\n\r\n    const handleUpdatePractisSet = (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: string\r\n    ) => {\r\n        setLoadingSave(true);\r\n\r\n        if (!validateUpdate(status ? status : practisSet.status)) {\r\n            setLoadingSave(false);\r\n            callbacks?.onCancel();\r\n            return;\r\n        }\r\n\r\n        const newPractisSetInfo: CreatePractisSetInfo = {\r\n            name: practisSet.name,\r\n            description: practisSet.description,\r\n            pacingId: practisSet.pacing?.id ?? 0,\r\n            labelIds: calculateAssignedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            practisSetContents: practisSet.content ?? [],\r\n            status: status as PractisSetStatusType,\r\n        };\r\n\r\n        const editedPractisSetInfo: EditPractisSetInfo = {\r\n            practisSetId: practisSet.id ?? 0,\r\n            name: practisSet.name,\r\n            description: practisSet.description,\r\n            pacingId: practisSet.pacing?.id ?? 0,\r\n            addedLabelIds: calculateAssignedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            deletedLabelIds: calculateRemovedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            practisSetContents: practisSet.content ?? [],\r\n            status: status as PractisSetStatusType,\r\n        };\r\n\r\n        const createPractisSetListAction =\r\n            generateCreatePractisSetActionList(newPractisSetInfo);\r\n\r\n        const editPractisSetListAction =\r\n            generateEditPractisSetActionList(editedPractisSetInfo);\r\n\r\n        if (status !== PractisSetStatuses.ARCHIVED) {\r\n            if (!practisSet.id) {\r\n                createEditPractisSetService([createPractisSetListAction]);\r\n            } else {\r\n                createEditPractisSetService(editPractisSetListAction);\r\n            }\r\n        } else {\r\n            practisSet?.id && handleArchivePractisSet(practisSet.id);\r\n        }\r\n    };\r\n\r\n    const validateUpdate = useCallback(\r\n        (status: string): boolean => {\r\n            if (\r\n                practisSet &&\r\n                practisSet.content &&\r\n                practisSet.content.length > 99\r\n            ) {\r\n                handleMessage(\r\n                    dispatch,\r\n                    'You’ve reached the limit of adding scenarios and challenges',\r\n                    'error'\r\n                );\r\n                return false;\r\n            }\r\n\r\n            let output = true;\r\n            switch (status) {\r\n                case PractisSetStatuses.DELETED:\r\n                    output = true;\r\n                    break;\r\n                case PractisSetStatuses.ACTIVE:\r\n                    if (!practisSet.name?.trim()) {\r\n                        handleMessage(dispatch, 'Title required', 'error');\r\n                        setTitleError(true);\r\n                        output = false;\r\n                    } else if (practisSet.content.length < 1) {\r\n                        handleMessage(\r\n                            dispatch,\r\n                            'Active practis set should have at least one scenario',\r\n                            'error'\r\n                        );\r\n                        output = false;\r\n                        setTitleError(false);\r\n                    } else {\r\n                        setTitleError(false);\r\n                    }\r\n                    break;\r\n                case PractisSetStatuses.DRAFT:\r\n                case PractisSetStatuses.ARCHIVED:\r\n                default:\r\n                    if (practisSet.name.length < 1) {\r\n                        handleMessage(dispatch, 'Title required', 'error');\r\n                        output = false;\r\n                        setTitleError(true);\r\n                    } else {\r\n                        setTitleError(false);\r\n                    }\r\n            }\r\n            return output;\r\n        },\r\n        [dispatch, practisSet]\r\n    );\r\n\r\n    if (\r\n        !isNew &&\r\n        (loading || (!practisSet?.id && modified !== 'error'))\r\n    ) {\r\n        return (\r\n            <ModalPageContainer\r\n                closePath={closePath}\r\n                closeGoingBack={closeGoingBack}\r\n            >\r\n                <StyledLoadingContainer>\r\n                    <Loading />\r\n                </StyledLoadingContainer>\r\n            </ModalPageContainer>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <ModalPageContainer closePath={closePath} closeGoingBack={true}>\r\n            <StyledContainer>\r\n                <EditModeContext.Provider\r\n                    value={{ mode: editMode, action: setEditMode }}\r\n                >\r\n                    <LoadingSaveContext.Provider value={loadingSave}>\r\n                        <CustomHeader\r\n                            handleUpdatePractisSet={handleUpdatePractisSet}\r\n                            handleViewAssignUsers={handleViewAssignUsers}\r\n                            isViewMode={isTeamLead}\r\n                        />\r\n                    </LoadingSaveContext.Provider>\r\n                    <ActionPanel\r\n                        practisSet={practisSet}\r\n                        titleError={titleError}\r\n                        isTeamLeader={isTeamLead}\r\n                    />\r\n                    {practisSet.creator && (\r\n                        <CreatedByWrapper data-test=\"practis-set-created-by\">\r\n                            Created by {practisSet.creator?.firstName}{' '}\r\n                            {practisSet.creator?.lastName}\r\n                        </CreatedByWrapper>\r\n                    )}\r\n                    <TableDivider />\r\n                    <CustomBodyContainer />\r\n                </EditModeContext.Provider>\r\n                <CheckPermission\r\n                    permissions={[NEW_PERMISSIONS.UPDATE_PRACTIS_SET]}\r\n                >\r\n                    <NavigationPrompt when={modified === 'modified'}>\r\n                        {({ onConfirm, onCancel }) => (\r\n                            <DialogWrapper\r\n                                modalTitle=\"Discard changes?\"\r\n                                description={\r\n                                    'Do you want to save or discard changes?'\r\n                                }\r\n                                cancelButtonText={'Discard'}\r\n                                confirmButtonText={'Save'}\r\n                                onCancel={onConfirm}\r\n                                onConfirm={() => {\r\n                                    handleUpdatePractisSet({\r\n                                        onConfirm: onConfirm,\r\n                                        onCancel: onCancel,\r\n                                    });\r\n                                }}\r\n                                dataTest=\"confirmation-modal\"\r\n                            />\r\n                        )}\r\n                    </NavigationPrompt>\r\n                </CheckPermission>\r\n            </StyledContainer>\r\n        </ModalPageContainer>\r\n    );\r\n};\r\n\r\nexport interface PractisSetsComponentContainerProps\r\n    extends RouteComponentProps<{ practisSetId: string }> {\r\n    closePath: string;\r\n    closeGoingBack: boolean;\r\n}\r\n\r\nexport const PractisSetsComponentContainer: FC<\r\n    PractisSetsComponentContainerProps\r\n> = ({ history, match, closePath, closeGoingBack }) => {\r\n    const dispatch = useDispatch();\r\n    const profile = useSelector(getProfileState);\r\n    const isNew = match.params.practisSetId === 'new';\r\n    const {\r\n        info: practisSet,\r\n        case: modified,\r\n        isLoading: loading,\r\n    } = useSelector(getPractisSetState);\r\n    const getPractisSet = useGetSinglePractisSetService();\r\n    const resetPractisSet = useResetPractisSetService();\r\n\r\n    return (\r\n        <PractisSetsComponent\r\n            history={history}\r\n            profile={profile}\r\n            practisSet={practisSet}\r\n            practisSetId={match.params.practisSetId}\r\n            isNew={isNew}\r\n            modified={modified}\r\n            loading={loading}\r\n            handleFetchPractisSet={getPractisSet}\r\n            handleResetPractisSet={resetPractisSet}\r\n            dispatch={dispatch}\r\n            closePath={closePath}\r\n            closeGoingBack={closeGoingBack}\r\n        />\r\n    );\r\n};\r\n\r\nexport default withRouter(PractisSetsComponentContainer);\r\n","import React from 'react';\nimport ROUTES from '../../../routes/routes';\nimport Navigation from '../../../ui/components/Navigation/Navigation';\nimport styled from 'styled-components';\n\nconst StyledLibraryNavigationContainer = styled.div``;\n\nconst LibraryNavigation = () => {\n    return (\n        <StyledLibraryNavigationContainer>\n            <Navigation\n                menu={[\n                    {\n                        key: 'practisSets',\n                        title: `Practis Sets`,\n                        url: ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL,\n                    },\n                    {\n                        key: 'scenarios',\n                        title: `Scenarios`,\n                        url: ROUTES.LIBRARY_SETTINGS.SCENARIOS.ALL,\n                    },\n                    {\n                        key: 'challenges',\n                        title: `Challenges`,\n                        url: ROUTES.LIBRARY_SETTINGS.CHALLENGES.ALL,\n                    },\n                ]}\n                dataTest='library-nav'\n            />\n        </StyledLibraryNavigationContainer>\n    );\n};\n\nexport const LibraryNavigationContainer = () => {\n    return <LibraryNavigation />;\n};\n\nexport default LibraryNavigationContainer;\n","import React, { FC, useCallback, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport { Fieldset } from '../../../../ui/components/Fieldset';\r\nimport { PortableLabelsWithStore } from '../../../portableLabels';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../portableLabels/store/hors/withLabels/services';\r\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\r\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\r\nimport { LIBRARY_STATUS_ITEMS } from '../../tools';\r\nimport Checkbox from '../../../../ui/components/Checkbox';\r\nimport { Variables } from '../../../../theme/variables';\r\nimport { toggleItemInArray } from '../../../../helpers/functions/array-helpers';\r\n\r\nconst Container = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n    display: flex;\r\n    gap: 16px;\r\n    max-height: 416px;\r\n    flex-grow: 1;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst LabelsContainer = styled.div`\r\n    width: 208px;\r\n    min-height: 244px;\r\n    height: 100%;\r\n    overflow: auto;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Actions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-end;\r\n\r\n    flex-shrink: 0;\r\n    margin-top: 16px;\r\n`;\r\n\r\nconst SummaryCaption = styled.span`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    margin-right: 24px;\r\n\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst StatusContainer = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    width: 158px;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst CheckBoxWrapper = styled.div`\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst ButtonWrapper = styled.div`\r\n    margin-right: 12px;\r\n`;\r\n\r\nexport const LibraryFilters: FC<{\r\n    selectedStatuses: string[];\r\n    savedStatuses: string[];\r\n    handleSelectStatus: (ids: string[]) => void;\r\n    handleSaveStatus: (ids: string[]) => void;\r\n    preSelectedLabels: number[];\r\n    onLabelsChange: (ids: number[]) => void;\r\n    onSuccessApply: () => void;\r\n}> = ({\r\n    selectedStatuses,\r\n    savedStatuses,\r\n    handleSelectStatus,\r\n    handleSaveStatus,\r\n    preSelectedLabels,\r\n    onLabelsChange,\r\n    onSuccessApply,\r\n}) => {\r\n    \r\n    useEffect(() => {\r\n        handleSelectStatus(savedStatuses);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [savedStatuses]);\r\n\r\n    const labels = useLabelsState();\r\n    const selectLabels = useSelectLabels();\r\n    const saveLabels = useSaveLabels();\r\n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\r\n\r\n    useEffect(() => {\r\n        if (ifPreselectedLabelsChanged) {\r\n            selectLabels(preSelectedLabels);\r\n            saveLabels();\r\n        }\r\n    }, [\r\n        ifPreselectedLabelsChanged,\r\n        preSelectedLabels,\r\n        saveLabels,\r\n        selectLabels,\r\n    ]);\r\n\r\n    const handleStatusSelection = useCallback(\r\n        (status: string) => {\r\n            handleSelectStatus(toggleItemInArray(selectedStatuses, status));\r\n        },\r\n        [handleSelectStatus, selectedStatuses]\r\n    );\r\n\r\n    const onApplyHandler = useCallback(() => {\r\n        onLabelsChange(labels.selected);\r\n        handleSaveStatus(selectedStatuses);\r\n        saveLabels();\r\n        onSuccessApply();\r\n    }, [\r\n        onLabelsChange,\r\n        labels.selected,\r\n        handleSaveStatus,\r\n        selectedStatuses,\r\n        saveLabels,\r\n        onSuccessApply,\r\n    ]);\r\n\r\n    const onClearHandler = useCallback(() => {\r\n        handleSelectStatus([]);\r\n        selectLabels([]);\r\n    }, [handleSelectStatus, selectLabels]);\r\n\r\n    const totalFiltersSelected =\r\n        selectedStatuses.length +\r\n        labels.selected.filter((id: any) => id > 0).length;\r\n\r\n    return (\r\n        <Container>\r\n            <Wrapper>\r\n                <Fieldset title={'Status'} dataTest=\"library-filters-status-title\">\r\n                    <StatusContainer>\r\n                        {LIBRARY_STATUS_ITEMS.map(item => {\r\n                            return (\r\n                                <CheckBoxWrapper key={item.value} data-test=\"status-item-container\">\r\n                                    <Checkbox\r\n                                        key={item.value}\r\n                                        handleChange={() => {\r\n                                            handleStatusSelection(item.value);\r\n                                        }}\r\n                                        checked={selectedStatuses.includes(\r\n                                            item.value\r\n                                        )}\r\n                                        size={12}\r\n                                        label={item.name}\r\n                                        fontSize={13}\r\n                                        fontColor={Variables.Colors.black}\r\n                                        fontWeight={'500'}\r\n                                        dataTest={`library-${item.name.toLowerCase()}-checkbox`}\r\n                                    />\r\n                                </CheckBoxWrapper>\r\n                            );\r\n                        })}\r\n                    </StatusContainer>\r\n                </Fieldset>\r\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\r\n                    <LabelsContainer>\r\n                        <PortableLabelsWithStore\r\n                            showSave={false}\r\n                            showSelectActions\r\n                            showSearch\r\n                        />\r\n                    </LabelsContainer>\r\n                </Fieldset>\r\n            </Wrapper>\r\n            <Actions>\r\n                <SummaryCaption data-test=\"library-filters-selected-counter\">\r\n                    {totalFiltersSelected} Selected\r\n                </SummaryCaption>\r\n                <ButtonWrapper>\r\n                    <Button\r\n                        width={'122px'}\r\n                        variant={'inverse'}\r\n                        action={() => onClearHandler()}\r\n                        disabled={totalFiltersSelected < 1}\r\n                        dataTest=\"library-filters-clear\"\r\n                    >\r\n                        Clear\r\n                    </Button>\r\n                </ButtonWrapper>\r\n                <Button\r\n                    width={'122px'}\r\n                    action={() => onApplyHandler()}\r\n                    dataTest=\"library-filters-apply\"\r\n                >\r\n                    Apply Filter\r\n                </Button>\r\n            </Actions>\r\n        </Container>\r\n    );\r\n};\r\n","import { FC, useRef, useState } from 'react';\r\nimport {\r\n    ActionButton,\r\n    ActionItem,\r\n} from '../../../../ui/components/ActionButton';\r\nimport { CheckPermission } from '../../../permissions';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { isTeamLeader } from '../../../../constants/enums';\r\nimport { PopupComponent } from '../../../../ui/components/Popup';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../portableLabels/store/hors/withLabels/services';\r\nimport {\r\n    calculateAssignedLabels,\r\n    calculateRemovedLabels,\r\n    useCalculatePreSelectedLabelsForSingleItem,\r\n} from '../../../labels/tools';\r\nimport { AssignLabels } from '../../../portableLabels/templates/AssignLabels';\r\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\r\nimport { Scenario as ScenariosInterface } from '../../../../constants/interfaces/Scenario';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { useSelector } from 'react-redux';\r\nimport { ScenarioActionsHelper } from '../../tools';\r\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\r\n\r\nconst ScenariosListActions: FC<{\r\n    scenario: ScenariosInterface;\r\n    actionsHelper: ScenarioActionsHelper;\r\n    restoreScenario: (scenarioIds: number[], isRowAction?: boolean) => void;\r\n    handleItemEdit: (scenario: ScenariosInterface) => void;\r\n    handleViewScenario: (scenario: ScenariosInterface) => void;\r\n    handleGenerateChallenge: (scenario: ScenariosInterface) => void;\r\n    onDuplicateScenario: (scenario: ScenariosInterface) => void;\r\n    handleDeleteScenario: (scenarioId: number) => void;\r\n    handleDownloadAsPDF: (scenarioId?: number) => void;\r\n    archiveScenario: (scenarioIds: number[], isRowAction?: boolean) => void;\r\n    assignLabelsToLibrary: (\r\n        addedLabelIds: number[],\r\n        deletedLabelIds: number[]\r\n    ) => void;\r\n    isHidden?: boolean;\r\n}> = ({\r\n    scenario,\r\n    actionsHelper,\r\n    restoreScenario,\r\n    handleItemEdit,\r\n    handleViewScenario,\r\n    handleGenerateChallenge,\r\n    handleDeleteScenario,\r\n    onDuplicateScenario,\r\n    handleDownloadAsPDF,\r\n    archiveScenario,\r\n    assignLabelsToLibrary,\r\n    isHidden,\r\n}) => {\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState();\r\n    const setSelectLabels = useSelectLabels();\r\n    const saveLabels = useSaveLabels();\r\n    const calculatePreSelectedLabels =\r\n        useCalculatePreSelectedLabelsForSingleItem();\r\n    const profile = useSelector(getProfileState);\r\n\r\n    const handleSetPreselectedLabels = () => {\r\n        const selectedLabelIds = scenario?.labels || [];\r\n        const preAssignedLabels = calculatePreSelectedLabels(\r\n            selectedLabelIds,\r\n            labelsList.data\r\n        );\r\n        setSelectLabels(preAssignedLabels);\r\n        saveLabels();\r\n    };\r\n\r\n    const handleSaveSelectedLabels = (labelIDs: number[]) => {\r\n        const addedLabelIds = calculateAssignedLabels(labelIDs, labels.saved);\r\n        const deletedLabelIds = calculateRemovedLabels(labelIDs, labels.saved);\r\n\r\n        assignLabelsToLibrary(addedLabelIds, deletedLabelIds);\r\n    };\r\n\r\n    const [assignSingleLabelOpen, setAssignSingleLabelOpen] = useState<\r\n        null | number | undefined\r\n    >(null);\r\n\r\n    const triggerRef = useRef(null);\r\n\r\n    return (\r\n        <span>\r\n            <div ref={triggerRef}>\r\n                <ActionButton\r\n                    customWidth={192}\r\n                    isHidden={isHidden}\r\n                    dataTest=\"library-scenarios-item-menu\"\r\n                >\r\n                    {actionsHelper.canEdit(scenario) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                handleItemEdit(scenario);\r\n                            }}\r\n                            dataTest=\"edit-scenario-action\"\r\n                        >\r\n                            View\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canAssignLabels(scenario) &&\r\n                        !!labelsList.data.items.length && (\r\n                            <ActionItem\r\n                                onClick={e => {\r\n                                    e.stopPropagation();\r\n                                    setAssignSingleLabelOpen(scenario.id);\r\n                                    handleSetPreselectedLabels();\r\n                                }}\r\n                                dataTest=\"assign-labels-scenario-action\"\r\n                            >\r\n                                Assign Labels\r\n                            </ActionItem>\r\n                        )}\r\n                    {isTeamLeader(profile?.role?.name) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                handleViewScenario(scenario);\r\n                            }}\r\n                            dataTest=\"view-scenario-action\"\r\n                        >\r\n                            View\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canDuplicate(scenario) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                onDuplicateScenario(scenario);\r\n                            }}\r\n                            dataTest=\"duplicate-scenario-action\"\r\n                        >\r\n                            Duplicate\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canGenerateChallenge(scenario) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                handleGenerateChallenge(scenario);\r\n                            }}\r\n                            dataTest=\"generate-challenge-action\"\r\n                        >\r\n                            Generate Challenge\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canRestore(scenario) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                restoreScenario([scenario.id!], true);\r\n                            }}\r\n                            dataTest=\"restore-scenario-action\"\r\n                        >\r\n                            Restore\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canDelete(scenario) && (\r\n                        <ActionItem\r\n                            destructive={true}\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                scenario?.id &&\r\n                                    handleDeleteScenario(scenario.id);\r\n                            }}\r\n                            dataTest=\"delete-scenario-action\"\r\n                        >\r\n                            Delete\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canDownloadPdf(scenario) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                handleDownloadAsPDF(scenario.id);\r\n                            }}\r\n                            dataTest=\"download-pdf-scenario-action\"\r\n                        >\r\n                            Download as PDF\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canArchive(scenario) && (\r\n                        <CheckPermission\r\n                            permissions={[NEW_PERMISSIONS.ARCHIVE_SCENARIO]}\r\n                        >\r\n                            <ActionItem\r\n                                destructive={true}\r\n                                onClick={e => {\r\n                                    e.stopPropagation();\r\n                                    archiveScenario([scenario.id!], true);\r\n                                }}\r\n                                dataTest=\"archive-scenario-action\"\r\n                            >\r\n                                Archive\r\n                            </ActionItem>\r\n                        </CheckPermission>\r\n                    )}\r\n                </ActionButton>\r\n            </div>\r\n            <PopupComponent\r\n                triggerRef={triggerRef}\r\n                open={assignSingleLabelOpen === scenario.id}\r\n                onDismiss={() => {\r\n                    setAssignSingleLabelOpen(null);\r\n                }}\r\n            >\r\n                <AssignLabels\r\n                    onLabelsChange={handleSaveSelectedLabels}\r\n                    onSuccessApply={() => {\r\n                        setAssignSingleLabelOpen(null);\r\n                    }}\r\n                    withBorder={true}\r\n                />\r\n            </PopupComponent>\r\n        </span>\r\n    );\r\n};\r\n\r\nexport default ScenariosListActions;\r\n","import { useEffect, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { getCompanyState } from '../../pages/CompanySettings/store/reducers';\nimport { getProfileState } from '../../pages/UserProfile/store/reducers';\n\nexport function useSession() {\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n\n    return useMemo(\n        () => !!profile?.id && (!!company?.id || !!profile?.companyId) \n            ? `${profile.id}/${company?.id || profile.companyId}`\n            : '',\n        [profile?.id, profile?.companyId, company?.id]\n    );\n}\n\nexport function useSessionEffect(effect: () => void, deps: any[] = []) {\n    const session = useSession();\n\n    useEffect(() => {\n        if (session) {\n            effect();\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [session, ...deps]);\n}\n\n","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const countAppliedFiltersCount = (searchParams: SearchParams) => {\n    let total = 0;\n\n    if (searchParams && searchParams.teamIds && searchParams.teamIds.length) {\n        total = total + searchParams.teamIds.length;\n    }\n\n    if (searchParams && searchParams.labelIDs && searchParams.labelIDs.length) {\n        total = total + searchParams.labelIDs.filter(id => id > 0).length;\n    }\n\n    if (searchParams && searchParams.roleIDs && searchParams.roleIDs.length) {\n        total = total + searchParams.roleIDs.length;\n    }\n\n    if (\n        searchParams &&\n        searchParams.teamLeadIds &&\n        searchParams.teamLeadIds.length\n    ) {\n        total = total + searchParams.teamLeadIds.length;\n    }\n\n    if (\n        searchParams?.invitersIDs?.length\n    ) {\n        total = total + searchParams.invitersIDs.length;\n    }\n\n    return total;\n};\n","import { makeStyles } from '@material-ui/core';\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: '0px !important',\n    },\n}));\n\n","import { FC, useCallback } from 'react';\nimport { SelectDropdown } from '../../../SelectDropdown';\n\nexport const TableDropdown: FC<{\n    items?: { value: string | number; name: string }[];\n    value?: string | string[] | number | number[];\n    defaultValue?: string;\n    label?: string;\n    disabled?: boolean;\n    restrictShowAllName?: boolean;\n    onChange?(value: string): void;\n    openMenuWidth?: string;\n}> = ({\n    value,\n    defaultValue,\n    items,\n    label,\n    disabled,\n    restrictShowAllName,\n    onChange,\n    openMenuWidth,\n}) => {\n    const handleChange = useCallback(\n        (e: any) => onChange && onChange(e.target.value),\n        [onChange]\n    );\n    return (\n        <SelectDropdown\n            label={label}\n            items={items}\n            defaultValue={defaultValue}\n            value={value}\n            restrictShowAllName={restrictShowAllName}\n            onChange={handleChange}\n            disabled={disabled}\n            openMenuWidth={openMenuWidth}\n        />\n    );\n};\n\nexport function useFilter(\n    field: string,\n    onFilterChange: (filter: {\n        field: string;\n        value: string | number | string[] | number[];\n    }) => void\n) {\n    const onChange = useCallback(\n        (value: string | number | string[] | number[]) =>\n            onFilterChange({ field, value }),\n        [field, onFilterChange]\n    );\n    return onChange;\n}\n","import { FC, useCallback, useEffect, useState, useMemo } from 'react';\nimport { useHistory } from 'react-router';\nimport { History } from 'history';\nimport { isEmpty } from 'lodash';\n\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport {\n    LIBRARY_STATUS,\n    libraryItemsStatusName,\n    useScenarioActionsHelper,\n    ScenarioActionsHelper,\n    ScenarioActions,\n} from '../../tools';\nimport secondsToMin from '../../../../helpers/functions/convert-time';\nimport ROUTES from '../../../../routes/routes';\nimport { pushModal } from '../../../../tools/router';\nimport {\n    useArchiveScenarioService,\n    useDeleteLibraryLabelTag,\n    useDeleteScenariosService,\n    useDownloadScenarioReportService,\n    useGenerateChallengeSuccessCallback,\n    useRestoreScenarioService,\n    useSearchScenariosService,\n    useUpdateAllScenarioCheckedStateService,\n    useUpdateLibraryScenarioCheckedStateService,\n} from '../../store/services';\nimport {\n    selectSelectedScenarios,\n    useLibraryScenariosState,\n    useUpdatedLibraryScenariosState,\n} from '../../store/states';\nimport { Scenario as ScenarioInterface } from '../../../../constants/interfaces/Scenario';\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport LibraryNavigationContainer from '../../components/LibraryNavigation';\nimport {\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../../labels/store/states';\nimport {\n    ASSIGN_LABEL_OPTIONS,\n    LOAD_ASSIGNED_LABELS,\n} from '../../../../constants/enums';\nimport {\n    clearSelectedItemIfNotLoaded,\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabels,\n} from '../../../labels/tools';\nimport {\n    useSaveUserFiltersService,\n    useSetAssignLabelsActionService,\n} from '../../../labels/store/services';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport { Popup } from '../../../../ui/components/Popup';\nimport { LibraryFilters } from '../../components/Filters/LibraryFilters';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport ScenariosListActions from '../../components/ListActions/ScenariosListActions';\nimport Document from '../../../../ui/icons/Document';\nimport { useSessionEffect } from '../../../common';\nimport { countAppliedFiltersCount } from '../../../teams/pages/ListOfTeams/tools';\nimport {\n    useAssignedLabelsIdsApi,\n    useAssignScenarioLabelApi,\n    useDeleteScenarioLabelApi,\n} from '../../../../api';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport { useStyles } from './styles';\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useFilter } from '../../../../ui/components/table-wrapper/table/TableDropdown';\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport { useFetchAllPractisSetsService } from '../../../portablePractisSets/store/hors/withPractisSets/services';\nimport {\n    useUpdateLabelsBulkActionService,\n    useUpdateMultipleEntityLabelsBulkActionService,\n} from '../../../../services/GeneralBulkActionServices';\nimport { generateCopyOfEntityName } from '../../../../services/GeneralBulkActionServices/helpers';\nimport { useGenerateCreateDuplicateScenarioActionList } from '../../services/LibraryBulkActionsService/helpers';\nimport { CreateNewScenarioInfo, GenerateChallengeData } from '../../services/LibraryBulkActionsService/types';\nimport { useCreateEditDuplicateLibraryBulActionService, useGenerateChallengeBulActionService } from '../../services/LibraryBulkActionsService';\nimport { UPDATE_MULTIPLE_LABEL_ACTION } from '../../../../services/GeneralBulkActionServices/constants';\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\nimport { DEFAULT_CHALLENGE_TRY_LIMIT } from '../../../challenges/constants';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\nconst DEFAULT_FILTER_VALUE = [LIBRARY_STATUS.ACTIVE, LIBRARY_STATUS.DRAFT];\n\nconst Scenarios: FC<{\n    scenarios?: ListResult<ScenarioInterface>;\n    updatedScenarios?: ScenarioInterface;\n    searchScenarios(searchParams: SearchParams): void;\n    history: History<any>;\n    onDeleteScenarios: (\n        scenarioIds: number[],\n        successCallback?: () => void\n    ) => void;\n    onArchiveScenario: (scenarioIds: number[]) => void;\n    onRestoreScenario: (scenarioIds: number[]) => void;\n    selectedLabels?: number[];\n    selectedScenarioIds?: number[];\n    selectedScenarios?: ScenarioInterface[];\n    actionsHelper: ScenarioActionsHelper;\n    loading?: boolean;\n    setAssignLabelsAction(labels: number[]): void;\n    assignedLabels?: number[];\n    updateAllScenariosCheckedState(\n        scenarioIds: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedScenarioCheckedState(scenarioId: number): void;\n    updatedLabels?: any;\n    downloadScenario(scenarioId: number): void;\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\n}> = ({\n    scenarios,\n    updatedScenarios,\n    history,\n    onDeleteScenarios,\n    onArchiveScenario,\n    onRestoreScenario,\n    searchScenarios,\n    selectedLabels,\n    selectedScenarioIds,\n    selectedScenarios,\n    actionsHelper,\n    setAssignLabelsAction,\n    assignedLabels,\n    updateAllScenariosCheckedState,\n    updateSelectedScenarioCheckedState,\n    updatedLabels,\n    loading,\n    downloadScenario,\n    saveGlobalLabelFilters,\n}) => {\n    const classes = useStyles();\n    const fetchAllPractisSets = useFetchAllPractisSetsService();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n    const deleteLibraryLabelTag = useDeleteLibraryLabelTag();\n    const assignLabelsToScenarios = useAssignScenarioLabelApi();\n    const deleteLabelsFromScenarios = useDeleteScenarioLabelApi();\n\n    const [selectedStatuses, setSelectedStatuses] = useState<string[]>([\n        'active',\n        'draft',\n    ]);\n    const [savedStatuses, setSavedStatuses] = useState<string[]>([\n        'active',\n        'draft',\n    ]);\n\n    const canAccessPage = useHandleAccessPage();\n\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [{ field: 'status', value: DEFAULT_FILTER_VALUE }],\n        labelIDs: selectedLabels,\n        orderBy: {\n            field: 'updated_at',\n            asc: false,\n        },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setLabelIDs,\n        setOffset,\n        refreshSearchParams,\n        setFilter,\n    } = useSearchParamsState(initialSearchParams);\n\n    const refreshData = useCallback(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchScenarios(searchParams);\n        setLastRefreshed(new Date());\n        setIsSelectAll(false);\n        updateAllScenariosCheckedState([], false, false);\n    }, [\n        searchParams,\n        initialOffset,\n        searchScenarios,\n        updateAllScenariosCheckedState,\n    ]);\n\n    useEffect(() => {\n        updateAllScenariosCheckedState([], false, false);\n        setIsSelectAll(false);\n    }, [location.pathname, updateAllScenariosCheckedState]);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [pageIndex]);\n\n    useSessionEffect(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchScenarios(searchParams);\n    }, [searchScenarios, searchParams]);\n\n    useEffect(() => {\n        if (updatedScenarios) refreshSearchParams();\n    }, [updatedScenarios, refreshSearchParams]);\n\n    useEffect(() => {\n        selectedLabels && setLabelIDs(selectedLabels);\n    }, [selectedLabels, setLabelIDs]);\n\n    useEffect(() => {\n        if (updatedLabels && updatedLabels.updateType === 'delete')\n            refreshSearchParams();\n    }, [updatedLabels, refreshSearchParams]);\n\n    useEffect(() => {\n        if (\n            selectedScenarios?.length &&\n            scenarios?.count &&\n            selectedScenarios.length === +scenarios.count\n        ) {\n            setIsSelectAll(true);\n        }\n    }, [scenarios?.count, selectedScenarios]);\n\n    const handleItemEdit = (scenarios: ScenarioInterface) => {\n        updateAllScenariosCheckedState([], false, false);\n        pushModal(\n            history,\n            ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE.replace(\n                ':scenarioId',\n                scenarios.id!.toString()\n            )\n        );\n    };\n\n    const generateChallengeSuccessCallback =\n        useGenerateChallengeSuccessCallback();\n\n    const generateChallengeService = useGenerateChallengeBulActionService(\n        generateChallengeSuccessCallback\n    );\n\n    const handleGenerateChallenge = (scenario: ScenarioInterface) => {\n        if (!scenario.id) {\n            return;\n        }\n\n        const generateChallengeData: GenerateChallengeData = {\n            title: `Challenge - ${scenario.title}`,\n            description: scenario.description,\n            sourceScenarioId: scenario.id,\n            labelIds: (scenario.labels as number[]) ?? [],\n            lines: scenario.script.lines ?? [],\n            tryLimit: DEFAULT_CHALLENGE_TRY_LIMIT,\n        };\n\n        generateChallengeService(generateChallengeData);\n    };\n\n    const handleDownloadAsPDF = (id?: number) => {\n        if (!id) return;\n        downloadScenario(id);\n    };\n\n    const isCheckboxPartiallySelected =\n        scenarios &&\n        scenarios.items &&\n        selectedScenarios &&\n        selectedScenarios.length < scenarios.items.length;\n\n    const updateAllScenariosCheck = useCallback(\n        (checked: boolean) => {\n            const ids =\n                (scenarios &&\n                    scenarios.items.map(\n                        (item: ScenarioInterface) => item.id as number\n                    )) ||\n                ([] as number[]);\n            updateAllScenariosCheckedState(\n                ids,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [scenarios, isCheckboxPartiallySelected, updateAllScenariosCheckedState]\n    );\n\n    const handleScenarioCheck = (e: any, sc: ScenarioInterface) => {\n        e.stopPropagation();\n        if (!!sc.id) {\n            updateSelectedScenarioCheckedState(sc.id);\n        }\n    };\n\n    const getDeletedLabels = useCalculateDeletedLabels();\n\n    const updateMultipleScenariosLabels =\n        useUpdateMultipleEntityLabelsBulkActionService(\n            assignLabelsToScenarios,\n            deleteLabelsFromScenarios,\n            isSelectAll,\n            {\n                actionName: UPDATE_MULTIPLE_LABEL_ACTION,\n                actionFunction: searchScenarios,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            limit: 1,\n                            offset: Number(scenarios?.count) ?? 0,\n                        },\n                        shouldSetStore: false,\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n            refreshData\n        );\n\n    const assignLabels = async () => {\n        if (assignedLabels && selectedScenarioIds) {\n            const { preAssignedLabels } = await getAssignedLabelsIds(\n                selectedScenarioIds,\n                LOAD_ASSIGNED_LABELS.SCENARIOS_SCREEN_LIBRARY,\n                ASSIGN_LABEL_OPTIONS.SCENARIO,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                return calculatePreSelectedLabels(\n                    selectedScenarioIds,\n                    scenarios,\n                    data\n                );\n            });\n\n            const deletedLabels = getDeletedLabels(assignedLabels);\n\n            const deletedLabelsFiltered = deletedLabels.filter(\n                x =>\n                    preAssignedLabels.includes(x) ||\n                    preAssignedLabels.includes(-x)\n            );\n            const selectedLabelsFiltered = assignedLabels.filter(\n                x => x > 0 && !preAssignedLabels.includes(x)\n            );\n\n            updateMultipleScenariosLabels(\n                {\n                    entityName: 'scenario',\n                    entityIds: selectedScenarioIds,\n                },\n                selectedLabelsFiltered,\n                deletedLabelsFiltered\n            );\n        }\n    };\n\n    const getAssignedLabelsIds = useAssignedLabelsIdsApi();\n\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\n\n    const orderBy = searchParams.orderBy;\n    const hcName = useOrderBy('title', orderBy, setOrderBy);\n    const hcStatus = useOrderBy('status', orderBy, setOrderBy);\n    const hcDuration = useOrderBy('total_duration', orderBy, setOrderBy);\n    const hcUpdatedAt = useOrderBy('updated_at', orderBy, setOrderBy);\n    const handleChangeEvent = useFilter('status', setFilter);\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const labelChangeHandler = (ids: number[]) => {\n        saveGlobalLabelFilters(ids);\n    };\n\n    const onSelectStatus = (status: string[]) => {\n        setSelectedStatuses(status);\n    };\n    const onSaveStatus = (status: string[]) => {\n        setSavedStatuses(status);\n    };\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters:\n            countAppliedFiltersCount(searchParams) +\n            (savedStatuses?.length || 0),\n        itemsCount: scenarios?.items.length || 0,\n    });\n\n    const bulkActions = useMemo(\n        () => actionsHelper.getBulkActions(selectedScenarios),\n        [selectedScenarios, actionsHelper]\n    );\n\n    /**\n     * @function successDeleteScenarioCallback\n     * @returns { void }\n     */\n    const successDeleteScenarioCallback = useCallback((): void => {\n        fetchAllPractisSets();\n        refreshSearchParams();\n    }, [fetchAllPractisSets, refreshSearchParams]);\n\n    /**\n     * @function onConfirmDeleteScenario\n     * @param { number } scenarioIdToDelete\n     * @returns { void }\n     */\n    const onConfirmDeleteScenario = useCallback(\n        (scenarioIdToDelete: number): void => {\n            onDeleteScenarios(\n                [scenarioIdToDelete!],\n                successDeleteScenarioCallback\n            );\n        },\n        [onDeleteScenarios, successDeleteScenarioCallback]\n    );\n\n    /**\n     * @function handleDeleteScenario\n     * @param { number } id\n     * @returns { void }\n     */\n    const handleDeleteScenario = useCallback(\n        (id: number): void => {\n            showConfirmationModalDialog({\n                modalTitle: 'Are You Sure?',\n                description:\n                    'Are you sure you want to delete this item? This can’t be undone',\n                onConfirm: () => onConfirmDeleteScenario(id),\n            });\n        },\n        [onConfirmDeleteScenario, showConfirmationModalDialog]\n    );\n\n    /**\n     * @function onOpenAssignLabelAction\n     * @returns { void }\n     */\n    const onOpenAssignLabelAction = (): void => {\n        if (scenarios && scenarios.items && selectedScenarioIds) {\n            getAssignedLabelsIds(\n                selectedScenarioIds,\n                LOAD_ASSIGNED_LABELS.SCENARIOS_SCREEN_LIBRARY,\n                ASSIGN_LABEL_OPTIONS.SCENARIO,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                const { preAssignedLabels } = calculatePreSelectedLabels(\n                    selectedScenarioIds,\n                    scenarios,\n                    data\n                );\n\n                setAssignLabelsAction(preAssignedLabels);\n            });\n        }\n    };\n\n    useEffect(() => {\n        const filteredUsers = scenarios\n            ? scenarios.items.map(scenario => Number(scenario.id))\n            : [];\n        const usersToClear = clearSelectedItemIfNotLoaded(\n            selectedScenarioIds,\n            filteredUsers\n        );\n        if (usersToClear && usersToClear.length > 0) {\n            updateAllScenariosCheckedState(usersToClear, false);\n        }\n    }, [selectedScenarioIds, scenarios, updateAllScenariosCheckedState]);\n\n    useEffect(() => {\n        return () => updateAllScenariosCheckedState([], false, false);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllScenariosCheckedState([], false, false);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [scenarios]);\n\n    useEffect(() => {\n        handleChangeEvent(savedStatuses);\n    }, [savedStatuses, handleChangeEvent]);\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_SCENARIO]);\n    }, [canAccessPage]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onClearSelection\n     * @returns { void }\n     */\n    const onClearSelection = () => {\n        updateAllScenariosCheckedState([], false, false);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function onSelectAll\n     * @returns { void }\n     */\n    const onSelectAll = () => {\n        const ids =\n            (scenarios &&\n                scenarios.items.map(\n                    (item: ScenarioInterface) => item.id as number\n                )) ||\n            ([] as number[]);\n        updateAllScenariosCheckedState(ids, true, isCheckboxPartiallySelected);\n        setIsSelectAll(true);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        updateAllScenariosCheck(event.target.checked);\n        setIsSelectAll(false);\n    };\n\n    const isMasterCheckBoxChecked = !!selectedScenarioIds?.length;\n\n    const isMasterCheckBoxDisabled =\n        !scenarios || (scenarios && scenarios.items.length < 1);\n\n    /**\n     * @function checkIsRowChecked\n     * @param { ScenarioInterface } scenario\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (scenario: ScenarioInterface): boolean =>\n        !!selectedScenarioIds &&\n        !!scenario.id &&\n        selectedScenarioIds.includes(scenario.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { ScenarioInterface } scenario\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, scenario: ScenarioInterface) => {\n        setIsSelectAll(false);\n        handleScenarioCheck(event, scenario);\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { ScenarioInterface } scenario\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (scenario: ScenarioInterface): boolean => {\n        return labelsOpen === scenario?.['id'];\n    };\n\n    /**\n     * @function onDeleteLabelHandler\n     * @param { number } labelId\n     * @param { ScenarioInterface } scenario\n     * @returns { void }\n     */\n    const onDeleteLabelHandler = useCallback(\n        (labelId: number, scenario: ScenarioInterface): void => {\n            const scnerioItem = scenarios?.items.find(\n                item => item.id === scenario.id\n            );\n\n            if (!isEmpty(scnerioItem)) {\n                deleteLibraryLabelTag(\n                    labelId,\n                    {\n                        entityItem: scnerioItem!,\n                        entityName: 'scenario',\n                    },\n                    refreshData\n                );\n            }\n        },\n        [deleteLibraryLabelTag, refreshData, scenarios]\n    );\n\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\n        assignLabelsToScenarios,\n        deleteLabelsFromScenarios,\n        refreshData\n    );\n\n    /**\n     * @function handleUpdateScenariosLabels\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { number } scenarioId\n     * @returns { void }\n     */\n    const handleUpdateScenariosLabels = (\n        addedLabelIds: number[],\n        deletedLabelIds: number[],\n        scenarioId: number\n    ): void => {\n        updateLabelsBulkActionService(\n            {\n                entityName: 'scenario',\n                entityId: scenarioId,\n            },\n            addedLabelIds,\n            deletedLabelIds\n        );\n    };\n\n    const generateDuplicateScenarioActionList =\n        useGenerateCreateDuplicateScenarioActionList();\n\n    const duplicateLibraryBulkActionService =\n        useCreateEditDuplicateLibraryBulActionService(\n            'duplicate',\n            'Scenario',\n            refreshData\n        );\n\n    /**\n     * @function handleDuplicateScenario\n     * @param { ScenarioInterface } scenario\n     * @returns { void }\n     */\n    const handleDuplicateScenario = useCallback(\n        (scenario: ScenarioInterface) => {\n            const newScenario: CreateNewScenarioInfo = {\n                title: generateCopyOfEntityName(scenario.title),\n                description: scenario.description,\n                labelIds: scenario?.labels ?? [],\n                lines: scenario?.script?.lines ?? [],\n            };\n\n            const duplicateScenarioActionList =\n                generateDuplicateScenarioActionList(newScenario);\n\n            !isEmpty(duplicateScenarioActionList) &&\n                duplicateLibraryBulkActionService([\n                    duplicateScenarioActionList,\n                ]);\n        },\n        [duplicateLibraryBulkActionService, generateDuplicateScenarioActionList]\n    );\n\n    return (\n        <MainWrapper\n            subTitle=\"Library\"\n            tabs={<LibraryNavigationContainer />}\n            hideDivider={!!selectedScenarios?.length}\n            htmlPageTitle=\"Library - Practis\"\n            dataTest=\"library\"\n        >\n            {loading && !isSelectAll && <LoadingComponent />}\n            <TableWrapper\n                tableStates={tableStates}\n                data={scenarios?.items}\n                cornered={selectedLabels && !!selectedLabels.length}\n                selectedLabels={selectedLabels}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'library-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: scenarios?.count ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            countAppliedFiltersCount(searchParams),\n                        dataTest: 'library-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        dataTest: 'library-search-input',\n                    },\n                    isSelectedItemOptionsVisible:\n                        !isEmpty(selectedScenarios) && !isEmpty(scenarios),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedScenarios?.length,\n                        totalCount: scenarios?.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: onClearSelection,\n                        onSelectAll: onSelectAll,\n                        bulkActionsConfig: {\n                            disabled: bulkActions.areBulkActionsDisabled(),\n                            disabledLabel: bulkActions.areItemsEmpty()\n                                ? undefined\n                                : \"Bulk actions can't be applied\",\n                            assignLabelsPermissions:\n                                bulkActions.isBulkActionVisible(\n                                    ScenarioActions.ASSIGN_LABELS\n                                )\n                                    ? [NEW_PERMISSIONS.ASSIGN_SCENARIO_LABEL]\n                                    : [],\n                            isAssignLabelsDisabled:\n                                bulkActions.isBulkActionDisabled(\n                                    ScenarioActions.ASSIGN_LABELS\n                                ),\n                            onOpenAssignLabelAction: onOpenAssignLabelAction,\n                            onAssignLabelsSubmit: assignLabels,\n                            isSelectAll: isSelectAll,\n                            totalCount: scenarios?.count,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <LibraryFilters\n                                        selectedStatuses={\n                                            scenarios ? selectedStatuses : []\n                                        }\n                                        savedStatuses={savedStatuses}\n                                        handleSelectStatus={onSelectStatus}\n                                        handleSaveStatus={onSaveStatus}\n                                        preSelectedLabels={selectedLabels || []}\n                                        onLabelsChange={labelChangeHandler}\n                                        onSuccessApply={() => hide()}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={250}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={\n                                            scenarios\n                                                ? savedStatuses.length +\n                                                  (searchParams.labelIDs\n                                                      ?.length || 0)\n                                                : 0\n                                        }\n                                        disabled={tableStates.disableFilters}\n                                        dataTest=\"library-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && scenarios?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: Document,\n                        text: 'No Scenarios Yet',\n                        dataTest: 'library-no-scenarios',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Scenarios',\n                        dataTest: 'library-no-found-scenarios',\n                    },\n                    noFilterResultsOptions: {\n                        dataTest: 'library-no-filtered-scenarios',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: isMasterCheckBoxChecked,\n                        disabled: isMasterCheckBoxDisabled,\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'library-scenarios-master-checkbox',\n                    },\n\n                    columns: [\n                        {\n                            title: 'Scenarios',\n                            width: 28,\n                            ...hcName,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-scenarios-title-column',\n                        },\n                        {\n                            title: 'Status',\n                            width: 17,\n                            ...hcStatus,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-scenarios-status-column',\n                        },\n                        {\n                            title: 'Duration',\n                            width: 17,\n                            ...hcDuration,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-scenarios-duration-column',\n                        },\n                        {\n                            title: ' Last Updated',\n                            width: 17,\n                            ...hcUpdatedAt,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-scenarios-date-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n                    rowConfig: {\n                        onRowClick: handleItemEdit,\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        getLabelTagsProps: (scenario: ScenarioInterface) => ({\n                            selectedLabels: scenario?.labels || [],\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_CHALLENGE_LABEL,\n                            ],\n\n                            onDeleteLabel: (labelId: number) =>\n                                onDeleteLabelHandler(labelId, scenario),\n                        }),\n                        dataTest: 'library-scenarios-item',\n                        cells: [\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    renderTitle: (\n                                        scenario: ScenarioInterface\n                                    ) => scenario.title,\n                                    dataTest: 'library-scenarios-item-title',\n                                },\n                            },\n                            {\n                                fieldType: 'BADGE_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                shouldShowEmptyCell: (\n                                    scenario: ScenarioInterface\n                                ) => !scenario?.status,\n                                fieldProps: {\n                                    getBadgeFieldProps: (\n                                        scenario: ScenarioInterface\n                                    ) => ({\n                                        status: scenario?.status,\n                                        className: classes.customTableCellStyle,\n                                        dataTest:\n                                            'library-scenarios-item-status',\n                                    }),\n                                    renderTitle: (\n                                        scenario: ScenarioInterface\n                                    ) =>\n                                        libraryItemsStatusName(\n                                            scenario?.status\n                                        ),\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    scenario: ScenarioInterface\n                                ) => !scenario?.script?.totalDuration,\n                                fieldProps: {\n                                    renderTitle: (\n                                        scenario: ScenarioInterface\n                                    ) =>\n                                        secondsToMin(\n                                            scenario?.script?.totalDuration\n                                        ),\n                                    dataTest: 'library-scenarios-item-duration',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    scenario: ScenarioInterface\n                                ) => !scenario?.updatedAt,\n                                fieldProps: {\n                                    renderTitle: (\n                                        scenario: ScenarioInterface\n                                    ) => formatDate(scenario?.updatedAt),\n                                    dataTest: 'library-scenarios-item-date',\n                                },\n                            },\n                            {\n                                fieldType: 'LABEL_TAGS',\n                                fieldProps: {\n                                    getLabelTagsProps: (\n                                        scenario: ScenarioInterface\n                                    ) => ({\n                                        open: labelsOpen === scenario.id,\n                                        toggleOpen: () =>\n                                            handleToggleLabels(\n                                                Number(scenario.id)\n                                            ),\n                                        selectedLabels: scenario?.labels ?? [],\n                                        dataTest:\n                                            'library-scenarios-item-labels',\n                                    }),\n                                },\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (\n                                        scenario: ScenarioInterface\n                                    ) => (\n                                        <ScenariosListActions\n                                            scenario={scenario}\n                                            actionsHelper={actionsHelper}\n                                            restoreScenario={onRestoreScenario}\n                                            handleItemEdit={handleItemEdit}\n                                            handleViewScenario={handleItemEdit}\n                                            handleGenerateChallenge={\n                                                handleGenerateChallenge\n                                            }\n                                            handleDeleteScenario={\n                                                handleDeleteScenario\n                                            }\n                                            onDuplicateScenario={\n                                                handleDuplicateScenario\n                                            }\n                                            handleDownloadAsPDF={\n                                                handleDownloadAsPDF\n                                            }\n                                            archiveScenario={onArchiveScenario}\n                                            assignLabelsToLibrary={(\n                                                addedLabelIds,\n                                                deletedLabelIds\n                                            ) =>\n                                                handleUpdateScenariosLabels(\n                                                    addedLabelIds,\n                                                    deletedLabelIds,\n                                                    scenario?.id ?? 0\n                                                )\n                                            }\n                                            isHidden={\n                                                !!selectedScenarios?.length\n                                            }\n                                        />\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const ScenariosContainer: FC = () => {\n    const state = useLibraryScenariosState();\n    const history = useHistory();\n    const deleteScenarios = useDeleteScenariosService();\n    const archiveScenario = useArchiveScenarioService();\n    const restoreScenario = useRestoreScenarioService();\n    const searchScenarios = useSearchScenariosService();\n    const updatedScenarios = useUpdatedLibraryScenariosState();\n    const searchScenariosDebounced = useSearchDebounced(searchScenarios);\n    const labels = useLabelsState();\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const updateAllScenariosCheckedState =\n        useUpdateAllScenarioCheckedStateService();\n    const updateSelectedScenarioCheckedState =\n        useUpdateLibraryScenarioCheckedStateService();\n    const updatedLabels = useUpdatedLabelsState();\n    const downloadScenario = useDownloadScenarioReportService();\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const actionsHelper = useScenarioActionsHelper();\n\n    const selectedScenarios = useMemo(\n        () => selectSelectedScenarios(state),\n        [state]\n    );\n\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'libraryScenarios' }}>\n            <Scenarios\n                onDeleteScenarios={deleteScenarios}\n                onArchiveScenario={archiveScenario}\n                onRestoreScenario={restoreScenario}\n                history={history}\n                searchScenarios={searchScenariosDebounced}\n                scenarios={state.data}\n                loading={state.loading}\n                selectedScenarioIds={state.selectedScenarios}\n                selectedScenarios={selectedScenarios}\n                actionsHelper={actionsHelper}\n                updatedScenarios={updatedScenarios.data}\n                selectedLabels={labels.selected}\n                setAssignLabelsAction={setAssignLabelsAction}\n                assignedLabels={labels.assignedLabels}\n                updateAllScenariosCheckedState={updateAllScenariosCheckedState}\n                updateSelectedScenarioCheckedState={\n                    updateSelectedScenarioCheckedState\n                }\n                updatedLabels={updatedLabels}\n                downloadScenario={downloadScenario}\n                saveGlobalLabelFilters={saveGlobalLabelFilters}\n            />\n        </WithLabelsContext.Provider>\n    );\n};\n\n\nexport default ScenariosContainer;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Box = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 20 20\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    fill=\"currentColor\"\n                    d=\"M18.75 8v10.667c0 .736-.56 1.333-1.25 1.333h-15c-.69 0-1.25-.597-1.25-1.333V8C.56 8 0 7.403 0 6.667V1.333C0 .597.56 0 1.25 0h17.5C19.44 0 20 .597 20 1.333v5.334C20 7.404 19.44 8 18.75 8zM2.5 18c0 .368.28.667.625.667h13.75c.345 0 .625-.299.625-.667V8.666c0-.367-.28-.665-.625-.665H13.75v2.666c0 .737-.56 1.333-1.25 1.333h-5c-.69 0-1.25-.596-1.25-1.333V8H3.125c-.345 0-.625.298-.625.665V18zm10-8V8.001h-5V10c0 .368.28.667.625.667h3.75c.345 0 .625-.299.625-.667zm6.25-8c0-.368-.28-.667-.625-.667H1.875c-.345 0-.625.299-.625.667v4c0 .368.28.667.625.667h16.25c.345 0 .625-.299.625-.667V2z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Box;\n","import { FC, useRef, useState } from 'react';\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../ui/components/ActionButton';\nimport { isTeamLeader } from '../../../../constants/enums';\nimport { PopupComponent } from '../../../../ui/components/Popup';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../portableLabels/store/hors/withLabels/services';\nimport {\n    calculateAssignedLabels,\n    calculateRemovedLabels,\n    useCalculatePreSelectedLabelsForSingleItem,\n} from '../../../labels/tools';\nimport { AssignLabels } from '../../../portableLabels/templates/AssignLabels';\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\nimport { PractisSets as PractisSetsInterface } from '../../../../constants/interfaces/PractisSets';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport { useSelector } from 'react-redux';\nimport { PractisSetActionsHelper } from '../../tools';\nimport { useSetAssignLabelsActionService } from '../../../labels/store/services';\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\n\nconst PractisSetsListActions: FC<{\n    practisSet: PractisSetsInterface;\n    actionsHelper: PractisSetActionsHelper;\n    onRestorePractisSet: (\n        practisSetIds: number[]\n    ) => void;\n    handleItemEdit: (practisSet: PractisSetsInterface) => void;\n    handleViewPractisSet: (practisSet: PractisSetsInterface) => void;\n    handleViewAssignUsers: (id: number) => void;\n    handleViewPractisSetProgress: (practisSet: PractisSetsInterface) => void;\n    handleDeletePractisSet: (practisSetId: number) => void;\n    onDuplicatePractisSet: (\n        practisSet: PractisSetsInterface\n    ) => void;\n    onArchivePractisSet: (\n        practisSetIds: number[],\n    ) => void;\n    assignLabelsToLibrary: (\n        addedLabelIds: number[],\n        deletedLabelIds: number[]\n    ) => void;\n    isHidden?: boolean;\n}> = ({\n    practisSet,\n    actionsHelper,\n    onRestorePractisSet,\n    handleItemEdit,\n    handleViewPractisSet,\n    handleViewAssignUsers,\n    handleViewPractisSetProgress,\n    handleDeletePractisSet,\n    onDuplicatePractisSet,\n    onArchivePractisSet,\n    assignLabelsToLibrary,\n    isHidden,\n}) => {\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const calculatePreSelectedLabels =\n        useCalculatePreSelectedLabelsForSingleItem();\n    const profile = useSelector(getProfileState);\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n\n    const handleSetPreselectedLabels = () => {\n        const selectedLabelIds = practisSet.labels || [];\n        const preAssignedLabels = calculatePreSelectedLabels(\n            selectedLabelIds,\n            labelsList.data\n        );\n        setSelectLabels(preAssignedLabels);\n        setAssignLabelsAction(preAssignedLabels);\n        saveLabels();\n    };\n\n    const handleSaveSelectedLabels = (labelIDs: number[]) => {\n        const addedLabelIds = calculateAssignedLabels(labelIDs, labels.saved);\n        const deletedLabelIds = calculateRemovedLabels(labelIDs, labels.saved);\n\n        assignLabelsToLibrary(addedLabelIds, deletedLabelIds);\n    };\n\n    const [assignSingleLabelOpen, setAssignSingleLabelOpen] = useState<\n        null | number | undefined\n    >(null);\n\n    const triggerRef = useRef(null);\n\n    return (\n        <span>\n            <div ref={triggerRef}>\n                <ActionButton\n                    customWidth={168}\n                    isHidden={isHidden}\n                    dataTest=\"library-practis-sets-item-menu\"\n                >\n                    {actionsHelper.canEdit(practisSet) && (\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                handleItemEdit(practisSet);\n                            }}\n                            dataTest=\"edit-practis-set-action\"\n                        >\n                            View\n                        </ActionItem>\n                    )}\n                    {isTeamLeader(profile?.role?.name) && (\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                handleViewPractisSet(practisSet);\n                            }}\n                            dataTest=\"view-practis-set-action\"\n                        >\n                            View\n                        </ActionItem>\n                    )}\n                    {actionsHelper.canAssignUsers(practisSet) && (\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                if (practisSet?.id) {\n                                    handleViewAssignUsers(practisSet?.id);\n                                }\n                            }}\n                            dataTest=\"assign-users-practis-set-action\"\n                        >\n                            Assign Users\n                        </ActionItem>\n                    )}\n                    {actionsHelper.canAssignLabels(practisSet) &&\n                        !!labelsList.data.items.length && (\n                            <ActionItem\n                                onClick={e => {\n                                    e.stopPropagation();\n                                    setAssignSingleLabelOpen(practisSet.id);\n                                    handleSetPreselectedLabels();\n                                }}\n                                dataTest=\"assign-labels-practis-set-action\"\n                            >\n                                Assign Labels\n                            </ActionItem>\n                        )}\n                    {actionsHelper.canDuplicate(practisSet) && (\n                        <ActionItem\n                            onClick={e => {\n                                onDuplicatePractisSet(practisSet);\n                            }}\n                            dataTest=\"duplicate-practis-set-action\"\n                        >\n                            Duplicate\n                        </ActionItem>\n                    )}\n                    {actionsHelper.canArchive(practisSet) && (\n                        <ActionItem\n                            destructive={true}\n                            onClick={e => {\n                                e.stopPropagation();\n                                onArchivePractisSet([practisSet.id!]);\n                            }}\n                            dataTest=\"archive-practis-set-action\"\n                        >\n                            Archive\n                        </ActionItem>\n                    )}\n                    {actionsHelper.canRestore(practisSet) && (\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                onRestorePractisSet([practisSet.id!]);\n                            }}\n                            dataTest=\"restore-practis-set-action\"\n                        >\n                            Restore\n                        </ActionItem>\n                    )}\n                    {actionsHelper.canDelete(practisSet) && (\n                        <ActionItem\n                            destructive={true}\n                            onClick={e => {\n                                e.stopPropagation();\n                                practisSet?.id &&\n                                    handleDeletePractisSet(practisSet.id);\n                            }}\n                            dataTest=\"delete-practis-set-action\"\n                        >\n                            Delete\n                        </ActionItem>\n                    )}\n                </ActionButton>\n            </div>\n            <PopupComponent\n                triggerRef={triggerRef}\n                open={assignSingleLabelOpen === practisSet.id}\n                onDismiss={() => {\n                    setAssignSingleLabelOpen(null);\n                }}\n            >\n                <AssignLabels\n                    onLabelsChange={handleSaveSelectedLabels}\n                    onSuccessApply={() => {\n                        setAssignSingleLabelOpen(null);\n                    }}\n                    withBorder={true}\n                />\n            </PopupComponent>\n        </span>\n    );\n};\n\nexport default PractisSetsListActions;\n\n\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const SeparatingDot = styled.span`\n    display: inline-block;\n    background: ${props => props.theme.Colors.black};\n    width: 4px;\n    height: 4px;\n    border-radius: 50%;\n    margin: 0px 5px 2px;\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: '0px !important',\n    },\n}));\n","import { FC, useCallback, useEffect, useState, useMemo } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { useHistory } from 'react-router';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { PractisSets as PractisSetsInterface } from '../../../../constants/interfaces/PractisSets';\nimport { History } from 'history';\nimport {\n    LIBRARY_STATUS,\n    libraryItemsStatusName,\n    usePractisSetActionsHelper,\n    PractisSetActionsHelper,\n    PractisSetActions,\n} from '../../tools';\nimport ROUTES from '../../../../routes/routes';\nimport { pushModal } from '../../../../tools/router';\nimport {\n    useArchivePractisSetService,\n    useDeleteLibraryLabelTag,\n    useDeletePractisSetsService,\n    useRestorePractisSetService,\n    useSearchPractisSetsService,\n    useUpdateAllPractisSetsCheckedStateService,\n    useUpdateLibraryPractisSetsCheckedStateService,\n} from '../../store/services';\nimport {\n    useLibraryPractisSetState,\n    useUpdatedLibraryPractisSetsState,\n    selectSelectedPractisSets,\n} from '../../store/states';\nimport LibraryNavigationContainer from '../../components/LibraryNavigation';\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport {\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../../labels/store/states';\nimport {\n    ASSIGN_LABEL_OPTIONS,\n    LOAD_ASSIGNED_LABELS,\n} from '../../../../constants/enums';\nimport {\n    clearSelectedItemIfNotLoaded,\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabels,\n} from '../../../labels/tools';\nimport {\n    useSaveUserFiltersService,\n    useSetAssignLabelsActionService,\n} from '../../../labels/store/services';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\nimport Box from '../../../../ui/icons/Box';\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\nimport { Popup } from '../../../../ui/components/Popup';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport { LibraryFilters } from '../../components/Filters/LibraryFilters';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport PractisSetsListActions from '../../components/ListActions/PractisSetsListActions';\nimport { useSessionEffect } from '../../../common';\nimport { countAppliedFiltersCount } from '../../../teams/pages/ListOfTeams/tools';\nimport { plural } from '../../../../helpers/functions/plural';\nimport {\n    useAssignedLabelsIdsApi,\n    useAssignPractisSetLabelsApi,\n    useDeletePractisSetLabelsApi,\n} from '../../../../api';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport { SeparatingDot, useStyles } from './styles';\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useFilter } from '../../../../ui/components/table-wrapper/table/TableDropdown';\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport {\n    useUpdateLabelsBulkActionService,\n    useUpdateMultipleEntityLabelsBulkActionService,\n} from '../../../../services/GeneralBulkActionServices';\nimport { useCreateEditDuplicateLibraryBulActionService } from '../../services/LibraryBulkActionsService';\nimport { useGenerateDuplicatePractisSetActionList } from '../../services/LibraryBulkActionsService/helpers';\nimport { generateCopyOfEntityName } from '../../../../services/GeneralBulkActionServices/helpers';\nimport { NewPractisSetInfo } from '../../services/LibraryBulkActionsService/types';\nimport { UPDATE_MULTIPLE_LABEL_ACTION } from '../../../../services/GeneralBulkActionServices/constants';\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\nconst DEFAULT_FILTER_VALUE = [LIBRARY_STATUS.ACTIVE, LIBRARY_STATUS.DRAFT];\n\nconst PractisSets: FC<{\n    practisSets?: ListResult<PractisSetsInterface>;\n    updatedPractisSets?: PractisSetsInterface;\n    searchPractisSets(searchParams: SearchParams): void;\n    history: History<any>;\n    onDeletePractisSets: (\n        practisSetIds: number[],\n        successCallback?: () => void\n    ) => Promise<unknown>;\n    onArchivePractisSet: (practisSetIds: number[]) => void;\n    onRestorePractisSet: (practisSetIds: number[]) => void;\n    selectedLabels?: number[];\n    selectedPractisSetIds?: number[];\n    selectedPractisSets?: PractisSetsInterface[];\n    actionsHelper: PractisSetActionsHelper;\n    loading?: boolean;\n    setAssignLabelsAction(labels: number[]): void;\n    assignedLabels?: number[];\n    updateAllPractisSetsCheckedState(\n        practisSetIds: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedPractisSetCheckedState(practisSetId: number): void;\n    updatedLabels?: any;\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\n}> = ({\n    practisSets,\n    searchPractisSets,\n    history,\n    onDeletePractisSets,\n    onArchivePractisSet,\n    onRestorePractisSet,\n    updatedPractisSets,\n    selectedLabels,\n    selectedPractisSetIds,\n    selectedPractisSets,\n    actionsHelper,\n    setAssignLabelsAction,\n    assignedLabels,\n    updateAllPractisSetsCheckedState,\n    updateSelectedPractisSetCheckedState,\n    updatedLabels,\n    loading,\n    saveGlobalLabelFilters,\n}) => {\n    const location = history.location;\n    const classes = useStyles();\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n    const deleteLibraryLabelTag = useDeleteLibraryLabelTag();\n    const assignLabelsToPractisSet = useAssignPractisSetLabelsApi();\n    const deleteLabelsFromPractisSet = useDeletePractisSetLabelsApi();\n\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n\n    const [selectedStatuses, setSelectedStatuses] =\n        useState<string[]>(DEFAULT_FILTER_VALUE);\n    const [savedStatuses, setSavedStatuses] =\n        useState<string[]>(DEFAULT_FILTER_VALUE);\n\n    const canAccessPage = useHandleAccessPage();\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [{ field: 'status', value: DEFAULT_FILTER_VALUE }],\n        labelIDs: selectedLabels,\n        orderBy: {\n            field: 'updated_at',\n            asc: false,\n        },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setLabelIDs,\n        setOffset,\n        refreshSearchParams,\n        setFilter,\n    } = useSearchParamsState(initialSearchParams);\n\n    const refreshData = useCallback(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchPractisSets(searchParams);\n        setLastRefreshed(new Date());\n        updateAllPractisSetsCheckedState([], false, false);\n        setIsSelectAll(false);\n    }, [\n        searchParams,\n        initialOffset,\n        searchPractisSets,\n        updateAllPractisSetsCheckedState,\n    ]);\n\n    const handleItemEdit = (practisSet: PractisSetsInterface) => {\n        updateAllPractisSetsCheckedState([], false, false);\n        pushModal(\n            history,\n            ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE.replace(\n                ':practisSetId',\n                practisSet.id!.toString()\n            )\n        );\n    };\n\n    const handleViewPractisSetProgress = (practisSet: PractisSetsInterface) => {\n        history.push(\n            ROUTES.PROGRESS_PAGES.PRACTIS_SETS_DETAILS.replace(\n                ':practisSetId',\n                practisSet.id!.toString()\n            )\n        );\n    };\n\n    /**\n     * @function onConfirmDeletePractisSet\n     * @param { number } practisSetIdToDelete\n     * @returns { void }\n     */\n    const onConfirmDeletePractisSet = useCallback(\n        (practisSetIdToDelete: number): void => {\n            onDeletePractisSets(\n                [practisSetIdToDelete!],\n                refreshSearchParams\n            );\n        },\n        [onDeletePractisSets, refreshSearchParams]\n    );\n\n    /**\n     * @function handleDeletePractisSet\n     * @returns { void }\n     */\n    const handleDeletePractisSet = useCallback((id: number): void => {\n        showConfirmationModalDialog({\n            modalTitle: 'Are You Sure?',\n            description:\n                'Are you sure you want to delete this item? This can’t be undone',\n            onConfirm: () => onConfirmDeletePractisSet(id),\n        });\n    }, [onConfirmDeletePractisSet, showConfirmationModalDialog]);\n\n    const isCheckboxPartiallySelected =\n        practisSets &&\n        practisSets.items &&\n        selectedPractisSets &&\n        selectedPractisSets.length < practisSets.items.length;\n\n    const updateAllPractisSetsCheck = useCallback(\n        (checked: boolean) => {\n            const ids =\n                (practisSets &&\n                    practisSets.items.map(\n                        (item: PractisSetsInterface) => item.id as number\n                    )) ||\n                ([] as number[]);\n            updateAllPractisSetsCheckedState(\n                ids,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [\n            practisSets,\n            isCheckboxPartiallySelected,\n            updateAllPractisSetsCheckedState,\n        ]\n    );\n\n    const handlePractisSetCheck = (e: any, set: PractisSetsInterface) => {\n        e.stopPropagation();\n        if (!!set.id) {\n            updateSelectedPractisSetCheckedState(set.id);\n        }\n    };\n\n    const getDeletedLabels = useCalculateDeletedLabels();\n\n    const updateMultiplePractisSetLabels =\n        useUpdateMultipleEntityLabelsBulkActionService(\n            assignLabelsToPractisSet,\n            deleteLabelsFromPractisSet,\n            isSelectAll,\n            {\n                actionName: UPDATE_MULTIPLE_LABEL_ACTION,\n                actionFunction: searchPractisSets,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            limit: 1,\n                            offset: practisSets?.count ?? 0,\n                        },\n                        shouldSetStore: false,\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n            refreshData\n        );\n\n    const assignLabels = async () => {\n        if (assignedLabels && selectedPractisSetIds) {\n            const { preAssignedLabels } = await getAssignedLabelsIds(\n                selectedPractisSetIds,\n                LOAD_ASSIGNED_LABELS.PRACTIS_SETS_SCREEN_LIBRARY,\n                ASSIGN_LABEL_OPTIONS.PRACTIS_SET,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                return calculatePreSelectedLabels(\n                    selectedPractisSetIds,\n                    practisSets,\n                    data\n                );\n            });\n\n            const deletedLabels = getDeletedLabels(assignedLabels);\n\n            const deletedLabelsFiltered = deletedLabels.filter(\n                x =>\n                    preAssignedLabels.includes(x) ||\n                    preAssignedLabels.includes(-x)\n            );\n            const selectedLabelsFiltered = assignedLabels.filter(\n                x => x > 0 && !preAssignedLabels.includes(x)\n            );\n\n            updateMultiplePractisSetLabels(\n                {\n                    entityName: 'practisSet',\n                    entityIds: selectedPractisSetIds,\n                },\n                selectedLabelsFiltered,\n                deletedLabelsFiltered\n            );\n        }\n    };\n\n    const orderBy = searchParams.orderBy;\n    const hcName = useOrderBy('name', orderBy, setOrderBy);\n    const hcStatus = useOrderBy('status', orderBy, setOrderBy);\n    const hcTotalCount = useOrderBy('content_count', orderBy, setOrderBy);\n    const hcLastUpdated = useOrderBy('updated_at', orderBy, setOrderBy);\n    const handleChangeEvent = useFilter('status', setFilter);\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const labelChangeHandler = (ids: number[]) => {\n        saveGlobalLabelFilters(ids);\n    };\n\n    const onSelectStatus = (status: string[]) => {\n        setSelectedStatuses(status);\n    };\n    const onSaveStatus = (status: string[]) => {\n        setSavedStatuses(status);\n    };\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters:\n            countAppliedFiltersCount(searchParams) +\n            (savedStatuses?.length || 0),\n        itemsCount: practisSets?.items.length || 0,\n    });\n\n    const bulkActions = useMemo(\n        () => actionsHelper.getBulkActions(selectedPractisSets),\n        [selectedPractisSets, actionsHelper]\n    );\n\n    /**\n     * @function handleViewAssignUsers\n     * @param { number } practisSetId\n     * @returns { void }\n     */\n    const handleViewAssignUsers = useCallback(\n        (practisSetId?: number): void => {\n            if (!practisSetId) return;\n\n            pushModal(\n                history,\n                ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ASSIGN_USERS.replace(\n                    ':practisSetId',\n                    practisSetId.toString()\n                )\n            );\n        },\n        [history]\n    );\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 300);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [pageIndex]);\n\n    useSessionEffect(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchPractisSets(searchParams);\n    }, [searchPractisSets, searchParams]);\n\n    useEffect(() => {\n        if (updatedPractisSets) refreshSearchParams();\n    }, [updatedPractisSets, refreshSearchParams, updatedLabels]);\n\n    useEffect(() => {\n        if (updatedLabels && updatedLabels.updateType === 'delete')\n            refreshSearchParams();\n    }, [updatedLabels, refreshSearchParams]);\n\n    useEffect(() => {\n        selectedLabels && setLabelIDs(selectedLabels);\n    }, [selectedLabels, setLabelIDs]);\n\n    useEffect(() => {\n        if (\n            selectedPractisSets?.length &&\n            selectedPractisSets.length === practisSets?.count\n        ) {\n            setIsSelectAll(true);\n        }\n    }, [practisSets?.count, selectedPractisSets]);\n\n    useEffect(() => {\n        const filteredUsers = practisSets\n            ? practisSets.items.map(practisSet => Number(practisSet.id))\n            : [];\n        const usersToClear = clearSelectedItemIfNotLoaded(\n            selectedPractisSetIds,\n            filteredUsers\n        );\n        if (usersToClear && usersToClear.length > 0) {\n            updateAllPractisSetsCheckedState(usersToClear, false);\n        }\n    }, [selectedPractisSetIds, practisSets, updateAllPractisSetsCheckedState]);\n\n    const getAssignedLabelsIds = useAssignedLabelsIdsApi();\n\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\n\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\n        assignLabelsToPractisSet,\n        deleteLabelsFromPractisSet,\n        refreshData\n    );\n\n    /**\n     * @function handleUpdatePractisSetLabels\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { number } practisSetId\n     * @returns { void }\n     */\n    const handleUpdatePractisSetLabels = (\n        addedLabelIds: number[],\n        deletedLabelIds: number[],\n        practisSetId: number\n    ): void => {\n        updateLabelsBulkActionService(\n            {\n                entityName: 'practisSet',\n                entityId: practisSetId,\n            },\n            addedLabelIds,\n            deletedLabelIds\n        );\n    };\n\n    /**\n     * @function onOpenAssignLabelAction\n     * @returns { void }\n     */\n    const onOpenAssignLabelAction = (): void => {\n        if (practisSets && practisSets.items && selectedPractisSetIds) {\n            getAssignedLabelsIds(\n                selectedPractisSetIds,\n                LOAD_ASSIGNED_LABELS.PRACTIS_SETS_SCREEN_LIBRARY,\n                ASSIGN_LABEL_OPTIONS.PRACTIS_SET,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                const { preAssignedLabels } = calculatePreSelectedLabels(\n                    selectedPractisSetIds,\n                    practisSets,\n                    data\n                );\n\n                setAssignLabelsAction(preAssignedLabels);\n            });\n        }\n    };\n\n    useEffect(() => {\n        return () => updateAllPractisSetsCheckedState([], false, false);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllPractisSetsCheckedState([], false, false);\n    }, [practisSets, updateAllPractisSetsCheckedState]);\n\n    useEffect(() => {\n        handleChangeEvent(savedStatuses);\n    }, [savedStatuses, handleChangeEvent]);\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_PRACTIS_SET]);\n    }, [canAccessPage]);\n\n    useEffect(() => {\n        updateAllPractisSetsCheckedState([], false, false);\n        setIsSelectAll(false);\n    }, [location.pathname, updateAllPractisSetsCheckedState]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onClearSelection\n     * @returns { void }\n     */\n    const onClearSelection = () => {\n        updateAllPractisSetsCheckedState([], false, false);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function onSelectAll\n     * @returns { void }\n     */\n    const onSelectAll = () => {\n        const ids =\n            (practisSets &&\n                practisSets.items.map(\n                    (item: PractisSetsInterface) => item.id as number\n                )) ||\n            ([] as number[]);\n        updateAllPractisSetsCheckedState(\n            ids,\n            true,\n            isCheckboxPartiallySelected\n        );\n        setIsSelectAll(true);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        updateAllPractisSetsCheck(event.target.checked);\n        setIsSelectAll(false);\n    };\n\n    const isMasterCheckBoxChecked =\n        !!selectedPractisSets && !!selectedPractisSets.length;\n\n    const isMasterCheckBoxDisabled =\n        !practisSets || (practisSets && practisSets.items.length < 1);\n\n    /**\n     * @function checkIsRowChecked\n     * @param { PractisSetsInterface } set\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (set: PractisSetsInterface): boolean =>\n        !!selectedPractisSetIds &&\n        !!set.id &&\n        selectedPractisSetIds.includes(set.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { PractisSetsInterface } set\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, set: PractisSetsInterface) => {\n        setIsSelectAll(false);\n        handlePractisSetCheck(event, set);\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { PractisSetsInterface } set\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (set: PractisSetsInterface): boolean => {\n        return labelsOpen === set?.['id'];\n    };\n\n    /**\n     * @function onDeleteLabelHandler\n     * @param { number } labelId\n     * @param { PractisSetsInterface } set\n     * @returns { void }\n     */\n    const onDeleteLabelHandler = useCallback(\n        (labelId: number, set: PractisSetsInterface): void => {\n            const practisSetItem =\n                practisSets &&\n                practisSets.items.find(item => item.id === set.id);\n\n            if (!isEmpty(practisSetItem)) {\n                deleteLibraryLabelTag(\n                    labelId,\n                    {\n                        entityItem: practisSetItem!,\n                        entityName: 'practisSet',\n                    },\n                    refreshData\n                );\n            }\n        },\n        [deleteLibraryLabelTag, practisSets, refreshData]\n    );\n\n    const generateDuplicatePractisSetActionList =\n        useGenerateDuplicatePractisSetActionList();\n\n    const duplicateLibraryBulkActionService =\n        useCreateEditDuplicateLibraryBulActionService(\n            'duplicate',\n            'Practis Set',\n            refreshData\n        );\n\n    /**\n     * @function handleDuplicatePractisSet\n     * @param { PractisSetsInterface } practisSet\n     * @returns { void }\n     */\n    const handleDuplicatePractisSet = useCallback(\n        (practisSet: PractisSetsInterface) => {\n            const newPractisSet: NewPractisSetInfo = {\n                currentPractisSetId: practisSet.id ?? 0,\n                name: generateCopyOfEntityName(practisSet.name),\n                description: practisSet.description,\n                pacingId: practisSet?.pacing?.id ?? 0,\n                labelIds: practisSet?.labels ?? [],\n                scenarioCount: practisSet.scenarioCount,\n                challengeCount: practisSet.challengeCount,\n            };\n\n            const duplicatePractisSetActionList =\n                generateDuplicatePractisSetActionList(newPractisSet);\n\n            !isEmpty(duplicatePractisSetActionList) &&\n                duplicateLibraryBulkActionService([\n                    duplicatePractisSetActionList,\n                ]);\n        },\n        [\n            duplicateLibraryBulkActionService,\n            generateDuplicatePractisSetActionList,\n        ]\n    );\n\n    return (\n        <MainWrapper\n            subTitle=\"Library\"\n            tabs={<LibraryNavigationContainer />}\n            hideDivider={!!selectedPractisSets?.length}\n            htmlPageTitle=\"Library - Practis\"\n            dataTest=\"library\"\n        >\n            {loading && !isSelectAll && <LoadingComponent />}\n            <TableWrapper\n                tableStates={tableStates}\n                data={practisSets?.items}\n                selectedLabels={selectedLabels}\n                cornered={selectedLabels && !!selectedLabels.length}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'library-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: practisSets?.count ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            countAppliedFiltersCount(searchParams),\n                        dataTest: 'library-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        dataTest: 'library-search-input',\n                    },\n                    isSelectedItemOptionsVisible:\n                        !isEmpty(selectedPractisSets) && !isEmpty(practisSets),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedPractisSets?.length,\n                        totalCount: practisSets?.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: onClearSelection,\n                        onSelectAll: onSelectAll,\n                        bulkActionsConfig: {\n                            disabled: bulkActions.areBulkActionsDisabled(),\n                            disabledLabel: bulkActions.areItemsEmpty()\n                                ? undefined\n                                : \"Bulk actions can't be applied\",\n                            onOpenAssignLabelAction: onOpenAssignLabelAction,\n                            assignLabelsPermissions:\n                                bulkActions.isBulkActionVisible(\n                                    PractisSetActions.ASSIGN_LABELS\n                                )\n                                    ? [NEW_PERMISSIONS.ASSIGN_PRACTIS_SET_LABEL]\n                                    : [],\n                            isAssignLabelsDisabled:\n                                bulkActions.isBulkActionDisabled(\n                                    PractisSetActions.ASSIGN_LABELS\n                                ),\n                            onAssignLabelsSubmit: assignLabels,\n                            isSelectAll: isSelectAll,\n                            totalCount: practisSets?.count,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <LibraryFilters\n                                        selectedStatuses={\n                                            practisSets ? selectedStatuses : []\n                                        }\n                                        savedStatuses={savedStatuses}\n                                        handleSelectStatus={onSelectStatus}\n                                        handleSaveStatus={onSaveStatus}\n                                        preSelectedLabels={selectedLabels || []}\n                                        onLabelsChange={labelChangeHandler}\n                                        onSuccessApply={() => hide()}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={250}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={\n                                            practisSets\n                                                ? savedStatuses.length +\n                                                  (searchParams.labelIDs\n                                                      ?.length || 0)\n                                                : 0\n                                        }\n                                        disabled={tableStates.disableFilters}\n                                        dataTest=\"library-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && practisSets?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: Box,\n                        text: 'No Practis Sets Yet',\n                        dataTest: 'library-no-practis-sets',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Practis Sets',\n                        dataTest: 'library-no-found-practis-sets',\n                    },\n                    noFilterResultsOptions: {\n                        dataTest: 'library-no-filtered-practis-sets',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: isMasterCheckBoxChecked,\n                        disabled: isMasterCheckBoxDisabled,\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'library-practis-sets-master-checkbox',\n                    },\n                    columns: [\n                        {\n                            title: 'Practis Sets',\n                            width: 25,\n                            ...hcName,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-practis-sets-title-column',\n                        },\n                        {\n                            title: 'Status',\n                            width: 11,\n                            ...hcStatus,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-practis-sets-status-column',\n                        },\n                        {\n                            title: 'Content',\n                            width: 11,\n                            ...hcTotalCount,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-practis-sets-content-column',\n                        },\n                        {\n                            title: 'Last Updated',\n                            width: 10,\n                            ...hcLastUpdated,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-practis-sets-date-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n\n                    rowConfig: {\n                        onRowClick: handleItemEdit,\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        getLabelTagsProps: (set: PractisSetsInterface) => ({\n                            selectedLabels: set?.labels ?? [],\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_PRACTIS_SET_LABEL,\n                            ],\n                            onDeleteLabel: (labelId: number) =>\n                                onDeleteLabelHandler(labelId, set),\n                        }),\n                        dataTest: 'library-practis-sets-item',\n\n                        cells: [\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    renderTitle: (set: PractisSetsInterface) =>\n                                        set?.name,\n                                    dataTest: 'library-practis-sets-item-title',\n                                },\n                            },\n                            {\n                                fieldType: 'BADGE_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                shouldShowEmptyCell: (\n                                    set: PractisSetsInterface\n                                ) => !set?.status,\n                                fieldProps: {\n                                    getBadgeFieldProps: (\n                                        set: PractisSetsInterface\n                                    ) => ({\n                                        status: set?.status,\n                                        className: classes.customTableCellStyle,\n                                        dataTest:\n                                            'library-practis-sets-item-status',\n                                    }),\n                                    renderTitle: (set: PractisSetsInterface) =>\n                                        libraryItemsStatusName(set?.status),\n                                },\n                            },\n\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    set: PractisSetsInterface\n                                ) =>\n                                    !set?.scenarioCount && !set?.challengeCount,\n                                fieldProps: {\n                                    renderTitle: (\n                                        set: PractisSetsInterface\n                                    ) => (\n                                        <>\n                                            {set.scenarioCount\n                                                ? `${\n                                                      set.scenarioCount\n                                                  } ${plural(\n                                                      set.scenarioCount,\n                                                      'Scenario',\n                                                      'Scenarios'\n                                                  )}`\n                                                : null}\n                                            {!!set.scenarioCount &&\n                                                !!set.challengeCount && (\n                                                    <SeparatingDot></SeparatingDot>\n                                                )}\n                                            {set.challengeCount\n                                                ? `${\n                                                      set.challengeCount\n                                                  } ${plural(\n                                                      set.challengeCount,\n                                                      'Challenge',\n                                                      'Challenges'\n                                                  )}`\n                                                : null}\n                                        </>\n                                    ),\n                                    dataTest:\n                                        'library-practis-sets-item-content',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    set: PractisSetsInterface\n                                ) => !set?.updatedAt,\n                                fieldProps: {\n                                    renderTitle: (set: PractisSetsInterface) =>\n                                        formatDate(set?.updatedAt),\n                                    dataTest: 'library-practis-sets-item-date',\n                                },\n                            },\n                            {\n                                fieldType: 'LABEL_TAGS',\n                                fieldProps: {\n                                    getLabelTagsProps: (\n                                        set: PractisSetsInterface\n                                    ) => ({\n                                        open: labelsOpen === set.id,\n                                        toggleOpen: () =>\n                                            handleToggleLabels(set.id),\n                                        selectedLabels: set.labels ?? [],\n                                        dataTest:\n                                            'library-practis-sets-item-labels',\n                                    }),\n                                },\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (\n                                        set: PractisSetsInterface\n                                    ) => (\n                                        <PractisSetsListActions\n                                            practisSet={set}\n                                            actionsHelper={actionsHelper}\n                                            onRestorePractisSet={\n                                                onRestorePractisSet\n                                            }\n                                            handleItemEdit={handleItemEdit}\n                                            handleViewPractisSet={\n                                                handleItemEdit\n                                            }\n                                            handleViewPractisSetProgress={\n                                                handleViewPractisSetProgress\n                                            }\n                                            handleDeletePractisSet={\n                                                handleDeletePractisSet\n                                            }\n                                            onDuplicatePractisSet={\n                                                handleDuplicatePractisSet\n                                            }\n                                            onArchivePractisSet={\n                                                onArchivePractisSet\n                                            }\n                                            handleViewAssignUsers={\n                                                handleViewAssignUsers\n                                            }\n                                            assignLabelsToLibrary={(\n                                                addedLabelIds,\n                                                deletedLabelIds\n                                            ) =>\n                                                handleUpdatePractisSetLabels(\n                                                    addedLabelIds,\n                                                    deletedLabelIds,\n                                                    set?.id ?? 0\n                                                )\n                                            }\n                                            isHidden={\n                                                !!selectedPractisSets?.length\n                                            }\n                                        />\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const PractisSetsContainer: FC = () => {\n    const state = useLibraryPractisSetState();\n    const history = useHistory();\n    const deletePractisSets = useDeletePractisSetsService();\n    const archivePractisSet = useArchivePractisSetService();\n    const restorePractisSet = useRestorePractisSetService();\n    const searchPractisSets = useSearchPractisSetsService();\n    const updatedPractisSets = useUpdatedLibraryPractisSetsState();\n    const searchPractisSetsDebounced = useSearchDebounced(searchPractisSets);\n\n    const labels = useLabelsState();\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const updateAllPractisSetsCheckedState =\n        useUpdateAllPractisSetsCheckedStateService();\n    const updateSelectedPractisSetCheckedState =\n        useUpdateLibraryPractisSetsCheckedStateService();\n    const updatedLabels = useUpdatedLabelsState();\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const actionsHelper = usePractisSetActionsHelper();\n\n    const selectedPractisSets = useMemo(\n        () => selectSelectedPractisSets(state),\n        [state]\n    );\n\n    return (\n        <WithLabelsContext.Provider\n            value={{ reducerName: 'libraryPractisSets' }}\n        >\n            <PractisSets\n                onDeletePractisSets={deletePractisSets}\n                onArchivePractisSet={archivePractisSet}\n                onRestorePractisSet={restorePractisSet}\n                history={history}\n                searchPractisSets={searchPractisSetsDebounced}\n                practisSets={state.data}\n                loading={state.loading}\n                selectedPractisSetIds={state.selectedPractisSets}\n                selectedPractisSets={selectedPractisSets}\n                actionsHelper={actionsHelper}\n                updatedPractisSets={updatedPractisSets.data}\n                selectedLabels={labels.selected}\n                setAssignLabelsAction={setAssignLabelsAction}\n                assignedLabels={labels.assignedLabels}\n                updateAllPractisSetsCheckedState={\n                    updateAllPractisSetsCheckedState\n                }\n                updateSelectedPractisSetCheckedState={\n                    updateSelectedPractisSetCheckedState\n                }\n                updatedLabels={updatedLabels}\n                saveGlobalLabelFilters={saveGlobalLabelFilters}\n            />\n        </WithLabelsContext.Provider>\n    );\n};\n\n\nexport default PractisSetsContainer;","import { FC, useRef, useState } from 'react';\r\nimport {\r\n    ActionButton,\r\n    ActionItem,\r\n} from '../../../../ui/components/ActionButton';\r\nimport { isTeamLeader } from '../../../../constants/enums';\r\nimport { PopupComponent } from '../../../../ui/components/Popup';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../portableLabels/store/hors/withLabels/services';\r\nimport {\r\n    calculateAssignedLabels,\r\n    calculateRemovedLabels,\r\n    useCalculatePreSelectedLabelsForSingleItem,\r\n} from '../../../labels/tools';\r\nimport { AssignLabels } from '../../../portableLabels/templates/AssignLabels';\r\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\r\nimport { Challenge as ChallengesInterface } from '../../../../constants/interfaces/Challenge';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { ChallengeActionsHelper } from '../../tools';\r\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\r\n\r\nconst ChallengesListActions: FC<{\r\n    challenge: ChallengesInterface;\r\n    actionsHelper: ChallengeActionsHelper;\r\n    restoreChallenge: (challengeIds: number[]) => void;\r\n    handleItemEdit: (challenge: ChallengesInterface) => void;\r\n    handleViewChallenge: (challenge: ChallengesInterface) => void;\r\n    onDuplicateChallenge: (challenge: ChallengesInterface) => void;\r\n    handleDeleteChallenge: (challengeId: number) => void;\r\n    archiveChallenge: (challengeId: number[]) => void;\r\n    assignLabelsToLibrary: (\r\n        addedLabelIds: number[],\r\n        deletedLabelIds: number[]\r\n    ) => void;\r\n    isHidden?: boolean;\r\n}> = ({\r\n    challenge,\r\n    actionsHelper,\r\n    restoreChallenge,\r\n    handleItemEdit,\r\n    handleViewChallenge,\r\n    handleDeleteChallenge,\r\n    onDuplicateChallenge,\r\n    archiveChallenge,\r\n    assignLabelsToLibrary,\r\n    isHidden,\r\n}) => {\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState();\r\n    const setSelectLabels = useSelectLabels();\r\n    const saveLabels = useSaveLabels();\r\n    const calculatePreSelectedLabels =\r\n        useCalculatePreSelectedLabelsForSingleItem();\r\n    const profile = useSelector(getProfileState);\r\n\r\n    const handleSetPreselectedLabels = () => {\r\n        const selectedLabelIds = challenge?.labels || [];\r\n        const preAssignedLabels = calculatePreSelectedLabels(\r\n            selectedLabelIds,\r\n            labelsList.data\r\n        );\r\n        setSelectLabels(preAssignedLabels);\r\n        saveLabels();\r\n    };\r\n\r\n    const handleSaveSelectedLabels = (labelIDs: number[]) => {\r\n        const addedLabelIds = calculateAssignedLabels(labelIDs, labels.saved);\r\n        const deletedLabelIds = calculateRemovedLabels(labelIDs, labels.saved);\r\n\r\n        assignLabelsToLibrary(addedLabelIds, deletedLabelIds);\r\n    };\r\n\r\n    const [assignSingleLabelOpen, setAssignSingleLabelOpen] = useState<\r\n        null | number | undefined\r\n    >(null);\r\n\r\n    const triggerRef = useRef(null);\r\n\r\n    return (\r\n        <span>\r\n            <div ref={triggerRef}>\r\n                <ActionButton\r\n                    customWidth={168}\r\n                    isHidden={isHidden}\r\n                    dataTest=\"library-challenges-item-menu\"\r\n                >\r\n                    {actionsHelper.canEdit(challenge) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                handleItemEdit(challenge);\r\n                            }}\r\n                            dataTest=\"edit-challenge-action\"\r\n                        >\r\n                            View\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canAssignLabels(challenge) &&\r\n                        !!labelsList.data.items.length && (\r\n                            <ActionItem\r\n                                onClick={e => {\r\n                                    e.stopPropagation();\r\n                                    setAssignSingleLabelOpen(challenge.id);\r\n                                    handleSetPreselectedLabels();\r\n                                }}\r\n                                dataTest=\"assign-labels-challenge-action\"\r\n                            >\r\n                                Assign Labels\r\n                            </ActionItem>\r\n                        )}\r\n                    {isTeamLeader(profile?.role?.name) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                handleViewChallenge(challenge);\r\n                            }}\r\n                            dataTest=\"view-challenge-action\"\r\n                        >\r\n                            View\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canRestore(challenge) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                restoreChallenge([challenge.id!]);\r\n                            }}\r\n                            dataTest=\"restore-challenge-action\"\r\n                        >\r\n                            Restore\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canDelete(challenge) && (\r\n                        <ActionItem\r\n                            destructive={true}\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                challenge?.id &&\r\n                                    handleDeleteChallenge(challenge.id);\r\n                            }}\r\n                            dataTest=\"delete-challenge-action\"\r\n                        >\r\n                            Delete\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canDuplicate(challenge) && (\r\n                        <ActionItem\r\n                            onClick={e => {\r\n                                onDuplicateChallenge(challenge);\r\n                            }}\r\n                            dataTest=\"duplicate-challenge-action\"\r\n                        >\r\n                            Duplicate\r\n                        </ActionItem>\r\n                    )}\r\n                    {actionsHelper.canArchive(challenge) && (\r\n                        <ActionItem\r\n                            destructive={true}\r\n                            onClick={e => {\r\n                                e.stopPropagation();\r\n                                archiveChallenge([challenge.id!]);\r\n                            }}\r\n                            dataTest=\"archive-challenge-action\"\r\n                        >\r\n                            Archive\r\n                        </ActionItem>\r\n                    )}\r\n                </ActionButton>\r\n            </div>\r\n            <PopupComponent\r\n                triggerRef={triggerRef}\r\n                open={assignSingleLabelOpen === challenge.id}\r\n                onDismiss={() => {\r\n                    setAssignSingleLabelOpen(null);\r\n                }}\r\n            >\r\n                <AssignLabels\r\n                    onLabelsChange={handleSaveSelectedLabels}\r\n                    onSuccessApply={() => {\r\n                        setAssignSingleLabelOpen(null);\r\n                    }}\r\n                    withBorder={true}\r\n                />\r\n            </PopupComponent>\r\n        </span>\r\n    );\r\n};\r\n\r\nexport default ChallengesListActions;\r\n","import { makeStyles } from '@material-ui/core';\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: '0px !important',\n    },\n}));\n\n","import { FC, useCallback, useEffect, useState, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { useHistory } from 'react-router';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { History } from 'history';\nimport {\n    LIBRARY_STATUS,\n    libraryItemsStatusName,\n    useChallengeActionsHelper,\n    ChallengeActionsHelper,\n    ChallengeActions,\n} from '../../tools';\nimport ROUTES from '../../../../routes/routes';\nimport { pushModal } from '../../../../tools/router';\nimport {\n    useArchiveChallengeService,\n    useDeleteChallengesService,\n    useDeleteLibraryLabelTag,\n    useRestoreChallengeService,\n    useSearchChallengesService,\n    useUpdateAllChallengeCheckedStateService,\n    useUpdateLibraryChallengeCheckedStateService,\n} from '../../store/services';\nimport {\n    useLibraryChallengesState,\n    useUpdatedLibraryChallengesState,\n    selectSelectedChallenges,\n} from '../../store/states';\nimport { Challenge as ChallengeInterface } from '../../../../constants/interfaces/Challenge';\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport LibraryNavigationContainer from '../../components/LibraryNavigation';\nimport {\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../../labels/store/states';\nimport {\n    ASSIGN_LABEL_OPTIONS,\n    LOAD_ASSIGNED_LABELS,\n} from '../../../../constants/enums';\nimport {\n    clearSelectedItemIfNotLoaded,\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabels,\n} from '../../../labels/tools';\nimport {\n    useSaveUserFiltersService,\n    useSetAssignLabelsActionService,\n} from '../../../labels/store/services';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport { Popup } from '../../../../ui/components/Popup';\nimport { LibraryFilters } from '../../components/Filters/LibraryFilters';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport ChallengesListActions from '../../components/ListActions/ChallengesListActions';\nimport { useSessionEffect } from '../../../common';\nimport { countAppliedFiltersCount } from '../../../teams/pages/ListOfTeams/tools';\nimport {\n    useAssignChallengeLabelsApi,\n    useAssignedLabelsIdsApi,\n    useDeleteChallengeLabelsApi,\n} from '../../../../api';\nimport { isEmpty } from 'lodash';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport { useStyles } from './styles';\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useFilter } from '../../../../ui/components/table-wrapper/table/TableDropdown';\nimport { useFetchAllPractisSetsService } from '../../../portablePractisSets/store/hors/withPractisSets/services';\nimport {\n    useUpdateLabelsBulkActionService,\n    useUpdateMultipleEntityLabelsBulkActionService,\n} from '../../../../services/GeneralBulkActionServices';\nimport { CreateNewChallengeInfo } from '../../services/LibraryBulkActionsService/types';\nimport { generateCopyOfEntityName } from '../../../../services/GeneralBulkActionServices/helpers';\nimport { useCreateEditDuplicateLibraryBulActionService } from '../../services/LibraryBulkActionsService';\nimport { useGenerateCreateDuplicateChallengeActionList } from '../../services/LibraryBulkActionsService/helpers';\nimport { UPDATE_MULTIPLE_LABEL_ACTION } from '../../../../services/GeneralBulkActionServices/constants';\nimport Document from '../../../../ui/icons/Document';\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\nconst DEFAULT_FILTER_VALUE = [LIBRARY_STATUS.ACTIVE, LIBRARY_STATUS.DRAFT];\n\nconst Challenges: FC<{\n    challenges?: ListResult<ChallengeInterface>;\n    updatedChallenges?: ChallengeInterface;\n    searchChallenges(searchParams: SearchParams): void;\n    history: History<any>;\n    onDeleteChallenges: (\n        challengeIds: number[],\n        successCallback?: () => void\n    ) => Promise<unknown>;\n    onArchiveChallenge: (challengeIds: number[]) => void;\n    onRestoreChallenge: (challengeIds: number[]) => void;\n    selectedLabels?: number[];\n    selectedChallengeIds?: number[];\n    selectedChallenges?: ChallengeInterface[];\n    actionsHelper: ChallengeActionsHelper;\n    loading?: boolean;\n    setAssignLabelsAction(labels: number[]): void;\n    assignedLabels?: number[];\n    updateAllChallengesCheckedState(\n        challengeId: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedChallengeCheckedState(challengeId: number): void;\n    updatedLabels?: any;\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\n    companyId?: number;\n}> = ({\n    challenges,\n    updatedChallenges,\n    history,\n    onDeleteChallenges,\n    onArchiveChallenge,\n    onRestoreChallenge,\n    searchChallenges,\n    selectedLabels,\n    selectedChallengeIds,\n    selectedChallenges,\n    actionsHelper,\n    setAssignLabelsAction,\n    assignedLabels,\n    updateAllChallengesCheckedState,\n    updateSelectedChallengeCheckedState,\n    updatedLabels,\n    loading,\n    saveGlobalLabelFilters,\n    companyId\n}) => {\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n    const fetchAllPractisSets = useFetchAllPractisSetsService();\n    const assignLabelsToChallenges = useAssignChallengeLabelsApi();\n    const deleteLabelsFromChallenges = useDeleteChallengeLabelsApi();\n    const deleteLibraryLabelTag = useDeleteLibraryLabelTag();\n\n    const [selectedStatuses, setSelectedStatuses] = useState<string[]>([\n        'active',\n        'draft',\n    ]);\n    const [savedStatuses, setSavedStatuses] = useState<string[]>([\n        'active',\n        'draft',\n    ]);\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n\n    const canAccessPage = useHandleAccessPage();\n    const classes = useStyles();\n\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [{ field: 'status', value: DEFAULT_FILTER_VALUE }],\n        labelIDs: selectedLabels,\n        orderBy: {\n            field: 'updated_at',\n            asc: false,\n        },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setLabelIDs,\n        setOffset,\n        refreshSearchParams,\n        setFilter,\n    } = useSearchParamsState(initialSearchParams);\n\n    const isCheckboxPartiallySelected =\n        challenges &&\n        challenges.items &&\n        selectedChallengeIds &&\n        selectedChallengeIds.length < challenges.items.length;\n\n    const updateAllChallengesCheck = useCallback(\n        (checked: boolean) => {\n            const ids =\n                (challenges &&\n                    challenges.items.map((item: ChallengeInterface) =>\n                        Number(item.id)\n                    )) ||\n                ([] as number[]);\n            updateAllChallengesCheckedState(\n                ids,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [\n            challenges,\n            isCheckboxPartiallySelected,\n            updateAllChallengesCheckedState,\n        ]\n    );\n\n    const handleChallengeCheck = (e: any, challenge: ChallengeInterface) => {\n        e.stopPropagation();\n        if (!!challenge.id) {\n            updateSelectedChallengeCheckedState(Number(challenge.id));\n        }\n    };\n    const refreshData = useCallback(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchChallenges(searchParams);\n        setLastRefreshed(new Date());\n        setIsSelectAll(false);\n        updateAllChallengesCheckedState([], false, false);\n    }, [\n        initialOffset,\n        searchChallenges,\n        searchParams,\n        updateAllChallengesCheckedState,\n    ]);\n\n    const getDeletedLabels = useCalculateDeletedLabels();\n\n    const updateMultipleChallengesLabels =\n        useUpdateMultipleEntityLabelsBulkActionService(\n            assignLabelsToChallenges,\n            deleteLabelsFromChallenges,\n            isSelectAll,\n            {\n                actionName: UPDATE_MULTIPLE_LABEL_ACTION,\n                actionFunction: searchChallenges,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            limit: 1,\n                            offset: Number(challenges?.count) ?? 0,\n                        },\n                        shouldSetStore: false,\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n            refreshData\n        );\n\n    const assignLabels = async () => {\n        if (assignedLabels && selectedChallengeIds) {\n            const { preAssignedLabels } = await getAssignedLabelsIds(\n                selectedChallengeIds,\n                LOAD_ASSIGNED_LABELS.CHALLENGES_SCREEN_LIBRARY,\n                ASSIGN_LABEL_OPTIONS.CHALLENGE,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                return calculatePreSelectedLabels(\n                    selectedChallengeIds,\n                    challenges,\n                    data\n                );\n            });\n\n            const deletedLabels = getDeletedLabels(assignedLabels);\n\n            const deletedLabelsFiltered = deletedLabels.filter(\n                x =>\n                    preAssignedLabels.includes(x) ||\n                    preAssignedLabels.includes(-x)\n            );\n            const selectedLabelsFiltered = assignedLabels.filter(\n                x => x > 0 && !preAssignedLabels.includes(x)\n            );\n\n            updateMultipleChallengesLabels(\n                {\n                    entityName: 'challenge',\n                    entityIds: selectedChallengeIds,\n                },\n                selectedLabelsFiltered,\n                deletedLabelsFiltered\n            );\n        }\n    };\n\n    const orderBy = searchParams.orderBy;\n    const chName = useOrderBy('title', orderBy, setOrderBy);\n    const chStatus = useOrderBy('status', orderBy, setOrderBy);\n    const chUpdatedAt = useOrderBy('updated_at', orderBy, setOrderBy);\n    const handleChangeEvent = useFilter('status', setFilter);\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const labelChangeHandler = (ids: number[]) => {\n        saveGlobalLabelFilters(ids);\n    };\n\n    const onSelectStatus = (status: string[]) => {\n        setSelectedStatuses(status);\n    };\n    const onSaveStatus = (status: string[]) => {\n        setSavedStatuses(status);\n    };\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters:\n            countAppliedFiltersCount(searchParams) +\n            (savedStatuses?.length || 0),\n        itemsCount: challenges?.items.length || 0,\n    });\n\n    const bulkActions = useMemo(\n        () => actionsHelper.getBulkActions(selectedChallenges),\n        [selectedChallenges, actionsHelper]\n    );\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [pageIndex]);\n\n    useSessionEffect(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchParams.companyId = companyId;\n        searchChallenges(searchParams);\n    }, [searchChallenges, searchParams]);\n\n    useEffect(() => {\n        updateAllChallengesCheckedState([], false, false);\n        setIsSelectAll(false);\n    }, [location.pathname, updateAllChallengesCheckedState]);\n\n    useEffect(() => {\n        if (updatedChallenges) refreshSearchParams();\n    }, [updatedChallenges, refreshSearchParams]);\n\n    useEffect(() => {\n        selectedLabels && setLabelIDs(selectedLabels);\n    }, [selectedLabels, setLabelIDs]);\n\n    useEffect(() => {\n        if (updatedLabels && updatedLabels.updateType === 'delete')\n            refreshSearchParams();\n    }, [updatedLabels, refreshSearchParams]);\n\n    useEffect(() => {\n        return () => updateAllChallengesCheckedState([], false, false);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllChallengesCheckedState([], false, false);\n    }, [challenges, updateAllChallengesCheckedState]);\n\n    useEffect(() => {\n        if (\n            selectedChallenges?.length &&\n            challenges?.count &&\n            selectedChallenges.length === +challenges?.count\n        ) {\n            setIsSelectAll(true);\n        }\n    }, [challenges?.count, selectedChallenges]);\n\n    const handleItemEdit = (challenges: ChallengeInterface) => {\n        updateAllChallengesCheckedState([], false, false);\n        pushModal(\n            history,\n            ROUTES.LIBRARY_SETTINGS.CHALLENGES.SINGLE.replace(\n                ':challengeId',\n                challenges.id!.toString()\n            )\n        );\n    };\n\n    /**\n     * @function successDeleteChallengeCallback\n     * @returns { void }\n     */\n    const successDeleteChallengeCallback = useCallback((): void => {\n        fetchAllPractisSets();\n        refreshSearchParams();\n    }, [fetchAllPractisSets, refreshSearchParams]);\n\n    /**\n     * @function onConfirmDeleteChallenge\n     * @param { number } challengeIdToDelete\n     * @returns { void }\n     */\n    const onConfirmDeleteChallenge = useCallback(\n        (challengeIdToDelete: number): void => {\n            onDeleteChallenges(\n                [challengeIdToDelete!],\n                successDeleteChallengeCallback\n            );\n        },\n        [onDeleteChallenges, successDeleteChallengeCallback]\n    );\n\n    /**\n     * @function handleDeleteChallenge\n     * @param { number } id\n     * @returns { void }\n     */\n    const handleDeleteChallenge = useCallback(\n        (id: number) => {\n            showConfirmationModalDialog({\n                modalTitle: 'Are You Sure?',\n                description:\n                    'Are you sure you want to delete this item? This can’t be undone',\n                onConfirm: () => onConfirmDeleteChallenge(id),\n            });\n        },\n        [onConfirmDeleteChallenge, showConfirmationModalDialog]\n    );\n\n    useEffect(() => {\n        const filteredUsers = challenges\n            ? challenges.items.map(challenge => Number(challenge.id))\n            : [];\n        const usersToClear = clearSelectedItemIfNotLoaded(\n            selectedChallengeIds,\n            filteredUsers\n        );\n        if (usersToClear && usersToClear.length > 0) {\n            updateAllChallengesCheckedState(usersToClear, false);\n        }\n    }, [selectedChallengeIds, challenges, updateAllChallengesCheckedState]);\n\n    const getAssignedLabelsIds = useAssignedLabelsIdsApi();\n\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\n\n    /**\n     * @function onOpenAssignLabelAction\n     * @returns { void }\n     */\n    const onOpenAssignLabelAction = (): void => {\n        if (challenges && challenges.items && selectedChallengeIds) {\n            getAssignedLabelsIds(\n                selectedChallengeIds,\n                LOAD_ASSIGNED_LABELS.CHALLENGES_SCREEN_LIBRARY,\n                ASSIGN_LABEL_OPTIONS.CHALLENGE,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                const { preAssignedLabels } = calculatePreSelectedLabels(\n                    selectedChallengeIds,\n                    challenges,\n                    data\n                );\n\n                setAssignLabelsAction(preAssignedLabels);\n            });\n        }\n    };\n\n    useEffect(() => {\n        handleChangeEvent(savedStatuses);\n    }, [savedStatuses, handleChangeEvent]);\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_CHALLENGE]);\n    }, [canAccessPage]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onClearSelection\n     * @returns { void }\n     */\n    const onClearSelection = () => {\n        updateAllChallengesCheckedState([], false, false);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function onSelectAll\n     * @returns { void }\n     */\n    const onSelectAll = () => {\n        const ids =\n            (challenges &&\n                challenges.items.map((item: ChallengeInterface) =>\n                    Number(item.id)\n                )) ||\n            ([] as number[]);\n        updateAllChallengesCheckedState(ids, true, isCheckboxPartiallySelected);\n        setIsSelectAll(true);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        updateAllChallengesCheck(event.target.checked);\n        setIsSelectAll(false);\n    };\n\n    const isMasterCheckBoxChecked =\n        !!selectedChallengeIds && !!selectedChallengeIds.length;\n\n    const isMasterCheckBoxDisabled =\n        !challenges || (challenges && challenges.items.length < 1);\n\n    /**\n     * @function checkIsRowChecked\n     * @param { ChallengeInterface } challenge\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (challenge: ChallengeInterface): boolean =>\n        !!selectedChallengeIds &&\n        !!challenge.id &&\n        selectedChallengeIds.includes(challenge.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { ChallengeInterface } challenge\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, challenge: ChallengeInterface) => {\n        setIsSelectAll(false);\n        handleChallengeCheck(event, challenge);\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { ChallengeInterface } challenge\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (challenge: ChallengeInterface): boolean => {\n        return labelsOpen === challenge?.['id'];\n    };\n\n    /**\n     * @function onDeleteLabelHandler\n     * @param { number } labelId\n     * @param { ChallengeInterface } challenge\n     * @returns { void }\n     */\n    const onDeleteLabelHandler = (\n        labelId: number,\n        challenge: ChallengeInterface\n    ): void => {\n        const challengeItem = challenges?.items.find(\n            item => item.id === challenge.id\n        );\n\n        if (!isEmpty(challengeItem)) {\n            deleteLibraryLabelTag(\n                labelId,\n                {\n                    entityItem: challengeItem!,\n                    entityName: 'challenge',\n                },\n                refreshData\n            );\n        }\n    };\n\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\n        assignLabelsToChallenges,\n        deleteLabelsFromChallenges,\n        refreshData\n    );\n\n    /**\n     * @function handleUpdateChallengesLabels\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { number } challengeId\n     * @returns { void }\n     */\n    const handleUpdateChallengesLabels = (\n        addedLabelIds: number[],\n        deletedLabelIds: number[],\n        challengeId: number\n    ): void => {\n        updateLabelsBulkActionService(\n            {\n                entityName: 'challenge',\n                entityId: challengeId,\n            },\n            addedLabelIds,\n            deletedLabelIds\n        );\n    };\n\n    const generateDuplicateChallengeActionList =\n        useGenerateCreateDuplicateChallengeActionList();\n\n    const duplicateLibraryBulkActionService =\n        useCreateEditDuplicateLibraryBulActionService(\n            'duplicate',\n            'Challenge',\n            refreshData\n        );\n\n    /**\n     * @function handleDuplicateChallenge\n     * @param { ChallengeInterface } challenge\n     * @returns { void }\n     */\n    const handleDuplicateChallenge = useCallback(\n        (challenge: ChallengeInterface) => {\n            const newChallenge: CreateNewChallengeInfo = {\n                title: generateCopyOfEntityName(challenge.title),\n                description: challenge.description,\n                sourceScenarioId: challenge?.sourceScenarioId ?? null,\n                lines: challenge?.script?.lines ?? [],\n                labelIds: challenge?.labels ?? [],\n                tryLimit: challenge.tryLimit\n            };\n\n            const duplicateChallengeActionList =\n                generateDuplicateChallengeActionList(newChallenge);\n\n            !isEmpty(duplicateChallengeActionList) &&\n                duplicateLibraryBulkActionService([\n                    duplicateChallengeActionList,\n                ]);\n        },\n        [\n            duplicateLibraryBulkActionService,\n            generateDuplicateChallengeActionList,\n        ]\n    );\n\n    return (\n        <MainWrapper\n            subTitle=\"Library\"\n            tabs={<LibraryNavigationContainer />}\n            hideDivider={!!selectedChallenges?.length}\n            htmlPageTitle=\"Library - Practis\"\n            dataTest=\"library\"\n        >\n            {loading && !isSelectAll && <LoadingComponent />}\n            <TableWrapper\n                tableStates={tableStates}\n                data={challenges?.items}\n                cornered={selectedLabels && !!selectedLabels.length}\n                selectedLabels={selectedLabels}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'library-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: challenges?.count ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            countAppliedFiltersCount(searchParams),\n                        dataTest: 'library-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        dataTest: 'library-search-input',\n                    },\n                    isSelectedItemOptionsVisible:\n                        !isEmpty(selectedChallenges) && !isEmpty(challenges),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedChallenges?.length,\n                        totalCount: challenges?.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: onClearSelection,\n                        onSelectAll: onSelectAll,\n                        bulkActionsConfig: {\n                            disabled: bulkActions.areBulkActionsDisabled(),\n                            disabledLabel: bulkActions.areItemsEmpty()\n                                ? undefined\n                                : \"Bulk actions can't be applied\",\n                            assignLabelsPermissions:\n                                bulkActions.isBulkActionVisible(\n                                    ChallengeActions.ASSIGN_LABELS\n                                )\n                                    ? [NEW_PERMISSIONS.ASSIGN_CHALLENGE_LABEL]\n                                    : [],\n                            isAssignLabelsDisabled:\n                                bulkActions.isBulkActionDisabled(\n                                    ChallengeActions.ASSIGN_LABELS\n                                ),\n                            onOpenAssignLabelAction: onOpenAssignLabelAction,\n                            onAssignLabelsSubmit: assignLabels,\n                            isSelectAll: isSelectAll,\n                            totalCount: challenges?.count,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <LibraryFilters\n                                        selectedStatuses={\n                                            challenges ? selectedStatuses : []\n                                        }\n                                        savedStatuses={savedStatuses}\n                                        handleSelectStatus={onSelectStatus}\n                                        handleSaveStatus={onSaveStatus}\n                                        preSelectedLabels={selectedLabels || []}\n                                        onLabelsChange={labelChangeHandler}\n                                        onSuccessApply={() => hide()}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={250}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={\n                                            challenges\n                                                ? savedStatuses.length +\n                                                  (searchParams.labelIDs\n                                                      ?.length || 0)\n                                                : 0\n                                        }\n                                        disabled={tableStates.disableFilters}\n                                        dataTest=\"library-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && challenges?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: Document,\n                        text: 'No Challenges Yet',\n                        dataTest: 'library-no-challenges',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Challenges',\n                        dataTest: 'library-no-found-challenges',\n                    },\n                    noFilterResultsOptions: {\n                        dataTest: 'library-no-filtered-challenges',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: isMasterCheckBoxChecked,\n                        disabled: isMasterCheckBoxDisabled,\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'library-challenges-master-checkbox',\n                    },\n                    columns: [\n                        {\n                            title: 'Challenges',\n                            width: 25,\n                            ...chName,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-challenges-title-column',\n                        },\n                        {\n                            title: 'Status',\n                            width: 20,\n                            ...chStatus,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-challenges-status-column',\n                        },\n                        {\n                            title: 'Last Updated',\n                            width: 20,\n                            ...chUpdatedAt,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'library-challenges-date-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n                    rowConfig: {\n                        onRowClick: handleItemEdit,\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        dataTest: 'library-challenges-item',\n\n                        getLabelTagsProps: (challenge: ChallengeInterface) => ({\n                            selectedLabels: challenge.labels ?? [],\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_CHALLENGE_LABEL,\n                            ],\n                            onDeleteLabel: (labelId: number) =>\n                                onDeleteLabelHandler(labelId, challenge),\n                        }),\n\n                        cells: [\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    renderTitle: (\n                                        challenge: ChallengeInterface\n                                    ) => challenge?.title,\n                                    dataTest: 'library-challenges-item-title',\n                                },\n                            },\n                            {\n                                fieldType: 'BADGE_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                shouldShowEmptyCell: (\n                                    challenge: ChallengeInterface\n                                ) => !challenge?.status,\n                                fieldProps: {\n                                    getBadgeFieldProps: (\n                                        challenge: ChallengeInterface\n                                    ) => ({\n                                        status: challenge?.status,\n                                        className: classes.customTableCellStyle,\n                                        dataTest:\n                                            'library-challenges-item-status',\n                                    }),\n                                    renderTitle: (\n                                        challenge: ChallengeInterface\n                                    ) =>\n                                        libraryItemsStatusName(\n                                            challenge?.status\n                                        ),\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    challenge: ChallengeInterface\n                                ) => !challenge?.updatedAt,\n                                fieldProps: {\n                                    renderTitle: (\n                                        challenge: ChallengeInterface\n                                    ) => formatDate(challenge.updatedAt),\n                                    dataTest: 'library-challenges-item-date',\n                                },\n                            },\n                            {\n                                fieldType: 'LABEL_TAGS',\n                                fieldProps: {\n                                    getLabelTagsProps: (\n                                        challenge: ChallengeInterface\n                                    ) => ({\n                                        open: labelsOpen === challenge.id,\n                                        toggleOpen: () =>\n                                            handleToggleLabels(\n                                                Number(challenge.id)\n                                            ),\n                                        selectedLabels: challenge.labels ?? [],\n                                        dataTest:\n                                            'library-challenges-item-labels',\n                                    }),\n                                },\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (\n                                        challenge: ChallengeInterface\n                                    ) => (\n                                        <ChallengesListActions\n                                            challenge={challenge}\n                                            actionsHelper={actionsHelper}\n                                            restoreChallenge={\n                                                onRestoreChallenge\n                                            }\n                                            handleItemEdit={handleItemEdit}\n                                            handleViewChallenge={handleItemEdit}\n                                            handleDeleteChallenge={\n                                                handleDeleteChallenge\n                                            }\n                                            onDuplicateChallenge={\n                                                handleDuplicateChallenge\n                                            }\n                                            archiveChallenge={\n                                                onArchiveChallenge\n                                            }\n                                            assignLabelsToLibrary={(\n                                                addedLabelIds,\n                                                deletedLabelIds\n                                            ) =>\n                                                handleUpdateChallengesLabels(\n                                                    addedLabelIds,\n                                                    deletedLabelIds,\n                                                    challenge?.id ?? 0\n                                                )\n                                            }\n                                            isHidden={\n                                                !!selectedChallenges?.length\n                                            }\n                                        />\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const ChallengesContainer: FC = () => {\n    const state = useLibraryChallengesState();\n    const history = useHistory();\n    const deleteChallenges = useDeleteChallengesService();\n    const archiveChallenge = useArchiveChallengeService();\n    const restoreChallenge = useRestoreChallengeService();\n    const searchChallenges = useSearchChallengesService();\n    const updatedChallenges = useUpdatedLibraryChallengesState();\n    const searchChallengesDebounced = useSearchDebounced(searchChallenges);\n\n    const labels = useLabelsState();\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const updateAllChallengesCheckedState =\n        useUpdateAllChallengeCheckedStateService();\n    const updateSelectedChallengeCheckedState =\n        useUpdateLibraryChallengeCheckedStateService();\n    const updatedLabels = useUpdatedLabelsState();\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const actionsHelper = useChallengeActionsHelper();\n    const profile = useSelector(getProfileState);\n\n    const selectedChallenges = useMemo(\n        () => selectSelectedChallenges(state),\n        [state]\n    );\n\n    return (\n        <WithLabelsContext.Provider\n            value={{ reducerName: 'libraryChallenges' }}\n        >\n            <Challenges\n                onDeleteChallenges={deleteChallenges}\n                onArchiveChallenge={archiveChallenge}\n                onRestoreChallenge={restoreChallenge}\n                history={history}\n                searchChallenges={searchChallengesDebounced}\n                challenges={state.data}\n                loading={state.loading}\n                selectedChallengeIds={state.selectedChallenges}\n                selectedChallenges={selectedChallenges}\n                actionsHelper={actionsHelper}\n                updatedChallenges={updatedChallenges.data}\n                selectedLabels={labels.selected}\n                setAssignLabelsAction={setAssignLabelsAction}\n                assignedLabels={labels.assignedLabels}\n                updateAllChallengesCheckedState={\n                    updateAllChallengesCheckedState\n                }\n                updateSelectedChallengeCheckedState={\n                    updateSelectedChallengeCheckedState\n                }\n                updatedLabels={updatedLabels}\n                saveGlobalLabelFilters={saveGlobalLabelFilters}\n                companyId={profile?.companyId}\n            />\n        </WithLabelsContext.Provider>\n    );\n};\n\n\n\nexport default ChallengesContainer;","import React from 'react';\nimport Scenarios from './Scenarios/Scenarios';\nimport PractisSets from './PractisSets/PractisSets';\nimport Challenges from './Challenges/Challenges';\nimport { Switch, Redirect } from 'react-router-dom';\nimport PrivateRoute from '../../../routes/PrivateRouter';\nimport ROUTES from '../../../routes/routes';\n\nconst Library = () => (\n    <Switch>\n        <Redirect\n            from={ROUTES.LIBRARY}\n            exact\n            to={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL}\n        />\n        <PrivateRoute\n            path={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL}\n            component={PractisSets}\n        />\n        <PrivateRoute\n            path={ROUTES.LIBRARY_SETTINGS.SCENARIOS.ALL}\n            component={Scenarios}\n        />\n        <PrivateRoute\n            path={ROUTES.LIBRARY_SETTINGS.CHALLENGES.ALL}\n            component={Challenges}\n        />\n    </Switch>\n);\n\nexport default Library;\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport LandingWrapper from '../../ui/wrapper/LandingWrapper/LandingWrapper';\n\n\nconst TermsContainer = styled.div`\n    margin: 50px 10%;\n`;\n\nconst ContentArea = styled.div``;\n\nclass TermsPage extends Component {\n    render() {\n        return (\n            <LandingWrapper>\n                <TermsContainer>\n                    <ContentArea>\n                        <h1>Terms and Conditions</h1>\n\n                        <p>Last updated: February 21, 2020</p>\n\n                        <p>\n                            Please read these terms and conditions carefully\n                            before using Our Service.\n                        </p>\n\n                        <h1>Interpretation and Definitions</h1>\n                        <h2>Interpretation</h2>\n                        <p>\n                            The words of which the initial letter is capitalized\n                            have meanings defined under the following\n                            conditions.\n                        </p>\n                        <p>\n                            The following definitions shall have the same\n                            meaning regardless of whether they appear in\n                            singular or in plural.\n                        </p>\n\n                        <h2>Definitions</h2>\n                        <p>For the purposes of these Terms and Conditions:</p>\n                        <ul>\n                            <li>\n                                <strong>Application</strong> means the software\n                                program provided by the Company downloaded by\n                                You on any electronic device, named Practis\n                            </li>{' '}\n                            <li>\n                                <strong>Application Store</strong> means the\n                                digital distribution service operated and\n                                developed by Apple Inc. (Apple App Store) or\n                                Google Inc. (Google Play Store) in which the\n                                Application has been downloaded.\n                            </li>{' '}\n                            <li>\n                                <strong>Affiliate</strong> means an entity that\n                                controls, is controlled by or is under common\n                                control with a party, where \"control\" means\n                                ownership of 50% or more of the shares, equity\n                                interest or other securities entitled to vote\n                                for election of directors or other managing\n                                authority.\n                            </li>\n                            <li>\n                                <strong>Account</strong> means a unique account\n                                created for You to access our Service or parts\n                                of our Service.\n                            </li>{' '}\n                            <li>\n                                <strong>Company</strong> (referred to as either\n                                \"the Company\", \"We\", \"Us\" or \"Our\" in this\n                                Agreement) refers to Mantra Systems, Inc., 2633\n                                Lincoln Boulevard, #925 Santa Monica, CA 90405.\n                            </li>\n                            <li>\n                                <strong>Content</strong> refers to content such\n                                as text, images, or other information that can\n                                be posted, uploaded, linked to or otherwise made\n                                available by You, regardless of the form of that\n                                content.\n                            </li>{' '}\n                            <li>\n                                <strong>Country</strong> refers to: California,\n                                United States\n                            </li>\n                            <li>\n                                <strong>Device</strong> means any device that\n                                can access the Service such as a computer, a\n                                cellphone or a digital tablet.\n                            </li>{' '}\n                            <li>\n                                <strong>Feedback</strong> means feedback,\n                                innovations or suggestions sent by You regarding\n                                the attributes, performance or features of our\n                                Service.\n                            </li>{' '}\n                            <li>\n                                <strong>Service</strong> refers to the\n                                Application.\n                            </li>\n                            <li>\n                                <strong>Terms and Conditions</strong> (also\n                                referred as \"Terms\") mean these Terms and\n                                Conditions that form the entire agreement\n                                between You and the Company regarding the use of\n                                the Service.\n                            </li>\n                            <li>\n                                <strong>\n                                    Third-party Social Media Service\n                                </strong>{' '}\n                                means any services or content (including data,\n                                information, products or services) provided by a\n                                third-party that may be displayed, included or\n                                made available by the Service.\n                            </li>\n                            <li>\n                                <strong>You</strong> means the individual\n                                accessing or using the Service, or the company,\n                                or other legal entity on behalf of which such\n                                individual is accessing or using the Service, as\n                                applicable.\n                            </li>\n                        </ul>\n\n                        <h1>Acknowledgement</h1>\n                        <p>\n                            These are the Terms and Conditions governing the use\n                            of this Service and the agreement that operates\n                            between You and the Company. These Terms and\n                            Conditions set out the rights and obligations of all\n                            users regarding the use of the Service.\n                        </p>\n                        <p>\n                            Your access to and use of the Service is conditioned\n                            on Your acceptance of and compliance with these\n                            Terms and Conditions. These Terms and Conditions\n                            apply to all visitors, users and others who access\n                            or use the Service.\n                        </p>\n                        <p>\n                            By accessing or using the Service You agree to be\n                            bound by these Terms and Conditions. If You disagree\n                            with any part of these Terms and Conditions then You\n                            may not access the Service.\n                        </p>\n                        <p>\n                            Your access to and use of the Service is also\n                            conditioned on Your acceptance of and compliance\n                            with the Privacy Policy of the Company. Our Privacy\n                            Policy describes Our policies and procedures on the\n                            collection, use and disclosure of Your personal\n                            information when You use the Application or the\n                            Website and tells You about Your privacy rights and\n                            how the law protects You. Please read Our Privacy\n                            Policy carefully before using Our Service.\n                        </p>\n\n                        <h1>User Accounts</h1>\n                        <p>\n                            When You create an account with Us, You must provide\n                            Us information that is accurate, complete, and\n                            current at all times. Failure to do so constitutes a\n                            breach of the Terms, which may result in immediate\n                            termination of Your account on Our Service.\n                        </p>\n                        <p>\n                            You are responsible for safeguarding the password\n                            that You use to access the Service and for any\n                            activities or actions under Your password, whether\n                            Your password is with Our Service or a Third-Party\n                            Social Media Service.\n                        </p>\n                        <p>\n                            You agree not to disclose Your password to any third\n                            party. You must notify Us immediately upon becoming\n                            aware of any breach of security or unauthorized use\n                            of Your account.\n                        </p>\n                        <p>\n                            You may not use as a username the name of another\n                            person or entity or that is not lawfully available\n                            for use, a name or trademark that is subject to any\n                            rights of another person or entity other than You\n                            without appropriate authorization, or a name that is\n                            otherwise offensive, vulgar or obscene.\n                        </p>\n\n                        <h1>Content</h1>\n                        <h2>Your Right to Post Content</h2>\n                        <p>\n                            Our Service allows You to post Content. You are\n                            responsible for the Content that You post to the\n                            Service, including its legality, reliability, and\n                            appropriateness.\n                        </p>\n                        <p>\n                            By posting Content to the Service, You grant Us the\n                            right and license to use, modify, publicly perform,\n                            publicly display, reproduce, and distribute such\n                            Content on and through the Service. You retain any\n                            and all of Your rights to any Content You submit,\n                            post or display on or through the Service and You\n                            are responsible for protecting those rights. You\n                            agree that this license includes the right for Us to\n                            make Your Content available to other users of the\n                            Service, who may also use Your Content subject to\n                            these Terms.\n                        </p>\n                        <p>\n                            You represent and warrant that: (i) the Content is\n                            Yours (You own it) or You have the right to use it\n                            and grant Us the rights and license as provided in\n                            these Terms, and (ii) the posting of Your Content on\n                            or through the Service does not violate the privacy\n                            rights, publicity rights, copyrights, contract\n                            rights or any other rights of any person.\n                        </p>\n\n                        <h2>Content Restrictions</h2>\n                        <p>\n                            The Company is not responsible for the content of\n                            the Service's users. You expressly understand and\n                            agree that You are solely responsible for the\n                            Content and for all activity that occurs under your\n                            account, whether done so by You or any third person\n                            using Your account.\n                        </p>\n                        <p>\n                            You may not transmit any Content that is unlawful,\n                            offensive, upsetting, intended to disgust,\n                            threatening, libelous, defamatory, obscene or\n                            otherwise objectionable. Examples of such\n                            objectionable Content include, but are not limited\n                            to, the following:\n                        </p>\n                        <ul>\n                            <li>Unlawful or promoting unlawful activity.</li>\n                            <li>\n                                Defamatory, discriminatory, or mean-spirited\n                                content, including references or commentary\n                                about religion, race, sexual orientation,\n                                gender, national/ethnic origin, or other\n                                targeted groups.\n                            </li>\n                            <li>\n                                Spam, machine – or randomly – generated,\n                                constituting unauthorized or unsolicited\n                                advertising, chain letters, any other form of\n                                unauthorized solicitation, or any form of\n                                lottery or gambling.\n                            </li>\n                            <li>\n                                Containing or installing any viruses, worms,\n                                malware, trojan horses, or other content that is\n                                designed or intended to disrupt, damage, or\n                                limit the functioning of any software, hardware\n                                or telecommunications equipment or to damage or\n                                obtain unauthorized access to any data or other\n                                information of a third person.\n                            </li>\n                            <li>\n                                Infringing on any proprietary rights of any\n                                party, including patent, trademark, trade\n                                secret, copyright, right of publicity or other\n                                rights.\n                            </li>\n                            <li>\n                                Impersonating any person or entity including the\n                                Company and its employees or representatives.\n                            </li>\n                            <li>Violating the privacy of any third person.</li>\n                            <li>False information and features.</li>\n                        </ul>\n                        <p>\n                            The Company reserves the right, but not the\n                            obligation, to, in its sole discretion, determine\n                            whether or not any Content is appropriate and\n                            complies with this Terms, refuse or remove this\n                            Content. The Company further reserves the right to\n                            make formatting and edits and change the manner any\n                            Content. The Company can also limit or revoke the\n                            use of the Service if You post such objectionable\n                            Content.\n                        </p>\n                        <p>\n                            As the Company cannot control all content posted by\n                            users and/or third parties on the Service, you agree\n                            to use the Service at your own risk. You understand\n                            that by using the Service You may be exposed to\n                            content that You may find offensive, indecent,\n                            incorrect or objectionable, and You agree that under\n                            no circumstances will the Company be liable in any\n                            way for any content, including any errors or\n                            omissions in any content, or any loss or damage of\n                            any kind incurred as a result of your use of any\n                            content.\n                        </p>\n\n                        <h2>Content Backups</h2>\n                        <p>\n                            Although regular backups of Content are performed,\n                            the Company do not guarantee there will be no loss\n                            or corruption of data.\n                        </p>\n                        <p>\n                            Corrupt or invalid backup points may be caused by,\n                            without limitation, Content that is corrupted prior\n                            to being backed up or that changes during the time a\n                            backup is performed.\n                        </p>\n                        <p>\n                            The Company will provide support and attempt to\n                            troubleshoot any known or discovered issues that may\n                            affect the backups of Content. But You acknowledge\n                            that the Company has no liability related to the\n                            integrity of Content or the failure to successfully\n                            restore Content to a usable state.\n                        </p>\n                        <p>\n                            You agree to maintain a complete and accurate copy\n                            of any Content in a location independent of the\n                            Service.\n                        </p>\n\n                        <h1>Copyright Policy</h1>\n                        <h2>Intellectual Property Infringement</h2>\n                        <p>\n                            We respect the intellectual property rights of\n                            others. It is Our policy to respond to any claim\n                            that Content posted on the Service infringes a\n                            copyright or other intellectual property\n                            infringement of any person.\n                        </p>\n                        <p>\n                            If You are a copyright owner, or authorized on\n                            behalf of one, and You believe that the copyrighted\n                            work has been copied in a way that constitutes\n                            copyright infringement that is taking place through\n                            the Service, You must submit Your notice in writing\n                            to the attention of our copyright agent via email at\n                            dmca@gopractis.com and include in Your notice a\n                            detailed description of the alleged infringement.\n                        </p>\n                        <p>\n                            You may be held accountable for damages (including\n                            costs and attorneys' fees) for misrepresenting that\n                            any Content is infringing Your copyright.\n                        </p>\n\n                        <h2>\n                            DMCA Notice and DMCA Procedure for Copyright\n                            Infringement Claims\n                        </h2>\n                        <p>\n                            You may submit a notification pursuant to the\n                            Digital Millennium Copyright Act (DMCA) by providing\n                            our Copyright Agent with the following information\n                            in writing (see 17 U.S.C 512(c)(3) for further\n                            detail):\n                        </p>\n                        <ul>\n                            <li>\n                                An electronic or physical signature of the\n                                person authorized to act on behalf of the owner\n                                of the copyright's interest.\n                            </li>\n                            <li>\n                                A description of the copyrighted work that You\n                                claim has been infringed, including the URL\n                                (i.e., web page address) of the location where\n                                the copyrighted work exists or a copy of the\n                                copyrighted work.\n                            </li>\n                            <li>\n                                Identification of the URL or other specific\n                                location on the Service where the material that\n                                You claim is infringing is located.\n                            </li>\n                            <li>\n                                Your address, telephone number, and email\n                                address.\n                            </li>\n                            <li>\n                                A statement by You that You have a good faith\n                                belief that the disputed use is not authorized\n                                by the copyright owner, its agent, or the law.\n                            </li>\n                            <li>\n                                A statement by You, made under penalty of\n                                perjury, that the above information in Your\n                                notice is accurate and that You are the\n                                copyright owner or authorized to act on the\n                                copyright owner's behalf.\n                            </li>\n                        </ul>\n                        <p>\n                            You can contact our copyright agent via email at\n                            dmca@gopractis.com.\n                        </p>\n                        <p>\n                            Upon receipt of a notification, the Company will\n                            take whatever action, in its sole discretion, it\n                            deems appropriate, including removal of the\n                            challenged content from the Service.\n                        </p>\n\n                        <h1>Intellectual Property</h1>\n                        <p>\n                            The Service and its original content (excluding\n                            Content provided by You or other users), features\n                            and functionality are and will remain the exclusive\n                            property of the Company and its licensors.\n                        </p>\n                        <p>\n                            The Service is protected by copyright, trademark,\n                            and other laws of both the Country and foreign\n                            countries.\n                        </p>\n                        <p>\n                            Our trademarks and trade dress may not be used in\n                            connection with any product or service without the\n                            prior written consent of the Company.\n                        </p>\n\n                        <h1>Your Feedback to Us</h1>\n                        <p>\n                            You assign all rights, title and interest in any\n                            Feedback You provide the Company. If for any reason\n                            such assignment is ineffective, You agree to grant\n                            the Company a non-exclusive, perpetual, irrevocable,\n                            royalty free, worldwide right and licence to use,\n                            reproduce, disclose, sub-licence, distribute, modify\n                            and exploit such Feedback without restriction.\n                        </p>\n\n                        <h1>Links to Other Websites</h1>\n                        <p>\n                            Our Service may contain links to third-party web\n                            sites or services that are not owned or controlled\n                            by the Company.\n                        </p>\n                        <p>\n                            The Company has no control over, and assumes no\n                            responsibility for, the content, privacy policies,\n                            or practices of any third party web sites or\n                            services. You further acknowledge and agree that the\n                            Company shall not be responsible or liable, directly\n                            or indirectly, for any damage or loss caused or\n                            alleged to be caused by or in connection with the\n                            use of or reliance on any such content, goods or\n                            services available on or through any such web sites\n                            or services.\n                        </p>\n                        <p>\n                            We strongly advise You to read the terms and\n                            conditions and privacy policies of any third-party\n                            web sites or services that You visit.\n                        </p>\n\n                        <h1>Termination</h1>\n                        <p>\n                            We may terminate or suspend Your Account\n                            immediately, without prior notice or liability, for\n                            any reason whatsoever, including without limitation\n                            if You breach these Terms and Conditions.\n                        </p>\n                        <p>\n                            Upon termination, Your right to use the Service will\n                            cease immediately. If You wish to terminate Your\n                            Account, You may simply discontinue using the\n                            Service.\n                        </p>\n\n                        <h1>Limitation of Liability</h1>\n                        <p>\n                            Notwithstanding any damages that You might incur,\n                            the entire liability of the Company and any of its\n                            suppliers under any provision of this Terms and Your\n                            exclusive remedy for all of the foregoing shall be\n                            limited to the amount actually paid by You through\n                            the Service or 100 USD if You haven't purchased\n                            anything through the Service.\n                        </p>\n                        <p>\n                            To the maximum extent permitted by applicable law,\n                            in no event shall the Company or its suppliers be\n                            liable for any special, incidental, indirect, or\n                            consequential damages whatsoever (including, but not\n                            limited to, damages for loss of profits, loss of\n                            data or other information, for business\n                            interruption, for personal injury, loss of privacy\n                            arising out of or in any way related to the use of\n                            or inability to use the Service, third-party\n                            software and/or third-party hardware used with the\n                            Service, or otherwise in connection with any\n                            provision of this Terms), even if the Company or any\n                            supplier has been advised of the possibility of such\n                            damages and even if the remedy fails of its\n                            essential purpose.\n                        </p>\n                        <p>\n                            Some states do not allow the exclusion of implied\n                            warranties or limitation of liability for incidental\n                            or consequential damages, which means that some of\n                            the above limitations may not apply. In these\n                            states, each party's liability will be limited to\n                            the greatest extent permitted by law.\n                        </p>\n\n                        <h1>\"AS IS\" and \"AS AVAILABLE\" Disclaimer</h1>\n                        <p>\n                            The Service is provided to You \"AS IS\" and \"AS\n                            AVAILABLE\" and with all faults and defects without\n                            warranty of any kind. To the maximum extent\n                            permitted under applicable law, the Company, on its\n                            own behalf and on behalf of its Affiliates and its\n                            and their respective licensors and service\n                            providers, expressly disclaims all warranties,\n                            whether express, implied, statutory or otherwise,\n                            with respect to the Service, including all implied\n                            warranties of merchantability, fitness for a\n                            particular purpose, title and non-infringement, and\n                            warranties that may arise out of course of dealing,\n                            course of performance, usage or trade practice.\n                            Without limitation to the foregoing, the Company\n                            provides no warranty or undertaking, and makes no\n                            representation of any kind that the Service will\n                            meet Your requirements, achieve any intended\n                            results, be compatible or work with any other\n                            software, applications, systems or services, operate\n                            without interruption, meet any performance or\n                            reliability standards or be error free or that any\n                            errors or defects can or will be corrected.\n                        </p>\n                        <p>\n                            Without limiting the foregoing, neither the Company\n                            nor any of the company's provider makes any\n                            representation or warranty of any kind, express or\n                            implied: (i) as to the operation or availability of\n                            the Service, or the information, content, and\n                            materials or products included thereon; (ii) that\n                            the Service will be uninterrupted or error-free;\n                            (iii) as to the accuracy, reliability, or currency\n                            of any information or content provided through the\n                            Service; or (iv) that the Service, its servers, the\n                            content, or e-mails sent from or on behalf of the\n                            Company are free of viruses, scripts, trojan horses,\n                            worms, malware, timebombs or other harmful\n                            components.\n                        </p>\n                        <p>\n                            Some jurisdictions do not allow the exclusion of\n                            certain types of warranties or limitations on\n                            applicable statutory rights of a consumer, so some\n                            or all of the above exclusions and limitations may\n                            not apply to You. But in such a case the exclusions\n                            and limitations set forth in this section shall be\n                            applied to the greatest extent enforceable under\n                            applicable law.\n                        </p>\n\n                        <h1>Governing Law</h1>\n                        <p>\n                            The laws of the Country, excluding its conflicts of\n                            law rules, shall govern this Terms and Your use of\n                            the Service. Your use of the Application may also be\n                            subject to other local, state, national, or\n                            international laws.\n                        </p>\n\n                        <h1>Disputes Resolution</h1>\n                        <p>\n                            If You have any concern or dispute about the\n                            Service, You agree to first try to resolve the\n                            dispute informally by contacting the Company.\n                        </p>\n\n                        <h1>For European Union (EU) Users</h1>\n                        <p>\n                            If You are a European Union consumer, you will\n                            benefit from any mandatory provisions of the law of\n                            the country in which you are resident in.\n                        </p>\n\n                        <h1>United States Legal Compliance</h1>\n                        <p>\n                            You represent and warrant that (i) You are not\n                            located in a country that is subject to the United\n                            States government embargo, or that has been\n                            designated by the United States government as a\n                            “terrorist supporting” country, and (ii) You are not\n                            listed on any United States government list of\n                            prohibited or restricted parties.\n                        </p>\n\n                        <h1>Severability and Waiver</h1>\n                        <h2>Severability</h2>\n                        <p>\n                            If any provision of these Terms is held to be\n                            unenforceable or invalid, such provision will be\n                            changed and interpreted to accomplish the objectives\n                            of such provision to the greatest extent possible\n                            under applicable law and the remaining provisions\n                            will continue in full force and effect.\n                        </p>\n\n                        <h2>Waiver</h2>\n                        <p>\n                            Except as provided herein, the failure to exercise a\n                            right or to require performance of an obligation\n                            under this Terms shall not effect a party's ability\n                            to exercise such right or require such performance\n                            at any time thereafter nor shall be the waiver of a\n                            breach constitute a waiver of any subsequent breach.\n                        </p>\n\n                        <h1>Translation Interpretation</h1>\n                        <p>\n                            These Terms and Conditions may have been translated\n                            if We have made them available to You on our\n                            Service.\n                        </p>\n                        <p>\n                            You agree that the original English text shall\n                            prevail in the case of a dispute.\n                        </p>\n\n                        <h1>Changes to These Terms and Conditions</h1>\n                        <p>\n                            We reserve the right, at Our sole discretion, to\n                            modify or replace these Terms at any time. If a\n                            revision is material We will make reasonable efforts\n                            to provide at least 30 days' notice prior to any new\n                            terms taking effect. What constitutes a material\n                            change will be determined at Our sole discretion.\n                        </p>\n                        <p>\n                            By continuing to access or use Our Service after\n                            those revisions become effective, You agree to be\n                            bound by the revised terms. If You do not agree to\n                            the new terms, in whole or in part, please stop\n                            using the website and the Service.\n                        </p>\n\n                        <h1>Contact Us</h1>\n                        <p>\n                            If you have any questions about these Terms and\n                            Conditions, You can contact us:\n                        </p>\n\n                        <ul>\n                            <li>By email: support@gopractis.com</li>\n                        </ul>\n                    </ContentArea>\n                </TermsContainer>\n            </LandingWrapper>\n        );\n    }\n}\n\nexport default TermsPage;\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport LandingWrapper from '../../ui/wrapper/LandingWrapper/LandingWrapper';\n\n\nconst PrivacyContainer = styled.div`\n    margin: 50px 10%;\n`;\n\nconst ContentArea = styled.div``;\n\nclass PrivacyPage extends Component {\n    render() {\n        return (\n            <LandingWrapper>\n                <PrivacyContainer>\n                    <ContentArea>\n                        <h1>Privacy Policy</h1>\n\n                        <p>Last updated: February 21, 2020</p>\n\n                        <p>\n                            This Privacy Policy describes Our policies and\n                            procedures on the collection, use and disclosure of\n                            Your information when You use the Service and tells\n                            You about Your privacy rights and how the law\n                            protects You.\n                        </p>\n\n                        <p>\n                            We use Your Personal data to provide and improve the\n                            Service. By using the Service, You agree to the\n                            collection and use of information in accordance with\n                            this Privacy Policy.\n                        </p>\n\n                        <h1>Interpretation and Definitions</h1>\n                        <h2>Interpretation</h2>\n                        <p>\n                            The words of which the initial letter is capitalized\n                            have meanings defined under the following\n                            conditions.\n                        </p>\n                        <p>\n                            The following definitions shall have the same\n                            meaning regardless of whether they appear in\n                            singular or in plural.\n                        </p>\n\n                        <h2>Definitions</h2>\n                        <p>For the purposes of this Privacy Policy:</p>\n                        <ul>\n                            <li>\n                                <p>\n                                    <strong>You</strong> means the individual\n                                    accessing or using the Service, or the\n                                    company, or other legal entity on behalf of\n                                    which such individual is accessing or using\n                                    the Service, as applicable.\n                                </p>\n                                <p>\n                                    Under GDPR (General Data Protection\n                                    Regulation), You can be referred to as the\n                                    Data Subject or as the User as you are the\n                                    individual using the Service.\n                                </p>{' '}\n                            </li>\n                            <li>\n                                <p>\n                                    <strong>Company</strong> (referred to as\n                                    either \"the Company\", \"We\", \"Us\" or \"Our\" in\n                                    this Agreement) refers to Mantra Systems,\n                                    Inc., 2633 Lincoln Boulevard #925 Santa\n                                    Monica, CA 90405.\n                                </p>\n                                <p>\n                                    For the purpose of the GDPR, the Company is\n                                    the Data Controller.\n                                </p>{' '}\n                            </li>\n                            <li>\n                                <strong>Application</strong> means the software\n                                program provided by the Company downloaded by\n                                You on any electronic device, named Practis\n                            </li>{' '}\n                            <li>\n                                <strong>Affiliate</strong> means an entity that\n                                controls, is controlled by or is under common\n                                control with a party, where \"control\" means\n                                ownership of 50% or more of the shares, equity\n                                interest or other securities entitled to vote\n                                for election of directors or other managing\n                                authority.\n                            </li>\n                            <li>\n                                <strong>Account</strong> means a unique account\n                                created for You to access our Service or parts\n                                of our Service.\n                            </li>\n                            <li>\n                                <strong>Service</strong> refers to the\n                                Application.\n                            </li>\n                            <li>\n                                <strong>Country</strong> refers to: California,\n                                United States\n                            </li>\n                            <li>\n                                <p>\n                                    <strong>Service Provider</strong> means any\n                                    natural or legal person who processes the\n                                    data on behalf of the Company. It refers to\n                                    third-party companies or individuals\n                                    employed by the Company to facilitate the\n                                    Service, to provide the Service on behalf of\n                                    the Company, to perform services related to\n                                    the Service or to assist the Company in\n                                    analyzing how the Service is used.\n                                </p>\n                                <p>\n                                    For the purpose of the GDPR, Service\n                                    Providers are considered Data Processors.\n                                </p>{' '}\n                            </li>\n                            <li>\n                                <strong>\n                                    Third-party Social Media Service\n                                </strong>{' '}\n                                refers to any website or any social network\n                                website through which a User can log in or\n                                create an account to use the Service.\n                            </li>\n                            <li>\n                                <p>\n                                    <strong>Personal Data</strong> is any\n                                    information that relates to an identified or\n                                    identifiable individual.\n                                </p>\n                                <p>\n                                    For the purposes for GDPR, Personal Data\n                                    means any information relating to You such\n                                    as a name, an identification number,\n                                    location data, online identifier or to one\n                                    or more factors specific to the physical,\n                                    physiological, genetic, mental, economic,\n                                    cultural or social identity.\n                                </p>{' '}\n                                <p>\n                                    For the purposes of the CCPA, Personal Data\n                                    means any information that identifies,\n                                    relates to, describes or is capable of being\n                                    associated with, or could reasonably be\n                                    linked, directly or indirectly, with You.\n                                </p>{' '}\n                            </li>\n                            <li>\n                                <strong>Device</strong> means any device that\n                                can access the Service such as a computer, a\n                                cellphone or a digital tablet.\n                            </li>{' '}\n                            <li>\n                                <strong>Usage Data</strong> refers to data\n                                collected automatically, either generated by the\n                                use of the Service or from the Service\n                                infrastructure itself (for example, the duration\n                                of a page visit).\n                            </li>\n                            <li>\n                                <strong>Data Controller</strong>, for the\n                                purposes of the GDPR (General Data Protection\n                                Regulation), refers to the Company as the legal\n                                person which alone or jointly with others\n                                determines the purposes and means of the\n                                processing of Personal Data.\n                            </li>{' '}\n                            <li>\n                                <strong>Do Not Track</strong> (DNT) is a concept\n                                that has been promoted by US regulatory\n                                authorities, in particular the U.S. Federal\n                                Trade Commission (FTC), for the Internet\n                                industry to develop and implement a mechanism\n                                for allowing internet users to control the\n                                tracking of their online activities across\n                                websites.\n                            </li>{' '}\n                            <li>\n                                <strong>Business</strong>, for the purpose of\n                                the CCPA (California Consumer Privacy Act),\n                                refers to the Company as the legal entity that\n                                collects Consumers' personal information and\n                                determines the purposes and means of the\n                                processing of Consumers' personal information,\n                                or on behalf of which such information is\n                                collected and that alone, or jointly with\n                                others, determines the purposes and means of the\n                                processing of consumers' personal information,\n                                that does business in the State of California.\n                            </li>\n                            <li>\n                                <strong>Consumer</strong>, for the purpose of\n                                the CCPA (California Consumer Privacy Act),\n                                means a natural person who is a California\n                                resident. A resident, as defined in the law,\n                                includes (1) every individual who is in the USA\n                                for other than a temporary or transitory\n                                purpose, and (2) every individual who is\n                                domiciled in the USA who is outside the USA for\n                                a temporary or transitory purpose.\n                            </li>\n                            <li>\n                                <strong>Sale</strong>, for the purpose of the\n                                CCPA (California Consumer Privacy Act), means\n                                selling, renting, releasing, disclosing,\n                                disseminating, making available, transferring,\n                                or otherwise communicating orally, in writing,\n                                or by electronic or other means, a Consumer’s\n                                Personal information to another business or a\n                                third party for monetary or other valuable\n                                consideration.\n                            </li>\n                        </ul>\n\n                        <h1>Collecting and Using Your Personal Data</h1>\n                        <h2>Types of Data Collected</h2>\n\n                        <h3>Personal Data</h3>\n                        <p>\n                            While using Our Service, We may ask You to provide\n                            Us with certain personally identifiable information\n                            that can be used to contact or identify You.\n                            Personally identifiable information may include, but\n                            is not limited to:\n                        </p>\n                        <ul>\n                            <li>Email address</li>{' '}\n                            <li>First name and last name</li>{' '}\n                            <li>Usage Data</li>\n                        </ul>\n\n                        <h3>Usage Data</h3>\n                        <p>\n                            Usage Data is collected automatically when using the\n                            Service.\n                        </p>\n                        <p>\n                            Usage Data may include information such as Your\n                            Device's Internet Protocol address (e.g. IP\n                            address), browser type, browser version, the pages\n                            of our Service that You visit, the time and date of\n                            Your visit, the time spent on those pages, unique\n                            device identifiers and other diagnostic data.\n                        </p>\n                        <p>\n                            When You access the Service by or through a mobile\n                            device, We may collect certain information\n                            automatically, including, but not limited to, the\n                            type of mobile device You use, Your mobile device\n                            unique ID, the IP address of Your mobile device,\n                            Your mobile operating system, the type of mobile\n                            Internet browser You use, unique device identifiers\n                            and other diagnostic data.\n                        </p>\n                        <p>\n                            We may also collect information that Your browser\n                            sends whenever You visit our Service or when You\n                            access the Service by or through a mobile device.\n                        </p>\n\n                        <h3>\n                            Information Collected while Using the Application\n                        </h3>\n                        <p>\n                            While using Our Application, in order to provide\n                            features of Our Application, We may collect, with\n                            your prior permission:\n                        </p>\n                        <ul>\n                            <li>\n                                Pictures and other information from your\n                                Device's camera and photo library\n                            </li>\n                        </ul>\n                        <p>\n                            We use this information to provide features of Our\n                            Service, to improve and customize Our Service. The\n                            information may be uploaded to the Company's servers\n                            and/or a Service Provider's server or it be simply\n                            stored on Your device.\n                        </p>\n                        <p>\n                            You can enable or disable access to this information\n                            at any time, through Your Device settings. You can\n                            also enable or disable location services when You\n                            use Our Service at any time, through Your Device\n                            settings.\n                        </p>\n\n                        <h2>Use of Your Personal Data</h2>\n                        <p>\n                            The Company may use Personal Data for the following\n                            purposes:\n                        </p>\n                        <ul>\n                            <li>\n                                <strong>\n                                    To provide and maintain our Service\n                                </strong>\n                                , including to monitor the usage of our Service.\n                            </li>\n                            <li>\n                                <strong>To manage Your Account:</strong> to\n                                manage Your registration as a user of the\n                                Service. The Personal Data You provide can give\n                                You access to different functionalities of the\n                                Service that are available to You as a\n                                registered user.\n                            </li>\n                            <li>\n                                <strong>\n                                    For the performance of a contract:\n                                </strong>{' '}\n                                the development, compliance and undertaking of\n                                the purchase contract for the products, items or\n                                services You have purchased or of any other\n                                contract with Us through the Service.\n                            </li>\n                            <li>\n                                <strong>To contact You:</strong> To contact You\n                                by email, telephone calls, SMS, or other\n                                equivalent forms of electronic communication,\n                                such as a mobile application's push\n                                notifications regarding updates or informative\n                                communications related to the functionalities,\n                                products or contracted services, including the\n                                security updates, when necessary or reasonable\n                                for their implementation.\n                            </li>\n                            <li>\n                                <strong>To provide You</strong> with news,\n                                special offers and general information about\n                                other goods, services and events which we offer\n                                that are similar to those that you have already\n                                purchased or enquired about unless You have\n                                opted not to receive such information.\n                            </li>\n                            <li>\n                                <strong>To manage Your requests:</strong> To\n                                attend and manage Your requests to Us.\n                            </li>\n                        </ul>\n\n                        <p>\n                            We may share your personal information in the\n                            following situations:\n                        </p>\n\n                        <ul>\n                            <li>\n                                <strong>With Service Providers:</strong> We may\n                                share Your personal information with Service\n                                Providers to monitor and analyze the use of our\n                                Service, to show advertisements to You to help\n                                support and maintain Our Service, to contact\n                                You, to advertise on third party websites to You\n                                after You visited our Service or for payment\n                                processing.\n                            </li>\n                            <li>\n                                <strong>For Business transfers:</strong> We may\n                                share or transfer Your personal information in\n                                connection with, or during negotiations of, any\n                                merger, sale of Company assets, financing, or\n                                acquisition of all or a portion of our business\n                                to another company.\n                            </li>\n                            <li>\n                                <strong>With Affiliates:</strong> We may share\n                                Your information with Our affiliates, in which\n                                case we will require those affiliates to honor\n                                this Privacy Policy. Affiliates include Our\n                                parent company and any other subsidiaries, joint\n                                venture partners or other companies that We\n                                control or that are under common control with\n                                Us.\n                            </li>\n                            <li>\n                                <strong>With Business partners:</strong> We may\n                                share Your information with Our business\n                                partners to offer You certain products, services\n                                or promotions.\n                            </li>\n                            <li>\n                                <strong>With other users:</strong> when You\n                                share personal information or otherwise interact\n                                in the public areas with other users, such\n                                information may be viewed by all users and may\n                                be publicly distributed outside. If You interact\n                                with other users or register through a\n                                Third-Party Social Media Service, Your contacts\n                                on the Third-Party Social Media Service may see\n                                Your name, profile, pictures and description of\n                                Your activity. Similarly, other users will be\n                                able to view descriptions of Your activity,\n                                communicate with You and view Your profile.\n                            </li>\n                        </ul>\n\n                        <h2>Retention of Your Personal Data</h2>\n                        <p>\n                            The Company will retain Your Personal Data only for\n                            as long as is necessary for the purposes set out in\n                            this Privacy Policy. We will retain and use Your\n                            Personal Data to the extent necessary to comply with\n                            our legal obligations (for example, if we are\n                            required to retain your data to comply with\n                            applicable laws), resolve disputes, and enforce our\n                            legal agreements and policies.\n                        </p>\n                        <p>\n                            The Company will also retain Usage Data for internal\n                            analysis purposes. Usage Data is generally retained\n                            for a shorter period of time, except when this data\n                            is used to strengthen the security or to improve the\n                            functionality of Our Service, or We are legally\n                            obligated to retain this data for longer time\n                            periods.\n                        </p>\n\n                        <h2>Transfer of Your Personal Data</h2>\n                        <p>\n                            Your information, including Personal Data, is\n                            processed at the Company's operating offices and in\n                            any other places where the parties involved in the\n                            processing are located. It means that this\n                            information may be transferred to — and maintained\n                            on — computers located outside of Your state,\n                            province, country or other governmental jurisdiction\n                            where the data protection laws may differ than those\n                            from Your jurisdiction.\n                        </p>\n                        <p>\n                            Your consent to this Privacy Policy followed by Your\n                            submission of such information represents Your\n                            agreement to that transfer.\n                        </p>\n                        <p>\n                            The Company will take all steps reasonably necessary\n                            to ensure that Your data is treated securely and in\n                            accordance with this Privacy Policy and no transfer\n                            of Your Personal Data will take place to an\n                            organization or a country unless there are adequate\n                            controls in place including the security of Your\n                            data and other personal information.\n                        </p>\n\n                        <h2>Disclosure of Your Personal Data</h2>\n                        <h3>Business Transactions</h3>\n                        <p>\n                            If the Company is involved in a merger, acquisition\n                            or asset sale, Your Personal Data may be\n                            transferred. We will provide notice before Your\n                            Personal Data is transferred and becomes subject to\n                            a different Privacy Policy.\n                        </p>\n                        <h3>Law enforcement</h3>\n                        <p>\n                            Under certain circumstances, the Company may be\n                            required to disclose Your Personal Data if required\n                            to do so by law or in response to valid requests by\n                            public authorities (e.g. a court or a government\n                            agency).\n                        </p>\n                        <h3>Other legal requirements</h3>\n                        <p>\n                            The Company may disclose Your Personal Data in the\n                            good faith belief that such action is necessary to:\n                        </p>\n                        <ul>\n                            <li>Comply with a legal obligation</li>\n                            <li>\n                                Protect and defend the rights or property of the\n                                Company\n                            </li>\n                            <li>\n                                Prevent or investigate possible wrongdoing in\n                                connection with the Service\n                            </li>\n                            <li>\n                                Protect the personal safety of Users of the\n                                Service or the public\n                            </li>\n                            <li>Protect against legal liability</li>\n                        </ul>\n\n                        <h2>Security of Your Personal Data</h2>\n                        <p>\n                            The security of Your Personal Data is important to\n                            Us, but remember that no method of transmission over\n                            the Internet, or method of electronic storage is\n                            100% secure. While We strive to use commercially\n                            acceptable means to protect Your Personal Data, We\n                            cannot guarantee its absolute security.\n                        </p>\n\n                        <h1>\n                            Detailed Information on the Processing of Your\n                            Personal Data\n                        </h1>\n                        <p>\n                            Service Providers have access to Your Personal Data\n                            only to perform their tasks on Our behalf and are\n                            obligated not to disclose or use it for any other\n                            purpose.\n                        </p>\n\n                        <h2>Analytics</h2>\n                        <p>\n                            We may use third-party Service providers to monitor\n                            and analyze the use of our Service.\n                        </p>\n                        <ul>\n                            <li>\n                                <p>\n                                    <strong>Google Analytics</strong>\n                                </p>\n                                <p>\n                                    Google Analytics is a web analytics service\n                                    offered by Google that tracks and reports\n                                    website traffic. Google uses the data\n                                    collected to track and monitor the use of\n                                    our Service. This data is shared with other\n                                    Google services. Google may use the\n                                    collected data to contextualise and\n                                    personalise the ads of its own advertising\n                                    network.\n                                </p>\n                                <p>\n                                    For more information on the privacy\n                                    practices of Google, please visit the Google\n                                    Privacy &amp; Terms web page:{' '}\n                                    <a href=\"https://policies.google.com/privacy?hl=en\">\n                                        https://policies.google.com/privacy?hl=en\n                                    </a>\n                                </p>\n                            </li>\n                            <li>\n                                <p>\n                                    <strong>Firebase</strong>\n                                </p>\n                                <p>\n                                    Firebase is an analytics service provided by\n                                    Google Inc.\n                                </p>\n                                <p>\n                                    You may opt-out of certain Firebase features\n                                    through your mobile device settings, such as\n                                    your device advertising settings or by\n                                    following the instructions provided by\n                                    Google in their Privacy Policy:{' '}\n                                    <a href=\"https://policies.google.com/privacy?hl=en\">\n                                        https://policies.google.com/privacy?hl=en\n                                    </a>\n                                </p>\n                                <p>\n                                    We also encourage you to review the Google's\n                                    policy for safeguarding your data:{' '}\n                                    <a href=\"https://support.google.com/analytics/answer/6004245\">\n                                        https://support.google.com/analytics/answer/6004245\n                                    </a>\n                                    .\n                                </p>\n                                <p>\n                                    For more information on what type of\n                                    information Firebase collects, please visit\n                                    the Google Privacy &amp; Terms web page:{' '}\n                                    <a href=\"https://policies.google.com/privacy?hl=en\">\n                                        https://policies.google.com/privacy?hl=en\n                                    </a>\n                                </p>\n                            </li>\n                        </ul>\n\n                        <h2>Email Marketing</h2>\n                        <p>\n                            We may use Your Personal Data to contact You with\n                            newsletters, marketing or promotional materials and\n                            other information that may be of interest to You.\n                            You may opt-out of receiving any, or all, of these\n                            communications from Us by following the unsubscribe\n                            link or instructions provided in any email We send\n                            or by contacting Us.\n                        </p>\n                        <p>\n                            We may use Email Marketing Service Providers to\n                            manage and send emails to You.\n                        </p>\n\n                        <h1>GDPR Privacy</h1>\n                        <h2>\n                            Legal Basis for Processing Personal Data under GDPR\n                        </h2>\n                        <p>\n                            We may process Personal Data under the following\n                            conditions:\n                        </p>\n\n                        <ul>\n                            <li>\n                                <strong>Consent:</strong> You have given Your\n                                consent for processing Personal Data for one or\n                                more specific purposes.\n                            </li>\n                            <li>\n                                <strong>Performance of a contract:</strong>{' '}\n                                Provision of Personal Data is necessary for the\n                                performance of an agreement with You and/or for\n                                any pre-contractual obligations thereof.\n                            </li>\n                            <li>\n                                <strong>Legal obligations:</strong> Processing\n                                Personal Data is necessary for compliance with a\n                                legal obligation to which the Company is\n                                subject.\n                            </li>\n                            <li>\n                                <strong>Vital interests:</strong> Processing\n                                Personal Data is necessary in order to protect\n                                Your vital interests or of another natural\n                                person.\n                            </li>\n                            <li>\n                                <strong>Public interests:</strong> Processing\n                                Personal Data is related to a task that is\n                                carried out in the public interest or in the\n                                exercise of official authority vested in the\n                                Company.\n                            </li>\n                            <li>\n                                <strong>Legitimate interests:</strong>{' '}\n                                Processing Personal Data is necessary for the\n                                purposes of the legitimate interests pursued by\n                                the Company.\n                            </li>\n                        </ul>\n                        <p>\n                            In any case, the Company will gladly help to clarify\n                            the specific legal basis that applies to the\n                            processing, and in particular whether the provision\n                            of Personal Data is a statutory or contractual\n                            requirement, or a requirement necessary to enter\n                            into a contract.\n                        </p>\n\n                        <h2>Your Rights under the GDPR</h2>\n                        <p>\n                            The Company undertakes to respect the\n                            confidentiality of Your Personal Data and to\n                            guarantee You can exercise Your rights.\n                        </p>\n                        <p>\n                            You have the right under this Privacy Policy, and by\n                            law if You are within the EU, to:\n                        </p>\n\n                        <ul>\n                            <li>\n                                <strong>\n                                    Request access to Your Personal Data.\n                                </strong>{' '}\n                                The right to access, update or delete the\n                                information We have on You. Whenever made\n                                possible, you can access, update or request\n                                deletion of Your Personal Data directly within\n                                Your account settings section. If you are unable\n                                to perform these actions yourself, please\n                                contact Us to assist You. This also enables You\n                                to receive a copy of the Personal Data We hold\n                                about You.\n                            </li>\n                            <li>\n                                <strong>\n                                    Request correction of the Personal Data that\n                                    We hold about You.\n                                </strong>{' '}\n                                You have the right to to have any incomplete or\n                                inaccurate information We hold about You\n                                corrected.\n                            </li>\n                            <li>\n                                <strong>\n                                    Object to processing of Your Personal Data.\n                                </strong>{' '}\n                                This right exists where We are relying on a\n                                legitimate interest as the legal basis for Our\n                                processing and there is something about Your\n                                particular situation, which makes You want to\n                                object to our processing of Your Personal Data\n                                on this ground. You also have the right to\n                                object where We are processing Your Personal\n                                Data for direct marketing purposes.\n                            </li>\n                            <li>\n                                <strong>\n                                    Request erasure of Your Personal Data.\n                                </strong>{' '}\n                                You have the right to ask Us to delete or remove\n                                Personal Data when there is no good reason for\n                                Us to continue processing it.\n                            </li>\n                            <li>\n                                <strong>\n                                    Request the transfer of Your Personal Data.\n                                </strong>{' '}\n                                We will provide to You, or to a third-party You\n                                have chosen, Your Personal Data in a structured,\n                                commonly used, machine-readable format. Please\n                                note that this right only applies to automated\n                                information which You initially provided consent\n                                for Us to use or where We used the information\n                                to perform a contract with You.\n                            </li>\n                            <li>\n                                <strong>Withdraw Your consent.</strong> You have\n                                the right to withdraw Your consent on using your\n                                Personal Data. If You withdraw Your consent, We\n                                may not be able to provide You with access to\n                                certain specific functionalities of the Service.\n                            </li>\n                        </ul>\n\n                        <h2>Exercising of Your GDPR Data Protection Rights</h2>\n                        <p>\n                            You may exercise Your rights of access,\n                            rectification, cancellation and opposition by\n                            contacting Us. Please note that we may ask You to\n                            verify Your identity before responding to such\n                            requests. If You make a request, We will try our\n                            best to respond to You as soon as possible.\n                        </p>\n                        <p>\n                            You have the right to complain to a Data Protection\n                            Authority about Our collection and use of Your\n                            Personal Data. For more information, if You are in\n                            the European Economic Area (EEA), please contact\n                            Your local data protection authority in the EEA.\n                        </p>\n\n                        <h1>CCPA Privacy</h1>\n                        <h2>Your Rights under the CCPA</h2>\n                        <p>\n                            Under this Privacy Policy, and by law if You are a\n                            resident of California, You have the following\n                            rights:\n                        </p>\n                        <ul>\n                            <li>\n                                <strong>The right to notice.</strong> You must\n                                be properly notified which categories of\n                                Personal Data are being collected and the\n                                purposes for which the Personal Data is being\n                                used.\n                            </li>\n                            <li>\n                                <strong>\n                                    The right to access / the right to request.\n                                </strong>{' '}\n                                The CCPA permits You to request and obtain from\n                                the Company information regarding the disclosure\n                                of Your Personal Data that has been collected in\n                                the past 12 months by the Company or its\n                                subsidiaries to a third-party for the third\n                                party’s direct marketing purposes.\n                            </li>\n                            <li>\n                                <strong>\n                                    The right to say no to the sale of Personal\n                                    Data.\n                                </strong>{' '}\n                                You also have the right to ask the Company not\n                                to sell Your Personal Data to third parties. You\n                                can submit such a request by visiting our \"Do\n                                Not Sell My Personal Information\" section or web\n                                page.\n                            </li>\n                            <li>\n                                <p>\n                                    <strong>\n                                        The right to know about Your Personal\n                                        Data.\n                                    </strong>{' '}\n                                    You have the right to request and obtain\n                                    from the Company information regarding the\n                                    disclosure of the following:\n                                </p>\n                                <ul>\n                                    <li>\n                                        The categories of Personal Data\n                                        collected\n                                    </li>\n                                    <li>\n                                        The sources from which the Personal Data\n                                        was collected\n                                    </li>\n                                    <li>\n                                        The business or commercial purpose for\n                                        collecting or selling the Personal Data\n                                    </li>\n                                    <li>\n                                        Categories of third parties with whom We\n                                        share Personal Data\n                                    </li>\n                                    <li>\n                                        The specific pieces of Personal Data we\n                                        collected about You\n                                    </li>\n                                </ul>\n                            </li>\n                            <li>\n                                <strong>\n                                    The right to delete Personal Data.\n                                </strong>{' '}\n                                You also have the right to request the deletion\n                                of Your Personal Data that have been collected\n                                in the past 12 months.\n                            </li>\n                            <li>\n                                <p>\n                                    <strong>\n                                        The right not to be discriminated\n                                        against.\n                                    </strong>{' '}\n                                    You have the right not to be discriminated\n                                    against for exercising any of Your\n                                    Consumer's rights, including by:\n                                </p>\n                                <ul>\n                                    <li>Denying goods or services to You</li>\n                                    <li>\n                                        Charging different prices or rates for\n                                        goods or services, including the use of\n                                        discounts or other benefits or imposing\n                                        penalties\n                                    </li>\n                                    <li>\n                                        Providing a different level or quality\n                                        of goods or services to You\n                                    </li>\n                                    <li>\n                                        Suggesting that You will receive a\n                                        different price or rate for goods or\n                                        services or a different level or quality\n                                        of goods or services.\n                                    </li>\n                                </ul>\n                            </li>\n                        </ul>\n\n                        <h2>Exercising Your CCPA Data Protection Rights</h2>\n                        <p>\n                            In order to exercise any of Your rights under the\n                            CCPA, and if you are a California resident, You can\n                            email or call us or visit our \"Do Not Sell My\n                            Personal Information\" section or web page.\n                        </p>\n                        <p>\n                            The Company will disclose and deliver the required\n                            information free of charge within 45 days of\n                            receiving Your verifiable request. The time period\n                            to provide the required information may be extended\n                            once by an additional 45 days when reasonable\n                            necessary and with prior notice.\n                        </p>\n\n                        <h2>Do Not Sell My Personal Information</h2>\n                        <p>\n                            We do not sell personal information. However, the\n                            Service Providers we partner with (for example, our\n                            advertising partners) may use technology on the\n                            Service that \"sells\" personal information as defined\n                            by the CCPA law.\n                        </p>\n                        <p>\n                            If you wish to opt out of the use of your personal\n                            information for interest-based advertising purposes\n                            and these potential sales as defined under CCPA law,\n                            you may do so by following the instructions below.\n                        </p>\n                        <p>\n                            Please note that any opt out is specific to the\n                            browser You use. You may need to opt out on every\n                            browser that you use.\n                        </p>\n\n                        <h3>Website</h3>\n                        <p>\n                            You can opt out of receiving ads that are\n                            personalized as served by our Service Providers by\n                            following our instructions presented on the Service:\n                        </p>\n                        <ul>\n                            <li>From Our \"Cookie Consent\" notice banner</li>\n                            <li>Or from Our \"CCPA Opt-out\" notice banner</li>\n                            <li>\n                                Or from Our \"Do Not Sell My Personal\n                                Information\" notice banner\n                            </li>\n                            <li>\n                                Or from Our \"Do Not Sell My Personal\n                                Information\" link\n                            </li>\n                        </ul>\n                        <p>\n                            The opt out will place a cookie on Your computer\n                            that is unique to the browser You use to opt out. If\n                            you change browsers or delete the cookies saved by\n                            your browser, you will need to opt out again.\n                        </p>\n\n                        <h3>Mobile Devices</h3>\n                        <p>\n                            Your mobile device may give you the ability to opt\n                            out of the use of information about the apps you use\n                            in order to serve you ads that are targeted to your\n                            interests:\n                        </p>\n                        <ul>\n                            <li>\n                                \"Opt out of Interest-Based Ads\" or \"Opt out of\n                                Ads Personalization\" on Android devices\n                            </li>\n                            <li>\"Limit Ad Tracking\" on iOS devices</li>\n                        </ul>\n                        <p>\n                            You can also stop the collection of location\n                            information from Your mobile device by changing the\n                            preferences on your mobile device.\n                        </p>\n\n                        <h1>\n                            \"Do Not Track\" Policy as Required by California\n                            Online Privacy Protection Act (CalOPPA)\n                        </h1>\n                        <p>\n                            Our Service does not respond to Do Not Track\n                            signals.\n                        </p>\n                        <p>\n                            However, some third party websites do keep track of\n                            Your browsing activities. If You are visiting such\n                            websites, You can set Your preferences in Your web\n                            browser to inform websites that You do not want to\n                            be tracked. You can enable or disable DNT by\n                            visiting the preferences or settings page of Your\n                            web browser.\n                        </p>\n\n                        <h1>Children's Privacy</h1>\n                        <p>\n                            Our Service does not address anyone under the age of\n                            13. We do not knowingly collect personally\n                            identifiable information from anyone under the age\n                            of 13. If You are a parent or guardian and You are\n                            aware that Your child has provided Us with Personal\n                            Data, please contact Us. If We become aware that We\n                            have collected Personal Data from anyone under the\n                            age of 13 without verification of parental consent,\n                            We take steps to remove that information from Our\n                            servers.\n                        </p>\n                        <p>\n                            We also may limit how We collect, use, and store\n                            some of the information of Users between 13 and 18\n                            years old. In some cases, this means We will be\n                            unable to provide certain functionality of the\n                            Service to these users.\n                        </p>\n                        <p>\n                            If We need to rely on consent as a legal basis for\n                            processing Your information and Your country\n                            requires consent from a parent, We may require Your\n                            parent's consent before We collect and use that\n                            information.\n                        </p>\n\n                        <h1>Links to Other Websites</h1>\n                        <p>\n                            Our Service may contain links to other websites that\n                            are not operated by Us. If You click on a third\n                            party link, You will be directed to that third\n                            party's site. We strongly advise You to review the\n                            Privacy Policy of every site You visit.\n                        </p>\n                        <p>\n                            We have no control over and assume no responsibility\n                            for the content, privacy policies or practices of\n                            any third party sites or services.\n                        </p>\n\n                        <h1>Changes to this Privacy Policy</h1>\n                        <p>\n                            We may update our Privacy Policy from time to time.\n                            We will notify You of any changes by posting the new\n                            Privacy Policy on this page.\n                        </p>\n                        <p>\n                            We will let You know via email and/or a prominent\n                            notice on Our Service, prior to the change becoming\n                            effective and update the \"Last updated\" date at the\n                            top of this Privacy Policy.\n                        </p>\n                        <p>\n                            You are advised to review this Privacy Policy\n                            periodically for any changes. Changes to this\n                            Privacy Policy are effective when they are posted on\n                            this page.\n                        </p>\n\n                        <h1>Contact Us</h1>\n                        <p>\n                            If you have any questions about this Privacy Policy,\n                            You can contact us:\n                        </p>\n                        <ul>\n                            <li>By email: privacy@gopractis.com</li>\n                        </ul>\n                    </ContentArea>\n                </PrivacyContainer>\n            </LandingWrapper>\n        );\n    }\n}\n\nexport default PrivacyPage;\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\n\nimport { Variables } from '../../theme/variables';\nimport LandingWrapper from '../../ui/wrapper/LandingWrapper/LandingWrapper';\n\nconst SupportContainer = styled.div`\n    margin: 50px 10%;\n    width: 100%;\n`;\n\nconst ContentArea = styled.div`\n    text-align: center;\n    width: 100%;\n    font-size: 22px;\n    padding: 100px 0;\n`;\n\nconst SupportMail = styled.a`\n    display: block;\n    text-decoration: none;\n    color: ${Variables.Colors.dodgerBlue};\n    font-weight: bold;\n    padding: 25px 0;\n`;\n\nclass SupportPage extends Component {\n    render() {\n        return (\n            <LandingWrapper>\n                <SupportContainer>\n                    <ContentArea>\n                        To get support, please, send us an email to\n                        <SupportMail href=\"mailto:support@gopractis.com\">\n                            support@gopractis.com\n                        </SupportMail>\n                    </ContentArea>\n                </SupportContainer>\n            </LandingWrapper>\n        );\n    }\n}\n\nexport default SupportPage;\n","import React, { FC } from 'react';\nimport ROUTES from '../../../routes/routes';\nimport Navigation from '../../../ui/components/Navigation/Navigation';\nimport styled from 'styled-components';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\n\nconst StyledUsersPageNavigationContainer = styled.div`\n    max-width: 400px;\n\n    a.is-active:before{\n        max-width: 148px;\n    }\n`;\n\nconst UsersPageNavigation: React.FC<{}> = () => {\n    return (\n        <StyledUsersPageNavigationContainer>\n            <Navigation\n                fontSize=\"13px\"\n                menu={[\n                    {\n                        key: 'users',\n                        title: 'Registered',\n                        url: ROUTES.USERS,\n                        permissions: [NEW_PERMISSIONS.LIST_USER],\n                    },\n                    {\n                        key: 'invitations',\n                        title: 'Pending',\n                        url: ROUTES.INVITATIONS,\n                        permissions: [NEW_PERMISSIONS.LIST_INVITATION],\n                    },\n                    {\n                        key: 'drafts',\n                        title: 'Drafts',\n                        url: ROUTES.DRAFTS,\n                        permissions: [NEW_PERMISSIONS.LIST_STAGING],\n                    },\n                ]}\n                dataTest=\"users-tab\"\n            />\n        </StyledUsersPageNavigationContainer>\n    );\n};\n\nexport const UsersPageNavigationContainer: FC = () => {\n    return <UsersPageNavigation />;\n};\n\nexport default UsersPageNavigationContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport EmptyBox from '../../../ui/icons/EmptyBox';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\nimport NoSearchResult from '../../../ui/icons/NoSearchResult';\n\nconst StyledEmptyInviters = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst StyledEmptyInvitersContent = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst NoLabelsIcon = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoInvitersTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst EmptyInviters: FC<{ loading?: boolean; isEmpty?: boolean }> = ({\n    loading,\n    isEmpty,\n}) => {\n    if (loading) {\n        return (\n            <StyledEmptyInviters>\n                <Loading />\n            </StyledEmptyInviters>\n        );\n    }\n\n    return (\n        <StyledEmptyInviters>\n            <StyledEmptyInvitersContent>\n                <NoLabelsIcon data-test={isEmpty ? 'no-inviters-icon' : 'no-inviters-found-icon'}>\n                    {isEmpty ? <EmptyBox /> : <NoSearchResult />}\n                </NoLabelsIcon>\n                <NoInvitersTitle data-test={isEmpty ? 'no-inviters-text' : 'no-inviters-found-text'}>\n                    {isEmpty ? 'No Inviters yet' : 'No Inviters found'}\n                </NoInvitersTitle>\n            </StyledEmptyInvitersContent>\n        </StyledEmptyInviters>\n    );\n};\n\nexport default EmptyInviters;\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport Checkbox from '../../../ui/components/Checkbox';\nimport { handleToggleSelectedItems } from '../../../pages/ActionPages/NewUser/tools';\nimport { Inviter } from '../../../constants/interfaces/Inviter';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\n\nconst StyledInvitersList = styled.div`\n    overflow: auto;\n    height: 100%;\n`;\n\nconst TopSideList = styled.span``;\n\nconst GeneralList = styled.span``;\n\nconst InviterItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 10px 0;\n`;\nconst YouWrapper = styled.span`\n    font-size: 13px;\n    color: ${({ theme }) => theme.Colors.steelGrey};\n`;\nconst InviterItem = styled.div<{ disabled?: boolean }>`\n    color: ${props => props.theme.Colors.black};\n    cursor: pointer;\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 12px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n`;\nexport const PortableInvitersList: FC<{\n    inviters?: Inviter[];\n    selectedInviters: number[];\n    disabled?: boolean;\n    setInvitersFilters?: (inviterId: any[]) => void;\n}> = ({ inviters, selectedInviters, setInvitersFilters }) => {\n    const isChecked = useCallback(\n        (setId?: number) => {\n            return (\n                !!selectedInviters &&\n                !!setId &&\n                selectedInviters.includes(setId)\n            );\n        },\n        [selectedInviters]\n    );\n\n    const isPartiallyChecked = useCallback(\n        (invitersId?: number) => {\n            return (\n                !!selectedInviters &&\n                !!invitersId &&\n                selectedInviters.includes(-Number(invitersId))\n            );\n        },\n        [selectedInviters]\n    );\n\n    const profile = useSelector(getProfileState);\n\n    const changeHandler = (inviterId: number) => {\n        if (inviterId && setInvitersFilters) {\n            setInvitersFilters(\n                handleToggleSelectedItems(selectedInviters, inviterId)\n            );\n        }\n    };\n\n    if (!inviters || (inviters && inviters.length === 0)) return null;\n\n    const topListInviters = inviters.filter(\n        inviter => inviter.id && selectedInviters.includes(inviter.id)\n    );\n\n    const bottomListInviters = inviters.filter(\n        inviter => inviter.id && !selectedInviters.includes(inviter.id)\n    );\n\n    return (\n        <StyledInvitersList>\n            {topListInviters.length > 0 && (\n                <TopSideList>\n                    {topListInviters.map(inviter => {\n                        return (\n                            <InviterItemWrapper key={inviter.id}>\n                                <Checkbox\n                                    size={12}\n                                    checked={\n                                        isChecked(inviter.id) ||\n                                        isPartiallyChecked(inviter.id)\n                                    }\n                                    partial={isPartiallyChecked(inviter.id)}\n                                    handleChange={() =>\n                                        changeHandler(inviter.id)\n                                    }\n                                    dataTest=\"selected-inviters-item-checkbox\"\n                                />\n                                <InviterItem\n                                    onClick={() => changeHandler(inviter.id)}\n                                    data-test=\"selected-inviters-item-text\"\n                                >\n                                    {inviter.firstName} {inviter.lastName}\n                                </InviterItem>\n                            </InviterItemWrapper>\n                        );\n                    })}\n                    {topListInviters.length < inviters.length && (\n                        <TableDivider width=\"98%\" />\n                    )}\n                </TopSideList>\n            )}\n            <GeneralList>\n                {bottomListInviters.map(inviter => {\n                    return (\n                        <InviterItemWrapper key={inviter.id}>\n                            <Checkbox\n                                size={12}\n                                checked={\n                                    isChecked(inviter.id) ||\n                                    isPartiallyChecked(inviter.id)\n                                }\n                                partial={isPartiallyChecked(inviter.id)}\n                                handleChange={() => changeHandler(inviter.id)}\n                                dataTest=\"inviters-item-checkbox\"\n                            />\n                            <InviterItem\n                                onClick={() => changeHandler(inviter.id)}\n                                data-test=\"inviters-item-text\"\n                            >\n                                {inviter.firstName} {inviter.lastName}\n                                {profile && profile.id === inviter.id && (\n                                    <YouWrapper>(You)</YouWrapper>\n                                )}\n                            </InviterItem>\n                        </InviterItemWrapper>\n                    );\n                })}\n            </GeneralList>\n        </StyledInvitersList>\n    );\n};\n","import React, { FC, useCallback, useMemo, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Variables } from '../../../theme/variables';\r\nimport { compose } from 'redux';\r\nimport { Inviter } from '../../../constants/interfaces/Inviter';\r\nimport EmptyInviters from './EmptyInviters';\r\nimport { PortableInvitersList } from './PortableInvitersList';\r\nimport { InvitersResult } from '../../inviters/interfaces';\r\nimport { filterInviters } from '../tools';\r\nimport { TableSearchInput } from '../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\n//region Types\r\ntype Action = 'clear' | 'select';\r\n\r\nexport type PortableInvitersProps = {\r\n    inviters?: InvitersResult<Inviter>;\r\n    selectedList: number[];\r\n    loading?: boolean;\r\n    onSelectMultiply?: (ids: number[]) => void;\r\n    onSelectAll?: () => void;\r\n    onDeselectAll?: () => void;\r\n    filtersTitle?: string;\r\n    disabled?: boolean;\r\n    showSelectActions?: boolean;\r\n    showSearch?: boolean;\r\n};\r\n//endregion\r\n\r\n//region Styles\r\nconst StyledCreateInviters = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    max-width: 300px;\r\n`;\r\n\r\nconst CreateInvitersBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst FiltersHeader = styled.div`\r\n    padding: 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    height: 24px;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst FilterTitle = styled.p`\r\n    margin: 0;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.black};\r\n    font-weight: 600;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n//endregion\r\n\r\nconst PortableInviters: FC<PortableInvitersProps> = ({\r\n    inviters,\r\n    selectedList,\r\n    loading,\r\n    onSelectMultiply,\r\n    onSelectAll,\r\n    onDeselectAll,\r\n    filtersTitle,\r\n    showSelectActions,\r\n    showSearch,\r\n    disabled,\r\n}) => {\r\n    const actionConfig: Record<\r\n        Action,\r\n        {\r\n            color: string;\r\n            colorHover: string;\r\n            colorActive: string;\r\n        }\r\n    > = {\r\n        clear: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n        select: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n    };\r\n\r\n    const isAllSelected = useMemo(\r\n        () => selectedList.length === inviters?.items.length,\r\n        [selectedList, inviters]\r\n    );\r\n\r\n    const clearHandler = useCallback(() => {\r\n        onDeselectAll?.();\r\n    }, [onDeselectAll]);\r\n\r\n    const deSelectAllHandler = useCallback(() => {\r\n        if (isAllSelected && onDeselectAll) {\r\n            onDeselectAll();\r\n        } else if (onSelectAll) {\r\n            onSelectAll();\r\n        }\r\n    }, [onDeselectAll, onSelectAll, isAllSelected]);\r\n\r\n    const [searchTerm, setSearchTerm] = useState('');\r\n    const searchHandler = (value: string) => setSearchTerm(value);\r\n    const [processedSelectedList, setProcessedSelectedList] = useState<\r\n        number[]\r\n    >([]);\r\n\r\n    const getPrecessedInviters = useMemo(() => {\r\n        if (inviters) {\r\n            const result = compose<Inviter[]>(filterInviters(searchTerm))(\r\n                inviters.items\r\n            );\r\n\r\n            if (result.length > 0) {\r\n                const processedDataIds = result.map(item => item.id!);\r\n                setProcessedSelectedList(\r\n                    selectedList.filter(item => processedDataIds.includes(item))\r\n                );\r\n            }\r\n\r\n            return result;\r\n        } else {\r\n            return [];\r\n        }\r\n    }, [searchTerm, inviters, selectedList]);\r\n\r\n    const showNoItems = !inviters?.items.length;\r\n    const showEmptyState = !getPrecessedInviters.length || loading;\r\n    const selectedInvitersLength = processedSelectedList.filter(id => id > 0)\r\n        .length;\r\n\r\n    return (\r\n        <StyledCreateInviters>\r\n            <CreateInvitersBody>\r\n                {filtersTitle && (\r\n                    <FiltersHeader>\r\n                        <FilterTitle>{filtersTitle}</FilterTitle>\r\n                    </FiltersHeader>\r\n                )}\r\n                {showSearch && (\r\n                    <SearchWrapper>\r\n                        <TableSearchInput\r\n                            onChange={searchHandler}\r\n                            disabled={showNoItems}\r\n                            dataTest=\"inviters-search\"\r\n                        />\r\n                    </SearchWrapper>\r\n                )}\r\n                {showSelectActions && !showNoItems && (\r\n                    <SelectActions>\r\n                        <div>\r\n                            <SelectedCaption data-test=\"inviters-selected-text\">\r\n                                {selectedInvitersLength > 0\r\n                                    ? `${selectedInvitersLength} ${\r\n                                          selectedInvitersLength > 1\r\n                                              ? ' Inviters selected'\r\n                                              : ' Inviter selected'\r\n                                      }`\r\n                                    : 'No Inviters selected'}\r\n                            </SelectedCaption>\r\n                        </div>\r\n                        <div>\r\n                            {isAllSelected ? (\r\n                                <PlainAction\r\n                                    disabled={\r\n                                        processedSelectedList.length === 0 ||\r\n                                        showEmptyState\r\n                                    }\r\n                                    color={actionConfig.clear.color}\r\n                                    colorActive={actionConfig.clear.colorActive}\r\n                                    colorHover={actionConfig.clear.colorHover}\r\n                                    onClick={clearHandler}\r\n                                    data-test=\"inviters-unselect-all\"\r\n                                >\r\n                                    Unselect All\r\n                                </PlainAction>\r\n                            ) : (\r\n                                <PlainAction\r\n                                    disabled={showEmptyState}\r\n                                    color={actionConfig.select.color}\r\n                                    colorActive={\r\n                                        actionConfig.select.colorActive\r\n                                    }\r\n                                    colorHover={actionConfig.select.colorHover}\r\n                                    onClick={deSelectAllHandler}\r\n                                    data-test=\"inviters-select-all\"\r\n                                >\r\n                                    Select All\r\n                                </PlainAction>\r\n                            )}\r\n                        </div>\r\n                    </SelectActions>\r\n                )}\r\n                {showEmptyState ? (\r\n                    <EmptyInviters\r\n                        loading={loading}\r\n                        isEmpty={!inviters?.items.length}\r\n                    />\r\n                ) : (\r\n                    <>\r\n                        <PortableInvitersList\r\n                            inviters={getPrecessedInviters}\r\n                            selectedInviters={selectedList}\r\n                            disabled={disabled}\r\n                            setInvitersFilters={onSelectMultiply}\r\n                        />\r\n                    </>\r\n                )}\r\n            </CreateInvitersBody>\r\n        </StyledCreateInviters>\r\n    );\r\n};\r\n\r\nexport { PortableInviters };\r\n","import { useCallback } from 'react';\nimport {Inviter} from \"../../constants/interfaces/Inviter\";\n\nexport const filterInviters = (term: string) => (\n    inviters: Inviter[]\n): Inviter[] => {\n    if (!term) {\n        return inviters;\n    }\n\n    return inviters.filter(\n        item => item.firstName.toLowerCase().indexOf(term.toLowerCase()) !== -1 ||\n        item.lastName.toLowerCase().indexOf(term.toLowerCase()) !== -1 ||\n        `${item.firstName} ${item.lastName}`.trim().toLowerCase().indexOf(term.trim().toLowerCase()) !== -1\n    );\n};\n\ntype Entity = {\n    id: number;\n    invitersIDs: number[];\n};\n\nexport const useCalculatePreSelectedInviters = <T extends Entity>() => {\n    return useCallback((selectedItems: number[], entity: T[]) => {\n        let countSelectedItems: Record<number, number> = {};\n        let outputArray: number[] = [];\n\n        const filteredEntities = entity.filter(entityItem => {\n            return selectedItems.includes(entityItem.id);\n        });\n        for (let entity of filteredEntities) {\n            for (let practisSetId of entity.invitersIDs) {\n                countSelectedItems[practisSetId] =\n                    countSelectedItems[practisSetId] + 1 || 1;\n            }\n        }\n\n        for (const key in countSelectedItems) {\n            if (countSelectedItems[key] === selectedItems.length) {\n                outputArray.push(Number(key));\n            } else {\n                outputArray.push(-Number(key));\n            }\n        }\n\n        return outputArray;\n    }, []);\n};\n\nexport const useCalculateDeletedPractisSets = () => {\n    return useCallback((assignedPractisSets: number[], initialPractisSets: number[]) => {\n        const deletedPractisSets: number[] = [];\n\n        for (let practisSet of initialPractisSets) {\n            if (\n                !assignedPractisSets.includes(practisSet) &&\n                !assignedPractisSets.includes(-practisSet)\n            ) {\n                deletedPractisSets.push(\n                    practisSet < 0 ? -practisSet : practisSet\n                );\n            }\n        }\n\n        return deletedPractisSets;\n    }, []);\n};\n","import { Action } from 'redux';\nimport {Inviter} from \"../../../constants/interfaces/Inviter\";\nimport {InvitersResponse} from \"../interfaces\";\n\ntype ReturnTypeInvitersAction<\n    T extends (...args: any) => any\n    > = ReturnType<T> & ActionPayload;\n\ntype ActionPayload = any;\n\nexport type ActionInviter<T = any> = Action<T> & ActionPayload;\n\nexport type InvitersAction =\n    | ReturnTypeInvitersAction<typeof searchInvitersStartAction>\n    | ReturnTypeInvitersAction<typeof searchInvitersSuccessAction>\n    | ReturnTypeInvitersAction<typeof searchInvitersFailureAction>\n    | ReturnTypeInvitersAction<typeof selectInviterAction>\n    | ReturnTypeInvitersAction<typeof deSelectInviterAction>\n    | ReturnTypeInvitersAction<typeof selectMultipleInvitersAction>\n    | ReturnTypeInvitersAction<typeof selectAllInvitersAction>\n    | ReturnTypeInvitersAction<typeof deSelectAllInvitersAction>\n    | ReturnTypeInvitersAction<typeof refreshInvitersAction>\n\nexport const searchInvitersStartAction = (): ActionInviter<'searchInvitersStartAction'> => ({\n    type: 'searchInvitersStartAction',\n});\n\nexport const searchInvitersSuccessAction = (\n    responseData: InvitersResponse<Inviter>\n): ActionInviter<'searchInvitersSuccessAction'> & {\n    responseData: InvitersResponse<Inviter>;\n} => ({\n    type: 'searchInvitersSuccessAction',\n    responseData,\n});\n\nexport const searchInvitersFailureAction = (\n    message: string\n): ActionInviter<'searchInvitersFailureAction'> & {\n    message: string;\n} => ({\n    type: 'searchInvitersFailureAction',\n    message,\n});\n\nexport const selectInviterAction = (\n    id: number\n): ActionInviter<'selectInviterAction'> & {\n    id: number;\n} => ({\n    type: 'selectInviterAction',\n    id,\n});\n\nexport const deSelectInviterAction = (\n    id: number\n): ActionInviter<'deSelectInviterAction'> & {\n    id: number;\n} => ({\n    type: 'deSelectInviterAction',\n    id,\n});\n\nexport const selectMultipleInvitersAction = (\n    ids: number[]\n): ActionInviter<'selectMultipleInvitersAction'> & { ids: number[] } => ({\n    type: 'selectMultipleInvitersAction',\n    ids,\n});\n\nexport const selectAllInvitersAction = (): ActionInviter<'selectAllInvitersAction'> => ({\n    type: 'selectAllInvitersAction',\n});\n\nexport const deSelectAllInvitersAction = (): ActionInviter<'deSelectAllInvitersAction'> => ({\n    type: 'deSelectAllInvitersAction',\n});\n\nexport const saveInvitersAction = (): ActionInviter<'saveInvitersAction'> => ({\n    type: 'saveInvitersAction',\n});\n\nexport const refreshInvitersAction = (): ActionInviter<'refreshInvitersAction'> => ({\n    type: 'refreshInvitersAction',\n});\n","import { SearchParams } from '../../../constants/interfaces/filters';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    deSelectAllInvitersAction, refreshInvitersAction, saveInvitersAction,\n    searchInvitersFailureAction,\n    searchInvitersStartAction, searchInvitersSuccessAction, selectAllInvitersAction, selectMultipleInvitersAction,\n} from './actions';\nimport { useDispatch } from 'react-redux';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport {useSearchInvitersApi} from '../../../api';\n\nexport const useSearchInvitersService = () => {\n    const dispatch = useDispatch();\n    const searchInvitersApi = useSearchInvitersApi();\n    const showMessage = useShowMessage();\n    \n    return useCallback(\n        (sp?: SearchParams) => {\n            dispatch(searchInvitersStartAction());\n            searchInvitersApi(sp)\n                .then(data => {\n                    dispatch(searchInvitersSuccessAction(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchInvitersFailureAction(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchInvitersApi, showMessage]\n    );\n};\n\n\nexport const useSelectMultipleInvitersAction = () => {\n    const dispatch = useDispatch();\n    return useCallback((ids: number[]) => {\n        dispatch(selectMultipleInvitersAction(ids));\n    }, [dispatch]);\n};\n\nexport const useSelectAllInvitersAction = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(selectAllInvitersAction());\n    }, [dispatch]);\n};\n\nexport const useDeSelectAllInvitersAction = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(deSelectAllInvitersAction());\n    }, [dispatch]);\n};\n\nexport const useSaveInvitersAction = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(saveInvitersAction());\n    }, [dispatch]);\n};\n\n\nexport const useRefreshInviters = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(refreshInvitersAction());\n    }, [dispatch]);\n};","export const filterUnique = (items: any[]):any[] => {\n    return items.filter((item, index, self) => item && self.indexOf(item) === index);\n};\n","import { Reducer } from 'redux';\nimport {InvitersState} from './states';\nimport { AppState } from '../../../store/reducers';\nimport {InvitersAction} from \"./actions\";\nimport {InvitersResult} from \"../interfaces\";\nimport {Inviter} from \"../../../constants/interfaces/Inviter\";\nimport {filterUnique} from \"../tools\";\n\nconst initialInvitersState: InvitersState = {\n    data: {\n        items: [],\n    },\n    ready: false,\n    loading: false,\n    error: '',\n    selected: [],\n    saved: [],\n};\n\nexport const invitersReducer: Reducer<InvitersState, InvitersAction> = (\n    state = initialInvitersState,\n    action: InvitersAction\n): InvitersState => {\n    switch (action.type) {\n        case 'searchInvitersStartAction':\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case 'searchInvitersSuccessAction':\n            const data: InvitersResult<Inviter> = {\n                items: action.responseData.createdByUsers,\n            };\n            return {\n                ...state,\n                data,\n                ready: true,\n                loading: false,\n                error: '',\n            };\n        case 'searchInvitersFailureAction':\n            return {\n                ...state,\n                loading: false,\n                error: action.message,\n            };\n        case 'selectInviterAction':\n            return {\n                ...state,\n                selected: filterUnique([...state.selected, action.id]),\n            };\n        case 'deSelectInviterAction':\n            const selectedIds = [...state.selected];\n            const foundIdx = selectedIds.findIndex(x => x === action.id);\n            if (foundIdx !== -1) {\n                selectedIds.splice(foundIdx, 1);\n            }\n            return {\n                ...state,\n                selected: selectedIds,\n            };\n        case 'selectMultipleInvitersAction':\n            return {\n                ...state,\n                selected: action.ids,\n            };\n        case 'selectAllInvitersAction':\n            return {\n                ...state,\n                selected: state.data.items.map(x => x.id),\n            };\n        case 'deSelectAllInvitersAction':\n            return {\n                ...state,\n                selected: [],\n            };\n        case 'saveInvitersAction':\n            return {\n                ...state,\n                saved: state.selected,\n            };\n        case 'refreshInvitersAction':\n            return {\n                ...state,\n                ready: false,\n            };\n        default:\n            return state;\n    }\n};\nexport const getInvitersState = (state: AppState) => state.inviters;\n","import { FC, useEffect } from 'react';\r\nimport { PortableInviters } from './PortableInviters';\r\nimport {\r\n    useDeSelectAllInvitersAction,\r\n    useSearchInvitersService,\r\n    useSelectAllInvitersAction,\r\n    useSelectMultipleInvitersAction,\r\n} from '../../inviters/store/services';\r\nimport { useSelector } from 'react-redux';\r\nimport { getInvitersState } from '../../inviters/store/reducers';\r\n\r\ntype Props = {\r\n    fetchOnMount?: boolean;\r\n    resetSelectedOnUnmount?: boolean;\r\n\r\n    onSetSelected?: (ids: number[]) => void;\r\n    filtersTitle?: string;\r\n    showSelectActions?: boolean;\r\n    showSearch?: boolean;\r\n    showSave?: boolean;\r\n};\r\n\r\nexport const PortableInvitersWithStore: FC<Props> = ({\r\n    fetchOnMount = true,\r\n    resetSelectedOnUnmount = true,\r\n    ...rest\r\n}) => {\r\n    const invitersState = useSelector(getInvitersState);\r\n    const { data, loading, selected, ready } = invitersState;\r\n    const searchInviters = useSearchInvitersService();\r\n    const selectMultiply = useSelectMultipleInvitersAction();\r\n    const selectAll = useSelectAllInvitersAction();\r\n    const deselectAll = useDeSelectAllInvitersAction();\r\n\r\n    useEffect(() => {\r\n        if (!ready || fetchOnMount) {\r\n            searchInviters();\r\n        }\r\n        return () => {\r\n            if (resetSelectedOnUnmount) {\r\n                deselectAll();\r\n            }\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [deselectAll, ready, fetchOnMount, searchInviters]);\r\n\r\n    return (\r\n        <PortableInviters\r\n            inviters={data}\r\n            selectedList={selected}\r\n            loading={loading}\r\n            onSelectMultiply={selectMultiply}\r\n            onSelectAll={selectAll}\r\n            onDeselectAll={deselectAll}\r\n            showSearch={true}\r\n            showSelectActions={true}\r\n            {...rest}\r\n        />\r\n    );\r\n};\r\n","import React, { FC, useCallback, useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport { Fieldset } from '../../../../ui/components/Fieldset';\r\nimport { PortableLabelsWithStore } from '../../../portableLabels';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../portableLabels/store/hors/withLabels/services';\r\nimport { useSaveTeams } from '../../../portableTeams/store/hors/withTeams/services';\r\nimport { useTeamsState } from '../../../portableTeams/store/hors/withTeams/states';\r\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\r\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\r\nimport PortableRolesWithMultiSelect from '../../../portableRoles/portableRolesWithMultiSelect';\r\nimport { PortableInvitersWithStore } from '../../../portableInviters';\r\nimport { getInvitersState } from '../../../inviters/store/reducers';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectMultipleInvitersAction } from '../../../inviters/store/actions';\r\nimport { useDeSelectAllInvitersAction, useSaveInvitersAction } from '../../../inviters/store/services';\r\nimport { useInvitersState } from '../../../inviters/store/states';\r\n\r\nconst Container = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n    display: flex;\r\n    gap: 16px;\r\n    max-height: 416px;\r\n    flex-grow: 1;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst CustomFieldContainer = styled.div`\r\n    width: 208px;\r\n    min-height: 244px;\r\n    height: 100%;\r\n    overflow: auto;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Actions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-end;\r\n\r\n    flex-shrink: 0;\r\n    margin-top: 16px;\r\n`;\r\n\r\nconst SummaryCaption = styled.span`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    margin-right: 24px;\r\n\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst RoleContainer = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    width: 152px;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst ButtonWrapper = styled.div`\r\n    margin-right: 12px;\r\n`;\r\n\r\nexport const InvitationsFilter: FC<{\r\n    preSelectedLabels: number[];\r\n    onLabelsChange: (ids: number[]) => void;\r\n    onRoleChange: (status: number[]) => void;\r\n    onInvitersChange: (ids: number[]) => void;\r\n    onSuccessApply: () => void;\r\n    preSelectedRoles: number[];\r\n}> = ({\r\n    preSelectedLabels,\r\n    onLabelsChange,\r\n    onRoleChange,\r\n    onInvitersChange,\r\n    onSuccessApply,\r\n    preSelectedRoles,\r\n}) => {\r\n    const [selectedRoles, setSelectedRoles] = useState(preSelectedRoles);\r\n    const teams = useTeamsState();\r\n    const labels = useLabelsState();\r\n    const inviters = useInvitersState();\r\n    const invitersState = useSelector(getInvitersState);\r\n    const selectLabels = useSelectLabels();\r\n    const saveLabels = useSaveLabels();\r\n    const saveTeams = useSaveTeams();\r\n    const saveInviters = useSaveInvitersAction();\r\n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\r\n    const selectMultipleInviters = selectMultipleInvitersAction;\r\n    const deselectAllInviters = useDeSelectAllInvitersAction();\r\n\r\n    useEffect(() => {\r\n        if (ifPreselectedLabelsChanged) {\r\n            selectLabels(preSelectedLabels);\r\n            saveLabels();\r\n        }\r\n    }, [\r\n        ifPreselectedLabelsChanged,\r\n        preSelectedLabels,\r\n        saveLabels,\r\n        selectLabels,\r\n    ]);\r\n\r\n    const onApplyHandler = useCallback(() => {\r\n        onLabelsChange(labels.selected);\r\n        onRoleChange(selectedRoles);\r\n        onInvitersChange(inviters.selected);\r\n        saveLabels();\r\n        saveTeams();\r\n        saveInviters();\r\n        onSuccessApply();\r\n    }, [\r\n        onLabelsChange,\r\n        labels.selected,\r\n        onRoleChange,\r\n        selectedRoles,\r\n        onInvitersChange,\r\n        inviters.selected,\r\n        saveLabels,\r\n        saveTeams,\r\n        saveInviters,\r\n        onSuccessApply,\r\n    ]);\r\n\r\n    const totalFiltersSelected =\r\n        teams.selected.length +\r\n        labels.selected.filter((id: any) => id > 0).length +\r\n        selectedRoles.length +\r\n        invitersState.selected.length;\r\n\r\n    const onClearHandler = useCallback(() => {\r\n        setSelectedRoles([]);\r\n        selectLabels([]);\r\n        selectMultipleInviters([]);\r\n        deselectAllInviters();\r\n    }, [selectLabels, selectMultipleInviters, deselectAllInviters]);\r\n\r\n    return (\r\n        <Container>\r\n            <Wrapper>\r\n                <Fieldset title=\"Role\" dataTest=\"roles-section-title\">\r\n                    <RoleContainer>\r\n                        <PortableRolesWithMultiSelect\r\n                            selectedRoles={selectedRoles}\r\n                            setSelectedRoles={setSelectedRoles}\r\n                        />\r\n                    </RoleContainer>\r\n                </Fieldset>\r\n                <Fieldset title=\"Invited by\" dataTest=\"inviters-section-title\">\r\n                    <CustomFieldContainer>\r\n                        <PortableInvitersWithStore\r\n                            fetchOnMount={false}\r\n                            onSetSelected={selectMultipleInviters}\r\n                            resetSelectedOnUnmount={false}\r\n                        />\r\n                    </CustomFieldContainer>\r\n                </Fieldset>\r\n                <Fieldset title=\"Labels\" dataTest=\"labels-section-title\">\r\n                    <CustomFieldContainer>\r\n                        <PortableLabelsWithStore\r\n                            showSave={false}\r\n                            showSelectActions\r\n                            showSearch\r\n                        />\r\n                    </CustomFieldContainer>\r\n                </Fieldset>\r\n            </Wrapper>\r\n            <Actions>\r\n                <SummaryCaption data-test=\"total-selected-filters-text\">\r\n                    {totalFiltersSelected} Selected\r\n                </SummaryCaption>\r\n                <ButtonWrapper>\r\n                    <Button\r\n                        width=\"122px\"\r\n                        variant=\"inverse\"\r\n                        action={onClearHandler}\r\n                        disabled={!totalFiltersSelected}\r\n                        dataTest=\"clear-button\"\r\n                    >\r\n                        Clear\r\n                    </Button>\r\n                </ButtonWrapper>\r\n                <Button\r\n                    width=\"122px\"\r\n                    action={onApplyHandler}\r\n                    dataTest=\"apply-filter-button\"\r\n                >\r\n                    Apply Filter\r\n                </Button>\r\n            </Actions>\r\n        </Container>\r\n    );\r\n};\r\n","import {InvitersResult} from \"../interfaces\";\nimport {Inviter} from \"../../../constants/interfaces/Inviter\";\nimport {useSelector} from \"react-redux\";\n\nexport interface InvitersState {\n    data: InvitersResult<Inviter>;\n    ready: boolean,\n    loading: boolean;\n    error: string;\n    selected: number[];\n    saved: number[];\n}\n\nexport const useInvitersState = (): InvitersState => {\n    const appState = useSelector(state => state);\n    return appState.inviters;\n};","import React, { FC, useRef, useState } from 'react';\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../ui/components/ActionButton';\nimport { CheckPermission } from '../../../permissions';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { PopupComponent } from '../../../../ui/components/Popup';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../portableLabels/store/hors/withLabels/services';\nimport {\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabelsForSingleItem,\n} from '../../../labels/tools';\nimport { AssignLabels } from '../../../portableLabels/templates/AssignLabels';\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\nimport { InvitationActionsHelper } from '../../tools';\nimport { UserV2 } from '../../../../constants/interfaces/User';\n\nconst InvitationsListActions: FC<{\n    invitation: UserV2;\n    actionsHelper: InvitationActionsHelper;\n    onViewProfile: (invitation: UserV2) => void;\n    onCopyInviteText: (invitation: UserV2) => void;\n    handleRevokeInvitation: (invitationIds: number[]) => void;\n    handleResendInvitation: (invitationIds: number[]) => void;\n    assignLabelsToUser: (\n        addedLabelIds: number[],\n        deletedLabelIds: number[]\n    ) => void;\n    isHidden?: boolean;\n}> = ({\n    invitation,\n    actionsHelper,\n    onViewProfile,\n    onCopyInviteText,\n    handleRevokeInvitation,\n    assignLabelsToUser,\n    handleResendInvitation,\n    isHidden,\n}) => {\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabelsForSingleItem();\n    const getDeletedLabels = useCalculateDeletedLabels();\n\n    const handleSetPreselectedLabels = () => {\n        const selectedLabelIds = invitation.labels || [];\n        const preAssignedLabels = calculatePreSelectedLabels(\n            selectedLabelIds,\n            labelsList.data\n        );\n        setSelectLabels(preAssignedLabels);\n        saveLabels();\n    };\n\n    const handleSaveSelectedLabels = (labelIDs: number[]) => {\n        const addedLabelIds = labelIDs.filter(id => id > 0);\n        const deletedLabelIds = getDeletedLabels(labelIDs)\n            .filter(labelId => invitation.labels.includes(labelId));\n\n        assignLabelsToUser(addedLabelIds, deletedLabelIds);\n    };\n\n    const [assignSingleLabelOpen, setAssignSingleLabelOpen] = useState<\n        null | number | undefined\n    >(null);\n\n    const triggerRef = useRef(null);\n\n    return (\n        <span>\n            <div ref={triggerRef}>\n                <ActionButton customWidth={168} isHidden={isHidden} dataTest=\"list-item-menu\">\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.VIEW_USER_PERFORMANCE]}\n                    >\n                        <ActionItem onClick={() => onViewProfile(invitation)} dataTest=\"view-profile-action\">\n                            View Profile\n                        </ActionItem>\n                    </CheckPermission>\n                    {actionsHelper.canAssignInvitationLabel() && !!labelsList.data.items.length && (\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                setAssignSingleLabelOpen(invitation.id);\n                                handleSetPreselectedLabels();\n                            }}\n                            dataTest=\"assign-labels-action\"\n                        >\n                            Assign Labels\n                        </ActionItem>\n                    )}\n                    {actionsHelper.canResendInvitation() && (\n                        <ActionItem\n                            onClick={() => {\n                                handleResendInvitation([invitation.id]);\n                            }}\n                            dataTest=\"resend-invite-action\"\n                        >\n                            Resend Invite\n                        </ActionItem>\n                    )}\n                    <ActionItem onClick={() => onCopyInviteText(invitation)} dataTest=\"copy-invite-text-action\">\n                        Copy Invite Text\n                    </ActionItem>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.REVOKE_INVITATION]}\n                    >\n                        <ActionItem\n                            destructive={true}\n                            onClick={() => {\n                                handleRevokeInvitation([invitation.id]);\n                            }}\n                            dataTest=\"revoke-action\"\n                        >\n                            Revoke\n                        </ActionItem>\n                    </CheckPermission>\n                </ActionButton>\n            </div>\n            <PopupComponent\n                triggerRef={triggerRef}\n                open={assignSingleLabelOpen === invitation.id}\n                onDismiss={() => {\n                    setAssignSingleLabelOpen(null);\n                }}\n            >\n                <AssignLabels\n                    onLabelsChange={handleSaveSelectedLabels}\n                    onSuccessApply={() => {\n                        setAssignSingleLabelOpen(null);\n                    }}\n                    withBorder={true}\n                />\n            </PopupComponent>\n        </span>\n    );\n};\n\nexport default InvitationsListActions;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Pending = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg ref={ref} className={className} width=\"49\" height=\"49\" viewBox=\"0 0 49 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M39.946 38.426c-1.058-.953-9.622-3.015-11.287-3.41 4.297-2.26 6.955-7.734 6.956-12.892C35.615 15.429 33.578 10 24.414 10c-9.164 0-11.201 5.429-11.201 12.124 0 5.178 2.683 10.672 7.01 12.916-1.928.447-10.23 2.417-11.311 3.386-1.946 1.74-2.734 6.962-.789 9.574l16.37-.004L40.715 48c1.93-2.612 1.161-7.834-.768-9.574zM15.712 22.168c0-5.412 1.45-9.8 8.701-9.8 7.25 0 8.7 4.387 8.7 9.8 0 4.503-2.35 9.478-6.21 11.04v4.111h1.182c4.691.983 8.98 2.342 10.26 2.943.8.903 1.305 3.568.803 5.364l-14.656-.004-14.81.004c-.504-1.796.016-4.469.828-5.365 1.275-.611 5.637-1.969 10.385-2.942h1.034V33.21c-3.863-1.557-6.217-6.537-6.217-11.042z\" fill=\"#B1C0CB\" />\n                <path d=\"m28.659 35.017-.117-.222-.59.311.649.154.058-.243zm11.287 3.409.167-.186-.167.186zm-4.331-16.302h.25-.25zM20.223 35.04l.057.243.66-.153-.602-.312-.115.222zM8.912 38.426l.167.186-.167-.186zM8.123 48l-.2.15.075.1h.125V48zm16.37-.004v-.25.25zM40.715 48v.25h.126l.075-.101-.2-.149zm-13.81-14.793-.094-.231-.156.063v.168h.25zm0 4.112h-.25v.25h.25v-.25zm1.181 0 .052-.245-.026-.005h-.026v.25zm10.26 2.943.187-.166-.034-.038-.046-.022-.107.226zm.803 5.364v.25h.19l.05-.183-.24-.067zm-14.656-.004v-.25.25zm-14.81.004-.24.067.051.183h.19v-.25zm.828-5.365-.108-.226-.044.021-.033.037.185.168zm10.385-2.942v-.25h-.026l-.025.005.05.245zm1.034 0v.25h.25v-.25h-.25zm0-4.109h.25v-.168l-.157-.064-.093.232zm6.672 2.05c.832.197 3.386.81 5.863 1.493 1.239.341 2.455.7 3.425 1.03.486.166.906.324 1.236.468.338.148.554.271.654.36l.334-.371c-.165-.149-.448-.299-.787-.447a16.808 16.808 0 0 0-1.275-.483 63.732 63.732 0 0 0-3.455-1.04 180.03 180.03 0 0 0-5.88-1.497l-.115.487zm6.764-13.136c0 5.09-2.628 10.465-6.823 12.671l.233.443c4.4-2.314 7.09-7.888 7.09-13.114h-.5zM24.414 10.25c4.531 0 7.244 1.34 8.837 3.452 1.605 2.127 2.114 5.09 2.114 8.422h.5c0-3.363-.51-6.463-2.215-8.723-1.716-2.276-4.603-3.651-9.236-3.651v.5zM13.463 22.124c0-3.332.509-6.295 2.113-8.422 1.593-2.113 4.307-3.452 8.838-3.452v-.5c-4.633 0-7.52 1.375-9.237 3.65-1.705 2.261-2.214 5.36-2.214 8.724h.5zm6.876 12.694c-4.225-2.19-6.876-7.584-6.876-12.694h-.5c0 5.247 2.714 10.84 7.145 13.138l.23-.444zm-11.26 3.794c.103-.092.318-.216.651-.363a15.65 15.65 0 0 1 1.215-.461 59.45 59.45 0 0 1 3.37-1.01 172.237 172.237 0 0 1 5.965-1.495l-.113-.487c-.966.224-3.527.83-5.983 1.5a60.026 60.026 0 0 0-3.4 1.019c-.484.165-.912.325-1.256.477-.335.148-.616.298-.783.448l.334.372zm-.755 9.239c-.92-1.236-1.21-3.121-1.017-4.939.194-1.821.865-3.49 1.772-4.3l-.334-.373c-1.039.93-1.735 2.743-1.935 4.62-.2 1.882.087 3.914 1.113 5.29l.4-.298zm16.17-.105-16.371.004v.5l16.37-.004v-.5zm16.22.004-16.22-.004v.5l16.22.004v-.5zm-.935-9.139c.898.81 1.56 2.479 1.75 4.3.189 1.818-.103 3.705-1.016 4.94l.402.298c1.017-1.377 1.306-3.408 1.111-5.289-.195-1.877-.882-3.69-1.913-4.62l-.334.371zM24.413 12.117c-3.678 0-5.943 1.117-7.273 2.976-1.316 1.84-1.678 4.358-1.678 7.075h.5c0-2.695.364-5.078 1.585-6.784 1.208-1.689 3.294-2.767 6.866-2.767v-.5zm8.95 10.05c0-2.717-.36-5.234-1.677-7.075-1.33-1.859-3.595-2.975-7.273-2.975v.5c3.572 0 5.658 1.078 6.866 2.766 1.221 1.707 1.585 4.09 1.585 6.785h.5zM26.998 33.44c1.999-.808 3.59-2.493 4.68-4.53a14.597 14.597 0 0 0 1.687-6.741h-.5c0 2.21-.578 4.54-1.629 6.505-1.051 1.967-2.565 3.55-4.425 4.303l.187.463zm.157 3.88v-4.112h-.5v4.112h.5zm.931-.25h-1.181v.5h1.181v-.5zm10.367 2.967c-1.307-.614-5.619-1.977-10.315-2.962l-.103.49c4.686.982 8.952 2.336 10.205 2.925l.213-.453zm.937 5.657c.263-.944.26-2.097.093-3.124-.166-1.017-.502-1.967-.95-2.473l-.374.332c.352.397.669 1.231.83 2.221.16.98.157 2.057-.08 2.91l.48.134zm-14.897.18 14.656.003v-.5l-14.656-.004v.5zm-14.81.003 14.81-.004v-.5l-14.81.004v.5zm.643-5.783c-.455.502-.798 1.453-.969 2.471-.172 1.029-.18 2.185.086 3.13l.481-.136c-.239-.852-.238-1.93-.074-2.91.166-.992.49-1.825.846-2.22l-.37-.335zm10.52-3.019c-4.752.974-9.14 2.336-10.443 2.961l.216.451c1.246-.597 5.584-1.95 10.327-2.922l-.1-.49zm1.084-.005h-1.034v.5h1.034v-.5zm-.25-3.859v4.11h.5v-4.11h-.5zm-6.217-11.042a14.6 14.6 0 0 0 1.69 6.745c1.09 2.038 2.682 3.723 4.683 4.53l.187-.465c-1.862-.75-3.377-2.334-4.43-4.301a14.1 14.1 0 0 1-1.63-6.51h-.5z\" fill=\"#fff\" />\n                <rect x=\"1\" y=\"1\" width=\"46\" height=\"46\" rx=\"7\" stroke=\"#B1C0CB\" strokeWidth=\"2\" />\n                <path d=\"M27 26h21v22H30v-8.25h-3V26z\" fill=\"#fff\" />\n                <path d=\"M47.455 32.514v-1.7c.541-.28.91-.796.91-1.391v-.404c0-.223-.204-.404-.455-.404H32.455c-.252 0-.455.18-.455.404v.404c0 .595.368 1.11.91 1.39v1.701c0 1.6.767 3.133 2.106 4.203l1.99 1.59-1.99 1.591c-1.339 1.07-2.107 2.602-2.107 4.203v1.7c-.54.28-.909.796-.909 1.391v.404c0 .223.203.404.455.404H47.91c.251 0 .454-.18.454-.404v-.404c0-.595-.368-1.11-.909-1.39V44.1c0-1.6-.768-3.133-2.107-4.203l-1.989-1.59 1.99-1.591c1.338-1.07 2.106-2.602 2.106-4.203zm-3.323 3.002-2.74 2.191a.77.77 0 0 0-.3.6c0 .23.108.448.3.6l2.74 2.192c.956.764 1.505 1.859 1.505 3.002v1.476h-10.91V44.1c0-1.143.549-2.238 1.505-3.002l2.74-2.191a.77.77 0 0 0 .301-.6.77.77 0 0 0-.3-.6l-2.74-2.191c-.957-.765-1.506-1.86-1.506-3.003v-1.476h10.91v1.476c0 1.143-.549 2.238-1.505 3.002z\" fill=\"#B1C0CB\" />\n                <path d=\"M43.04 33.461h-5.716a.417.417 0 0 0-.38.23.366.366 0 0 0 .073.417l2.887 2.484a.43.43 0 0 0 .278.1c.1 0 .2-.033.278-.1l2.887-2.484a.366.366 0 0 0 .072-.417.417.417 0 0 0-.38-.23zM37.324 46.385h5.716c.164 0 .313-.136.379-.346a.764.764 0 0 0-.072-.624l-2.887-3.727a.356.356 0 0 0-.278-.15c-.1 0-.2.05-.279.15l-2.886 3.727a.765.765 0 0 0-.072.624c.066.21.215.346.379.346z\" fill=\"#B1C0CB\" />\n            </svg>\n\n        );\n    }\n);\n\nexport default Pending;\n","import { makeStyles } from '@material-ui/core';\n\nexport const useStyles = makeStyles(theme => ({\n    customTableColumnStyle: {\n        minWidth: 250,\n    },\n\n    avatarTableCellCustomStyle: {\n        padding: 0,\n    },\n}));\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { SearchParams } from '../../../../constants/interfaces/filters';\n\nimport { useChunkRequestsService } from '../../../../services/ChunkRequestService/hooks';\nimport { ITEM_PER_CHUNK_SIZE } from '../../../../services/ChunkRequestService/hooks/constants';\nimport { ChunkRequestActionInterface } from '../../../../services/ChunkRequestService/hooks/types';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../ui/components/ModalDialogs/store/actions';\nimport { GeneralBulkActionModalInterface } from '../../../../ui/components/ModalDialogs/types';\nimport { DELETE_USER_ACTION, RESEND_INVITATION_ACTION, REVOKE_INVITATION_ACTION } from './constants';\nimport { useSearchUsersAndResendInvitation, useSearchUsersAndDeleteUser, useSearchUsersAndRevokeInvitation } from './helpers';\nimport { ResendInvitationChunkRequestParameters, DeleteUserChunkRequestParameters, RevokeInvitationChunkRequestParameters } from './types';\n/**\n *\n * @description Custom hook to revoke invitations with chunk service\n * when all items are selected.\n * @function useRevokeInvitationBulkActionService\n * @param { SearchParams } searchParams\n * @param { number } companyId\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\n export function useRevokeInvitationBulkActionService(\n     searchParams: SearchParams,\n     companyId: number,\n     totalUsersCount: number,\n     onSuccessCallback?: () => void,\n     onErrorCallback?: () => void\n ) {\n     const dispatch = useDispatch();\n     const searchUsersAndRevokeInvitation = useSearchUsersAndRevokeInvitation();\n     const hideModalDialog = useHideModalDialog();\n     const showMessage = useShowMessage();\n\n     const totalCompletedRevokeInvitations = useRef<number>(0);\n\n     const [isRunning, setIsRunning] = useState<boolean>(false);\n\n     const actionList: ChunkRequestActionInterface<RevokeInvitationChunkRequestParameters>[] =\n         [\n             {\n                actionName: REVOKE_INVITATION_ACTION,\n                 actionFunction: searchUsersAndRevokeInvitation,\n                 actionFunctionOptions: {\n                     parameters: {\n                         searchParams: {\n                             ...searchParams,\n                             offset: totalUsersCount,\n                         },\n                         companyId,\n                         onSuccessCallback: () =>\n                             (totalCompletedRevokeInvitations.current =\n                                 totalCompletedRevokeInvitations.current + 1),\n                     },\n                     fieldName: 'searchParams.offset',\n                 },\n             },\n         ];\n\n     /**\n      * @function clearTotalCompletedRevokeInvitations\n      * @returns { void }\n      */\n     const clearTotalCompletedRevokeInvitations = () =>\n         (totalCompletedRevokeInvitations.current = 0);\n\n     /**\n      * @function handleSuccessServiceCallback\n      * @returns { void }\n      */\n     const handleSuccessServiceCallback = useCallback(() => {\n         Promise.resolve().then(() => {\n             setTimeout(() => {\n                 hideModalDialog();\n             }, 900);\n\n             isRunning && setIsRunning(false);\n             clearTotalCompletedRevokeInvitations();\n\n             showMessage('All Invites have been revoked', 'success');\n             onSuccessCallback?.();\n         });\n     }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n     /**\n      * @function handleFailedBulkActionServiceCallback\n      * @returns { void }\n      */\n     const handleFailedBulkActionServiceCallback = useCallback(() => {\n         Promise.resolve().then(() => {\n             dispatch(\n                 showModalDialog({\n                     modalType: 'BULK_ACTION_FAILED_MODAL',\n                     modalProps: {\n                         modalTitle: 'Revoke Invitations',\n                         onClose: hideModalDialog,\n                     } as GeneralBulkActionModalInterface,\n                 })\n             );\n\n             clearTotalCompletedRevokeInvitations();\n\n             isRunning && setIsRunning(false);\n\n             onErrorCallback?.();\n         });\n     }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n     const { setIsStopped } = useChunkRequestsService(\n         actionList,\n         handleSuccessServiceCallback,\n         handleFailedBulkActionServiceCallback\n     );\n\n     /**\n      * @function handleStopRevokeInvitationsBulkActionService\n      * @returns { void }\n      */\n     const handleStopRevokeInvitationsBulkActionService = useCallback(() => {\n         Promise.resolve().then(() => {\n             setIsStopped(true);\n             setIsRunning(false);\n             hideModalDialog();\n\n             showMessage(\n                 `${\n                     totalCompletedRevokeInvitations.current *\n                     ITEM_PER_CHUNK_SIZE\n                 } Invites have been revoked`,\n                 'success'\n             );\n\n             clearTotalCompletedRevokeInvitations();\n\n             onSuccessCallback?.();\n         });\n     }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n     /**\n      * @function handleStartRevokeInvitationBulkActionService\n      * @returns { void }\n      */\n     const handleStartRevokeInvitationBulkActionService = useCallback(() => {\n         Promise.resolve().then(() => {\n             dispatch(\n                 showModalDialog({\n                     modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                     modalProps: {\n                         modalTitle: 'Revoke Invitations',\n                         onStopBulkActionService:\n                             handleStopRevokeInvitationsBulkActionService,\n                         onClose: hideModalDialog,\n                     },\n                 })\n             );\n\n             setIsStopped(false);\n         });\n     }, [\n         dispatch,\n         handleStopRevokeInvitationsBulkActionService,\n         hideModalDialog,\n         setIsStopped,\n     ]);\n\n     useEffect(() => {\n         if (isRunning) {\n             handleStartRevokeInvitationBulkActionService();\n         }\n         // eslint-disable-next-line react-hooks/exhaustive-deps\n     }, [isRunning]);\n\n     return useCallback(() => {\n         setIsRunning(true);\n     }, []);\n }\n\n/**\n *\n * @description Custom hook to resend invitations with chunk service\n * when all items are selected.\n * @function useResendInvitationBulkActionService\n * @param { SearchParams } searchParams\n * @param { number } companyId\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useResendInvitationBulkActionService(\n    searchParams: SearchParams,\n    companyId: number,\n    totalUsersCount: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const searchUsersAndResendInvitation = useSearchUsersAndResendInvitation();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const totalCompletedResendInvitations = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<ResendInvitationChunkRequestParameters>[] =\n        [\n            {\n                actionName: RESEND_INVITATION_ACTION,\n                actionFunction: searchUsersAndResendInvitation,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            offset: totalUsersCount,\n                        },\n                        companyId,\n                        onSuccessCallback: () =>\n                            (totalCompletedResendInvitations.current =\n                                totalCompletedResendInvitations.current + 1),\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n        ];\n\n    /**\n     * @function clearTotalCompletedResendInvitations\n     * @returns { void }\n     */\n    const clearTotalCompletedResendInvitations = () =>\n        (totalCompletedResendInvitations.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedResendInvitations();\n\n            showMessage('All Invites have been sent', 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: 'Resend Invitations',\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n\n            clearTotalCompletedResendInvitations();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopDuplicateTeamBulkActionService\n     * @returns { void }\n     */\n    const handleStopDuplicateTeamBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(\n                `${\n                    totalCompletedResendInvitations.current *\n                    ITEM_PER_CHUNK_SIZE\n                } Invites have been sent`,\n                'success'\n            );\n\n            clearTotalCompletedResendInvitations();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartResendInvitationBulkActionService\n     * @returns { void }\n     */\n    const handleStartResendInvitationBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'Resend Invitations',\n                        onStopBulkActionService:\n                            handleStopDuplicateTeamBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopDuplicateTeamBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartResendInvitationBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n}\n\n\n/**\n *\n * @description Custom hook to delete users with chunk service\n * when all items are selected.\n * @function useDeleteUserBulkActionService\n * @param { SearchParams } searchParams\n * @param { number } companyId\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\n export function useDeleteUserBulkActionService(\n    searchParams: SearchParams,\n    companyId: number,\n    totalUsersCount: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const dispatch = useDispatch();\n    const searchUsersAndDeleteUser = useSearchUsersAndDeleteUser();\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const deletedUsersTotalCount = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<DeleteUserChunkRequestParameters>[] =\n        [\n            {\n                actionName: DELETE_USER_ACTION,\n                actionFunction: searchUsersAndDeleteUser,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            offset: totalUsersCount,\n                        },\n                        companyId,\n                        onSuccessCallback: () =>\n                            (deletedUsersTotalCount.current =\n                                deletedUsersTotalCount.current + 1),\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n        ];\n\n    /**\n     * @function ResetDeletedUsersTotalCount\n     * @returns { void }\n     */\n    const ResetDeletedUsersTotalCount = () =>\n        (deletedUsersTotalCount.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            ResetDeletedUsersTotalCount();\n\n            showMessage('Users have been deactivated.', 'success');\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: 'Deactivate Users',\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n\n            ResetDeletedUsersTotalCount();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopDuplicateTeamBulkActionService\n     * @returns { void }\n     */\n    const handleStopDuplicateTeamBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            showMessage(\n                `${\n                    deletedUsersTotalCount.current *\n                    ITEM_PER_CHUNK_SIZE\n                } Users have been deactivated.`,\n                'success'\n            );\n\n            ResetDeletedUsersTotalCount();\n\n            onSuccessCallback?.();\n        });\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartDeleteUserBulkActionService\n     * @returns { void }\n     */\n    const handleStartDeleteUserBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: 'Deactivate Users',\n                        onStopBulkActionService:\n                            handleStopDuplicateTeamBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [\n        dispatch,\n        handleStopDuplicateTeamBulkActionService,\n        hideModalDialog,\n        setIsStopped,\n    ]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartDeleteUserBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback(() => {\n        setIsRunning(true);\n    }, []);\n\n\n}","import { useCallback } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport { useResendInvitationApi, useSearchUsersApi, useDeleteUserApi, useRevokePendingUsers } from '../../../../api';\nimport { SearchUsersParams } from '../../../../api/users/types';\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport { getSearchSortingValue } from '../../../../helpers/functions/search-params-helpers';\nimport { UserStatus } from '../../store/costants';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\n/**\n * @function useSearchUsersAndRevokeInvitation\n * @returns { CallableFunction }\n */\n export const useSearchUsersAndRevokeInvitation = () => {\n    const searchUsersApi = useSearchUsersApi();\n    const revokeInvitations = useRevokePendingUsers();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } searchParams\n     * @param { number } companyId\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            companyId: number,\n            onSuccessCallback: () => void\n        ) => {\n            const searchPendingUsersParams: SearchUsersParams = {\n                status: UserStatus.PENDING,\n                roles: searchParams.roleIDs?.join(','),\n                labels: searchParams.labelIDs?.join(','),\n                invitedBy: searchParams.invitersIDs?.join(','),\n                companies: companyId.toString(),\n                limit: searchParams.limit ?? 20,\n                offset: searchParams.offset ?? 0,\n                query: searchParams.searchTerm,\n                sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\n            };\n\n            await searchUsersApi({ ...searchPendingUsersParams })\n                .then(async (response: Record<string, any>) => {\n                    const userIds = response?.items?.map(\n                        (item: { id: number }) => item.id\n                    ) as number[];\n\n                    if (!isEmpty(userIds)) {\n                        await revokeInvitations(userIds)\n                            .then(() => {\n                                onSuccessCallback();\n                            })\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [revokeInvitations, searchUsersApi, showMessage]\n    );\n};\n\n/**\n * @function useSearchUsersAndResendInvitation\n * @returns { CallableFunction }\n */\nexport const useSearchUsersAndResendInvitation = () => {\n    const searchUsersApi = useSearchUsersApi();\n    const resendInvitation = useResendInvitationApi();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } searchParams\n     * @param { number } companyId\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            companyId: number,\n            onSuccessCallback: () => void\n        ) => {\n            const searchPendingUsersParams: SearchUsersParams = {\n                status: UserStatus.PENDING,\n                roles: searchParams.roleIDs?.join(','),\n                labels: searchParams.labelIDs?.join(','),\n                invitedBy: searchParams.invitersIDs?.join(','),\n                companies: companyId.toString(),\n                limit: searchParams.limit ?? 20,\n                offset: searchParams.offset ?? 0,\n                query: searchParams.searchTerm,\n                sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\n            };\n\n            await searchUsersApi({ ...searchPendingUsersParams })\n                .then(async (response: Record<string, any>) => {\n                    const userIds = response?.items?.map(\n                        (item: { id: number }) => item.id\n                    ) as number[];\n\n                    if (!isEmpty(userIds)) {\n                        await resendInvitation(userIds)\n                            .then(() => {\n                                onSuccessCallback();\n                            })\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [resendInvitation, searchUsersApi, showMessage]\n    );\n};\n\n/**\n * @function useSearchUsersAndDeleteUser\n * @returns { CallableFunction }\n */\n export const useSearchUsersAndDeleteUser = () => {\n    const searchUsersApi = useSearchUsersApi();\n    const deleteUser = useDeleteUserApi();\n\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @param { SearchParams } searchParams\n     * @param { number } companyId\n     * @returns { Promise<void> }\n     */\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            companyId: number,\n            onSuccessCallback: () => void\n        ) => {\n            const searchRegisteredUsersParams: SearchUsersParams = {\n                status: UserStatus.ACTIVE,\n                roles: searchParams.roleIDs?.join(','),\n                labels: searchParams.labelIDs?.join(','),\n                teams: searchParams.teamIds?.join(','),\n                companies: companyId.toString(),\n                limit: searchParams.limit ?? 20,\n                offset: 0,\n                query: searchParams.searchTerm,\n                sort: getSearchSortingValue(searchParams.orderBy, 'name', true),\n            };\n\n            await searchUsersApi({ ...searchRegisteredUsersParams })\n                .then(async (response: Record<string, any>) => {\n                    const userIds = response?.items?.map(\n                        (item: { id: number }) => item.id\n                    ) as number[];\n\n                    if (!isEmpty(userIds)) {\n                        await deleteUser(userIds)\n                            .then(() => {\n                                onSuccessCallback();\n                            })\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [deleteUser, searchUsersApi, showMessage]\n    );\n};\n\n","export const REVOKE_INVITATION_ACTION = 'REVOKE_INVITATION_ACTION';\nexport const RESEND_INVITATION_ACTION = 'RESEND_INVITATION_ACTION';\nexport const DELETE_USER_ACTION = 'DELETE_USER_ACTION';","import { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { History } from 'history';\nimport { useHistory } from 'react-router';\nimport { isEmpty as lodashIsEmpty, isEqual } from 'lodash';\n\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport {\n    ASSIGN_LABEL_OPTIONS,\n    LOAD_ASSIGNED_LABELS,\n    isAdminRole,\n} from '../../../../constants/enums';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport {\n    useCopyInviteTextService,\n    useResendInvitationService,\n    useRevokeInvitationService,\n    useSearchInvitationsService,\n    useUpdateAllSelectedInvitationsStateService,\n    useUpdateSelectedInvitationStateService,\n    useDeleteUserLabelService,\n} from '../../store/services';\nimport {\n    selectSelectedInvitations,\n    useInvitationsState,\n    useUpdateInvitationsState,\n} from '../../store/states';\nimport {\n    hasPermission,\n    NEW_PERMISSIONS,\n} from '../../tools';\nimport UsersPageNavigationContainer from '../../components/UsersPageNavigation';\nimport { UserV2, UserProfile } from '../../../../constants/interfaces/User';\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport {\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../../labels/store/states';\nimport {\n    clearSelectedItemIfNotLoaded,\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabels,\n} from '../../../labels/tools';\nimport {\n    useSaveUserFiltersService,\n    useSetAssignLabelsActionService,\n} from '../../../labels/store/services';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport ROUTES from '../../../../routes/routes';\nimport { usePermissionsState } from '../../../permissions/store/state';\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { countAppliedFiltersCount } from '../../../teams/pages/ListOfTeams/tools';\nimport { Popup } from '../../../../ui/components/Popup';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport { InvitationsFilter } from '../../components/Filters/InvitationsFilter';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport { WithTeamsContext } from '../../../portableTeams';\nimport InvitationsListActions from '../../components/ListActions/InvitationsListActions';\nimport {\n    InvitationActions,\n    InvitationActionsHelper,\n    useInvitationActionsHelper,\n} from '../../tools';\nimport { useSessionEffect } from '../../../common';\nimport {\n    useDeselectAllTeams,\n    useSaveTeams,\n} from '../../../portableTeams/store/hors/withTeams/services';\nimport {\n    useDeSelectAllInvitersAction,\n    useRefreshInviters,\n} from '../../../inviters/store/services';\nimport {\n    useDraftEditState,\n    DraftEditState,\n} from '../../../../pages/ActionPages/NewUser/store/states';\nimport Pending from '../../../../ui/icons/Pending';\nimport { normalizeSP } from '../../../../helpers/functions/searchparams-normalize';\nimport {\n    useAssignedLabelsIdsApi,\n    useAssignUserLabelsApi,\n    useDeleteUserLabelsApi,\n} from '../../../../api';\nimport { getSearchState } from '../../../searchState/store/reducer';\nimport { SearchStateInterface } from '../../../searchState/store/states';\nimport { SEARCH_STATE } from '../../../searchState/constants';\nimport { isEmpty } from '../../../../helpers/functions/object-helpers';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport { useStyles } from './styles';\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport {\n    onListenEvent,\n    onRemoveEvent,\n    onTriggerEvent,\n} from '../../../../helpers/functions/Events';\nimport {\n    CLEAR_PAGING,\n    EventNameList,\n    REFRESH_PENDING_USERS_PAGE,\n} from '../../../../helpers/functions/Events/types';\nimport { usePreviousData } from '../../../../helpers/hooks/usePreviousData';\nimport {\n    useUpdateLabelsBulkActionService,\n    useUpdateMultipleEntityLabelsBulkActionService,\n} from '../../../../services/GeneralBulkActionServices';\nimport {\n    useResendInvitationBulkActionService,\n    useRevokeInvitationBulkActionService,\n} from '../../services/UserBulkActionsService';\nimport { useGetCompanyService, useGetCompanyUserStatsService } from '../../../../pages/CompanySettings/store/services';\nimport { UPDATE_MULTIPLE_LABEL_ACTION } from '../../../../services/GeneralBulkActionServices/constants';\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\nimport { CompanyUserStatsText } from '../../../../ui/components/CompanyUserStatsText';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\n\nconst Invitations: FC<{\n    history: History<any>;\n    searchInvitations: (sp: SearchParams, companyId: number) => void;\n    deleteUserLabel: (userId: number, labelId: number) => void;\n    setAssignLabelsAction(labels: number[]): void;\n    onResendInvitation: (\n        invitationIds: number[],\n        isRowResend?: boolean,\n        search?: SearchParams,\n        selectAll?: boolean\n    ) => void;\n    onRevokeInvitation: (\n        invitationIds: number[],\n        successCallback?: () => void\n    ) => void;\n    onCopyInviteText: (invitation: UserV2) => void;\n    users?: ListResult<UserV2>;\n    selectedInvitationIds?: number[];\n    selectedInvitations?: UserV2[];\n    actionsHelper: InvitationActionsHelper;\n    updatedInvitations?: { id: number };\n    loading?: boolean;\n    selectedLabels?: number[];\n    assignedLabels?: number[];\n    updateAllSelectedInvitations(\n        invitationIds: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedInvitation(invitationId: number): void;\n    updatedLabels?: any;\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\n    draftEdit?: DraftEditState;\n    searchState: SearchStateInterface;\n    profile?: UserProfile;\n    getCompanyUserStats: (companyId: number) => void;\n}> = ({\n    users,\n    searchInvitations,\n    setAssignLabelsAction,\n    onResendInvitation,\n    onRevokeInvitation,\n    onCopyInviteText,\n    updatedInvitations,\n    selectedLabels,\n    selectedInvitationIds,\n    selectedInvitations,\n    actionsHelper,\n    assignedLabels,\n    updateAllSelectedInvitations,\n    updateSelectedInvitation,\n    deleteUserLabel,\n    updatedLabels,\n    loading,\n    history,\n    saveGlobalLabelFilters,\n    draftEdit,\n    searchState,\n    profile,\n    getCompanyUserStats,\n}) => {\n    const classes = useStyles();\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n\n    const refreshInvitersList = useRefreshInviters();\n\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n    const prevCompanyId = usePreviousData(profile?.companyId);\n\n    const canAccessPage = useHandleAccessPage();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        labelIDs: selectedLabels,\n        filters: [],\n        orderBy: {\n            field: 'date_created',\n            asc: false,\n        },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const usableParams: SearchParams =\n        !isEmpty(searchState) &&\n        !!searchState?.params &&\n        searchState.key === SEARCH_STATE.PENDING_USERS.name\n            ? searchState.params\n            : initialSearchParams;\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setLabelIDs,\n        setOffset,\n        refreshSearchParams,\n        setCustom,\n        setFilter,\n    } = useSearchParamsState(usableParams);\n\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n    const isCheckboxPartiallySelected =\n        users &&\n        users.items &&\n        selectedInvitationIds &&\n        selectedInvitationIds.length < users.items.length;\n\n    const showMessage = useShowMessage();\n\n    const handleTableStates = useTableStateHelper();\n\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: searchParams.labelIDs?.length,\n        itemsCount: users?.items.length || 0,\n    });\n\n    const refreshData = useCallback(() => {\n        if (!profile?.companyId) return;\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchInvitations(searchParams, profile.companyId);\n        setLastRefreshed(new Date());\n        updateAllSelectedInvitations([], true, isCheckboxPartiallySelected);\n        setIsSelectAll(false);\n    }, [\n        profile?.companyId,\n        initialOffset,\n        searchInvitations,\n        searchParams,\n        updateAllSelectedInvitations,\n        isCheckboxPartiallySelected,\n    ]);\n\n    /**\n     * @function onConfirmRevokeInvitationsSuccessCallback\n     * @param { number[] } ids\n     * @returns { void }\n     */\n    const onConfirmRevokeInvitationsSuccessCallback = (ids: number[]): void => {\n        let message;\n\n        Promise.resolve().then(() => {\n            if (!pageIndex || pageIndex === 1) {\n                refreshData();\n            } else {\n                // if the current page is not page 1,\n                // move paging to page 1\n                onTriggerEvent(EventNameList[CLEAR_PAGING]);\n            }\n        });\n\n        // refresh inviters list on filters.\n        refreshInvitersList();\n        getCompanyUserStats(profile!.companyId);\n\n        if (ids?.length === 1) {\n            message = 'Invite has been revoked';\n        } else {\n            message =\n                ids.length > 1\n                    ? `${\n                          isSelectAll ? users?.count : ids.length\n                      } Invites have been revoked`\n                    : '1 Invite has been revoked';\n        }\n        showMessage(message, 'success');\n    };\n\n    /**\n     * @function onConfirmRevokeInvitations\n     * @param { number[] } revokeInvitationIds\n     * @returns { void }\n     */\n    const onConfirmRevokeInvitations = (\n        revokeInvitationIds: number[]\n    ): void => {\n        onRevokeInvitation(revokeInvitationIds, () =>\n            onConfirmRevokeInvitationsSuccessCallback(revokeInvitationIds)\n        );\n    };\n\n    /**\n     * @function handleRevokeInvitation\n     * @param { number[] } revokeInvitationIds\n     * @returns { void }\n     */\n    const handleRevokeInvitation = (revokeInvitationIds: number[]): void => {\n        showConfirmationModalDialog({\n            modalTitle: 'Revoke Invitation',\n            description: `Are you sure you want to revoke the ${\n                revokeInvitationIds.length > 1\n                    ? 'invitations for these users'\n                    : 'invitation for this user'\n            }?`,\n            cancelButtonText: 'Go Back',\n            confirmButtonText: 'Yes, Revoke',\n            onConfirm: () => onConfirmRevokeInvitations(revokeInvitationIds),\n            customization: {\n                padding: '45px 32px 40px 40px',\n                descriptionMarginBottom: 9\n            },\n        });\n    };\n\n    const onSuccessRevokeInvitationBulkActionService = useCallback(() => {\n        refreshData();\n        // refresh inviters list on filters.\n        refreshInvitersList();\n    }, [refreshData, refreshInvitersList]);\n\n    const revokeInvitationBulkActionService =\n        useRevokeInvitationBulkActionService(\n            searchParams,\n            profile?.companyId ?? 0,\n            users?.count ?? 0,\n            onSuccessRevokeInvitationBulkActionService\n        );\n\n    /**\n     * @function handleRevokeMultipleInvitations\n     * @returns { void }\n     */\n    const handleRevokeMultipleInvitations = (): void => {\n        selectedInvitationIds &&\n            (isSelectAll\n                ? revokeInvitationBulkActionService()\n                : handleRevokeInvitation(selectedInvitationIds));\n    };\n\n    /**\n     * @function handleResendInvitation\n     * @returns { void }\n     */\n    const handleResendInvitation = useCallback(\n        (\n            invitationIds: number[],\n            search?: SearchParams,\n            isSelectAll?: boolean\n        ) => {\n            onResendInvitation(\n                invitationIds,\n                invitationIds.length === 1,\n                isSelectAll\n                    ? normalizeSP(searchParams, users!.count)\n                    : searchParams,\n                isSelectAll\n            );\n        },\n        [onResendInvitation, searchParams, users]\n    );\n\n    const handleResendInvitationBulkActionService =\n        useResendInvitationBulkActionService(\n            searchParams,\n            profile?.companyId ?? 0,\n            users?.count ?? 0,\n            refreshData\n        );\n\n    /**\n     * @function handleResendMultipleInvitation\n     * @returns { void }\n     */\n    const handleResendMultipleInvitation = (): void => {\n        if (\n            !selectedInvitationIds ||\n            (!!selectedInvitationIds && !selectedInvitationIds.length)\n        )\n            return;\n\n        isSelectAll\n            ? handleResendInvitationBulkActionService()\n            : handleResendInvitation(\n                  selectedInvitationIds,\n                  searchParams,\n                  isSelectAll\n              );\n    };\n\n    const getDeletedLabels = useCalculateDeletedLabels();\n    const assignLabelsToUser = useAssignUserLabelsApi();\n    const deleteLabelsFromUser = useDeleteUserLabelsApi();\n\n    const updateMultipleUsersLabels =\n        useUpdateMultipleEntityLabelsBulkActionService(\n            assignLabelsToUser,\n            deleteLabelsFromUser,\n            isSelectAll,\n            {\n                actionName: UPDATE_MULTIPLE_LABEL_ACTION,\n                actionFunction: searchInvitations,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            limit: 1,\n                            offset: users?.count ?? 0,\n                        },\n                        companyId: profile?.companyId ?? 0,\n                        shouldSetStore: false,\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n            refreshData\n        );\n\n    const assignLabels = async () => {\n        if (assignedLabels && selectedInvitationIds) {\n            const { preAssignedLabels } = await getAssignedLabelsIds(\n                selectedInvitationIds,\n                LOAD_ASSIGNED_LABELS.USERS_PENDING,\n                ASSIGN_LABEL_OPTIONS.USER,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                return calculatePreSelectedLabels(\n                    selectedInvitationIds,\n                    users,\n                    data\n                );\n            });\n\n            const deletedLabels = getDeletedLabels(assignedLabels);\n\n            const deletedLabelsFiltered = deletedLabels.filter(\n                x =>\n                    preAssignedLabels.includes(x) ||\n                    preAssignedLabels.includes(-x)\n            );\n            const selectedLabelsFiltered = assignedLabels.filter(\n                x => x > 0 && !preAssignedLabels.includes(x)\n            );\n\n            updateMultipleUsersLabels(\n                {\n                    entityName: 'user',\n                    entityIds: selectedInvitationIds,\n                },\n                selectedLabelsFiltered,\n                deletedLabelsFiltered\n            );\n        }\n    };\n\n    const getAssignedLabelsIds = useAssignedLabelsIdsApi();\n\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\n\n    const updateAllUsersCheck = useCallback(\n        (checked: boolean) => {\n            const userIds =\n                (users && users.items.map((user: UserV2) => Number(user.id))) ||\n                [];\n            updateAllSelectedInvitations(\n                userIds,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [users, isCheckboxPartiallySelected, updateAllSelectedInvitations]\n    );\n\n    const handleUserCheck = (e: any, user: UserV2) => {\n        e.stopPropagation();\n        if (!!user.id) {\n            updateSelectedInvitation(user.id);\n        }\n    };\n\n    const permissions = usePermissionsState();\n\n    const handleViewProfile = (user: UserV2) => {\n        if (permissions.includes(NEW_PERMISSIONS.VIEW_USER_PERFORMANCE)) {\n            history.push(\n                ROUTES.INVITATION_PERFORMANCE.replace(\n                    ':userId',\n                    user.id!.toString()\n                ),\n                { useGoBack: true }\n            );\n        } else {\n            return false;\n        }\n    };\n\n    const orderBy = searchParams.orderBy;\n    const hcFirstName = useOrderBy('name', orderBy, setOrderBy);\n    const hcEmail = useOrderBy('email', orderBy, setOrderBy);\n    const hcRole = useOrderBy('role_name', orderBy, setOrderBy);\n    const hcInvitedOn = useOrderBy('date_created', orderBy, setOrderBy);\n    const hcInvitedby = useOrderBy('invited_by', orderBy, setOrderBy);\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const isListEmpty = !users || (users && !users.items.length);\n\n    const filterRoleHandler = (roleIds: number[]) => {\n        setCustom('roleIDs', roleIds);\n    };\n\n    const labelChangeHandler = (ids: number[]) => {\n        saveGlobalLabelFilters(ids);\n    };\n\n    const filterInvitersHandler = (invitersIDs: number[]) => {\n        setCustom('invitersIDs', invitersIDs);\n        setFilter({ field: 'creatorId', value: invitersIDs });\n    };\n\n    const bulkActions = useMemo(\n        () => actionsHelper.getBulkActions(selectedInvitations),\n        [selectedInvitations, actionsHelper]\n    );\n\n    const assignedFiltersCount = countAppliedFiltersCount(searchParams);\n\n    const deselectTeams = useDeselectAllTeams();\n    const deselectAllInviters = useDeSelectAllInvitersAction();\n    const saveTeams = useSaveTeams();\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        updateAllUsersCheck(event.target.checked);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function checkIsRowChecked\n     * @param { UserV2 } row\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (row: UserV2): boolean =>\n        !!selectedInvitationIds &&\n        !!row.id &&\n        selectedInvitationIds.includes(row.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { UserV2 } row\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, row: UserV2) => {\n        handleUserCheck(event, row);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { UserV2 } row\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (row: UserV2): boolean => {\n        return labelsOpen === row.id;\n    };\n\n    /**\n     * @function onDeleteLabelHandler\n     * @param { number } labelId\n     * @param { number } userId\n     * @returns { void }\n     */\n    const onDeleteLabelHandler = (labelId: number, userId: number): void => {\n        deleteUserLabel(userId, labelId);\n    };\n\n    useSessionEffect(() => {\n        if (!profile?.companyId) return;\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchInvitations(searchParams, profile.companyId);\n    }, [profile?.companyId, searchInvitations, searchParams, history]);\n\n    useEffect(() => {\n        if (updatedInvitations || !!draftEdit?.updateData?.id) {\n            refreshSearchParams();\n        }\n    }, [updatedInvitations, refreshSearchParams, draftEdit?.updateData?.id]);\n\n    useEffect(() => {\n        selectedLabels && setLabelIDs(selectedLabels);\n    }, [selectedLabels, setLabelIDs]);\n\n    useEffect(() => {\n        if (updatedLabels && updatedLabels.updateType === 'delete')\n            refreshSearchParams();\n    }, [updatedLabels, refreshSearchParams]);\n\n    useEffect(() => {\n        setLastRefreshed(new Date());\n    }, [users]);\n\n    useEffect(() => {\n        return () =>\n            updateAllSelectedInvitations([], true, isCheckboxPartiallySelected);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllSelectedInvitations([], true, isCheckboxPartiallySelected);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [users, history.location.pathname]);\n\n    useEffect(() => {\n        if (\n            selectedInvitations?.length &&\n            selectedInvitations.length === users?.count\n        ) {\n            setIsSelectAll(true);\n        }\n    }, [users?.count, selectedInvitations]);\n\n    /**\n     * @function onOpenAssignLabelAction\n     * @returns { void }\n     */\n    const onOpenAssignLabelAction = (): void => {\n        if (users?.items && !lodashIsEmpty(selectedInvitationIds)) {\n            getAssignedLabelsIds(\n                selectedInvitationIds as number[],\n                LOAD_ASSIGNED_LABELS.USERS_PENDING,\n                ASSIGN_LABEL_OPTIONS.USER,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                const { preAssignedLabels } = calculatePreSelectedLabels(\n                    selectedInvitationIds as number[],\n                    users,\n                    data\n                );\n\n                setAssignLabelsAction(preAssignedLabels);\n            });\n        }\n    };\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n    }, [initialOffset, pageIndex, setOffset]);\n\n    useEffect(() => {\n        const filteredUsers = users\n            ? users.items.map(user => Number(user.id))\n            : [];\n        const usersToClear = clearSelectedItemIfNotLoaded(\n            selectedInvitationIds,\n            filteredUsers\n        );\n        if (usersToClear && usersToClear.length > 0) {\n            updateAllSelectedInvitations(usersToClear, false);\n        }\n    }, [selectedInvitationIds, users, updateAllSelectedInvitations]);\n\n    useEffect(() => {\n        return () => {\n            deselectTeams();\n            saveTeams();\n            deselectAllInviters();\n        };\n    }, [deselectTeams, saveTeams, deselectAllInviters]);\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_INVITATION]);\n    }, [canAccessPage]);\n\n    // Listen to Invite Users Screen Refresh dispatch\n    useEffect(() => {\n        onListenEvent(EventNameList[REFRESH_PENDING_USERS_PAGE], () => {\n            if (\n                profile?.companyId &&\n                !isEqual(prevCompanyId, profile.companyId)\n            ) {\n                refreshData();\n            }\n        });\n\n        return () => {\n            onRemoveEvent(\n                EventNameList[REFRESH_PENDING_USERS_PAGE],\n                refreshData\n            );\n        };\n    }, [prevCompanyId, profile, refreshData]);\n\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\n        assignLabelsToUser,\n        deleteLabelsFromUser,\n        refreshData\n    );\n\n    /**\n     * @function handleUpdateUserLabels\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { number } userId\n     * @returns { void }\n     */\n    const handleUpdateUserLabels = (\n        addedLabelIds: number[],\n        deletedLabelIds: number[],\n        userId: number\n    ): void => {\n        updateLabelsBulkActionService(\n            {\n                entityName: 'user',\n                entityId: userId,\n            },\n            addedLabelIds,\n            deletedLabelIds\n        );\n    };\n\n    return (\n        <MainWrapper\n            subTitle=\"Users\"\n            subHeader={profile?.companyId &&\n                <CompanyUserStatsText\n                    companyId={profile.companyId}\n                    showSettingsButton={isAdminRole(profile?.role?.name)}\n                />\n            }\n            tabs={<UsersPageNavigationContainer />}\n            htmlPageTitle=\"Users - Practis\"\n            dataTest=\"users\"\n        >\n            {loading && !isSelectAll && <LoadingComponent />}\n\n            <TableWrapper\n                tableStates={tableStates}\n                data={users?.items}\n                selectedLabels={selectedLabels}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'users-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: users?.count ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            countAppliedFiltersCount(searchParams),\n                        dataTest: 'users-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled:\n                            isListEmpty && searchParams.searchTerm.length === 0,\n                    },\n                    isSelectedItemOptionsVisible:\n                        !lodashIsEmpty(selectedInvitations) &&\n                        !lodashIsEmpty(users),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedInvitations?.length,\n                        totalCount: users?.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: () => {\n                            updateAllSelectedInvitations(\n                                [],\n                                true,\n                                isCheckboxPartiallySelected\n                            );\n                            setIsSelectAll(false);\n                        },\n                        onSelectAll: () => {\n                            setIsSelectAll(true);\n                            updateAllUsersCheck(true);\n                        },\n                        bulkActionsConfig: {\n                            disabled: bulkActions.areBulkActionsDisabled(),\n                            disabledLabel: bulkActions.areItemsEmpty()\n                                ? undefined\n                                : \"Bulk actions can't be applied\",\n                            assignLabelsPermissions:\n                                bulkActions.isBulkActionVisible(\n                                    InvitationActions.ASSIGN_INVITATION_LABEL\n                                )\n                                    ? [NEW_PERMISSIONS.ASSIGN_INVITATION_LABEL]\n                                    : [],\n                            isAssignLabelsDisabled:\n                                bulkActions.isBulkActionDisabled(\n                                    InvitationActions.ASSIGN_INVITATION_LABEL\n                                ),\n                            onOpenAssignLabelAction: onOpenAssignLabelAction,\n                            onAssignLabelsSubmit: assignLabels,\n                            resendInvitesPermissions:\n                                bulkActions.isBulkActionVisible(\n                                    InvitationActions.RESEND_INVITATION\n                                )\n                                    ? [NEW_PERMISSIONS.RESEND_INVITATION]\n                                    : [],\n                            isResendDisabled: bulkActions.isBulkActionDisabled(\n                                InvitationActions.RESEND_INVITATION\n                            ),\n                            onResendInvitesSubmit:\n                                handleResendMultipleInvitation,\n\n                            revokePermissions: bulkActions.isBulkActionVisible(\n                                InvitationActions.REVOKE_INVITATION\n                            )\n                                ? [NEW_PERMISSIONS.REVOKE_INVITATION]\n                                : [],\n                            isRevokeDisabled: !hasPermission(\n                                profile,\n                                NEW_PERMISSIONS.REVOKE_INVITATION\n                            ),\n                            onRevokeSubmit: handleRevokeMultipleInvitations,\n                            isSelectAll: isSelectAll,\n                            totalCount: users?.count,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <InvitationsFilter\n                                        preSelectedLabels={selectedLabels || []}\n                                        onInvitersChange={filterInvitersHandler}\n                                        onRoleChange={filterRoleHandler}\n                                        preSelectedRoles={\n                                            searchParams.roleIDs\n                                                ? searchParams.roleIDs\n                                                : []\n                                        }\n                                        onLabelsChange={labelChangeHandler}\n                                        onSuccessApply={() => hide()}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={256}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={assignedFiltersCount}\n                                        disabled={\n                                            (searchParams.searchTerm.length >\n                                                0 ||\n                                                assignedFiltersCount === 0) &&\n                                            isListEmpty\n                                        }\n                                        dataTest=\"users-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && users?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: Pending,\n                        text: 'No Pending Users Yet',\n                        dataTest: 'no-results',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Users',\n                        dataTest: 'no-found-results',\n                    },\n                    noFilterResultsOptions: {\n                        dataTest: 'no-filtered-results',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: !!selectedInvitationIds?.length,\n                        disabled: !users || users?.items.length < 1,\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'master-checkbox',\n                    },\n                    columns: [\n                        {\n                            title: 'Users',\n                            width: 28,\n                            ...(isListEmpty ? null : hcFirstName),\n                            disabled: isListEmpty,\n                            className: classes.customTableColumnStyle,\n                            dataTest: 'name-column',\n                        },\n                        {\n                            title: 'Email Address',\n                            width: 15,\n                            ...(isListEmpty ? null : hcEmail),\n                            disabled: isListEmpty,\n                            className: classes.customTableColumnStyle,\n                            dataTest: 'email-column',\n                        },\n                        {\n                            title: 'Role',\n                            width: 15,\n                            ...(isListEmpty ? null : hcRole),\n                            disabled: isListEmpty,\n                            dataTest: 'role-column',\n                        },\n                        {\n                            title: 'Invited by',\n                            width: 15,\n                            ...(isListEmpty ? null : hcInvitedby),\n                            disabled: isListEmpty,\n                            dataTest: 'inviter-column',\n                        },\n                        {\n                            title: 'Invited on',\n                            width: 12,\n                            ...(isListEmpty ? null : hcInvitedOn),\n                            disabled: isListEmpty,\n                            dataTest: 'invitation-date-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n                    rowConfig: {\n                        onRowClick: handleViewProfile,\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        getLabelTagsProps: (user: UserV2) => ({\n                            selectedLabels: user.labels,\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_INVITATION_LABEL,\n                            ],\n\n                            onDeleteLabel: (labelId: number) =>\n                                onDeleteLabelHandler(labelId, user.id),\n                        }),\n                        dataTest: 'user-item',\n                        cells: [\n                            {\n                                fieldType: 'AVATAR_FIELD',\n                                fieldProps: {\n                                    renderTitle: (item: UserV2) =>\n                                        `${item.firstName} ${item.lastName}`,\n                                    getAvatarProps: (user: UserV2) => ({\n                                        customProfile: {\n                                            firstName: user.firstName,\n                                            lastName: user.lastName,\n                                            picture: user.imageUrl,\n                                            status: user.status,\n                                        },\n                                        size: 'sm',\n                                        hidePending: true,\n                                    }),\n                                    dataTest: 'user',\n                                    className:\n                                        classes.avatarTableCellCustomStyle,\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (item: UserV2) => item.email,\n                                    dataTest: 'user-email',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (item: UserV2) =>\n                                        item.role?.title,\n                                    dataTest: 'user-role',\n                                },\n                            },\n                            {\n                                fieldType: 'AVATAR_FIELD',\n                                shouldShowEmptyCell: (item: UserV2) =>\n                                    !item.invitedBy,\n                                fieldProps: {\n                                    renderTitle: (item: UserV2) =>\n                                        `${item.invitedBy!.firstName} ${\n                                            item.invitedBy!.lastName\n                                        }`,\n                                    getAvatarProps: (user: UserV2) => ({\n                                        customProfile: {\n                                            firstName:\n                                                user.invitedBy!.firstName,\n                                            lastName: user.invitedBy!.lastName,\n                                            picture: user.invitedBy!.imageUrl,\n                                            status: user.invitedBy!.status,\n                                        },\n                                        size: 'sm',\n                                    }),\n                                    dataTest: 'inviter',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (item: UserV2) =>\n                                        formatDate(item.createdAt),\n                                    dataTest: 'invitation-date',\n                                },\n                            },\n                            {\n                                fieldType: 'LABEL_TAGS',\n                                fieldProps: {\n                                    getLabelTagsProps: (item: UserV2) => {\n                                        return {\n                                            open: labelsOpen === item.id,\n                                            toggleOpen: () =>\n                                                handleToggleLabels(item.id),\n                                            selectedLabels: item.labels,\n                                            dataTest: 'user-labels',\n                                        };\n                                    },\n                                },\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (row: UserV2) => (\n                                        <InvitationsListActions\n                                            invitation={row}\n                                            actionsHelper={actionsHelper}\n                                            onViewProfile={handleViewProfile}\n                                            onCopyInviteText={onCopyInviteText}\n                                            handleRevokeInvitation={\n                                                handleRevokeInvitation\n                                            }\n                                            assignLabelsToUser={(\n                                                addedLabelIds,\n                                                deletedLabelIds\n                                            ) =>\n                                                handleUpdateUserLabels(\n                                                    addedLabelIds,\n                                                    deletedLabelIds,\n                                                    row.id\n                                                )\n                                            }\n                                            handleResendInvitation={\n                                                handleResendInvitation\n                                            }\n                                            isHidden={\n                                                !!selectedInvitations?.length\n                                            }\n                                        />\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const InvitationsContainer: FC = () => {\n    const state = useInvitationsState();\n    const updatedInvitationsState = useUpdateInvitationsState();\n    const history = useHistory();\n    const company: CompanyInterface = useSelector(getCompanyState);\n    const searchInvitationUsers = useSearchInvitationsService();\n    const resendInvitation = useResendInvitationService();\n    const copyInviteText = useCopyInviteTextService();\n    const revokeInvitation = useRevokeInvitationService();\n\n    const labels = useLabelsState();\n    const deleteUserLabel = useDeleteUserLabelService(true);\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const updateAllSelectedInvitations =\n        useUpdateAllSelectedInvitationsStateService();\n    const updateSelectedInvitation = useUpdateSelectedInvitationStateService();\n    const updatedLabels = useUpdatedLabelsState();\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const actionsHelper = useInvitationActionsHelper();\n    const draftEdit = useDraftEditState();\n    const getCompany = useGetCompanyService();\n    const getCompanyUserStats = useGetCompanyUserStatsService();\n\n    const selectedInvitations = useMemo(\n        () => selectSelectedInvitations(state),\n        [state]\n    );\n    const searchState = useSelector(getSearchState);\n    const profile = useSelector(getProfileState, isEqual);\n\n    const handleCopyInviteText = useCallback(\n        (invitation: UserV2) => {\n            copyInviteText(invitation, company);\n        },\n        [company, copyInviteText]\n    );\n\n    useEffect(() => {\n        if (!company.id && profile?.companyId) {\n            getCompany(profile.companyId!);\n        }\n    }, [company?.id, profile?.companyId, getCompany]);\n\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'invitations' }}>\n            <WithTeamsContext.Provider value={{ reducerName: 'invitations' }}>\n                <Invitations\n                    history={history}\n                    searchInvitations={searchInvitationUsers}\n                    onResendInvitation={resendInvitation}\n                    onCopyInviteText={handleCopyInviteText}\n                    onRevokeInvitation={revokeInvitation}\n                    users={state.data}\n                    selectedInvitationIds={state.selectedInvitations}\n                    selectedInvitations={selectedInvitations}\n                    actionsHelper={actionsHelper}\n                    loading={state.loading}\n                    updatedInvitations={updatedInvitationsState.data}\n                    selectedLabels={labels.selected}\n                    setAssignLabelsAction={setAssignLabelsAction}\n                    assignedLabels={labels.assignedLabels}\n                    updateAllSelectedInvitations={updateAllSelectedInvitations}\n                    updateSelectedInvitation={updateSelectedInvitation}\n                    deleteUserLabel={deleteUserLabel}\n                    updatedLabels={updatedLabels}\n                    saveGlobalLabelFilters={saveGlobalLabelFilters}\n                    draftEdit={draftEdit}\n                    searchState={searchState}\n                    profile={profile}\n                    getCompanyUserStats={getCompanyUserStats}\n                />\n            </WithTeamsContext.Provider>\n        </WithLabelsContext.Provider>\n    );\n};\n\n\nexport default InvitationsContainer;","export enum ACTIONS {\n    UPLOAD_CHALLENGE_AUDIO_START = 'UPLOAD_CHALLENGE_AUDIO_START',\n    UPLOAD_CHALLENGE_AUDIO_SUCCESS = 'UPLOAD_CHALLENGE_AUDIO_SUCCESS',\n    UPLOAD_CHALLENGE_AUDIO_FAILURE = 'UPLOAD_CHALLENGE_AUDIO_FAILURE',\n\n    CREATE_CHALLENGES_SCRIPT_LINE = 'CREATE_CHALLENGES_SCRIPT_LINE',\n    UPDATE_CHALLENGES_SCRIPT_LINE = 'UPDATE_CHALLENGES_SCRIPT_LINE',\n    DELETE_CHALLENGES_SCRIPT_LINE = 'DELETE_CHALLENGES_SCRIPT_LINE',\n    MODIFY_CHALLENGES_SCRIPT_LINE = 'MODIFY_CHALLENGES_SCRIPT_LINE',\n\n    RESET_CHALLENGE = 'RESET_CHALLENGE',\n    RESET_CHALLENGE_LOGO = 'RESET_CHALLENGE_LOGO',\n\n    FETCH_CHALLENGE_START = 'FETCH_CHALLENGE_START',\n    FETCH_CHALLENGE_SUCCESS = 'FETCH_CHALLENGE_SUCCESS',\n    FETCH_CHALLENGE_FAILURE = 'FETCH_CHALLENGE_FAILURE',\n\n    STORE_CHALLENGE_TEMP_COPY = 'STORE_CHALLENGE_TEMP_COPY',\n    RESTORE_CHALLENGE_FROM_TEMP = 'RESTORE_CHALLENGE_FROM_TEMP',\n\n    MODIFY_CHALLENGE = 'MODIFY_CHALLENGE',\n}\n\nexport function createChallengeScriptLineAction(data: any, silent?: boolean) {\n    return {\n        type: ACTIONS.CREATE_CHALLENGES_SCRIPT_LINE as ACTIONS.CREATE_CHALLENGES_SCRIPT_LINE,\n        data,\n        silent,\n    };\n}\n\nexport function updateChallengeScriptLineAction(data: any) {\n    return {\n        type: ACTIONS.UPDATE_CHALLENGES_SCRIPT_LINE as ACTIONS.UPDATE_CHALLENGES_SCRIPT_LINE,\n        data,\n    };\n}\n\nexport function modifyChallengeScriptLineAction(\n    data: any,\n    field: string,\n    lineId: number | string\n) {\n    return {\n        type: ACTIONS.MODIFY_CHALLENGES_SCRIPT_LINE as ACTIONS.MODIFY_CHALLENGES_SCRIPT_LINE,\n        lineId: lineId,\n        data: data,\n        field: field,\n    };\n}\n\nexport function deleteChallengeScriptLineAction(data: any) {\n    return {\n        type: ACTIONS.DELETE_CHALLENGES_SCRIPT_LINE as ACTIONS.DELETE_CHALLENGES_SCRIPT_LINE,\n        data,\n    };\n}\n\nexport function uploadChallengeAudioStart() {\n    return {\n        type: ACTIONS.UPLOAD_CHALLENGE_AUDIO_START as ACTIONS.UPLOAD_CHALLENGE_AUDIO_START,\n    };\n}\n\nexport function uploadChallengeAudioSuccess(\n    scriptLineId: string | number,\n    response: any\n) {\n    return {\n        type: ACTIONS.UPLOAD_CHALLENGE_AUDIO_SUCCESS as ACTIONS.UPLOAD_CHALLENGE_AUDIO_SUCCESS,\n        data: {\n            scriptLineId,\n            response,\n        },\n    };\n}\n\nexport function uploadChallengeAudioFailure(error: any) {\n    return {\n        type: ACTIONS.UPLOAD_CHALLENGE_AUDIO_FAILURE as ACTIONS.UPLOAD_CHALLENGE_AUDIO_FAILURE,\n        error,\n    };\n}\n\nexport function resetChallengeAction() {\n    return {\n        type: ACTIONS.RESET_CHALLENGE as ACTIONS.RESET_CHALLENGE,\n    };\n}\n\nexport function resetChallengeLogoAction() {\n    return {\n        type: ACTIONS.RESET_CHALLENGE_LOGO as ACTIONS.RESET_CHALLENGE_LOGO,\n    };\n}\n\nexport function fetchChallengeStart() {\n    return {\n        type: ACTIONS.FETCH_CHALLENGE_START as ACTIONS.FETCH_CHALLENGE_START,\n    };\n}\n\nexport function fetchChallengeSuccess(data: any) {\n    return {\n        type: ACTIONS.FETCH_CHALLENGE_SUCCESS as ACTIONS.FETCH_CHALLENGE_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchChallengeFailure(error: any) {\n    return {\n        type: ACTIONS.FETCH_CHALLENGE_FAILURE as ACTIONS.FETCH_CHALLENGE_FAILURE,\n        error,\n    };\n}\n\nexport function modifyChallengeAction(\n    data: any,\n    field: string,\n    silent?: boolean\n) {\n    return {\n        type: ACTIONS.MODIFY_CHALLENGE as ACTIONS.MODIFY_CHALLENGE,\n        field: field,\n        data: data,\n        silent: silent,\n    };\n}\n\nexport function storeChallengeTempCopyAction() {\n    return {\n        type: ACTIONS.STORE_CHALLENGE_TEMP_COPY as ACTIONS.STORE_CHALLENGE_TEMP_COPY,\n    };\n}\n\nexport function restoreChallengeFromTempAction() {\n    return {\n        type: ACTIONS.RESTORE_CHALLENGE_FROM_TEMP as ACTIONS.RESTORE_CHALLENGE_FROM_TEMP,\n    };\n}\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../../../../ui/components/Button';\nimport { Fieldset } from '../../../../ui/components/Fieldset';\nimport { PortableLabelsWithStore } from '../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../portableLabels/store/hors/withLabels/services';\nimport { PortableTeamsWithStore } from '../../../portableTeams';\nimport { useDeselectAllTeams, useSaveTeams } from '../../../portableTeams/store/hors/withTeams/services';\nimport { useTeamsState } from '../../../portableTeams/store/hors/withTeams/states';\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\nimport PortableRolesWithMultiSelect from '../../../portableRoles/portableRolesWithMultiSelect';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst RoleContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 152px;\n    background-color: inherit;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nexport const UsersFilter: FC<{\n    preSelectedLabels: number[];\n    onLabelsChange: (ids: number[]) => void;\n    onTeamsChange: (ids: number[]) => void;\n    onRoleChange: (status: number[]) => void;\n    onSuccessApply: () => void;\n    preSelectedRoles: number[];\n}> = ({\n    preSelectedLabels,\n    onLabelsChange,\n    onTeamsChange,\n    onRoleChange,\n    onSuccessApply,\n    preSelectedRoles,\n}) => {\n    const [selectedRoles, setSelectedRoles] = useState(preSelectedRoles);\n    const teams = useTeamsState();\n    const labels = useLabelsState();\n    const selectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const saveTeams = useSaveTeams();\n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(preSelectedLabels);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        preSelectedLabels,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    const onApplyHandler = useCallback(() => {\n        onLabelsChange(labels.selected);\n        onTeamsChange(teams.selected);\n        onRoleChange(selectedRoles);\n        saveLabels();\n        saveTeams();\n        onSuccessApply();\n    }, [\n        onLabelsChange,\n        labels.selected,\n        onTeamsChange,\n        teams.selected,\n        onRoleChange,\n        selectedRoles,\n        saveLabels,\n        saveTeams,\n        onSuccessApply,\n    ]);\n\n    const totalFiltersSelected =\n        teams.selected.length +\n        labels.selected.filter((id: any) => id > 0).length +\n        selectedRoles.length;\n\n    const deselectLabels = useDeselectAllLabels();\n    const deselectTeams = useDeselectAllTeams();\n\n    const onClearHandler = () => {\n        setSelectedRoles([]);\n        deselectLabels();\n        deselectTeams();\n    }\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Role'} dataTest=\"roles-section-title\">\n                    <RoleContainer>\n                        <PortableRolesWithMultiSelect\n                            selectedRoles={selectedRoles}\n                            setSelectedRoles={setSelectedRoles}\n                        />\n                    </RoleContainer>\n                </Fieldset>\n                <Fieldset title={'Teams'} dataTest=\"teams-section-title\">\n                    <TeamsContainer>\n                        <PortableTeamsWithStore\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant='inverse'\n                        width={'122px'}\n                        action={() => onClearHandler()}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={() => onApplyHandler()}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { FC, useRef, useState } from 'react';\n\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../ui/components/ActionButton';\nimport { CheckPermission } from '../../../permissions';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { PopupComponent } from '../../../../ui/components/Popup';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../portableLabels/store/hors/withLabels/services';\nimport {\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabelsForSingleItem,\n} from '../../../labels/tools';\nimport { AssignLabels } from '../../../portableLabels/templates/AssignLabels';\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\nimport { UserV2 } from '../../../../constants/interfaces/User';\nimport { usePractisSetsEnrollmentsService } from '../../store/services';\nimport { AssignPractisSets } from '../../../../features/assign-practisSets';\n\nconst UsersListActions: FC<{\n    user: UserV2;\n    handleViewProfile: (user: UserV2) => void;\n    handleUserSettings: (user: UserV2) => void;\n    handleItemEdit: (user: UserV2) => void;\n    setShowNudgeDialogMemberId: (userId: number) => void;\n    onExportClicked: (userIds: number[]) => void;\n    setUserIdsToDelete: (userIds: number[]) => void;\n    assignLabelsToUser: (\n        addedLabelIds: number[],\n        deletedLabelIds: number[]\n    ) => void;\n    isHidden?: boolean;\n    successApplyPractisSetsCallback: () => void;\n}> = ({\n    user,\n    handleViewProfile,\n    handleUserSettings,\n    handleItemEdit,\n    setShowNudgeDialogMemberId,\n    onExportClicked,\n    setUserIdsToDelete,\n    assignLabelsToUser,\n    isHidden,\n    successApplyPractisSetsCallback,\n}) => {\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const calculatePreSelectedLabels =\n        useCalculatePreSelectedLabelsForSingleItem();\n    const getDeletedLabels = useCalculateDeletedLabels();\n    const getUserPractisSets = usePractisSetsEnrollmentsService(\n        user.id?.toString()\n    );\n\n    const [isAssignPractisSetPopupOpen, setIsAssignPractisSetPopupOpen] =\n        useState(false);\n\n    const handleSetPreselectedLabels = () => {\n        const selectedLabelIds = user.labels;\n        const preAssignedLabels = calculatePreSelectedLabels(\n            selectedLabelIds,\n            labelsList.data\n        );\n        setSelectLabels(preAssignedLabels);\n        saveLabels();\n    };\n\n    const handleSaveSelectedLabels = (labelIDs: number[]) => {\n        const addedLabelIds = labelIDs.filter(id => id > 0);\n        const deletedLabelIds = getDeletedLabels(labelIDs);\n\n        assignLabelsToUser(addedLabelIds, deletedLabelIds);\n    };\n\n    const [assignSingleLabelOpen, setAssignSingleLabelOpen] = useState<\n        null | number | undefined\n    >(null);\n\n    const triggerRef = useRef(null);\n\n    /**\n     * @function handleOpenAssignPractisSetPopup\n     * @returns { void }\n     */\n    const handleOpenAssignPractisSetPopup = (): void => {\n        getUserPractisSets(() => setIsAssignPractisSetPopupOpen(true));\n    };\n\n    /**\n     * @function handleCloseAssignPractisSetPopup\n     * @returns { void }\n     */\n    const handleCloseAssignPractisSetPopup = (): void => {\n        setIsAssignPractisSetPopupOpen(false);\n    };\n\n    return (\n        <span>\n            <div ref={triggerRef}>\n                <ActionButton customWidth={200} isHidden={isHidden} dataTest=\"list-item-menu\">\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.VIEW_USER_PERFORMANCE]}\n                    >\n                        <ActionItem onClick={() => handleViewProfile(user)} dataTest=\"view-profile-action\">\n                            View Profile\n                        </ActionItem>\n                    </CheckPermission>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.VIEW_USER_PERFORMANCE]}\n                    >\n                        <ActionItem onClick={() => handleUserSettings(user)} dataTest=\"user-settings-action\">\n                            User Settings\n                        </ActionItem>\n                    </CheckPermission>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.ASSIGN_ENROLLMENT]}\n                    >\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                handleOpenAssignPractisSetPopup();\n                            }}\n                            dataTest=\"assign-practis-sets-action\"\n                        >\n                            Assign Practis Sets\n                        </ActionItem>\n                    </CheckPermission>\n                    {!!labelsList.data.items.length && (\n                        <CheckPermission\n                            permissions={[NEW_PERMISSIONS.ASSIGN_USER_LABEL]}\n                        >\n                            <ActionItem\n                                onClick={e => {\n                                    e.stopPropagation();\n                                    setAssignSingleLabelOpen(user.id);\n                                    handleSetPreselectedLabels();\n                                }}\n                                dataTest=\"assign-labels-action\"\n                            >\n                                Assign Labels\n                            </ActionItem>\n                        </CheckPermission>\n                    )}\n                    <CheckPermission permissions={[NEW_PERMISSIONS.SEND_NUDGE]}>\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                setShowNudgeDialogMemberId(user.id!);\n                            }}\n                            dataTest=\"nudge-user-action\"\n                        >\n                            Nudge User\n                        </ActionItem>\n                    </CheckPermission>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.EXPORT_LIST_USER]}\n                    >\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                onExportClicked([user.id!]);\n                            }}\n                            dataTest=\"export-report-action\"\n                        >\n                            Export Report\n                        </ActionItem>\n                    </CheckPermission>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.DELETE_USER]}\n                    >\n                        <ActionItem\n                            destructive={true}\n                            onClick={e => {\n                                e.stopPropagation();\n                                setUserIdsToDelete([user.id!]);\n                            }}\n                            dataTest=\"delete-user-action\"\n                        >\n                            Deactivate User\n                        </ActionItem>\n                    </CheckPermission>\n                </ActionButton>\n            </div>\n            <PopupComponent\n                triggerRef={triggerRef}\n                open={assignSingleLabelOpen === user.id}\n                onDismiss={() => {\n                    setAssignSingleLabelOpen(null);\n                }}\n            >\n                <AssignLabels\n                    onLabelsChange={handleSaveSelectedLabels}\n                    onSuccessApply={() => {\n                        setAssignSingleLabelOpen(null);\n                    }}\n                    withBorder={true}\n                />\n            </PopupComponent>\n\n            {isAssignPractisSetPopupOpen && (\n                <AssignPractisSets\n                    triggerRef={triggerRef}\n                    isOpen={isAssignPractisSetPopupOpen}\n                    onClose={handleCloseAssignPractisSetPopup}\n                    users={[user.id]}\n                    successApplyPractisSetsCallback={\n                        successApplyPractisSetsCallback\n                    }\n                />\n            )}\n        </span>\n    );\n};\n\nexport default UsersListActions;\n\n\n\n","import React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\nimport { usePortableTeamsState } from '../../portableTeams/store/states';\r\nimport { Popup } from '../../../ui/components/Popup';\r\nimport { AssignTeams } from '../../portableTeams/templates/AssignTeams';\r\nimport { Tooltip } from '../../../ui/components/Tooltip';\r\nimport { Variables } from '../../../theme/variables';\r\nimport UpArrow from '../../../ui/icons/UpArrow';\r\nimport DownArrow from '../../../ui/icons/DownArrow';\r\n\r\nconst Container = styled.div`\r\n    position: relative;\r\n    height: 100%;\r\n    width: 85px;\r\n`;\r\n\r\nconst SelectHead = styled.div<{ disabled?: boolean }>`\r\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\r\n    display: flex;\r\n    height: 100%;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    justify-content: center;\r\n`;\r\n\r\nconst SelectButtonWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-start;\r\n    width: 100%;\r\n`;\r\n\r\nconst SelectLabel = styled.div<{ color?: string; disabled?: boolean }>`\r\n    pointer-events: none;\r\n    font-size: 13px;\r\n    -webkit-transition: all 0.18s ease;\r\n    transition: all 0.18s ease;\r\n    display: flex;\r\n    align-items: center;\r\n    height: 100%;\r\n    color: ${props =>\r\n        props.disabled ? props.theme.Colors.lightBlueGray : props.color};\r\n    font-weight: 500;\r\n    margin-bottom: 1px;\r\n`;\r\n\r\nconst SelectInputContainer = styled.div<{ noText?: boolean }>`\r\n    width: ${props =>\r\n        props.noText ? 30 : 80}px;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n`;\r\n\r\nconst IconHolder = styled.div<{ disabled?: boolean }>`\r\n    width: 8px;\r\n    height: 100%;\r\n    display: flex;\r\n    pointer-events: none;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: ${props =>\r\n        props.disabled\r\n            ? props.theme.Colors.cloudyBlue\r\n            : props.theme.Colors.steelGrey};\r\n    align-self: center;\r\n`;\r\n\r\nconst SelectedUserTeamsComponent: FC<{\r\n    teamsCount: number;\r\n    selectedTeams: number[];\r\n    saveTeams?(): void;\r\n    onSelectTeams(teamIds?: number[]): void;\r\n    noText?: boolean;\r\n}> = ({ teamsCount, selectedTeams, noText, onSelectTeams }) => {\r\n    const { data } = usePortableTeamsState();\r\n\r\n    const teamsDisabled = !data || data.items.length < 1;\r\n\r\n    return (\r\n        <Container>\r\n            <Popup<HTMLDivElement>\r\n                content={({ hide }) => (\r\n                    <AssignTeams\r\n                        onSuccessApply={(teamIds: number[]) => {\r\n                            hide();\r\n                            onSelectTeams(teamIds);\r\n                        }}\r\n                        onCancel={() => {\r\n                            hide();\r\n                        }}\r\n                        selectedTeams={selectedTeams}\r\n                    />\r\n                )}\r\n            >\r\n                {(ref, { toggleShown, shown }) => (\r\n                    <span ref={ref}>\r\n                        <Tooltip\r\n                            label={'No Teams added yet'}\r\n                            preset={'table-item'}\r\n                            disabled={!teamsDisabled}\r\n                        >\r\n                            <SelectHead\r\n                                onClick={e => {\r\n                                    e.stopPropagation();\r\n                                    !teamsDisabled && toggleShown();\r\n                                }}\r\n                                disabled={teamsDisabled}\r\n                            >\r\n                                <SelectButtonWrapper>\r\n                                    <SelectInputContainer noText={noText}>\r\n                                        {noText ? <SelectLabel\r\n                                            color={\r\n                                                teamsCount < 1\r\n                                                    ? Variables.Colors\r\n                                                          .cloudyBlue\r\n                                                    : Variables.Colors.black\r\n                                            }\r\n                                            disabled={teamsDisabled}\r\n                                            data-test=\"teams-count\"\r\n                                        >\r\n                                            {teamsCount}\r\n                                        </SelectLabel> : <SelectLabel\r\n                                            color={\r\n                                                teamsCount < 1\r\n                                                    ? Variables.Colors\r\n                                                          .cloudyBlue\r\n                                                    : Variables.Colors.black\r\n                                            }\r\n                                            disabled={teamsDisabled}\r\n                                            data-test=\"teams-count\"\r\n                                        >\r\n                                            {teamsCount < 1\r\n                                                ? 'Teams'\r\n                                                : `${teamsCount} ${\r\n                                                      teamsCount > 1\r\n                                                          ? 'Teams'\r\n                                                          : 'Team'\r\n                                                  }`}\r\n                                        </SelectLabel>}\r\n                                        <IconHolder disabled={teamsDisabled}>\r\n                                            {shown ? (\r\n                                                <UpArrow />\r\n                                            ) : (\r\n                                                <DownArrow />\r\n                                            )}\r\n                                        </IconHolder>\r\n                                    </SelectInputContainer>\r\n                                </SelectButtonWrapper>\r\n                            </SelectHead>\r\n                        </Tooltip>\r\n                    </span>\r\n                )}\r\n            </Popup>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default SelectedUserTeamsComponent;\r\n","import { makeStyles } from '@material-ui/core';\n\nexport const useStyles = makeStyles(theme => ({\n    customTableColumnStyle: {\n        minWidth: 120,\n    },\n\n    customTableCellStyle: {\n        padding: 0,\n    },\n\n    teamsTableCellStyle: {\n        width: 85,\n    },\n}));\n\n","import { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\n\n/**\n * @function handleBuildUserName - builds user name by first name, last name\n * and (you) if user is logged in\n * @param { UserV2 } user\n * @returns { string }\n */\nexport const useBuildUserName = () => {\n    const profile = useSelector(getProfileState);\n\n    return useCallback(\n        (user: UserV2): string => {\n            const name = `${user.firstName} ${user.lastName}`;\n            return profile?.id === user.id ? `${name} (You)` : name;\n        },\n        [profile]\n    );\n};","import { FC, useCallback, useEffect, useState } from 'react';\nimport { History } from 'history';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\n\nimport User from '../../../../ui/icons/User';\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport {\n    ASSIGN_LABEL_OPTIONS,\n    LOAD_ASSIGNED_LABELS,\n    isAdminRole,\n    isPractisAdminRole,\n} from '../../../../constants/enums';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { UserV2, UserProfile } from '../../../../constants/interfaces/User';\nimport ROUTES from '../../../../routes/routes';\nimport {\n    useAssignTeamsToUsersService,\n    useDeleteUserLabelService,\n    useDeleteUserService,\n    useGetUsersReportService,\n    useNudgeTraineesService,\n    useSearchUsersService,\n    useUpdateAllSelectedUsersStateService,\n    useUpdateSelectedUserStateService,\n} from '../../store/services';\nimport { useUsersState } from '../../store/states';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport UsersPageNavigationContainer from '../../components/UsersPageNavigation';\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport {\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../../labels/store/states';\nimport {\n    clearSelectedItemIfNotLoaded,\n    useCalculateDeletedLabels,\n    useCalculatePreSelectedLabels,\n} from '../../../labels/tools';\nimport {\n    useSaveUserFiltersService,\n    useSetAssignLabelsActionService,\n} from '../../../labels/store/services';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport { usePermissionsState } from '../../../permissions/store/state';\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\nimport { countAppliedFiltersCount } from '../../../teams/pages/ListOfTeams/tools';\nimport { Popup } from '../../../../ui/components/Popup';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport { UsersFilter } from '../../components/Filters/UsersFilter';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport { WithTeamsContext } from '../../../portableTeams';\nimport UsersListActions from '../../components/ListActions/UsersListActions';\nimport SelectedUserTeamsComponent from '../../components/SelectedUserTeams';\nimport { useLoggedInUserPermissionsHelper } from '../../tools';\nimport { arrayIdsDiff } from '../../../../helpers/functions/array-diff';\nimport {\n    useDeselectAllTeams,\n    useSaveTeams,\n} from '../../../portableTeams/store/hors/withTeams/services';\nimport { useSessionEffect } from '../../../common';\nimport { normalizeSP } from '../../../../helpers/functions/searchparams-normalize';\nimport {\n    useAssignedLabelsIdsApi,\n    useAssignUserLabelsApi,\n    useDeleteUserLabelsApi,\n} from '../../../../api';\nimport { getSearchState } from '../../../searchState/store/reducer';\nimport { SearchStateInterface } from '../../../searchState/store/states';\nimport { SEARCH_STATE } from '../../../searchState/constants';\nimport { isEmpty } from '../../../../helpers/functions/object-helpers';\nimport { isEmpty as isLodashEmpty } from 'lodash';\nimport { WithPractisSetsContext } from '../../../portablePractisSets';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport { useStyles } from './styles';\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport { NudgeUser } from '../../../../ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser';\nimport { EmptyCellDash } from '../../../../ui/components/table-wrapper/table/EmptyCellDash';\nimport {\n    useNudgeUsersBulkActionService,\n    useUpdateLabelsBulkActionService,\n    useUpdateMultipleEntityLabelsBulkActionService,\n} from '../../../../services/GeneralBulkActionServices';\nimport { useDeleteUserBulkActionService } from '../../services/UserBulkActionsService';\nimport { onTriggerEvent } from '../../../../helpers/functions/Events';\nimport {\n    CLEAR_PAGING,\n    EventNameList,\n} from '../../../../helpers/functions/Events/types';\nimport { NudgeData } from '../../../../api/alert/types';\nimport { UPDATE_MULTIPLE_LABEL_ACTION } from '../../../../services/GeneralBulkActionServices/constants';\nimport { UserStatus } from '../../store/costants';\nimport { useBuildUserName } from '../../tools/hooks';\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\nimport { CompanyUserStatsText } from '../../../../ui/components/CompanyUserStatsText';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\n\nconst Users: FC<{\n    history: History<any>;\n    searchUsers: (\n        sp: SearchParams,\n        userStatuses: (keyof typeof UserStatus)[],\n        companyId: number\n    ) => void;\n    assignTeamsToUsers: (\n        userId: number,\n        teams: number[],\n        deleted: number[],\n        hideMessage?: boolean,\n        successCallback?: () => void\n    ) => void;\n    deleteUserLabel: (\n        userId: number,\n        labelId: number,\n        successCallback?: () => void\n    ) => void;\n    setAssignLabelsAction(labels: number[]): void;\n    onDeleteUser: (\n        userIds: number[],\n        search?: SearchParams,\n        selectAll?: boolean,\n        successCallback?: () => void\n    ) => void;\n    profile?: UserProfile;\n    users: ListResult<UserV2>;\n    selectedUsers?: number[];\n    loading?: boolean;\n    selectedLabels?: number[];\n    assignedLabels?: number[];\n    updateAllSelectedUsers(\n        userIds: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedUser(userId: number): void;\n    updatedLabels?: any;\n    getUsersReportService?(\n        searchParams: SearchParams,\n        companyId?: number,\n        userIds?: number[],\n        totalCount?: number\n    ): void;\n    onNudgeTrainees(\n        nudgeUserDate: NudgeData[],\n        successCallback?: () => void\n    ): void;\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\n    searchState: SearchStateInterface;\n}> = ({\n    users,\n    history,\n    searchUsers,\n    assignTeamsToUsers,\n    setAssignLabelsAction,\n    onDeleteUser,\n    profile,\n    selectedLabels,\n    selectedUsers,\n    assignedLabels,\n    deleteUserLabel,\n    updateAllSelectedUsers,\n    updateSelectedUser,\n    updatedLabels,\n    loading,\n    getUsersReportService,\n    onNudgeTrainees,\n    saveGlobalLabelFilters,\n    searchState,\n}) => {\n    const classes = useStyles();\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n\n    const buildUserName = useBuildUserName();\n\n    const [showNudgeDialogMemberId, setShowNudgeDialogMemberId] =\n        useState<any>(null);\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n\n    const canAccessPage = useHandleAccessPage();\n    const loggedInUserPermissions = useLoggedInUserPermissionsHelper();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [],\n        labelIDs: selectedLabels,\n        orderBy: null,\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const usableParams: SearchParams =\n        !isEmpty(searchState) &&\n        !!searchState?.params &&\n        searchState.key === SEARCH_STATE.ACTIVE_USERS.name\n            ? searchState.params\n            : initialSearchParams;\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setLabelIDs,\n        setOffset,\n        refreshSearchParams,\n        setCustom,\n    } = useSearchParamsState(usableParams);\n\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const isCheckboxPartiallySelected =\n        users &&\n        users.items &&\n        selectedUsers &&\n        selectedUsers.length < users.items.length;\n\n    const updateAllUsersCheck = useCallback(\n        (checked: boolean) => {\n            const userIds =\n                (users && users.items.map((user: UserV2) => user.id)) || [];\n            updateAllSelectedUsers(\n                userIds,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [users, isCheckboxPartiallySelected, updateAllSelectedUsers]\n    );\n\n    const permissions = usePermissionsState();\n\n    const handleViewProfile = (user: UserV2) => {\n        if (\n            !user ||\n            !profile ||\n            !permissions.includes(NEW_PERMISSIONS.VIEW_USER_PERFORMANCE)\n        )\n            return;\n\n        history.push(\n            ROUTES.USER_PERFORMANCE.replace(':userId', user.id.toString()),\n            { useGoBack: true }\n        );\n    };\n\n    const handleUserSettings = (user: UserV2) => {\n        if (\n            !user ||\n            !profile ||\n            !permissions.includes(NEW_PERMISSIONS.VIEW_PROFILE)\n        )\n            return;\n\n        history.push(ROUTES.PROFILE.replace(':userId', user.id.toString()));\n    };\n\n    const handleItemEdit = (user: UserV2) => {\n        if (!user) return;\n        history.push(ROUTES.PROFILE.replace(':userId', user.id.toString()));\n    };\n\n    const handleUserCheck = (e: any, user: UserV2) => {\n        e.stopPropagation();\n        if (!!user.id) {\n            updateSelectedUser(user.id);\n        }\n    };\n\n    const getDeletedLabels = useCalculateDeletedLabels();\n    const assignLabelsToUser = useAssignUserLabelsApi();\n    const deleteLabelsFromUser = useDeleteUserLabelsApi();\n\n    const refreshData = useCallback(() => {\n        if (!profile?.companyId) return;\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchUsers(searchParams, [UserStatus.ACTIVE], profile.companyId);\n        setLastRefreshed(new Date());\n        setIsSelectAll(false);\n        updateAllSelectedUsers([], true, isCheckboxPartiallySelected);\n    }, [\n        searchParams,\n        initialOffset,\n        searchUsers,\n        updateAllSelectedUsers,\n        isCheckboxPartiallySelected,\n        profile?.companyId,\n    ]);\n\n    const handleDeleteUserBulkActionService = useDeleteUserBulkActionService(\n        searchParams,\n        profile?.companyId ?? 0,\n        users?.count ?? 0,\n        refreshData\n    );\n\n    const updateMultipleUsersLabels =\n        useUpdateMultipleEntityLabelsBulkActionService(\n            assignLabelsToUser,\n            deleteLabelsFromUser,\n            isSelectAll,\n            {\n                actionName: UPDATE_MULTIPLE_LABEL_ACTION,\n                actionFunction: searchUsers,\n                itemPerChunk: 1,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            limit: 1,\n                            offset: users.count,\n                        },\n                        userStatuses: [UserStatus.ACTIVE],\n                        companyId: profile?.companyId ?? 0,\n                        shouldSetStore: false,\n                    },\n                    fieldName: 'searchParams.offset',\n                },\n            },\n            refreshData\n        );\n\n    const assignLabels = async () => {\n        if (assignedLabels && selectedUsers) {\n            const { preAssignedLabels } = await getAssignedLabelsIds(\n                selectedUsers,\n                LOAD_ASSIGNED_LABELS.USERS_ACTIVE,\n                ASSIGN_LABEL_OPTIONS.USER,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                return calculatePreSelectedLabels(selectedUsers, users, data);\n            });\n\n            const deletedLabels = getDeletedLabels(assignedLabels);\n\n            const deletedLabelsFiltered = deletedLabels.filter(\n                x =>\n                    preAssignedLabels.includes(x) ||\n                    preAssignedLabels.includes(-x)\n            );\n            const selectedLabelsFiltered = assignedLabels.filter(\n                x => x > 0 && !preAssignedLabels.includes(x)\n            );\n\n            updateMultipleUsersLabels(\n                {\n                    entityName: 'user',\n                    entityIds: selectedUsers,\n                },\n                selectedLabelsFiltered,\n                deletedLabelsFiltered\n            );\n        }\n    };\n\n    const handleManageTeams = useCallback(\n        (user: UserV2, selectedTeams) => {\n            const diff = arrayIdsDiff(selectedTeams, user.teams ?? []);\n            assignTeamsToUsers(\n                user.id,\n                diff.selected,\n                diff.deleted,\n                false,\n                refreshData\n            );\n        },\n        [assignTeamsToUsers, refreshData]\n    );\n\n    const getAssignedLabelsIds = useAssignedLabelsIdsApi();\n\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\n\n    const onNudgeSingleUserSuccessCallback = () => {\n        setShowNudgeDialogMemberId(null);\n    };\n\n    const handleNudgeSingleUser = useCallback(\n        (data: any) => {\n            const { text, name: senderName } = data;\n            if (showNudgeDialogMemberId) {\n                const nudgeUserDate: NudgeData = {\n                    type: 'common',\n                    enrollmentId: null,\n                    receiverId: showNudgeDialogMemberId,\n                    senderName,\n                    text,\n                };\n\n                onNudgeTrainees(\n                    [nudgeUserDate],\n                    onNudgeSingleUserSuccessCallback\n                );\n            }\n        },\n        [showNudgeDialogMemberId, onNudgeTrainees]\n    );\n\n    const onNudgeMultipleUsersSuccessCallback = useCallback(() => {\n        updateAllSelectedUsers([], true, isCheckboxPartiallySelected);\n    }, [isCheckboxPartiallySelected, updateAllSelectedUsers]);\n\n    const nudgeUsersBulkActionService = useNudgeUsersBulkActionService(\n        'common',\n        {\n            companyId: profile?.companyId ?? 0,\n        },\n        searchParams,\n        users.count,\n        refreshData\n    );\n\n    const handleNudgeMultipleUsers = useCallback(\n        (data: any) => {\n            const { text, name: senderName } = data;\n\n            if (isSelectAll) {\n                nudgeUsersBulkActionService({ ...{ text }, ...{ senderName } });\n            } else {\n                if (selectedUsers) {\n                    const nudgeUserDate = selectedUsers.map(\n                        user =>\n                            ({\n                                type: 'common',\n                                enrollmentId: null,\n                                receiverId: user,\n                                text,\n                                senderName,\n                            } as NudgeData)\n                    );\n\n                    onNudgeTrainees(\n                        nudgeUserDate,\n                        onNudgeMultipleUsersSuccessCallback\n                    );\n                }\n            }\n        },\n        [\n            isSelectAll,\n            nudgeUsersBulkActionService,\n            selectedUsers,\n            onNudgeTrainees,\n            onNudgeMultipleUsersSuccessCallback,\n        ]\n    );\n\n    const onExportClickedSingle = useCallback(\n        (userIds: any[]) => {\n            if (profile?.companyId && userIds && getUsersReportService) {\n                getUsersReportService(searchParams, profile.companyId, userIds);\n            }\n        },\n        [profile?.companyId, getUsersReportService, searchParams]\n    );\n\n    const onExportClicked = useCallback(\n        (userIds: any[]) => {\n            if (profile?.companyId && userIds && getUsersReportService) {\n                getUsersReportService(\n                    searchParams,\n                    profile.companyId,\n                    isSelectAll ? undefined : userIds,\n                    isSelectAll ? users.count : undefined\n                );\n            }\n        },\n        [\n            profile?.companyId,\n            getUsersReportService,\n            searchParams,\n            isSelectAll,\n            users,\n        ]\n    );\n\n    const isOptionsDisabled =\n        !selectedUsers || (selectedUsers && !selectedUsers.length);\n\n    const orderBy = searchParams.orderBy;\n    const hcUserName = useOrderBy('name', orderBy, setOrderBy);\n    const hcRole = useOrderBy('role_name', orderBy, setOrderBy);\n    const hcTeam = useOrderBy('count_teams', orderBy, setOrderBy);\n    const hcAssigned = useOrderBy('count_psets', orderBy, setOrderBy);\n    const hcLastActivity = useOrderBy('date_login', orderBy, setOrderBy);\n    const hcRegisteredAt = useOrderBy('date_registered', orderBy, setOrderBy);\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const filterRoleHandler = (roleIds: number[]) => {\n        setCustom('roleIDs', roleIds);\n    };\n\n    const teamsChangeHandler = (ids: number[]) => {\n        setCustom('teamIds', ids);\n    };\n\n    const labelChangeHandler = (ids: number[]) => {\n        saveGlobalLabelFilters(ids);\n    };\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: countAppliedFiltersCount(searchParams),\n        itemsCount: users?.items.length || 0,\n    });\n\n    const deselectTeams = useDeselectAllTeams();\n    const saveTeams = useSaveTeams();\n\n    /**\n     * @function onDeleteUsersSuccessCallback\n     * @returns { void }\n     */\n    const onDeleteUsersSuccessCallback = useCallback(() => {\n        if (!pageIndex || pageIndex === 1) {\n            refreshData();\n        } else {\n            // if the current page is not page 1,\n            // move paging to page 1\n            onTriggerEvent(EventNameList[CLEAR_PAGING]);\n        }\n    }, [pageIndex, refreshData]);\n\n    /**\n     * @function onConfirmDeleteUser\n     * @param { number[] } userIds\n     * @returns { void }\n     */\n    const onConfirmDeleteUser = useCallback(\n        (userIds: number[]): void => {\n            const selectAllState = userIds.length === 1 ? false : isSelectAll;\n            onDeleteUser(\n                userIds,\n                isSelectAll\n                    ? normalizeSP(searchParams, users && users.count)\n                    : searchParams,\n                selectAllState,\n                onDeleteUsersSuccessCallback\n            );\n        },\n        [\n            isSelectAll,\n            onDeleteUser,\n            onDeleteUsersSuccessCallback,\n            searchParams,\n            users,\n        ]\n    );\n\n    const handleOpenDeleteUsersConfirmDialog = useCallback(\n        (userIds: number[]) => {\n            const userText = userIds.length === 1 ? 'this user' : 'these users';\n            showConfirmationModalDialog({\n                modalTitle: `Deactivate ${userText}?`,\n                description:\n                    `This action will prevent ${userText} from accessing the platform, but it will not delete their data. To re-activate ${userText} you will need to contact Practis Support.`,\n                cancelButtonText: 'Cancel',\n                confirmButtonText: 'Deactivate',\n                dialogType: 'DANGER',\n                onConfirm: () => onConfirmDeleteUser(userIds),\n            });\n        },\n        [onConfirmDeleteUser, showConfirmationModalDialog]\n    );\n\n    /**\n     * @function handleDeleteUsers\n     * @returns { void }\n     */\n    const handleDeleteUsers = (ids: number[]): void => {\n        isSelectAll\n            ? handleDeleteUserBulkActionService()\n            : handleOpenDeleteUsersConfirmDialog(ids);\n    };\n\n    useSessionEffect(() => {\n        if (!profile?.companyId) return;\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchUsers(searchParams, [UserStatus.ACTIVE], profile.companyId);\n    }, [searchUsers, searchParams, profile?.companyId]);\n\n    useEffect(() => {\n        selectedLabels && setLabelIDs(selectedLabels);\n    }, [selectedLabels, setLabelIDs]);\n\n    useEffect(() => {\n        if (updatedLabels && updatedLabels.updateType === 'delete')\n            refreshSearchParams();\n    }, [updatedLabels, refreshSearchParams]);\n\n    useEffect(() => {\n        return () =>\n            updateAllSelectedUsers([], true, isCheckboxPartiallySelected);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllSelectedUsers([], true, isCheckboxPartiallySelected);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [users, history.location.pathname]);\n\n    useEffect(() => {\n        if (selectedUsers?.length && selectedUsers.length === users.count) {\n            setIsSelectAll(true);\n        }\n    }, [users.count, selectedUsers]);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n    }, [initialOffset, pageIndex, setOffset]);\n\n    useEffect(() => {\n        const filteredUsers = users\n            ? users.items.map(user => Number(user.id))\n            : [];\n        const usersToClear = clearSelectedItemIfNotLoaded(\n            selectedUsers,\n            filteredUsers\n        );\n        if (usersToClear && usersToClear.length > 0) {\n            updateAllSelectedUsers(usersToClear, false);\n        }\n    }, [selectedUsers, users, updateAllSelectedUsers]);\n\n    /**\n     * @function onOpenAssignLabelAction\n     * @returns { void }\n     */\n    const onOpenAssignLabelAction = (): void => {\n        if (users && users.items && selectedUsers) {\n            getAssignedLabelsIds(\n                selectedUsers,\n                LOAD_ASSIGNED_LABELS.USERS_ACTIVE,\n                ASSIGN_LABEL_OPTIONS.USER,\n                { ...searchParams, orderBy: {} },\n                isSelectAll\n            ).then((data: any) => {\n                const { preAssignedLabels } = calculatePreSelectedLabels(\n                    selectedUsers,\n                    users,\n                    data\n                );\n\n                setAssignLabelsAction(preAssignedLabels);\n            });\n        }\n    };\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_USER]);\n    }, [canAccessPage]);\n\n    useEffect(() => {\n        return () => {\n            deselectTeams();\n            saveTeams();\n        };\n    }, [deselectTeams, saveTeams]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        updateAllUsersCheck(event.target.checked);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function checkIsRowChecked\n     * @param { UserV2 } user\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (user: UserV2): boolean =>\n        !!selectedUsers && !!user.id && selectedUsers.includes(user.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { UserV2 } row\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, user: UserV2) => {\n        setIsSelectAll(false);\n        handleUserCheck(event, user);\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { UserV2 } row\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (row: UserV2): boolean => {\n        return labelsOpen === row?.['id'];\n    };\n\n    /**\n     * @function onDeleteLabelHandler\n     * @param { number } labelId\n     * @param { UserV2 } user\n     * @returns { void }\n     */\n    const onDeleteLabelHandler = (labelId: number, user: UserV2): void => {\n        deleteUserLabel(user.id, labelId, refreshData);\n    };\n\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\n        assignLabelsToUser,\n        deleteLabelsFromUser,\n        refreshData\n    );\n\n    /**\n     * @function handleUpdateUserLabels\n     * @param { number[] } addedLabelIds\n     * @param { number[] } deletedLabelIds\n     * @param { number } userId\n     * @returns { void }\n     */\n    const handleUpdateUserLabels = (\n        addedLabelIds: number[],\n        deletedLabelIds: number[],\n        userId: number\n    ): void => {\n        updateLabelsBulkActionService(\n            {\n                entityName: 'user',\n                entityId: userId,\n            },\n            addedLabelIds,\n            deletedLabelIds\n        );\n    };\n\n    return (\n        <MainWrapper\n            subTitle=\"Users\"\n            subHeader={profile?.companyId &&\n                <CompanyUserStatsText\n                    companyId={profile.companyId}\n                    showSettingsButton={isAdminRole(profile?.role?.name)}\n                />\n            }\n            tabs={<UsersPageNavigationContainer />}\n            htmlPageTitle=\"Users - Practis\"\n            dataTest=\"users\"\n        >\n            {!!showNudgeDialogMemberId && (\n                <DialogWrapper\n                    customization={{\n                        width: 480,\n                        padding: '49px 32px 32px 32px',\n                    }}\n                >\n                    <NudgeUser\n                        fromUser={\n                            !!profile\n                                ? `${profile.firstName} ${profile.lastName}`\n                                : ''\n                        }\n                        onSend={handleNudgeSingleUser}\n                        onClose={() => setShowNudgeDialogMemberId(null)}\n                    />\n                </DialogWrapper>\n            )}\n            {loading && !isSelectAll && <LoadingComponent />}\n\n            <TableWrapper\n                tableStates={tableStates}\n                cornered={selectedLabels && !!selectedLabels.length}\n                data={users?.items}\n                selectedLabels={selectedLabels}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'users-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: users.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            countAppliedFiltersCount(searchParams),\n                        dataTest: 'users-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                    },\n                    isSelectedItemOptionsVisible:\n                        !isLodashEmpty(selectedUsers) && !isLodashEmpty(users),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedUsers?.length,\n                        totalCount: users.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: () => {\n                            updateAllSelectedUsers(\n                                [],\n                                true,\n                                isCheckboxPartiallySelected\n                            );\n                            setIsSelectAll(false);\n                        },\n                        onSelectAll: () => {\n                            updateAllUsersCheck(true);\n                            setIsSelectAll(true);\n                        },\n                        bulkActionsConfig: {\n                            disabled: isOptionsDisabled,\n                            onAssignLabelsSubmit: assignLabels,\n                            assignPractisSetsAndDueDatePermissions: [\n                                NEW_PERMISSIONS.ASSIGN_ENROLLMENT,\n                            ],\n                            assignLabelsPermissions: [\n                                NEW_PERMISSIONS.ASSIGN_USER_LABEL,\n                            ],\n                            onOpenAssignLabelAction: onOpenAssignLabelAction,\n                            sendNudgePermissions: [NEW_PERMISSIONS.SEND_NUDGE],\n                            showNudgeWarning: false,\n                            nudgeButtonDisabled: isOptionsDisabled,\n                            onNudgeSendButtonClicked: handleNudgeMultipleUsers,\n                            showExportPermissions: [\n                                NEW_PERMISSIONS.EXPORT_LIST_USER,\n                            ],\n                            exportButtonDisabled: isOptionsDisabled,\n                            onExportClicked: () =>\n                                onExportClicked(\n                                    selectedUsers && selectedUsers.length\n                                        ? selectedUsers\n                                        : []\n                                ),\n                            removeItemPermissions: [\n                                NEW_PERMISSIONS.DELETE_USER,\n                            ],\n                            removeItemTitle: 'Deactivate Users',\n                            onRemoveItemsSubmit: () =>\n                                handleDeleteUsers(\n                                    selectedUsers && selectedUsers.length\n                                        ? selectedUsers\n                                        : []\n                                ),\n                            isSelectAll: isSelectAll,\n                            totalCount: users.count,\n                            searchQuery: {\n                                query: !isLodashEmpty(searchParams?.searchTerm)\n                                    ? searchParams.searchTerm\n                                    : null,\n\n                                labelId: !isLodashEmpty(searchParams?.labelIDs)\n                                    ? searchParams.labelIDs\n                                    : null,\n                                roleId: !isLodashEmpty(searchParams?.roleIDs)\n                                    ? searchParams.roleIDs\n                                    : null,\n                                status: !isLodashEmpty(\n                                    searchParams?.filterByRegistrationStatus\n                                )\n                                    ? searchParams.filterByRegistrationStatus\n                                    : null,\n                            },\n                            selectedItems: selectedUsers,\n                            successApplyPractisSetsCallback: refreshData,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <UsersFilter\n                                        preSelectedLabels={selectedLabels || []}\n                                        onRoleChange={filterRoleHandler}\n                                        preSelectedRoles={\n                                            searchParams.roleIDs\n                                                ? searchParams.roleIDs\n                                                : []\n                                        }\n                                        onTeamsChange={teamsChangeHandler}\n                                        onLabelsChange={labelChangeHandler}\n                                        onSuccessApply={() => hide()}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={256}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={countAppliedFiltersCount(\n                                            searchParams\n                                        )}\n                                        disabled={\n                                            countAppliedFiltersCount(\n                                                searchParams\n                                            ) === 0 &&\n                                            tableStates.disableFilters\n                                        }\n                                        dataTest=\"users-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && users?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: User,\n                        text: 'No Users Yet',\n                        dataTest: 'no-results',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Users',\n                        dataTest: 'no-found-results',\n                    },\n                    noFilterResultsOptions: {\n                        dataTest: 'no-filtered-results',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: !!selectedUsers && !!selectedUsers.length,\n                        disabled: !users || (users && users.items.length < 1),\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'master-checkbox',\n                    },\n\n                    columns: [\n                        {\n                            title: 'Users',\n                            width: 22,\n                            ...hcUserName,\n                            disabled: tableStates.disableSorting,\n                            className: classes.customTableColumnStyle,\n                            dataTest: 'name-column',\n                        },\n                        {\n                            title: 'Teams',\n                            width: 9,\n                            ...hcTeam,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'teams-column',\n                        },\n                        {\n                            title: 'Practis Sets',\n                            width: 9,\n                            ...hcAssigned,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'practis-sets-column',\n                        },\n                        {\n                            title: 'Role',\n                            width: 9,\n                            ...hcRole,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'role-column',\n                        },\n                        {\n                            title: 'Registered on',\n                            width: 9,\n                            ...hcRegisteredAt,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'registration-date-column',\n                        },\n                        {\n                            title: 'Last Login',\n                            width: 9,\n                            ...hcLastActivity,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'login-date-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n\n                    rowConfig: {\n                        onRowClick: handleViewProfile,\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        getLabelTagsProps: (user: UserV2) => ({\n                            selectedLabels: user.labels,\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_USER_LABEL,\n                            ],\n\n                            onDeleteLabel: (labelId: number) =>\n                                onDeleteLabelHandler(labelId, user),\n                        }),\n                        dataTest: 'user-item',\n                        cells: [\n                            {\n                                fieldType: 'AVATAR_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                fieldProps: {\n                                    renderTitle: (user: UserV2) =>\n                                        buildUserName(user),\n                                    getAvatarProps: (user: UserV2) => ({\n                                        customProfile: {\n                                            firstName: user.firstName,\n                                            lastName: user.lastName,\n                                            picture: user.imageUrl,\n                                            status: user.status,\n                                        },\n                                        size: 'sm',\n                                    }),\n                                    dataTest: 'user'\n                                },\n                            },\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                cellClassName: classes.teamsTableCellStyle,\n                                getCustomFieldComponent: (user: UserV2) => (\n                                    <>\n                                        {loggedInUserPermissions.hasActionPermission(\n                                            NEW_PERMISSIONS.UPDATE_USER\n                                        ) ? (\n                                            isPractisAdminRole(\n                                                user.role?.name\n                                            ) ? (\n                                                <EmptyCellDash />\n                                            ) : (\n                                                <SelectedUserTeamsComponent\n                                                    noText={true}\n                                                    teamsCount={\n                                                        user.countTeams || 0\n                                                    }\n                                                    selectedTeams={\n                                                        user.teams ?? []\n                                                    }\n                                                    onSelectTeams={(\n                                                        teamIds: number[]\n                                                    ) =>\n                                                        handleManageTeams(\n                                                            user,\n                                                            teamIds\n                                                        )\n                                                    }\n                                                />\n                                            )\n                                        ) : (\n                                            loggedInUserPermissions.isTeamLeader() && (\n                                                <span>{user.countTeams} </span>\n                                            )\n                                        )}\n                                    </>\n                                ),\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (user: UserV2) =>\n                                    !user.countEnrollments,\n                                fieldProps: {\n                                    renderTitle: (user: UserV2) =>\n                                        user.countEnrollments.toString(),\n                                    dataTest: 'practis-sets-count',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (user: UserV2) =>\n                                    !user.role,\n                                fieldProps: {\n                                    renderTitle: (user: UserV2) =>\n                                        user.role?.title,\n                                    dataTest: 'user-role'\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (user: UserV2) =>\n                                    !user.registeredAt,\n                                fieldProps: {\n                                    renderTitle: (user: UserV2) =>\n                                        formatDate(user.registeredAt),\n                                    dataTest: 'registation-date',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (user: UserV2) =>\n                                    !user.lastActivity,\n                                fieldProps: {\n                                    renderTitle: (user: UserV2) =>\n                                        formatDate(user.lastActivity),\n                                    dataTest: 'last-activity-date',\n                                },\n                            },\n                            {\n                                fieldType: 'LABEL_TAGS',\n                                fieldProps: {\n                                    getLabelTagsProps: (user: UserV2) => {\n                                        return {\n                                            open: labelsOpen === user?.id,\n                                            toggleOpen: () =>\n                                                handleToggleLabels(user?.id),\n                                            selectedLabels: user.labels,\n                                            dataTest: 'user-labels',\n                                        };\n                                    },\n                                },\n                            },\n\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (user: UserV2) => (\n                                        <UsersListActions\n                                            user={user}\n                                            handleViewProfile={\n                                                handleViewProfile\n                                            }\n                                            handleUserSettings={\n                                                handleUserSettings\n                                            }\n                                            handleItemEdit={handleItemEdit}\n                                            setShowNudgeDialogMemberId={\n                                                setShowNudgeDialogMemberId\n                                            }\n                                            onExportClicked={\n                                                onExportClickedSingle\n                                            }\n                                            setUserIdsToDelete={\n                                                handleDeleteUsers\n                                            }\n                                            assignLabelsToUser={(\n                                                addedLabelIds,\n                                                deletedLabelIds\n                                            ) =>\n                                                handleUpdateUserLabels(\n                                                    addedLabelIds,\n                                                    deletedLabelIds,\n                                                    user.id\n                                                )\n                                            }\n                                            isHidden={!!selectedUsers?.length}\n                                            successApplyPractisSetsCallback={\n                                                refreshData\n                                            }\n                                        />\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const UsersContainer: FC = () => {\n    const state = useUsersState();\n    const history = useHistory();\n    const searchUsers = useSearchUsersService();\n    const deleteUser = useDeleteUserService();\n    const profile = useSelector(getProfileState);\n\n    const labels = useLabelsState();\n    const assignTeamsToUsers = useAssignTeamsToUsersService();\n    const deleteUserLabel = useDeleteUserLabelService();\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const updateAllSelectedUsers = useUpdateAllSelectedUsersStateService();\n    const updateSelectedUser = useUpdateSelectedUserStateService();\n    const updatedLabels = useUpdatedLabelsState();\n    const getUsersReportService = useGetUsersReportService();\n    const nudgeTrainees = useNudgeTraineesService();\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const searchState = useSelector(getSearchState);\n\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'users' }}>\n            <WithTeamsContext.Provider value={{ reducerName: 'users' }}>\n                <WithPractisSetsContext.Provider\n                    value={{\n                        reducerName: 'performance',\n                    }}\n                >\n                    <Users\n                        history={history}\n                        searchUsers={searchUsers}\n                        onDeleteUser={deleteUser}\n                        profile={profile}\n                        users={state.list}\n                        selectedUsers={state.selectedUsers}\n                        loading={state.loading}\n                        selectedLabels={labels.selected}\n                        assignTeamsToUsers={assignTeamsToUsers}\n                        setAssignLabelsAction={setAssignLabelsAction}\n                        assignedLabels={labels.assignedLabels}\n                        deleteUserLabel={deleteUserLabel}\n                        updateAllSelectedUsers={updateAllSelectedUsers}\n                        updateSelectedUser={updateSelectedUser}\n                        updatedLabels={updatedLabels}\n                        getUsersReportService={getUsersReportService}\n                        onNudgeTrainees={nudgeTrainees}\n                        saveGlobalLabelFilters={saveGlobalLabelFilters}\n                        searchState={searchState}\n                    />\n                </WithPractisSetsContext.Provider>\n            </WithTeamsContext.Provider>\n        </WithLabelsContext.Provider>\n    );\n};\n\n\n\nexport default UsersContainer;","export const arrayIdsDiff = (currentState: number[], prevState: number[]): {selected: number[], deleted: number[]} => {\n    return {\n        selected: currentState,\n        deleted: prevState.filter(x => !currentState.includes(x))\n    }\n};\n","import { randomArrayItem } from '../../../helpers/functions/get-random-from-array';\nimport { SCENARIO_IMAGES } from '../../../constants/enums/scenarios';\nimport { getConfig } from '../../../tools/config';\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport {\n    createChallengeScriptLineAction,\n    deleteChallengeScriptLineAction,\n    fetchChallengeFailure,\n    fetchChallengeStart,\n    fetchChallengeSuccess,\n    modifyChallengeAction,\n    modifyChallengeScriptLineAction,\n    resetChallengeAction,\n    resetChallengeLogoAction,\n    restoreChallengeFromTempAction,\n    storeChallengeTempCopyAction,\n    updateChallengeScriptLineAction,\n    uploadChallengeAudioFailure,\n    uploadChallengeAudioStart,\n    uploadChallengeAudioSuccess,\n} from './actions';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ScriptLine } from '../../../constants/interfaces/ScriptLine';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    useFileUploadApi,\n    useGetChallengeApi,\n} from '../../../api';\n\nexport const useGetChallengeService = () => {\n    const dispatch = useDispatch();\n    const getChallengeApi = useGetChallengeApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (scenarioId: number | string) => {\n            dispatch(fetchChallengeStart());\n            getChallengeApi(scenarioId)\n                .then(data => {\n                    dispatch(fetchChallengeSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchChallengeFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getChallengeApi, showMessage]\n    );\n};\n\nexport const useUploadChallengeAudioService = () => {\n    const dispatch = useDispatch();\n    const fileUploadApi = useFileUploadApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (file: any, associatedEntityId: string | number, filename?: string) => {\n            dispatch(uploadChallengeAudioStart());\n            const formData: FormData = new FormData();\n            formData.set('file', file);\n            formData.set('type', 'AUDIO');\n            formData.set('associatedEntityType', 'Line');\n            if (!associatedEntityId.toString().includes('temp_'))\n                formData.set(\n                    'associatedEntityId',\n                    associatedEntityId.toString()\n                );\n            if (filename) formData.set('filename', filename);\n\n            return fileUploadApi(formData)\n                .then(data => {\n                    dispatch(\n                        uploadChallengeAudioSuccess(associatedEntityId, data)\n                    );\n                    return 'success';\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(uploadChallengeAudioFailure(error.message));\n                    showMessage(error.message, 'error');\n                    return 'error';\n                });\n        },\n        [dispatch, fileUploadApi, showMessage]\n    );\n};\n\nexport const useCreateChallengeScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (data: Partial<ScriptLine>, silent?: boolean) => {\n            dispatch(createChallengeScriptLineAction(data, silent));\n        },\n        [dispatch]\n    );\n};\n\nexport const useDeleteChallengeScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (lineId: number) => {\n            dispatch(deleteChallengeScriptLineAction(lineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useModifyChallengeScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (value: any, field: string, lineId: number | string) => {\n            dispatch(modifyChallengeScriptLineAction(value, field, lineId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useUpdateChallengeScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (scriptLines: Array<ScriptLine>) => {\n            dispatch(updateChallengeScriptLineAction(scriptLines));\n        },\n        [dispatch]\n    );\n};\n\nexport const generateRandomImageUrl = () => {\n    const fileName = randomArrayItem(SCENARIO_IMAGES);\n    return (\n        getConfig().S3_FILES_BASE_URL + `scenarios/default-logos/${fileName}`\n    );\n};\n\nexport const useModifyChallengeService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (value: any, field: keyof Challenge, silent?: boolean) => {\n            dispatch(modifyChallengeAction(value, field, silent));\n        },\n        [dispatch]\n    );\n};\n\nexport const useResetChallengeService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetChallengeAction());\n    }, [dispatch]);\n};\n\nexport const useResetChallengeLogoService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetChallengeLogoAction());\n    }, [dispatch]);\n};\n\nexport const useStoreChallengeTempCopyService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(storeChallengeTempCopyAction());\n    }, [dispatch]);\n};\n\nexport const useRestoreChallengeFromTempActionService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(restoreChallengeFromTempAction());\n    }, [dispatch]);\n};\n","import { FC, useContext, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n    Challenge,\r\n    ChallengeStatuses,\r\n    Status,\r\n} from '../../../../constants/interfaces/Challenge';\r\nimport { useVoiceGenerationState } from '../../../textToSpeech/store/states';\r\nimport { CompanyVoiceSettings } from '../../../../constants/interfaces/CompanyVoiceSettings';\r\nimport { AudioInterface, getAudioState } from '../../../player/store/reducers';\r\nimport {\r\n    useRestoreChallengeFromTempActionService,\r\n    useStoreChallengeTempCopyService,\r\n} from '../../store/services';\r\nimport { EditModeContext, LoadingSaveContext } from '../../pages/EditChallenge';\r\nimport { useCompanyVoiceSettingsState } from '../../../../pages/CompanySettings/store/states';\r\nimport { buildPageTitle } from '../../../../helpers/functions/page-title-helpers';\r\nimport { EditModeValues } from '../../../../constants/enums/EditModeValues';\r\nimport { formatDate } from '../../../../helpers/functions/date-convert';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport { TableDivider } from '../../../../ui/components/table-wrapper/table-divider';\r\nimport { useHandleRestoreArchivedChallenge } from '../../services';\r\nimport { StatusModalConfirmation } from '../../../../pages/ActionPages/StatusModalConfirmation/StatusModalConfirmation';\r\n\r\nconst StyledCustomWrapper = styled.div``;\r\n\r\nconst StyledCustomHeader = styled.div`\r\n    padding-left: 16px;\r\n    display: flex;\r\n    align-items: center;\r\n    flex-wrap: wrap;\r\n    height: 103px;\r\n`;\r\n\r\nconst StyledHeaderInput = styled.div`\r\n    flex: 1;\r\n    min-width: 150px;\r\n    margin-right: 16px;\r\n`;\r\n\r\nconst HeaderTitle = styled.div`\r\n    font-size: 20px;\r\n    font-weight: 800;\r\n    color: ${props => props.theme.Colors.black};\r\n`;\r\n\r\nconst StyledHeaderActions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 10px 0;\r\n    flex-wrap: wrap;\r\n`;\r\n\r\nconst StyledHeaderActionItemsWrapper = styled.div`\r\n    display: flex;\r\n`;\r\n\r\nconst StyledHeaderActionItems = styled.div`\r\n    margin-left: 16px;\r\n`;\r\n\r\nconst PublishedDate = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n    margin-right: 16px;\r\n`;\r\n\r\nconst EDIT_MODAL_INFO = {\r\n    id: 'challenge_edit_message',\r\n    message: 'Are you sure you want to edit Challenge.',\r\n    buttonText: 'Proceed',\r\n    cancelButtonText: 'Go Back',\r\n    title: 'Are you sure?',\r\n    notShow: false,\r\n    danger: true,\r\n};\r\n\r\nconst CANCEL_EDIT_MODAL_INFO = {\r\n    id: 'challenge_cancel_edit_message',\r\n    message: 'Do you want to discard changes?',\r\n    buttonText: 'Discard',\r\n    cancelButtonText: 'No',\r\n    title: 'Discard Changes?',\r\n    notShow: false,\r\n    danger: true,\r\n};\r\n\r\nconst MODAL_INFO = {\r\n    DELETED: {\r\n        message: 'Are you sure you want to delete?',\r\n        buttonText: 'Yes, Delete',\r\n        title: 'Delete Challenge',\r\n        notShow: false,\r\n        danger: false,\r\n    },\r\n    DRAFT: {\r\n        message: 'Are you sure you want to archive?',\r\n        buttonText: 'Yes, Archive',\r\n        title: 'Archive Challenge',\r\n        notShow: false,\r\n        danger: false,\r\n    },\r\n    ARCHIVED: {\r\n        message:\r\n            'Removing the active items will effectively RESET progress for related Practis Sets for all currently enrolled Trainees. They will receive a notification and will be asked to start again.',\r\n        buttonText: 'Yes, Archive',\r\n        title: 'Are You Sure?',\r\n        notShow: false,\r\n        danger: true,\r\n    },\r\n    ACTIVE: {\r\n        message: 'Are you sure you want to archive?',\r\n        buttonText: 'Yes, Archive',\r\n        title: 'Archive Challenge',\r\n        notShow: false,\r\n        danger: false,\r\n    },\r\n};\r\n\r\nconst EDIT_VIEW_STATUS = [ChallengeStatuses.ACTIVE];\r\n\r\nconst Header: FC<{\r\n    handleUpdateChallenge: (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: Status,\r\n        keepModal?: boolean\r\n    ) => any;\r\n    storeChallengeTemp: () => void;\r\n    restoreChallengeFromTemp: () => void;\r\n    challenge: Challenge;\r\n    voiceSettings?: CompanyVoiceSettings[];\r\n    player: AudioInterface;\r\n    modified?: boolean;\r\n    isViewMode?: boolean;\r\n}> = ({\r\n    challenge,\r\n    handleUpdateChallenge,\r\n    player,\r\n    modified,\r\n    storeChallengeTemp,\r\n    restoreChallengeFromTemp,\r\n    isViewMode,\r\n}) => {\r\n    const handleRestoreArchivedChallenge = useHandleRestoreArchivedChallenge();\r\n    const voice = useVoiceGenerationState().challenges;\r\n    const generating = voice && voice.generating;\r\n    const [publishModal, setPublishModal] = useState(false);\r\n    const [editModal, setEditModal] = useState(false);\r\n    const [cancelEditModal, setCancelEditModal] = useState(false);\r\n    const [saveState, setSaveState] = useState<Status>(\r\n        ChallengeStatuses.ACTIVE\r\n    );\r\n\r\n    const handleSaveWithModalAction = (status: ChallengeStatuses) => {\r\n        setSaveState(status);\r\n        setPublishModal(true);\r\n    };\r\n\r\n    const loadingSave = useContext(LoadingSaveContext);\r\n    const edit = useContext(EditModeContext);\r\n\r\n    const cancelEditing = () => {\r\n        if (modified) {\r\n            setCancelEditModal(true);\r\n        } else {\r\n            restoreChallengeFromTemp();\r\n            edit.action(EditModeValues.VIEW);\r\n        }\r\n    };\r\n    const disableRestore = loadingSave || isViewMode\r\n\r\n    return (\r\n        <StyledCustomWrapper>\r\n            {publishModal && (\r\n                <StatusModalConfirmation\r\n                    onCancel={() => {\r\n                        setPublishModal(false);\r\n                    }}\r\n                    onConfirm={() => {\r\n                        setPublishModal(false);\r\n                        handleUpdateChallenge(null, saveState);\r\n                    }}\r\n                    title={MODAL_INFO[saveState].title}\r\n                    confirmButtonText={MODAL_INFO[saveState].buttonText}\r\n                    displayDontShow={MODAL_INFO[saveState].notShow}\r\n                    danger={MODAL_INFO[saveState].danger}\r\n                >\r\n                    {MODAL_INFO[saveState].message}\r\n                </StatusModalConfirmation>\r\n            )}\r\n            {editModal && (\r\n                <StatusModalConfirmation\r\n                    onCancel={() => {\r\n                        setEditModal(false);\r\n                    }}\r\n                    onConfirm={() => {\r\n                        setEditModal(false);\r\n                        storeChallengeTemp();\r\n                        edit.action(EditModeValues.EDIT);\r\n                    }}\r\n                    title={EDIT_MODAL_INFO.title}\r\n                    confirmButtonText={EDIT_MODAL_INFO.buttonText}\r\n                    cancelButtonText={EDIT_MODAL_INFO.cancelButtonText}\r\n                    displayDontShow={EDIT_MODAL_INFO.notShow}\r\n                    dontShowHandle={EDIT_MODAL_INFO.id}\r\n                    danger={EDIT_MODAL_INFO.danger}\r\n                >\r\n                    {EDIT_MODAL_INFO.message}\r\n                </StatusModalConfirmation>\r\n            )}\r\n            {cancelEditModal && (\r\n                <StatusModalConfirmation\r\n                    onCancel={() => {\r\n                        setCancelEditModal(false);\r\n                    }}\r\n                    onConfirm={() => {\r\n                        setCancelEditModal(false);\r\n                        restoreChallengeFromTemp();\r\n                        edit.action(EditModeValues.VIEW);\r\n                    }}\r\n                    title={CANCEL_EDIT_MODAL_INFO.title}\r\n                    confirmButtonText={CANCEL_EDIT_MODAL_INFO.buttonText}\r\n                    cancelButtonText={CANCEL_EDIT_MODAL_INFO.cancelButtonText}\r\n                    displayDontShow={CANCEL_EDIT_MODAL_INFO.notShow}\r\n                    dontShowHandle={CANCEL_EDIT_MODAL_INFO.id}\r\n                    danger={CANCEL_EDIT_MODAL_INFO.danger}\r\n                >\r\n                    {CANCEL_EDIT_MODAL_INFO.message}\r\n                </StatusModalConfirmation>\r\n            )}\r\n            <StyledCustomHeader>\r\n                <StyledHeaderInput>\r\n                    <HeaderTitle data-test=\"challenge-page-title\">\r\n                        {buildPageTitle('Challenge', edit.mode as EditModeValues, !challenge.id)}\r\n                    </HeaderTitle>\r\n                </StyledHeaderInput>\r\n                <StyledHeaderActions>\r\n                    <StyledHeaderActionItems>\r\n                        <PublishedDate>\r\n                            {challenge.status === ChallengeStatuses.ACTIVE &&\r\n                                edit.mode === EditModeValues.VIEW && (\r\n                                    <span data-test=\"challenge-publish-date\">\r\n                                        Published{' '}\r\n                                        {formatDate(challenge.updatedAt, true)}\r\n                                    </span>\r\n                                )}\r\n                            {challenge.status === ChallengeStatuses.DRAFT && (\r\n                                <span data-test=\"challenge-not-published-yet\">\r\n                                    Not Published Yet\r\n                                </span>\r\n                            )}\r\n                        </PublishedDate>\r\n                    </StyledHeaderActionItems>\r\n                    {EDIT_VIEW_STATUS.includes(challenge.status) ? (\r\n                        edit.mode === EditModeValues.VIEW ? (\r\n                            <StyledHeaderActionItemsWrapper>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        width=\"144px\"\r\n                                        height=\"40px\"\r\n                                        disabled={disableRestore}\r\n                                        action={() =>\r\n                                            handleSaveWithModalAction(\r\n                                                ChallengeStatuses.ARCHIVED\r\n                                            )\r\n                                        }\r\n                                        variant=\"inverse\"\r\n                                        dataTest=\"archive-challenge\"\r\n                                    >\r\n                                        Archive\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave || isViewMode}\r\n                                        action={() => setEditModal(true)}\r\n                                        dataTest=\"edit-challenge\"\r\n                                    >\r\n                                        Edit\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledHeaderActionItemsWrapper>\r\n                        ) : (\r\n                            <StyledHeaderActionItemsWrapper>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"144px\"\r\n                                        disabled={loadingSave}\r\n                                        action={() => cancelEditing()}\r\n                                        variant=\"inverse\"\r\n                                        dataTest=\"cancel-edit-challenge\"\r\n                                    >\r\n                                        Cancel\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                                <StyledHeaderActionItems>\r\n                                    <Button\r\n                                        height=\"40px\"\r\n                                        width=\"128px\"\r\n                                        disabled={loadingSave}\r\n                                        action={() =>\r\n                                            handleUpdateChallenge(null)\r\n                                        }\r\n                                        dataTest=\"save-challenge\"\r\n                                    >\r\n                                        Save\r\n                                    </Button>\r\n                                </StyledHeaderActionItems>\r\n                            </StyledHeaderActionItemsWrapper>\r\n                        )\r\n                    ) : challenge.status === ChallengeStatuses.ARCHIVED ? (\r\n                        <StyledHeaderActionItemsWrapper>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"128px\"\r\n                                    disabled={disableRestore}\r\n                                    action={() =>\r\n                                        handleRestoreArchivedChallenge(\r\n                                            challenge.id\r\n                                        )\r\n                                    }\r\n                                    dataTest=\"restore-challenge\"\r\n                                >\r\n                                    Restore\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                        </StyledHeaderActionItemsWrapper>\r\n                    ) : (\r\n                        <StyledHeaderActionItemsWrapper>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"144px\"\r\n                                    disabled={\r\n                                        player.status !== 'off' ||\r\n                                        !!player.recording ||\r\n                                        generating ||\r\n                                        loadingSave ||\r\n                                        isViewMode\r\n                                    }\r\n                                    action={() =>\r\n                                        handleUpdateChallenge(\r\n                                            null,\r\n                                            ChallengeStatuses.DRAFT\r\n                                        )\r\n                                    }\r\n                                    variant=\"inverse\"\r\n                                    dataTest=\"save-challenge-as-draft\"\r\n                                >\r\n                                    Save as Draft\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                            <StyledHeaderActionItems>\r\n                                <Button\r\n                                    height=\"40px\"\r\n                                    width=\"128px\"\r\n                                    disabled={\r\n                                        player.status !== 'off' ||\r\n                                        !!player.recording ||\r\n                                        generating ||\r\n                                        loadingSave ||\r\n                                        isViewMode\r\n                                    }\r\n                                    action={() =>\r\n                                        handleUpdateChallenge(\r\n                                            null,\r\n                                            ChallengeStatuses.ACTIVE\r\n                                        )\r\n                                    }\r\n                                    dataTest=\"publish-challenge\"\r\n                                >\r\n                                    Publish\r\n                                </Button>\r\n                            </StyledHeaderActionItems>\r\n                        </StyledHeaderActionItemsWrapper>\r\n                    )}\r\n                </StyledHeaderActions>\r\n            </StyledCustomHeader>\r\n            <TableDivider />\r\n        </StyledCustomWrapper>\r\n    );\r\n};\r\n\r\nconst HeaderContainer: FC<{\r\n    handleUpdateChallenge: (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: Status,\r\n        keepModal?: boolean\r\n    ) => any;\r\n    challenge: Challenge;\r\n    modified?: boolean;\r\n    isViewMode?: boolean;\r\n}> = ({ challenge, handleUpdateChallenge, modified, isViewMode }) => {\r\n    const player = useSelector(getAudioState);\r\n    const voiceSettings = useCompanyVoiceSettingsState();\r\n    const storeChallengeTemp = useStoreChallengeTempCopyService();\r\n    const restoreChallengeFromTemp = useRestoreChallengeFromTempActionService();\r\n\r\n    return (\r\n        <Header\r\n            player={player}\r\n            handleUpdateChallenge={handleUpdateChallenge}\r\n            modified={modified}\r\n            storeChallengeTemp={storeChallengeTemp}\r\n            restoreChallengeFromTemp={restoreChallengeFromTemp}\r\n            challenge={challenge}\r\n            voiceSettings={voiceSettings.data}\r\n            isViewMode={isViewMode}\r\n        />\r\n    );\r\n};\r\n\r\nexport default HeaderContainer;\r\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { isEmpty } from 'lodash';\n\nimport { useHistory } from '../../tools/router';\nimport { useShowMessage } from '../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    CREATE_CHALLENGE_ACTION,\n    UPDATE_CHALLENGE_ACTION,\n    UPDATE_CHALLENGE_STATUS_ACTION,\n} from '../library/services/LibraryBulkActionsService/constants';\nimport {\n    Challenge,\n    ChallengeStatuses,\n} from '../../constants/interfaces/Challenge';\nimport { updateLibraryChallengeSuccess } from '../library/store/actions';\nimport { StatusItems } from './pages/EditChallenge';\nimport ROUTES from '../../routes/routes';\nimport { useModifyChallengeService } from './store/services';\nimport { ErrorResult } from '../../constants/interfaces/ErrorResult';\nimport { useUpdateChallengeStatusApi } from '../../api';\n\n/**\n * @function useCreateEditChallengeSuccessCallback\n * @param { Function } setLoadingSave\n * @param { Record<string, unknown> | undefined } responses\n * @returns { void }\n */\nexport const useCreateEditChallengeSuccessCallback = () => {\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (\n            setLoadingSave: (isLoading: boolean) => void,\n            responses?: Record<string, unknown>\n        ) => {\n            setLoadingSave(false);\n\n            if (!isEmpty(responses)) {\n                const createChallengeResponse = responses![\n                    CREATE_CHALLENGE_ACTION\n                ] as Challenge | undefined;\n\n                const editChallengeResponse = responses![\n                    UPDATE_CHALLENGE_ACTION\n                ] as Challenge | undefined;\n\n                const updateChallengeResponse = responses![\n                    UPDATE_CHALLENGE_STATUS_ACTION\n                ] as Challenge | undefined;\n                if (createChallengeResponse) {\n                    dispatch(\n                        updateLibraryChallengeSuccess(\n                            createChallengeResponse,\n                            'update'\n                        )\n                    );\n\n                    const currentStatus = !isEmpty(updateChallengeResponse)\n                        ? ChallengeStatuses.ACTIVE\n                        : ChallengeStatuses.DRAFT;\n\n                    const actionMessage = StatusItems.filter(\n                        (item: any) => item.value === currentStatus\n                    );\n                    showMessage(actionMessage[0].message, 'success');\n                } else if (editChallengeResponse) {\n                    dispatch(\n                        updateLibraryChallengeSuccess(\n                            editChallengeResponse,\n                            'update'\n                        )\n                    );\n                }\n            }\n\n            history.push(ROUTES.LIBRARY_SETTINGS.CHALLENGES.ALL);\n        },\n        [dispatch, history, showMessage]\n    );\n};\n\n/**\n * @function useCreateEditChallengeFailedCallback\n * @param { Function } setIsLoading\n * @param { ErrorResult | undefined } error\n * @param { Record<string, unknown> | undefined } completedResponses\n * @returns { void }\n */\nexport const useCreateEditChallengeFailedCallback = () => {\n    const modifyChallenge = useModifyChallengeService();\n    const showMessage = useShowMessage();\n\n    return useCallback(\n        (\n            setLoadingSave: (isLoading: boolean) => void,\n            error?: ErrorResult,\n            completedResponses?: Record<string, unknown>\n        ) => {\n            if (!isEmpty(completedResponses)) {\n                const createChallengeResponse = completedResponses![\n                    CREATE_CHALLENGE_ACTION\n                ] as Challenge | undefined;\n\n                const createdChallengeId = createChallengeResponse?.id;\n\n                // The bulk action failed in other steps\n                // but new challenge created\n                // in the next try it goes to\n                // edit challenge action.\n                if (createdChallengeId) {\n                    modifyChallenge(createdChallengeId, 'id');\n                }\n            }\n\n            error?.message && showMessage(error.message, 'error');\n            setLoadingSave(false);\n        },\n        [modifyChallenge, showMessage]\n    );\n};\n\n/**\n * @function useHandleArchiveChallenge\n * @returns { Promise<void> }\n */\nexport const useHandleArchiveChallenge = () => {\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const updateChallengeStatus = useUpdateChallengeStatusApi();\n\n    return useCallback(\n        (challengeId: number) => {\n            updateChallengeStatus('archive', [challengeId]).then(response => {\n                dispatch(updateLibraryChallengeSuccess(response, 'update'));\n\n                history.goBack();\n            });\n        },\n        [dispatch, history, updateChallengeStatus]\n    );\n};\n\n/**\n * @function useHandleRestoreArchivedChallenge\n * @param { number } challengeId\n * @returns { void }\n */\nexport const useHandleRestoreArchivedChallenge = () => {\n    const dispatch = useDispatch();\n    const modifyChallenge = useModifyChallengeService();\n    const updateChallengeStatus = useUpdateChallengeStatusApi();\n\n    return useCallback(\n        (challengeId?: number) => {\n            if (challengeId) {\n                updateChallengeStatus('draft', [challengeId]).then(\n                    (response: Challenge) => {\n                        dispatch(\n                            updateLibraryChallengeSuccess(response, 'update')\n                        );\n                        modifyChallenge(\n                            ChallengeStatuses.DRAFT,\n                            'status',\n                            true\n                        );\n                    }\n                );\n            }\n        },\n        [dispatch, modifyChallenge, updateChallengeStatus]\n    );\n};","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\n\nexport type EditMode = 'create' | 'edit' | 'view';\nexport type ModifyCase =\n    | 'init'\n    | 'created'\n    | 'modified'\n    | 'loaded'\n    | 'updated'\n    | 'error';\n\nexport interface ChallengeState {\n    data: Challenge;\n    temp_data?: Challenge;\n    loading?: boolean;\n    case: ModifyCase;\n    error?: string;\n}\n\nexport type ChallengeStateStateSelector = (state: any) => ChallengeState;\n\nexport const ChallengeStateSelectorContext = React.createContext<\n    ChallengeStateStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useChallengeState(): ChallengeState {\n    return useSelector(useContext(ChallengeStateSelectorContext));\n}\n","import { Challenge } from '../../constants/interfaces/Challenge';\nimport { ScriptLine } from '../../constants/interfaces/ScriptLine';\n\nexport const validationService = (challenge: Challenge, status: string) => {\n    const output = {\n        valid: true,\n        message: '',\n        name: ''\n    };\n    \n    switch (status) {\n        case 'DELETED':\n            output.valid = true;\n            break;\n        case 'ACTIVE':\n            if (!challenge.title?.trim()) {\n                output.valid = false;\n                output.message = 'Title required';\n                output.name = 'name';\n            } else if (challenge.script.lines.length < 1) {\n                output.valid = false;\n                output.message = 'Challenge should have at least one line';\n            } else if (\n                !challenge.script.totalDuration ||\n                challenge.script.totalDuration < 0.1\n            ) {\n                output.valid = false;\n                output.message = 'Audio records required';\n            } else {\n                challenge.script.lines.map((line: ScriptLine) => {\n                    if (!line.audioUrl && line.speaker === 'CUSTOMER') {\n                        output.valid = false;\n                        output.message = 'Audio records required';\n                    }\n                    return output;\n                });\n            }\n            break;\n        case 'DRAFT':\n            if (!challenge.title?.trim()) {\n                output.valid = false;\n                output.message = 'Title required';\n                output.name = 'name';\n            } else if (challenge.script.lines.some(line => !line.audioId)) {\n                output.valid = false;\n                output.message = 'Audio records required';\n            }\n            break;\n        case 'ARCHIVED':\n        default:\n            if (challenge.title.length < 1) {\n                output.valid = false;\n                output.message = 'Title required';\n            }\n    }\n    return output;\n};\n\nexport enum ScriptLineSpeakers {\n    EDIT = 'EDIT',\n    VIEW = 'VIEW',\n}","import React, { FC, useContext } from 'react';\nimport styled from 'styled-components';\nimport { ModifyCase, useChallengeState } from '../../store/states';\nimport { Challenge } from '../../../../constants/interfaces/Challenge';\nimport {\n    useModifyChallengeService,\n    useResetChallengeLogoService,\n} from '../../store/services';\nimport { EditModeContext } from '../../pages/EditChallenge';\nimport { EditModeValues } from '../../../../constants/enums/EditModeValues';\nimport { Variables } from '../../../../theme/variables';\nimport TextAreaBox from '../../../../ui/components/TextAreaBox/TextAreaBox';\n\nconst StyledScenarioInfo = styled.div`\n    flex: 2;\n    margin-right: 32px;\n    padding-top: 24px;\n`;\n\nconst StyledScenarioInfoContent = styled.div`\n    border-radius: 4px;\n`;\n\nconst StyledInputDivs = styled.div``;\n\nconst ChallengeInfo: FC<{\n    challenge: Challenge;\n    modified: ModifyCase;\n    modifyChallenge: (value: any, field: keyof Challenge) => any;\n    onRefreshLogo?: () => void;\n}> = ({ challenge, modifyChallenge }) => {\n    const edit = useContext(EditModeContext);\n\n    return (\n        <StyledScenarioInfo>\n            <StyledScenarioInfoContent>\n                <StyledInputDivs>\n                    <TextAreaBox\n                        background={Variables.Colors.whiteFive}\n                        value={challenge && challenge.description}\n                        onChange={(e: any) =>\n                            modifyChallenge(e.target.value, 'description')\n                        }\n                        name=\"description\"\n                        placeholder=\"Description\"\n                        max={500}\n                        minRows={7.5}\n                        padding=\"12px 16px\"\n                        readOnly={edit.mode === EditModeValues.VIEW}\n                        dataTest='chanllenge-description'\n                    />\n                </StyledInputDivs>\n            </StyledScenarioInfoContent>\n        </StyledScenarioInfo>\n    );\n};\n\nexport const ChallengeInfoContainer: FC<{\n    challenge: Challenge;\n}> = ({ challenge }) => {\n    const modified = useChallengeState().case;\n\n    const modifyChallenge = useModifyChallengeService();\n    const resetChallengeLogo = useResetChallengeLogoService();\n\n    return (\n        <ChallengeInfo\n            challenge={challenge}\n            modified={modified}\n            modifyChallenge={modifyChallenge}\n            onRefreshLogo={resetChallengeLogo}\n        />\n    );\n};\n\nexport default ChallengeInfoContainer;\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport { ScriptLine } from '../../../../../constants/interfaces/ScriptLine';\nimport styled from 'styled-components';\nimport {\n    Comment,\n    CommentBody,\n    CommentDescription,\n    CommentTitle,\n} from '../../../../../ui/components/Comment';\nimport ContentEditableInput from '../../../../../ui/components/ContentEditableDiv/ContentEditableDiv';\nimport { Variables } from '../../../../../theme/variables';\n\nconst StyledScriptItem = styled.div`\n    width: 100%;\n    margin-left: 48px;\n`;\n\nconst DisabledArea = styled.div`\n    position: absolute;\n    height: 100%;\n    background: transparent;\n    width: 100%;\n    top: 0;\n    left: 0;\n`;\n\nconst StyledCommentTitle = styled(CommentTitle)`\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst StyledContentEditableInput = styled(ContentEditableInput)`\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst RepScriptItem: FC<{\n    script: ScriptLine;\n}> = ({ script }) => {\n    const myRef = useRef<any>(null);\n    const [localValue, setLocalValue] = useState(script.text);\n\n    useEffect(() => {\n        if (localValue !== script.text) {\n            setLocalValue(script.text);\n        }\n    }, [script.text, localValue]);\n\n    return (\n        <StyledScriptItem ref={myRef}>\n            <Comment\n                reverse={true}\n                disabled={true}\n                background={Variables.Colors.whiteFive}\n            >\n                <CommentBody>\n                    <CommentDescription hideRemoveIcon={true}>\n                        <DisabledArea />\n                        <StyledCommentTitle dataTest=\"challenge-rep-line-title\">Rep</StyledCommentTitle>\n                        <StyledContentEditableInput\n                            value={localValue}\n                            placeholder={'Write rep’s line here'}\n                            viewMode={true}\n                            dataTest=\"challenge-rep-line\"\n                        />\n                    </CommentDescription>\n                </CommentBody>\n            </Comment>\n        </StyledScriptItem>\n    );\n};\n\nexport const RepScriptItemContainer: FC<{\n    script: ScriptLine;\n}> = ({ script }) => {\n    return <RepScriptItem script={script} />;\n};\n\nexport default RepScriptItemContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { EditModeValues } from '../../../../../constants/enums/EditModeValues';\nimport { ScriptLine } from '../../../../../constants/interfaces/ScriptLine';\nimport RepScriptItemContainer from './RepScriptLine';\nimport Drag from '../../../../../ui/icons/Drag';\n\nconst StyledScriptLineWrapper = styled.div<{ reverse?: boolean }>`\n    display: flex;\n    flex-direction: ${props => (props.reverse ? 'row' : 'row-reverse')};\n    margin-bottom: 16px;\n`;\n\nconst StyledScriptHandle = styled.div<{ reverse?: boolean; hidden?: boolean }>`\n    color: #b1c0cb;\n    display: flex;\n    flex-shrink: 0;\n    width: 11px;\n    align-items: center;\n    height: 30px;\n    margin-left: ${props => (props.reverse ? 29 : 8)}px;\n    margin-right: ${props => (props.reverse ? 8 : 29)}px;\n    visibility: ${props => (props.hidden ? 'hidden' : 'visible')};\n    display: none;\n`;\n\nconst RepLine: FC<{\n    item: ScriptLine;\n    editMode: string;\n    disabled: boolean;\n    dragHandleProps: any;\n}> = ({ item, editMode, dragHandleProps }) => {\n    return (\n        <div>\n            <StyledScriptLineWrapper>\n                <StyledScriptHandle\n                    className=\"handle\"\n                    hidden={editMode === EditModeValues.VIEW}\n                    {...dragHandleProps}\n                    data-test='challenge-rep-line-drag-handle'\n                >\n                    <Drag />\n                </StyledScriptHandle>\n                <RepScriptItemContainer key={item.id} script={item} />\n            </StyledScriptLineWrapper>\n        </div>\n    );\n};\n\nexport default RepLine;\n","import { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../../constants/interfaces/ScriptLine';\nimport styled from 'styled-components';\nimport { Dispatch } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { UserProfile } from '../../../../../constants/interfaces/User';\nimport {\n    useClearVoiceService,\n    useTextToSpeechService,\n} from '../../../../textToSpeech/store/services';\nimport { useVoiceGenerationState } from '../../../../textToSpeech/store/states';\nimport { findItem } from '../../../../../tools/ramda';\nimport { CompanyInterface } from '../../../../../constants/interfaces/Company';\nimport { CompanyVoiceSettings } from '../../../../../constants/interfaces/CompanyVoiceSettings';\nimport {\n    AudioInterface,\n    getAudioState,\n} from '../../../../player/store/reducers';\nimport {\n    useGoNextService,\n    usePlayAudioService,\n    useResetAudioService,\n    useStartAudioRecordingService,\n    useStopAudioRecordingService,\n    useStopAudioService,\n} from '../../../../player/store/services';\nimport { getProfileState } from '../../../../../pages/UserProfile/store/reducers';\nimport { getCompanyState } from '../../../../../pages/CompanySettings/store/reducers';\nimport {\n    useDeleteChallengeScriptLineService,\n    useModifyChallengeScriptLineService,\n    useUploadChallengeAudioService,\n} from '../../../store/services';\nimport { Button } from '../../../../../ui/components/Button';\nimport {\n    Comment,\n    CommentBody,\n    CommentDescription,\n    CommentTitle,\n    CommentTools,\n} from '../../../../../ui/components/Comment';\nimport AudioRecorder from '../../../../../ui/components/AudioRecorder/AudioRecorder';\nimport { AudioPlayer } from '../../../../../ui/components/AudioPlayer/AudioPlayer';\nimport Play from '../../../../../ui/icons/Play';\nimport Generate from '../../../../../ui/icons/Generate';\nimport Record from '../../../../../ui/icons/Record';\nimport ContentEditableInput from '../../../../../ui/components/ContentEditableDiv/ContentEditableDiv';\nimport { useCompanyVoiceSettingsState } from '../../../../../pages/CompanySettings/store/states';\nimport { useShowConfirmModalDialog } from '../../../../../ui/components/ModalDialogs/store/actions';\nimport { getTextToSpeechSettingsOrDefault } from '../../../../textToSpeech/helpers';\n\nconst StyledContainer = styled.div`\n    z-index: 1;\n    height: 100%;\n    min-height: 62px;\n`;\n\nconst StyledScriptItem = styled.div`\n    width: 100%;\n`;\n\nconst StyledButton = styled(Button)`\n    margin-right: 8px;\n    font-size: 11px;\n    font-weight: 600;\n`;\n\nconst StyledScriptAction = styled.div`\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    width: 100%;\n`;\n\nconst StyledAudioSection = styled.div`\n    display: flex;\n    flex-wrap: wrap;\n`;\n\nconst DisabledArea = styled.div`\n    position: absolute;\n    height: 100%;\n    background: transparent;\n    width: 100%;\n    top: 0;\n    left: 0;\n`;\n\nconst CustomerScriptItem: FC<{\n    script: ScriptLine;\n    handleScriptLineDelete: any;\n    handleScriptLineModify: (\n        value: any,\n        field: string,\n        id: number | string\n    ) => void;\n    handleUploadAudio: (\n        file: any,\n        associatedEntityId: number | string,\n        filename?: string\n    ) => any;\n    profile?: UserProfile;\n    company: CompanyInterface;\n    player: AudioInterface;\n    handlePlayAudio: (scriptLineId: number | string) => void;\n    handleStopAudio: (scriptLineId: number | string) => void;\n    handleStartRecording: (scriptLineId: number | string) => void;\n    handleStopRecording: () => void;\n    handleGoNext: () => void;\n    handleResetPlaylist: () => void;\n    voiceSettings?: CompanyVoiceSettings[];\n    disabled: boolean;\n    editable: boolean;\n    dispatch: Dispatch;\n}> = ({\n    script,\n    handleScriptLineDelete,\n    handleScriptLineModify,\n    handleUploadAudio,\n    editable,\n    player,\n    handlePlayAudio,\n    handleStopAudio,\n    handleGoNext,\n    handleResetPlaylist,\n    handleStartRecording,\n    handleStopRecording,\n    voiceSettings,\n}) => {\n    const textToSpeech = useTextToSpeechService();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n    const clearAudio = useClearVoiceService();\n    const voice = useVoiceGenerationState().challenges;\n    const generatingAudio = voice && voice.generating;\n    const loadingAudio = !!(\n        voice &&\n        voice.data &&\n        findItem(voice.data, 'id', script.id)\n    );\n    const voiceData =\n        voice &&\n        voice.data &&\n        findItem(voice.data, 'id', script.id) &&\n        findItem(voice.data, 'id', script.id).voice;\n\n    const [record, setRecord] = useState({ state: false, open: false });\n    const [save, setSave] = useState(false);\n    const [audio, setAudio] = useState<any>({});\n    const disabled =\n        (!!player.recording && player.recording !== script.id) ||\n        generatingAudio;\n\n    useEffect(() => {\n        return () => {\n            handleClickAway();\n        };\n        // eslint-disable-next-line\n    }, []);\n\n    useEffect(() => {\n        if (save) {\n            if (audio) {\n                handleUploadAudio(audio, script.id).then(() => {\n                    if (generatingAudio) {\n                        clearAudio({\n                            feature: 'challenges',\n                            itemId: script.id,\n                        });\n                    }\n                });\n            }\n        }\n        // eslint-disable-next-line\n    }, [audio]);\n\n    const startRecording = (): void => {\n        handleResetPlaylist();\n        setTimeout(() => {\n            handleStartRecording(script.id);\n            setRecord({ open: true, state: true });\n        }, 100);\n    };\n\n    const generateAudio = async (): Promise<any> => {\n        const settingsOrDefault = getTextToSpeechSettingsOrDefault(voiceSettings);\n\n        handleResetPlaylist();\n        textToSpeech(\n            script.text,\n            settingsOrDefault.customer,\n            { feature: 'challenges', itemId: script.id }\n        );\n    };\n\n    useEffect(() => {\n        if (voiceData) {\n            setSave(true);\n            setAudio(voiceData);\n        }\n    }, [voiceData]);\n\n    const saveRecording = (): void => {\n        setSave(true);\n        setRecord({ ...record, state: false });\n    };\n\n    const handleClickAway = (): void => {\n        setSave(false);\n        setRecord({ ...record, state: false });\n    };\n\n    const handleStop = (audio: any) => {\n        setAudio(audio.blob);\n        handleStopRecording();\n        setRecord({ state: false, open: false });\n    };\n\n    const startPlayingAudio = (): void => {\n        handleResetPlaylist();\n        handlePlayAudio(script.id);\n    };\n\n    const myRef = useRef<any>(null);\n\n    const onHandleGoNext = () => {\n        if (player.status === 'playlist' && myRef.current) {\n            myRef.current.scrollIntoView({\n                behavior: 'smooth',\n                block: 'start',\n            });\n            handleGoNext();\n        }\n    };\n\n\n            \n    const handleRemoveItem = useCallback(() => {\n        showConfirmationModalDialog({\n            modalTitle: 'Are You Sure?',\n            description: 'Are you sure you want to delete the line?',\n            onConfirm: () => handleScriptLineDelete(script.id),\n        });\n    }, [handleScriptLineDelete, script.id, showConfirmationModalDialog]);\n    \n\n    const [localValue, setLocalValue] = useState(script.text);\n\n    useEffect(() => {\n        if (localValue !== script.text) {\n            setLocalValue(script.text);\n        }\n    }, [script.text, localValue]);\n\n    return (\n        <StyledScriptItem ref={myRef}>\n            <Comment\n                reverse={script.speaker === ScriptLineSpeaker.REP}\n                disabled={disabled || generatingAudio}\n            >\n                <CommentBody>\n                    <CommentDescription\n                        hideRemoveIcon={!editable}\n                        onDelete={handleRemoveItem}\n                        dataTest=\"delete-challenge-customer-line\"\n                    >\n                        {(!editable || disabled) && <DisabledArea />}\n                        <CommentTitle dataTest=\"challenge-customer-line-title\">\n                            Customer\n                        </CommentTitle>\n                        <StyledContainer>\n                            <ContentEditableInput\n                                value={localValue}\n                                handleChange={value => {\n                                    handleScriptLineModify(\n                                        value,\n                                        'text',\n                                        script.id\n                                    );\n                                }}\n                                placeholder={'Write customer’s line here'}\n                                autoFocus={!localValue}\n                                recording={\n                                    !!player.recording &&\n                                    player.recording === script.id\n                                }\n                                viewMode={!editable || disabled}\n                                dataTest=\"challenge-customer-line\"\n                            />\n                        </StyledContainer>\n                    </CommentDescription>\n                    <CommentTools>\n                        {!record.open && player.current !== script.id && (\n                            <StyledScriptAction>\n                                <StyledAudioSection>\n                                    {editable && (\n                                        <StyledButton\n                                            label=\"Record Audio\"\n                                            action={startRecording}\n                                            iconRender={<Record />}\n                                            color=\"warning\"\n                                            variant=\"transparent\"\n                                            buttonSize={12}\n                                            width={'90px'}\n                                            dataTest=\"record-challenge-customer-line-audio\"\n                                        />\n                                    )}\n                                    {editable && localValue.length > 0 && (\n                                        <StyledButton\n                                            label=\"Generate Audio\"\n                                            iconRender={<Generate />}\n                                            action={generateAudio}\n                                            variant=\"transparent\"\n                                            loading={loadingAudio}\n                                            buttonSize={14}\n                                            dataTest=\"generate-challenge-customer-line-audio\"\n                                        />\n                                    )}\n                                    {script.audioUrl && (\n                                        <StyledButton\n                                            label=\"Play\"\n                                            iconRender={<Play />}\n                                            action={startPlayingAudio}\n                                            variant=\"transparent\"\n                                            buttonSize={14}\n                                            width={'40px'}\n                                            dataTest=\"play-challenge-customer-line-audio\"\n                                        />\n                                    )}\n                                </StyledAudioSection>\n                            </StyledScriptAction>\n                        )}\n                        {record.open && (\n                            <AudioRecorder\n                                record={record.state}\n                                onClickAway={handleClickAway}\n                                onStop={handleStop}\n                                onSave={saveRecording}\n                            />\n                        )}\n                        {player.current === script.id && (\n                            <AudioPlayer\n                                audio={script.audioUrl}\n                                duration={\n                                    script.duration ? script.duration : 10\n                                }\n                                onStop={() => handleStopAudio(script.id)}\n                                autoPlay={true}\n                                goNext={onHandleGoNext}\n                            />\n                        )}\n                    </CommentTools>\n                </CommentBody>\n            </Comment>\n        </StyledScriptItem>\n    );\n};\n\nexport const CustomerScriptItemContainer: FC<{\n    script: ScriptLine;\n    disabled: boolean;\n    editable: boolean;\n}> = ({ script, disabled, editable }) => {\n    const dispatch = useDispatch();\n\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n    const player = useSelector(getAudioState);\n\n    const resetPlaylist = useResetAudioService();\n    const goNext = useGoNextService();\n    const playAudio = usePlayAudioService();\n    const stopAudio = useStopAudioService();\n    const startRecording = useStartAudioRecordingService();\n    const stopRecording = useStopAudioRecordingService();\n\n    const deleteScriptLine = useDeleteChallengeScriptLineService();\n    const modifyScriptLine = useModifyChallengeScriptLineService();\n\n    const uploadChallengeAudio = useUploadChallengeAudioService();\n    const voiceSettings = useCompanyVoiceSettingsState();\n\n    return (\n        <CustomerScriptItem\n            script={script}\n            handleScriptLineDelete={deleteScriptLine}\n            handleScriptLineModify={modifyScriptLine}\n            handleUploadAudio={uploadChallengeAudio}\n            profile={profile}\n            company={company}\n            player={player}\n            handlePlayAudio={playAudio}\n            handleStopAudio={stopAudio}\n            handleStartRecording={startRecording}\n            handleStopRecording={stopRecording}\n            handleGoNext={goNext}\n            handleResetPlaylist={resetPlaylist}\n            voiceSettings={voiceSettings.data}\n            disabled={disabled}\n            editable={editable}\n            dispatch={dispatch}\n        />\n    );\n};\n\nexport default CustomerScriptItemContainer;","import React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\nimport {\r\n    Comment,\r\n    CommentBody,\r\n    CommentDescription,\r\n} from '../../../../../ui/components/Comment';\r\nimport { Variables } from '../../../../../theme/variables';\r\nimport { ScriptLine } from '../../../../../constants/interfaces/ScriptLine';\r\n\r\nconst StyledScriptItem = styled.div`\r\n    margin-left: 24px;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst StyledCommentBody = styled(CommentBody)`\r\n    min-height: 0;\r\n`;\r\n\r\nconst TraineeRespondLine: FC<{\r\n    disabled: boolean;\r\n    script?: ScriptLine;\r\n}> = ({ disabled }) => {\r\n    return (\r\n        <StyledScriptItem>\r\n            <Comment\r\n                disabled={disabled}\r\n                reverse={true}\r\n                background={Variables.Colors.whiteFive}\r\n            >\r\n                <StyledCommentBody>\r\n                    <CommentDescription hideRemoveIcon={true}>\r\n                        <span data-test='challenge-user-auto-reply'>User will respond here</span>\r\n                    </CommentDescription>\r\n                </StyledCommentBody>\r\n            </Comment>\r\n        </StyledScriptItem>\r\n    );\r\n};\r\n\r\nexport default TraineeRespondLine;\r\n","import React, { FC } from 'react';\nimport { EditModeValues } from '../../../../../constants/enums/EditModeValues';\nimport CustomerScriptItemContainer from '../CustomerScriptLine/CustomerScriptLine';\nimport TraineeRespondLine from '../TraineeRespondLine/TraineeRespondLine';\nimport styled from 'styled-components';\nimport { ScriptLine } from '../../../../../constants/interfaces/ScriptLine';\nimport Drag from '../../../../../ui/icons/Drag';\n\nconst StyledScriptLineWrapper = styled.div<{ reverse?: boolean }>`\n    display: flex;\n    flex-direction: ${props => (props.reverse ? 'row' : 'row-reverse')};\n    margin-bottom: 16px;\n`;\n\nconst StyledScriptHandle = styled.div<{ reverse?: boolean; hidden?: boolean }>`\n    color: #b1c0cb;\n    display: flex;\n    flex-shrink: 0;\n    width: 11px;\n    align-items: center;\n    height: 30px;\n    margin-left: ${props => (props.reverse ? 29 : 8)}px;\n    margin-right: ${props => (props.reverse ? 8 : 29)}px;\n    visibility: ${props => (props.hidden ? 'hidden' : 'visible')};\n`;\n\nconst CustomerLine: FC<{\n    item: ScriptLine;\n    editMode: string;\n    disabled: boolean;\n    dragHandleProps: any;\n    hideRepPlaceholder?: boolean;\n}> = ({ item, editMode, disabled, dragHandleProps, hideRepPlaceholder }) => {\n    return (\n        <div>\n            <StyledScriptLineWrapper>\n                <StyledScriptHandle\n                    className=\"handle\"\n                    hidden={editMode === EditModeValues.VIEW}\n                    {...dragHandleProps}\n                    data-test='challenge-customer-line-drag-handle'\n                >\n                    <Drag />\n                </StyledScriptHandle>\n                <CustomerScriptItemContainer\n                    key={item.id}\n                    script={item}\n                    editable={editMode === EditModeValues.EDIT}\n                    disabled={disabled}\n                />\n            </StyledScriptLineWrapper>\n            {!hideRepPlaceholder && (\n                <TraineeRespondLine script={item} disabled={disabled} />\n            )}\n        </div>\n    );\n};\n\nexport default CustomerLine;\n","import React, { FC, useContext, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport {\n    DragDropContext,\n    Draggable,\n    Droppable,\n    DropResult,\n} from 'react-beautiful-dnd';\nimport { useSelector } from 'react-redux';\nimport { AudioInterface, getAudioState } from '../../../player/store/reducers';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../constants/interfaces/ScriptLine';\nimport { useUpdateChallengeScriptLineService } from '../../store/services';\nimport {\n    ChallengeContainerContext,\n    EditModeContext,\n} from '../../pages/EditChallenge';\nimport RepLine from './RepScriptLine';\nimport CustomerLine from './CustomerScriptLine';\n\nconst StyledScriptLineContent = styled.div`\n    display: flex;\n    flex-direction: column;\n`;\n\nconst StyledDroppableContainer = styled.div<{ isDraggingOver: boolean }>``;\n\nconst StyledDraggableItem = styled.div<{ reverse?: boolean }>`\n    margin-bottom: 16px;\n`;\n\nconst ScriptLineContent: FC<{\n    script: Array<ScriptLine>;\n    player?: AudioInterface;\n    handleScriptLineUpdate: (value: any) => void;\n}> = ({ script, player, handleScriptLineUpdate }) => {\n    const [scriptLines, setScriptLines] = useState(script);\n    const parentRef = useContext(ChallengeContainerContext);\n    const edit = useContext(EditModeContext);\n\n    useEffect(() => {\n        parentRef && parentRef.current.scrollTo(0, 0);\n    }, [parentRef]);\n\n    useEffect(() => {\n        setScriptLines(script);\n    }, [script, setScriptLines]);\n\n    const Reorder = (startIndex: number, endIndex: number) => {\n        const result = Array.from(scriptLines);\n        const [removed] = result.splice(startIndex, 1);\n        result.splice(endIndex, 0, removed);\n        setScriptLines(result);\n        handleScriptLineUpdate(result);\n    };\n\n    const onDragEnd = (result: DropResult) => {\n        if (!result.destination) {\n            return;\n        }\n        Reorder(result.source.index, result.destination.index);\n    };\n\n    const repLineCount = scriptLines.filter(\n        item => item.speaker === ScriptLineSpeaker.REP\n    ).length;\n\n    return (\n        <StyledScriptLineContent>\n            <DragDropContext onDragEnd={onDragEnd}>\n                <Droppable droppableId={`challenge-drop-list`}>\n                    {(provided: any, snapshot) => (\n                        <StyledDroppableContainer\n                            ref={provided.innerRef}\n                            isDraggingOver={snapshot.isDraggingOver}\n                        >\n                            {scriptLines.map((item: ScriptLine, index) => {\n                                let disabled = false;\n                                if (\n                                    player &&\n                                    player.recording &&\n                                    player.recording !== item.id\n                                ) {\n                                    disabled = true;\n                                }\n                                return (\n                                    <Draggable\n                                        key={`draggable-item_${item.id}`}\n                                        draggableId={item.id.toString()}\n                                        index={index}\n                                    >\n                                        {(provided, snapshot) => (\n                                            <StyledDraggableItem\n                                                ref={provided.innerRef}\n                                                {...provided.draggableProps}\n                                            >\n                                                {item.speaker ===\n                                                ScriptLineSpeaker.REP ? (\n                                                    <RepLine\n                                                        item={item}\n                                                        editMode={edit.mode}\n                                                        disabled={disabled}\n                                                        dragHandleProps={\n                                                            provided.dragHandleProps\n                                                        }\n                                                    />\n                                                ) : (\n                                                    <CustomerLine\n                                                        item={item}\n                                                        editMode={edit.mode}\n                                                        disabled={disabled}\n                                                        dragHandleProps={\n                                                            provided.dragHandleProps\n                                                        }\n                                                        hideRepPlaceholder={\n                                                            repLineCount > 0\n                                                        }\n                                                    />\n                                                )}\n                                            </StyledDraggableItem>\n                                        )}\n                                    </Draggable>\n                                );\n                            })}\n                            {provided.placeholder}\n                        </StyledDroppableContainer>\n                    )}\n                </Droppable>\n            </DragDropContext>\n        </StyledScriptLineContent>\n    );\n};\n\nexport const ScriptLineContentContainer: FC<{\n    script: Array<ScriptLine>;\n}> = ({ script }) => {\n    const player = useSelector(getAudioState);\n    const updateScriptLine = useUpdateChallengeScriptLineService();\n\n    return (\n        <ScriptLineContent\n            script={script}\n            player={player}\n            handleScriptLineUpdate={updateScriptLine}\n        />\n    );\n};\n\nexport default ScriptLineContentContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport LinkText from '../../../../ui/components/LinkText/link-text';\n\nconst StyledEmptyScriptContainer = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 0 8px;\n`;\n\nconst ScriptAction: FC<{\n    handleAdd: any;\n}> = ({ handleAdd }) => {\n    return (\n        <StyledEmptyScriptContainer>\n            <LinkText\n                onClick={() => handleAdd('CUSTOMER')}\n                dataTest='add-challenge-customer-line'>\n                    + Add a customer line\n            </LinkText>\n        </StyledEmptyScriptContainer>\n    );\n};\n\nexport default ScriptAction;\n","import styled from 'styled-components';\nimport { Button } from '../../../../ui/components/Button';\n\nexport const StyledChallengeScriptHeader = styled.div`\n    display: flex;\n    flex-direction: column;\n    margin-bottom: 24px;\n    padding-top: 24px;\n`;\n\nexport const AttemptsCountContainer = styled.div`\n    padding: 16px 24px;\n    background: var(--ps-graphite-2);\n    border-radius: 4px;\n`;\n\nexport const AttemptsCountText = styled.div`\n    font-size: 13px;\n    font-weight: bold;\n    color: var(--ps-grey-2);\n`;\n\nexport const AttemptsCountValue = styled.div`\n    padding-top: 4px;\n    font-size: 20px;\n    font-weight: bold;\n    color: var(--ps-white-1);\n`;\n\nexport const StyledScriptHeaderActions = styled.div`\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    margin-top: 16px;\n`;\n\nexport const StyledButton = styled(Button)<{ width?: string }>`\n    ${props => (!!props.width ? `width: ${props.width}` : '')};\n`;\n\nexport const IconContainer = styled.div`\n    width: 20px;\n    height: 20px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    svg {\n        width: 16px;\n        height: 16px;\n    }\n`;\n\nexport const LeftButtons = styled.div`\n    display: flex;\n    flex-direction: row;\n\n    & button {\n        margin-right: 8px;\n    }\n`;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Attempts = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#v0f9vgv80a)\" fill=\"currentColor\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"m14.357 3.143 1.216-1.216a.25.25 0 0 1 .427.177V5.75a.25.25 0 0 1-.25.25h-3.646a.25.25 0 0 1-.177-.427l1.358-1.358a6.5 6.5 0 1 0 1.18 4.458.75.75 0 0 1 1.493.154 8.001 8.001 0 1 1-1.6-5.684z\"/>\n                    <path d=\"M6 5.75A.75.75 0 0 1 6.75 5h1.5a.75.75 0 0 1 .75.75V9.5h.75a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5h.75v-3h-.75A.75.75 0 0 1 6 5.75z\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"v0f9vgv80a\">\n                        <path fill=\"#fff\" transform=\"matrix(-1 0 0 1 16 0)\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default Attempts;\n","import { makeStyles } from '@material-ui/core';\nimport { Form } from 'formik';\nimport { Input } from '../../../../../../ui/components/input';\nimport styled from 'styled-components';\n\nexport const StyledForm = styled(Form)`\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n`;\n\nexport const Content = styled.div`\n    height: 551px;\n    box-sizing: border-box;\n    padding: 24px 100px 24px 24px;\n`;\n\nexport const UnlimitedSetting = styled.div`\n    padding-top: 16px;\n`;\n\nexport const SettingDescription = styled.div`\n    padding-left: 20px;\n    color: var(--ps-grey-1);\n`;\n\nexport const UnlimitedSettingDescription = styled(SettingDescription)`\n    padding-top: 8px;\n    font-size: 13px;\n`;\n\nexport const LimitedSetting = styled.div`\n    font-size: 13px;\n`;\n\nexport const LimitedSettingValue = styled.div`\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n`;\n\nexport const LimitNumberContainer = styled.div`\n    padding-left: 4px;\n`;\n\nexport const LimitInput = styled(Input)<{ ref?: any; }>`\n    width: 49px;\n    padding: 4px 8px;\n    font-weight: bold;\n    border: 1px solid var(--ps-grey-3);\n    border-radius: 4px;\n\n    &:focus {\n        border: 1px solid var(--ps-grey-2);\n    }\n`;\n\nexport const LimitedSettingDescription = styled(SettingDescription)`\n    padding-top: 3px;\n`;\n\nexport const LimitWarning = styled.div`\n    margin-top: 24px;\n    margin-left: 18px;\n    padding: 12px;\n    border-radius: 4px;\n    background-color: var(--ps-blue-12);\n    font-size: 13px;\n    color: var(--ps-blue-1);\n`;\n\nexport const Footer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    border-top: 1px solid var(--ps-grey-4);\n    padding: 23px 5px 0 5px;\n    width: 100%;\n    box-sizing: border-box;\n    height: 64px;\n    align-items: center;\n    padding: 0 24px 0 0;\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customRadioButton: {\n        marginBottom: '0!important',\n    },\n}));","import { Formik } from 'formik';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { RadioButton } from '../../../../../../ui/components/RadioButton';\nimport { useFocus } from '../../../../../../helpers/hooks/useFocus';\nimport { ChallengeAttemptsLimitViewProps, ChallengeAttemptsLimitFormValues } from './types';\nimport {\n    Content,\n    Footer,\n    LimitedSetting,\n    LimitedSettingDescription,\n    LimitedSettingValue,\n    LimitInput,\n    LimitNumberContainer,\n    LimitWarning,\n    StyledForm,\n    UnlimitedSetting,\n    UnlimitedSettingDescription,\n    useStyles,\n} from './styles';\n\nfunction ChallengeAttemptsLimitView({\n    initialSettings,\n    isValidLimitValue,\n    validateSettings,\n    onSubmit,\n}: ChallengeAttemptsLimitViewProps) {\n    const [inputRef, setFocus] = useFocus();\n    const classes = useStyles();\n\n    return (\n        <Formik<ChallengeAttemptsLimitFormValues>\n            initialValues={initialSettings}\n            validate={validateSettings}\n            onSubmit={onSubmit}\n            enableReinitialize={true}\n        >\n            {({ values, dirty, isValid, setFieldValue }) => {\n                return (\n                    <StyledForm>\n                        <Content>\n                            <LimitedSetting>\n                                <LimitedSettingValue>\n                                    <RadioButton\n                                        checked={values.isLimited === true}\n                                        size={12}\n                                        handleChange={() => {\n                                            setFieldValue('isLimited', true);\n                                            setTimeout(setFocus, 0);\n                                        }}\n                                        label=\"Limit Attempts to\"\n                                        disabled={false}\n                                        labelStyles={{ fontWeight: 'bold' }}\n                                        className={classes.customRadioButton}\n                                        dataTest=\"limited-attempts-radio\"\n                                    />\n                                    <LimitNumberContainer>\n                                        <LimitInput\n                                            ref={inputRef}\n                                            height=\"26px\"\n                                            disabled={!values.isLimited}\n                                            value={values.limitValue ?? ''}\n                                            handleChange={e =>\n                                                (!e.target.value || isValidLimitValue(e.target.value)) && setFieldValue('limitValue', e.target.value)\n                                            }\n                                            dataTest=\"limited-attempts-input\"\n                                        />\n                                    </LimitNumberContainer>\n                                </LimitedSettingValue>\n                                <LimitedSettingDescription data-test=\"limited-attempts-description\">\n                                    Users have limited attempts. After reaching the limit, the App force them to submit last recording. Recommended value is 3 attempts.\n                                </LimitedSettingDescription>\n                            </LimitedSetting>\n                            <UnlimitedSetting>\n                                <RadioButton\n                                    checked={values.isLimited === false}\n                                    size={12}\n                                    label=\"Unlimited attempts\"\n                                    handleChange={() => {\n                                        setFieldValue('isLimited', false);\n                                        if (values.limitValue !== initialSettings.limitValue) {\n                                            setFieldValue('limitValue', null);\n                                        }\n                                    }}\n                                    disabled={false}\n                                    labelStyles={{ fontWeight: 'bold' }}\n                                    className={classes.customRadioButton}\n                                    dataTest=\"unlimited-attempts\"\n                                />\n                                <UnlimitedSettingDescription data-test=\"unlimited-attempts-description\">\n                                    Learners can record as many times as they want before they submit the challenge.\n                                </UnlimitedSettingDescription>\n                            </UnlimitedSetting>\n                            <LimitWarning data-test=\"attempts-warning\">\n                                <b>Important:</b> The new limitation will affect all newly assigned Learners and Learners who haven't submitted the challenge yet. This change won't affect users who already submitted the challenge.\n                            </LimitWarning>\n                        </Content>\n                        <Footer>\n                            <Button\n                                width=\"130px\"\n                                height=\"40px\"\n                                disabled={!dirty || !isValid}\n                                loadingColor=\"white\"\n                                loadingSize={24}\n                                dataTest=\"apply-button\"\n                            >\n                                Apply\n                            </Button>\n                        </Footer>\n                    </StyledForm>\n                );\n            }}\n        </Formik>\n    );\n}\n\nexport default ChallengeAttemptsLimitView;","import { useCallback, useMemo } from 'react';\nimport { ChallengeAttemptsLimitFormValues, ChallengeAttemptsLimitProps } from './types';\nimport ChallengeAttemptsLimitView from './view';\nimport { useModifyChallengeService } from '../../../../store/services';\n\nfunction ChallengeAttemptsLimit({\n    challenge\n}: ChallengeAttemptsLimitProps) {\n    const modifyChallenge = useModifyChallengeService();\n\n    const initialSettings = useMemo((): ChallengeAttemptsLimitFormValues => {\n        return {\n            isLimited: !!challenge.tryLimit,\n            limitValue: challenge.tryLimit?.toString() || null\n        };\n    }, [challenge.tryLimit]);\n\n    const isValidLimitValue = (value: string) => Number(value) > 0;\n\n    const validateSettings = (settings: ChallengeAttemptsLimitFormValues) => {\n        const errors: Record<string, string> = {};\n        if (settings.isLimited && !settings.limitValue) {\n            errors.limitValue = 'Limit value is required';\n        }\n        return errors;\n    };\n\n    const handleSubmit = useCallback((settings: ChallengeAttemptsLimitFormValues) => {\n        modifyChallenge(\n            settings.isLimited ? Number(settings.limitValue) : null,\n            'tryLimit'\n        );\n    }, [modifyChallenge]);\n\n    return (\n        <ChallengeAttemptsLimitView\n            initialSettings={initialSettings}\n            isValidLimitValue={isValidLimitValue}\n            validateSettings={validateSettings}\n            onSubmit={handleSubmit}\n        />\n    );\n}\n\nexport default ChallengeAttemptsLimit;","import styled from 'styled-components';\n\nexport const ModalContent = styled.div`\n    display: flex;\n    flex-direction: row;\n    min-height: 215px;\n`;\n\nexport const ModalSidebar = styled.div`\n    width: 190px;\n    background-color: var(--ps-grey-3);\n    border-right: 1px solid var(--ps-grey-4);\n    border-bottom-left-radius: 8px;\n`;\n\nexport const NavigationItem = styled.div`\n    margin-top: 18px;\n    padding-left: 24px;\n    height: 24px;\n    display: flex;\n    align-items: center;\n    font-size: 13px;\n    color: var(--ps-black-main);\n    display: flex;\n    text-decoration: none;\n    position: relative;\n    font-weight: bold;\n\n    &:first-child {\n        margin-top: 24px;\n    }\n\n    &::before {\n        width: 4px;\n        height: 24px;\n        background: var(--ps-black-main);\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        border-radius: 0 10px 10px 0;\n    }\n`;\n\nexport const NavigationIcon = styled.div`\n    width: 16px;\n    height: 16px;\n    color: var(--ps-black-main);\n    margin-right: 12px;\n`;\n\nexport const TabContent = styled.div`\n    width: 600px;\n    min-height: 615px;\n`;","import { ModalWithCross } from '../../../../ui/components/ModalWithCross';\nimport Attempts from '../../../../ui/icons/Attempts';\nimport { ChallengeAttemptsLimit } from './components/ChallengeAttemptsLimit';\nimport {\n    ModalContent,\n    ModalSidebar,\n    NavigationIcon,\n    NavigationItem,\n    TabContent\n} from './styles';\nimport { ChallengeSettingsViewProps } from './types';\n\nfunction ChallengeSettingsView({\n    challenge,\n    onClose\n}: ChallengeSettingsViewProps) {\n\n    return (\n        <ModalWithCross\n            title=\"Challenge Settings\"\n            onClose={onClose}\n            width={790}\n            dataTest=\"challenge-settings-modal\"\n        >\n            <ModalContent>\n                <ModalSidebar>\n                    <NavigationItem\n                        data-test=\"attempts-tab\"\n                    >\n                        <NavigationIcon><Attempts /></NavigationIcon>\n                        Attempts\n                    </NavigationItem>\n                </ModalSidebar>\n                <TabContent>\n                    <ChallengeAttemptsLimit challenge={challenge} />\n                </TabContent>\n            </ModalContent>\n        </ModalWithCross>\n    );\n}\n\nexport default ChallengeSettingsView;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SmartGear = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#hkbelzmt3a)\">\n                    <mask id=\"g10cud6qdb\" style={{ maskType: 'luminance' }} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"16\" height=\"16\">\n                        <path d=\"M0 0h16v16H0V0z\" fill=\"#fff\"/>\n                    </mask>\n                    <g mask=\"url(#g10cud6qdb)\">\n                        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.256 3.133a1 1 0 0 1-.75-.968v-.694l-.001-.001-.001-.001H7.497l-.002.001-.001.001v.694a1 1 0 0 1-.75.968c-.46.12-.895.301-1.295.538a1 1 0 0 1-1.216-.154l-.49-.49a.004.004 0 0 0-.005 0h-.001l-.71.71c-.001 0-.002.001-.002.003l.002.003.49.49a1 1 0 0 1 .154 1.216c-.237.4-.419.834-.538 1.295a1 1 0 0 1-.968.75h-.694l-.001.001-.001.001v1.008l.001.001.001.001h.694a1 1 0 0 1 .968.75c.12.46.301.895.538 1.295a1 1 0 0 1-.154 1.216l-.49.49-.002.003.001.003.71.71.004.002.002-.001.49-.49a1.001 1.001 0 0 1 1.217-.155c.4.237.835.419 1.295.538a1 1 0 0 1 .75.968v.694l.001.001.001.001h1.008l.001-.001.001-.001v-.694a1 1 0 0 1 .75-.968c.46-.12.895-.301 1.295-.538a1 1 0 0 1 1.216.154l.49.49.003.002h.002v-.001l.711-.71.001-.002v-.004l-.49-.49a1.001 1.001 0 0 1-.155-1.217c.237-.4.419-.835.538-1.295a1 1 0 0 1 .968-.75h.694l.001-.001.001-.001V7.496l-.001-.001-.001-.001h-.694a1 1 0 0 1-.968-.75 4.996 4.996 0 0 0-.538-1.295 1 1 0 0 1 .154-1.216l.49-.49.002-.003-.001-.003-.71-.71-.004-.002-.002.001-.49.491a1 1 0 0 1-1.217.154 4.993 4.993 0 0 0-1.295-.538zm.25-.968a5.994 5.994 0 0 1 1.554.645l.49-.49a1.004 1.004 0 0 1 1.42 0l.71.71a1.004 1.004 0 0 1 0 1.42l-.49.49c.283.48.502 1.001.645 1.554h.692c.555 0 1.004.45 1.004 1.004v1.004c0 .555-.45 1.004-1.004 1.004h-.692a5.997 5.997 0 0 1-.645 1.554l.49.49a1.004 1.004 0 0 1 0 1.42l-.71.71a1.004 1.004 0 0 1-1.42 0l-.49-.49a5.992 5.992 0 0 1-1.554.645v.692c0 .555-.45 1.004-1.004 1.004H7.498c-.555 0-1.004-.45-1.004-1.004v-.692a5.991 5.991 0 0 1-1.554-.645l-.49.49a1.004 1.004 0 0 1-1.42 0l-.71-.71a1.004 1.004 0 0 1 0-1.42l.49-.49a5.993 5.993 0 0 1-.645-1.554h-.692c-.555 0-1.004-.45-1.004-1.004V7.498c0-.555.45-1.004 1.004-1.004h.692A5.994 5.994 0 0 1 2.81 4.94l-.49-.49a1.004 1.004 0 0 1 0-1.42l.71-.71a1.004 1.004 0 0 1 1.42 0l.49.49a5.993 5.993 0 0 1 1.554-.645v-.692c0-.555.45-1.004 1.004-1.004h1.004c.555 0 1.004.45 1.004 1.004v.692zM8 11.513A3.514 3.514 0 0 1 4.487 8 3.514 3.514 0 0 1 8 4.488 3.514 3.514 0 0 1 11.512 8 3.514 3.514 0 0 1 8 11.513zM5.487 8A2.514 2.514 0 0 0 8 10.513 2.514 2.514 0 0 0 10.512 8 2.514 2.514 0 0 0 8 5.488 2.514 2.514 0 0 0 5.487 8z\" fill=\"#fff\"/>\n                    </g>\n                </g>\n                <defs>\n                    <clipPath id=\"hkbelzmt3a\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default SmartGear;\n","import { ChallengeScriptHeaderViewProps } from './types';\nimport {\n    StyledChallengeScriptHeader,\n    StyledScriptHeaderActions,\n    StyledButton,\n    LeftButtons,\n    AttemptsCountContainer,\n    AttemptsCountText,\n    AttemptsCountValue,\n    IconContainer,\n} from './styles';\nimport { ChallengeSettings } from '../ChallengeSettings';\nimport Generate from '../../../../ui/icons/Generate';\nimport { ScriptLine } from '../../../../constants/interfaces/ScriptLine';\nimport { EditModeValues } from '../../../../constants/enums/EditModeValues';\nimport Play from '../../../../ui/icons/Play';\nimport { Stop } from '@material-ui/icons';\nimport SmartGear from '../../../../ui/icons/SmartGear';\n\nfunction ChallengeScriptHeaderView({\n    player,\n    challenge,\n    generating,\n    showChallengeSettings,\n    editMode,\n    stopPlaylist,\n    playAudio,\n    textToSpeech,\n    setShowChallengeSettings,\n}: ChallengeScriptHeaderViewProps) {\n    const actionsDisabled = editMode === EditModeValues.VIEW;\n    const isAudioProcessing = !!player.recording || generating;\n    const isGenerateForAllDisabled = (\n            !!challenge.script\n            && (\n                challenge.script.lines.filter((line: ScriptLine) => line.text).length === 0\n                || player.status !== 'off'\n                || isAudioProcessing\n            )\n        )\n        || actionsDisabled;\n    const isPlayDisabled = (\n            !!challenge.script\n            && (\n                challenge.script.lines.filter((line: ScriptLine) => line.audioUrl).length === 0\n                || isAudioProcessing\n            )\n        );\n    return (\n        <StyledChallengeScriptHeader>\n            {showChallengeSettings && (\n                <ChallengeSettings\n                    challenge={challenge}\n                    onClose={() => setShowChallengeSettings(false)}\n                />\n            )}\n            <AttemptsCountContainer>\n                <AttemptsCountText data-test=\"max-attempts-text\">Max. Attempts</AttemptsCountText>\n                <AttemptsCountValue data-test=\"challenge-attempts-limit\">\n                    {challenge.tryLimit?.toString() || 'Unlimited'}\n                </AttemptsCountValue>\n            </AttemptsCountContainer>\n            <StyledScriptHeaderActions>\n                <LeftButtons>\n                    <StyledButton\n                        label=\"Generate for All\"\n                        iconRender={<IconContainer><Generate /></IconContainer>}\n                        disabled={isGenerateForAllDisabled}\n                        width=\"127px\"\n                        height=\"40px\"\n                        action={textToSpeech}\n                        dataTest='challenge-generate-for-all'\n                    />\n                    {player.status !== 'playlist' ? (\n                        <StyledButton\n                            label=\"Play\"\n                            iconRender={<IconContainer><Play /></IconContainer>}\n                            disabled={isPlayDisabled}\n                            action={playAudio}\n                            height=\"40px\"\n                            width=\"58px\"\n                            dataTest='challenge-play-all'\n                        />\n                    ) : (\n                        <StyledButton\n                            label=\"Stop\"\n                            iconRender={<IconContainer><Stop /></IconContainer>}\n                            color=\"warning\"\n                            action={stopPlaylist}\n                            height=\"40px\"\n                            width=\"58px\"\n                            dataTest='challenge-stop'\n                        />\n                    )}\n                </LeftButtons>\n                <div>\n                    <StyledButton\n                        label=\"Settings\"\n                        iconRender={<IconContainer><SmartGear /></IconContainer>}\n                        disabled={actionsDisabled}\n                        width=\"84px\"\n                        height=\"40px\"\n                        action={() => setShowChallengeSettings(true)}\n                        dataTest='challenge-settings'\n                    />\n                </div>\n            </StyledScriptHeaderActions>\n        </StyledChallengeScriptHeader>\n    );\n}\n\nexport default ChallengeScriptHeaderView;","import { useSelector } from 'react-redux';\nimport ChallengeScriptHeaderView from './view';\nimport { useContext, useState } from 'react';\nimport { ScriptLineSpeaker } from '../../../../constants/interfaces/ScriptLine';\nimport { getAudioState } from '../../../player/store/reducers';\nimport { useResetAudioService } from '../../../player/store/services';\nimport { useTextToSpeechBulkActionService } from '../../../textToSpeech/BulkActionService';\nimport { useVoiceGenerationState } from '../../../textToSpeech/store/states';\nimport { EditModeContext, PlayAudioContext } from '../../pages/EditChallenge';\nimport { useChallengeState } from '../../store/states';\n\nfunction ChallengeScriptHeader() {\n    const edit = useContext(EditModeContext);\n    const [showChallengeSettings, setShowChallengeSettings] = useState(false);\n\n    const player = useSelector(getAudioState);\n    const challenge = useChallengeState().data;\n    const resetPlaylist = useResetAudioService();\n    const voice = useVoiceGenerationState().challenges;\n    const playAudio = useContext(PlayAudioContext);\n    const textToSpeechBulkAction = useTextToSpeechBulkActionService(\n        challenge.script.lines.filter(line => line.speaker === ScriptLineSpeaker.CUSTOMER),\n        'challenges'\n    )\n\n    return (\n        <ChallengeScriptHeaderView\n            challenge={challenge}\n            player={player}\n            generating={voice?.generating}\n            showChallengeSettings={showChallengeSettings}\n            editMode={edit.mode}\n            stopPlaylist={resetPlaylist}\n            playAudio={playAudio}\n            textToSpeech={textToSpeechBulkAction}\n            setShowChallengeSettings={setShowChallengeSettings}\n        />\n    );\n}\n\nexport default ChallengeScriptHeader;","import React, { FC, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\nimport { useGetCompanyService } from '../../../../pages/CompanySettings/store/services';\nimport { Challenge } from '../../../../constants/interfaces/Challenge';\nimport ScriptLineContent from '../ScriptLineContent';\nimport ScriptAction from '../ScriptAction/ScriptAction';\nimport { ChallengeScriptHeader } from '../ChallengeScriptHeader';\nimport { EditModeContext } from '../../pages/EditChallenge';\nimport { EditModeValues } from '../../../../constants/enums/EditModeValues';\nimport Customer from '../../../../ui/icons/Customer';\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\n\nexport interface RightPanelInterface {\n    challenge: Challenge;\n    createScriptLine: any;\n    company?: CompanyInterface;\n}\n\nconst StyledScenarioScript = styled.div`\n    flex: 3;\n    display: flex;\n    flex-direction: column;\n    min-width: 400px;\n`;\n\nconst UserAvatarPanel = styled.div`\n    display: flex;\n    justify-content: space-between;\n    margin-bottom: 16px;\n`;\n\nconst StyledCustomer = styled.div<{ reverse?: boolean }>`\n    display: flex;\n    align-items: center;\n    flex-direction: ${props => (props.reverse ? 'row-reverse' : 'row')};\n`;\n\nconst ImageContainer = styled.div`\n    height: 40px;\n    width: 40px;\n    border-radius: 4px;\n    overflow: hidden;\n    background: ${props => props.theme.Colors.white};\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledImage = styled.img`\n    height: 100%;\n    width: 100%;\n`;\n\nconst StyledCustomerImage = styled(Customer)`\n    height: 20px;\n    width: 20px;\n`;\n\nconst StyledText = styled.p`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    margin: 0 8px;\n`;\n\nconst ScriptsBody = styled.div`\n    padding: 8px;\n`;\n\nconst PlaceholderWrapper = styled.div`\n    width: 100%;\n    height: 100%;\n    border-radius: 4px;\n    align-items: center;\n    justify-content: center;\n    display: flex;\n`;\n\nconst ChallengeScripts = ({\n    challenge,\n    createScriptLine,\n    company,\n}: RightPanelInterface) => {\n    const edit = useContext(EditModeContext);\n    let logo;\n    const mediaUrl = company?.logoUrl;\n    if (mediaUrl) {\n        logo = <StyledImage src={mediaUrl} alt=\"company\" />;\n    } else if (company) {\n        logo = (\n            <AvatarPlaceholder\n                profile={company}\n                size={'sm'}\n                customWrapper={PlaceholderWrapper}\n            />\n        );\n    }\n    \n    return (\n        <StyledScenarioScript>\n            <ChallengeScriptHeader />\n            <ScriptsBody>\n                <UserAvatarPanel>\n                    <StyledCustomer>\n                        <ImageContainer data-test='challenge-customer-avatar'>\n                            <StyledCustomerImage />\n                        </ImageContainer>\n                        <StyledText data-test='challenge-customer-label'>Customer</StyledText>\n                    </StyledCustomer>\n                    <StyledCustomer reverse>\n                        <ImageContainer data-test='challenge-rep-logo'>{logo}</ImageContainer>\n                        <StyledText data-test='challenge-rep-label'>Rep</StyledText>\n                    </StyledCustomer>\n                </UserAvatarPanel>\n                {challenge.script && (\n                    <ScriptLineContent script={challenge.script.lines} />\n                )}\n                {edit.mode === EditModeValues.EDIT && (\n                    <ScriptAction handleAdd={createScriptLine} />\n                )}\n            </ScriptsBody>\n        </StyledScenarioScript>\n    );\n};\n\nexport const ChallengeScriptsContainer: FC<{\n    challenge: Challenge;\n    createScriptLine: any;\n}> = ({ challenge, createScriptLine }) => {\n    const profile = useSelector(getProfileState);\n    const company = useSelector(getCompanyState);\n    const getCompany = useGetCompanyService();\n\n    useEffect(() => {\n        if (!company.id && profile?.companyId) {\n            getCompany(profile?.companyId);\n        }\n    }, [company?.id, profile?.companyId, getCompany]);\n\n    return (\n        <ChallengeScripts\n            challenge={challenge}\n            createScriptLine={createScriptLine}\n            company={company}\n        />\n    );\n};\n\nexport default ChallengeScriptsContainer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport ChallengeInfo from './ChallengeInfo';\nimport ChallengeScripts from './ChallengeScripts';\nimport { Challenge } from '../../../../constants/interfaces/Challenge';\nimport { ScriptLineSpeaker } from '../../../../constants/interfaces/ScriptLine';\n\nexport interface CustomBodyInterface {\n    challenge: Challenge;\n    createScriptLine: (speaker: ScriptLineSpeaker) => void;\n}\n\nconst CustomBodyContainerWrapper = styled.div`\n    display: flex;\n    min-height: calc(100vh - 75px);\n`;\n\nconst CustomBodyContainer = styled.div`\n    display: flex;\n    flex: 1;\n    flex-wrap: wrap;\n`;\n\nconst ChallengeBody = ({\n    challenge,\n    createScriptLine,\n}: CustomBodyInterface) => {\n    return (\n        <CustomBodyContainerWrapper>\n            <CustomBodyContainer>\n                <ChallengeInfo challenge={challenge} />\n                <ChallengeScripts\n                    challenge={challenge}\n                    createScriptLine={createScriptLine}\n                />\n            </CustomBodyContainer>\n        </CustomBodyContainerWrapper>\n    );\n};\n\nexport default ChallengeBody;\n","import React, { FC, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { useLabelsState } from '../../../labels/store/states';\nimport { useModifyChallengeService } from '../../store/services';\nimport { EditModeContext } from '../../pages/EditChallenge';\nimport { EditModeValues } from '../../../../constants/enums/EditModeValues';\nimport { Challenge } from '../../../../constants/interfaces/Challenge';\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { LabelsAction } from '../../../../ui/components/table-wrapper/table/TableAssignOptions/actions/LabelsAction';\nimport { Input } from '../../../../ui/components/input';\n\nconst Container = styled.div`\n    padding: 15px 0;\n    display: flex;\n`;\n\nconst TextInputContainer = styled.div`\n    flex: 1;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 128px;\n    margin-left: 16px;\n`;\n\nconst TitleTextInput = styled(Input)`\n    padding: 12px 16px;\n    font-size: 13px;\n    font-weight: normal;\n`;\n\nconst ActionPanel: FC<{ challenge: Challenge, titleError: boolean }> = ({ challenge, titleError }) => {\n    const modifyChallenge = useModifyChallengeService();\n    const edit = useContext(EditModeContext);\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState().data;\n    const showMessage = useShowMessage();\n\n    useEffect(() => {}, []);\n\n    const handleSaveChallengeLabels = () => {\n        modifyChallenge(labels.assignedLabels, 'updatedLabels');\n        showMessage(`labels have been assigned to Challenge`, 'success');\n    };\n\n    return (\n        <Container>\n            <TextInputContainer>\n                <TitleTextInput\n                    placeholder=\"Challenge Title\"\n                    height={'40px'}\n                    maxLength={100}\n                    handleChange={(event: any) =>\n                        modifyChallenge(event.target.value, 'title')\n                    }\n                    value={challenge.title}\n                    readOnly={edit.mode === EditModeValues.VIEW}\n                    error={titleError}\n                    dataTest='challenge-title'\n                />\n            </TextInputContainer>\n            <LabelsContainer>\n                <LabelsAction\n                    title={'Labels'}\n                    labels={labelsList}\n                    disabled={edit.mode === EditModeValues.VIEW}\n                    onAssignLabelsSubmit={handleSaveChallengeLabels}\n                    containerLeftPosition={'unset'}\n                    dataTest='challenge-labels'\n                />\n            </LabelsContainer>\n        </Container>\n    );\n};\n\nexport default ActionPanel;\n","import {\r\n    createContext,\r\n    FC,\r\n    useCallback,\r\n    useEffect,\r\n    useRef,\r\n    useState,\r\n} from 'react';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport { ModalPageContainer } from '../../../ui/components/ModalPage';\r\nimport styled from 'styled-components';\r\nimport HeaderContainer from '../components/Header';\r\nimport {\r\n    Challenge,\r\n    ChallengeStatuses,\r\n    Status,\r\n} from '../../../constants/interfaces/Challenge';\r\nimport { ModifyCase, useChallengeState } from '../store/states';\r\nimport {\r\n    useCreatePlaylistService,\r\n    useResetAudioService,\r\n} from '../../player/store/services';\r\nimport {\r\n    useCreateChallengeScriptLineService,\r\n    useGetChallengeService,\r\n    useModifyChallengeService,\r\n    useResetChallengeService,\r\n} from '../store/services';\r\nimport NavigationPrompt from 'react-router-navigation-prompt';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { validationService } from '../tools';\r\nimport { buildPageTitle } from '../../../helpers/functions/page-title-helpers';\r\nimport { EditModeValues } from '../../../constants/enums/EditModeValues';\r\nimport ChallengeBody from '../components/ChallengeBody';\r\nimport {\r\n    ScriptLine,\r\n    ScriptLineSpeaker,\r\n} from '../../../constants/interfaces/ScriptLine';\r\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\r\nimport { useLoadVoiceSettingsService } from '../../../pages/CompanySettings/store/services';\r\nimport ActionPanel from '../components/ActionPanel/ActionPanel';\r\nimport { useLabelsState } from '../../labels/store/states';\r\nimport {\r\n    useSetAssignLabelsActionService,\r\n    useSetPreviouslyAssignedLabelsAction,\r\n} from '../../labels/store/services';\r\nimport {\r\n    calculateAssignedLabels,\r\n    calculateRemovedLabels,\r\n    useCalculatePreSelectedLabelsForSingleItem,\r\n} from '../../labels/tools';\r\nimport { isTeamLeader } from '../../../constants/enums';\r\nimport { usePortableLabelsState } from '../../portableLabels/store/states';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { UserProfile } from '../../../constants/interfaces/User';\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport { useLoggedInUserPermissionsHelper } from '../../users/tools';\r\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\r\nimport {\r\n    useGenerateCreateDuplicateChallengeActionList,\r\n    useGenerateEditChallengeActionList,\r\n} from '../../library/services/LibraryBulkActionsService/helpers';\r\nimport { useCreateEditDuplicateLibraryBulActionService } from '../../library/services/LibraryBulkActionsService';\r\nimport {\r\n    CreateNewChallengeInfo,\r\n    EditChallengeInfo,\r\n} from '../../library/services/LibraryBulkActionsService/types';\r\nimport {\r\n    useCreateEditChallengeFailedCallback,\r\n    useCreateEditChallengeSuccessCallback,\r\n    useHandleArchiveChallenge,\r\n} from '../services';\r\nimport DialogWrapper from '../../../ui/components/DialogWrapper/DialogWrapper';\r\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\r\nimport { useGetRoleplayForScenario } from '../../../pages/ActionPages/NewScenario/store/services';\r\n\r\nconst uuid = require('uuid/v1');\r\nconst qs = require('query-string');\r\n\r\nexport const StyledContainer = styled.div`\r\n    overflow: auto;\r\n    height: 100%;\r\n    display: block;\r\n    padding: 0 32px;\r\n    background: ${props => props.theme.Colors.white};\r\n    border-top-left-radius: 8px;\r\n    border-bottom-left-radius: 8px;\r\n`;\r\n\r\nconst StyledLoadingContainer = styled.div`\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n`;\r\n\r\nconst CreatedByWrapper = styled.div`\r\n    padding: 0 16px 10px;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    font-size: 13px;\r\n`;\r\n\r\nexport const StatusItems: Array<{\r\n    value: string;\r\n    name: string;\r\n    confirm: boolean;\r\n    message: string;\r\n}> = [\r\n    {\r\n        value: 'DRAFT',\r\n        name: 'Draft',\r\n        message: 'Challenge saved as Draft',\r\n        confirm: false,\r\n    },\r\n    {\r\n        value: 'ACTIVE',\r\n        name: 'Active',\r\n        message: 'Challenge published',\r\n        confirm: false,\r\n    },\r\n    {\r\n        value: 'ARCHIVED',\r\n        name: 'Archived',\r\n        message: 'Challenge archived',\r\n        confirm: true,\r\n    },\r\n    {\r\n        value: 'DELETED',\r\n        name: 'Deleted',\r\n        message: 'Challenge deleted',\r\n        confirm: true,\r\n    },\r\n];\r\n\r\nexport const LoadingSaveContext = createContext(false);\r\nexport const ChallengeContainerContext = createContext<any>(null);\r\nexport const PlayAudioContext = createContext<any>(null);\r\nexport const EditModeContext = createContext<{\r\n    mode: string;\r\n    action: (mode: EditModeValues) => void;\r\n}>({\r\n    mode: 'view',\r\n    action: () => {},\r\n});\r\n\r\nconst EditChallenge: FC<{\r\n    challenge: Challenge;\r\n    modified: ModifyCase;\r\n    loading?: boolean;\r\n    history?: any;\r\n    profile?: UserProfile;\r\n    challengeId?: number | string;\r\n    getChallenge: (challengeId: number | string) => void;\r\n    handleCreateScriptLine: (\r\n        data: Partial<ScriptLine>,\r\n        silent?: boolean\r\n    ) => any;\r\n    handleResetChallenge: () => void;\r\n    handleCreatePlaylist: (data: any) => void;\r\n    handleResetPlaylist: () => void;\r\n    handleLoadVoiceSettings: () => void;\r\n    showMessage: (\r\n        message: string | string[],\r\n        status: 'error' | 'success'\r\n    ) => void;\r\n    closePath: string;\r\n    closeGoingBack: boolean;\r\n    isNew: boolean;\r\n}> = ({\r\n    closeGoingBack,\r\n    closePath,\r\n    isNew,\r\n    loading,\r\n    modified,\r\n    getChallenge,\r\n    challenge,\r\n    challengeId,\r\n    handleCreateScriptLine,\r\n    handleResetChallenge,\r\n    handleCreatePlaylist,\r\n    handleResetPlaylist,\r\n    handleLoadVoiceSettings,\r\n    showMessage,\r\n    history,\r\n    profile,\r\n}) => {\r\n    const [editMode, setEditMode] = useState<EditModeValues>(\r\n        EditModeValues.VIEW\r\n    );\r\n\r\n    const createEditChallengeSuccessCallback =\r\n        useCreateEditChallengeSuccessCallback();\r\n    const createEditChallengeFailedCallback =\r\n        useCreateEditChallengeFailedCallback();\r\n    const handleArchiveChallenge = useHandleArchiveChallenge();\r\n    useHtmlPageTitle(\r\n        buildPageTitle('Challenge', editMode, isNew),\r\n        [challenge.title]\r\n    );\r\n    const getRoleplayForScenario = useGetRoleplayForScenario();\r\n    const location = history.location;\r\n\r\n    const [loadingSave, setLoadingSave] = useState(false);\r\n    const isTeamLead = isTeamLeader(profile?.role?.name);\r\n    const parentRef = useRef(null);\r\n    const [titleError, setTitleError] = useState(false);\r\n    const isLoaded = !!challenge?.id;\r\n\r\n    const roleplayId = qs.parse(location.search)?.roleplayId;\r\n    const contentId = qs.parse(location.search)?.contentId;\r\n    const modifyChallenge = useModifyChallengeService();\r\n\r\n    const createScriptLine = useCallback(\r\n        (speaker: ScriptLineSpeaker, silent?: boolean, text?: string) => {\r\n            const sendValues = {\r\n                id: `temp_${uuid()}`,\r\n                text: text ?? '',\r\n                speaker: speaker,\r\n                position: challenge.script\r\n                    ? challenge.script.lines.length + 1\r\n                    : 1,\r\n                allowedResponseTime:\r\n                    speaker === ScriptLineSpeaker.REP ? 45 : null,\r\n                scriptId: challenge.scriptId,\r\n            };\r\n\r\n            handleCreateScriptLine(sendValues, silent);\r\n        },\r\n        [challenge.script, challenge.scriptId, handleCreateScriptLine]\r\n    );\r\n\r\n    useEffect(() => {\r\n        if (roleplayId && contentId) {\r\n            getRoleplayForScenario(roleplayId, contentId).then(({ aiLines, title, description }) => {\r\n                aiLines.forEach(line => line.speaker === 'CUSTOMER' && createScriptLine(line.speaker, false, line.text));\r\n                modifyChallenge(title || '', 'title');\r\n                modifyChallenge(description || '', 'description');\r\n            });\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [roleplayId, contentId, getRoleplayForScenario])\r\n\r\n    useEffect(() => {\r\n        if (\r\n            !history?.location?.state?.prevLocation?.pathname?.includes(\r\n                '/submissions/challenges/'\r\n            )\r\n        ) {\r\n            handleResetChallenge();\r\n            handleResetPlaylist();\r\n\r\n            if (!isNew && challengeId) {\r\n                getChallenge(challengeId);\r\n            }\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [\r\n        getChallenge,\r\n        challengeId,\r\n        isNew,\r\n        handleResetPlaylist,\r\n        handleResetChallenge,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            handleResetPlaylist();\r\n        };\r\n    }, [handleResetPlaylist]);\r\n\r\n    useEffect(() => {\r\n        setEditMode(\r\n            (isLoaded || isNew) && challenge.status === ChallengeStatuses.DRAFT && !isTeamLead\r\n                ? EditModeValues.EDIT\r\n                : EditModeValues.VIEW\r\n        );\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [isLoaded, isNew, challenge.status, setEditMode]);\r\n\r\n    const labels = useLabelsState();\r\n    const labelsList = usePortableLabelsState().data;\r\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\r\n    const setPreviouslyAssignedLabelsAction =\r\n        useSetPreviouslyAssignedLabelsAction();\r\n    const calculatePreSelectedLabels =\r\n        useCalculatePreSelectedLabelsForSingleItem();\r\n    const loggedInActionsHelper = useLoggedInUserPermissionsHelper();\r\n\r\n    useEffect(() => {\r\n        if (challenge.labels && challenge.labels.length > 0) {\r\n            const selectedLabelIds = challenge.labels;\r\n            const preAssignedLabels = calculatePreSelectedLabels(\r\n                selectedLabelIds,\r\n                labelsList\r\n            );\r\n            setAssignLabelsAction(preAssignedLabels);\r\n        } else {\r\n            setAssignLabelsAction([]);\r\n        }\r\n        return () => {\r\n            setAssignLabelsAction([]);\r\n        };\r\n    }, [\r\n        challenge.labels,\r\n        labelsList,\r\n        calculatePreSelectedLabels,\r\n        setAssignLabelsAction,\r\n    ]);\r\n\r\n    //initially set previousAssignedLabels\r\n    useEffect(() => {\r\n        if (!isEmpty(challenge.labels)) {\r\n            const selectedLabelIds = challenge.labels ?? [];\r\n            const preAssignedLabels = calculatePreSelectedLabels(\r\n                selectedLabelIds,\r\n                labelsList\r\n            );\r\n            setPreviouslyAssignedLabelsAction(preAssignedLabels);\r\n        } else {\r\n            setPreviouslyAssignedLabelsAction([]);\r\n        }\r\n        return () => {\r\n            setPreviouslyAssignedLabelsAction([]);\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [challenge.labels]);\r\n\r\n    const generateCreateChallengeActionList =\r\n        useGenerateCreateDuplicateChallengeActionList();\r\n\r\n        const generateEditChallengeActionList =\r\n        useGenerateEditChallengeActionList();\r\n\r\n    const createLibraryBulkActionService =\r\n        useCreateEditDuplicateLibraryBulActionService(\r\n            isNew ? 'create' : 'update',\r\n            'Challenge',\r\n            responses =>\r\n                createEditChallengeSuccessCallback(setLoadingSave, responses),\r\n            (error, completedResponses) =>\r\n                createEditChallengeFailedCallback(\r\n                    setLoadingSave,\r\n                    error,\r\n                    completedResponses\r\n                )\r\n        );\r\n\r\n    const handleUpdateChallenge = (\r\n        callbacks: { onConfirm: () => void; onCancel: () => void } | null,\r\n        status?: Status\r\n    ) => {\r\n        setLoadingSave(true);\r\n        const response = validationService(\r\n            challenge,\r\n            status ? status : challenge.status\r\n        );\r\n        if (!response.valid) {\r\n            callbacks && callbacks.onCancel();\r\n            showMessage(response.message, 'error');\r\n            setLoadingSave(false);\r\n\r\n            setTitleError(response.name === 'name');\r\n            return;\r\n        } else {\r\n            setTitleError(false);\r\n        }\r\n\r\n        const newChallengeInfo: CreateNewChallengeInfo = {\r\n            title: challenge.title,\r\n            description: challenge.description,\r\n            sourceScenarioId: challenge.sourceScenarioId ?? 0,\r\n            labelIds: calculateAssignedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            lines:\r\n                challenge.script?.lines?.filter(line => line.text.length > 0) ??\r\n                [],\r\n            status: status ?? challenge.status,\r\n            tryLimit: challenge.tryLimit,\r\n        };\r\n\r\n        const editChallengeInfo: EditChallengeInfo = {\r\n            challengeId: challenge.id ?? 0,\r\n            title: challenge.title,\r\n            description: challenge.description,\r\n            addedLabelIds: calculateAssignedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            deletedLabelIds: calculateRemovedLabels(\r\n                labels.assignedLabels,\r\n                labels.previouslyAssignedLabels ?? []\r\n            ),\r\n            lines:\r\n                challenge.script?.lines?.filter(line => line.text.length > 0) ??\r\n                [],\r\n            status: status ?? challenge.status,\r\n            tryLimit: challenge.tryLimit,\r\n        };\r\n\r\n        const createChallengeActionList =\r\n            generateCreateChallengeActionList(newChallengeInfo);\r\n\r\n        const editChallengeActionList =\r\n            generateEditChallengeActionList(editChallengeInfo);\r\n\r\n        if (status !== ChallengeStatuses.ARCHIVED) {\r\n            if (!challenge.id) {\r\n                createLibraryBulkActionService([createChallengeActionList]);\r\n            } else {\r\n                createLibraryBulkActionService(editChallengeActionList);\r\n            }\r\n        } else {\r\n            challenge?.id && handleArchiveChallenge(challenge.id);\r\n        }\r\n    };\r\n\r\n    \r\n\r\n    const playAllAudio = () => {\r\n        handleResetPlaylist();\r\n        const filterItems = challenge.script.lines.filter(\r\n            (script: ScriptLine) => script.audioUrl\r\n        );\r\n        const playlistItems = filterItems\r\n            .filter(script => script.speaker === ScriptLineSpeaker.CUSTOMER)\r\n            .map((script: ScriptLine) => script.id);\r\n        setTimeout(() => {\r\n            handleCreatePlaylist(playlistItems);\r\n        }, 150);\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (\r\n            loggedInActionsHelper.hasActionPermission(\r\n                NEW_PERMISSIONS.VIEW_TTS_SETTINGS\r\n            )\r\n        ) {\r\n            handleLoadVoiceSettings();\r\n        }\r\n    }, [handleLoadVoiceSettings, loggedInActionsHelper]);\r\n\r\n    useEffect(() => {\r\n        if (isNew && challenge.script.lines.length < 1 && !roleplayId) {\r\n            createScriptLine(ScriptLineSpeaker.CUSTOMER, true);\r\n        }\r\n    }, [challenge.script.lines.length, createScriptLine, isNew, roleplayId]);\r\n\r\n\r\n    if (!isNew && loading) {\r\n        return (\r\n            <ModalPageContainer\r\n                closePath={closePath}\r\n                closeGoingBack={closeGoingBack}\r\n            >\r\n                <StyledLoadingContainer>\r\n                    <Loading />\r\n                </StyledLoadingContainer>\r\n            </ModalPageContainer>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <ModalPageContainer\r\n            closePath={closePath}\r\n            closeGoingBack={closeGoingBack}\r\n        >\r\n            <StyledContainer ref={parentRef}>\r\n                <EditModeContext.Provider\r\n                    value={{ mode: editMode, action: setEditMode }}\r\n                >\r\n                    <LoadingSaveContext.Provider value={loadingSave}>\r\n                        <HeaderContainer\r\n                            challenge={challenge}\r\n                            handleUpdateChallenge={handleUpdateChallenge}\r\n                            modified={modified === 'modified'}\r\n                            isViewMode={isTeamLead}\r\n                        />\r\n                        <ActionPanel\r\n                            challenge={challenge}\r\n                            titleError={titleError}\r\n                        />\r\n                        {challenge.creator && (\r\n                            <CreatedByWrapper data-test=\"challenge-creator-text\">\r\n                                Created by {challenge.creator?.firstName}{' '}\r\n                                {challenge.creator?.lastName}\r\n                            </CreatedByWrapper>\r\n                        )}\r\n                        <TableDivider />\r\n                        <ChallengeContainerContext.Provider value={parentRef}>\r\n                            <PlayAudioContext.Provider value={playAllAudio}>\r\n                                <ChallengeBody\r\n                                    challenge={challenge}\r\n                                    createScriptLine={createScriptLine}\r\n                                />\r\n                            </PlayAudioContext.Provider>\r\n                        </ChallengeContainerContext.Provider>\r\n                    </LoadingSaveContext.Provider>\r\n                </EditModeContext.Provider>\r\n                <NavigationPrompt when={modified === 'modified'}>\r\n                    {({ onConfirm, onCancel }) => (\r\n                        <DialogWrapper\r\n                            modalTitle={'Discard changes?'}\r\n                            description={\r\n                                'Do you want to save or discard changes?'\r\n                            }\r\n                            cancelButtonText={'Discard'}\r\n                            confirmButtonText={'Save'}\r\n                            onCancel={onConfirm}\r\n                            onConfirm={() => {\r\n                                handleUpdateChallenge({ onConfirm, onCancel });\r\n                            }}\r\n                            dataTest=\"confirmation-modal\"\r\n                        />\r\n                    )}\r\n                </NavigationPrompt>\r\n            </StyledContainer>\r\n        </ModalPageContainer>\r\n    );\r\n};\r\n\r\nexport const EditChallengeContainer: FC<{\r\n    closePath: string;\r\n    closeGoingBack: boolean;\r\n}> = ({ closePath, closeGoingBack }) => {\r\n    const challenge = useChallengeState().data;\r\n    const modified = useChallengeState().case;\r\n    const loading = useChallengeState().loading;\r\n    const history = useHistory();\r\n    const profile = useSelector(getProfileState);\r\n\r\n    const params: { challengeId?: string | number } = useParams();\r\n\r\n    const getChallenge = useGetChallengeService();\r\n    const resetChallenge = useResetChallengeService();\r\n    const createScriptLine = useCreateChallengeScriptLineService();\r\n\r\n    const createPlaylist = useCreatePlaylistService();\r\n    const resetPlaylist = useResetAudioService();\r\n    const showMessage = useShowMessage();\r\n\r\n    const loadVoiceSettings = useLoadVoiceSettingsService();\r\n    const handleLoadVoiceSettings = useCallback(\r\n        () => profile?.companyId && loadVoiceSettings(profile?.companyId),\r\n        [loadVoiceSettings, profile?.companyId]\r\n    );\r\n\r\n    return (\r\n        <EditChallenge\r\n            challenge={challenge}\r\n            challengeId={params.challengeId}\r\n            modified={modified}\r\n            loading={loading}\r\n            isNew={params.challengeId === 'new'}\r\n            closeGoingBack={closeGoingBack}\r\n            closePath={closePath}\r\n            history={history}\r\n            profile={profile}\r\n            getChallenge={getChallenge}\r\n            handleCreateScriptLine={createScriptLine}\r\n            handleResetChallenge={resetChallenge}\r\n            handleCreatePlaylist={createPlaylist}\r\n            handleResetPlaylist={resetPlaylist}\r\n            handleLoadVoiceSettings={handleLoadVoiceSettings}\r\n            showMessage={showMessage}\r\n        />\r\n    );\r\n};\r\n\r\nexport default EditChallengeContainer;","function enableNewRelic({\n    licenseKey,\n    applicationID,\n}: {\n    licenseKey: string;\n    applicationID: string;\n}) {\n    const beacon = 'bam.nr-data.net';\n    const errorBeacon = 'bam.nr-data.net';\n    const agent = 'js-agent.newrelic.com/nr-spa-1167.min.js';\n\n    return `\n        window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o||e)},o,o.exports)}return e[n].exports}if(\"function\"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,e,n){function r(t){try{s.console&&console.log(t)}catch(e){}}var o,i=t(\"ee\"),a=t(25),s={};try{o=localStorage.getItem(\"__nr_flags\").split(\",\"),console&&\"function\"==typeof console.log&&(s.console=!0,o.indexOf(\"dev\")!==-1&&(s.dev=!0),o.indexOf(\"nr_dev\")!==-1&&(s.nrDev=!0))}catch(c){}s.nrDev&&i.on(\"internal-error\",function(t){r(t.stack)}),s.dev&&i.on(\"fn-err\",function(t,e,n){r(n.stack)}),s.dev&&(r(\"NR AGENT IN DEVELOPMENT MODE\"),r(\"flags: \"+a(s,function(t,e){return t}).join(\", \")))},{}],2:[function(t,e,n){function r(t,e,n,r,s){try{l?l-=1:o(s||new UncaughtException(t,e,n),!0)}catch(f){try{i(\"ierr\",[f,c.now(),!0])}catch(d){}}return\"function\"==typeof u&&u.apply(this,a(arguments))}function UncaughtException(t,e,n){this.message=t||\"Uncaught error with no additional information\",this.sourceURL=e,this.line=n}function o(t,e){var n=e?null:c.now();i(\"err\",[t,n])}var i=t(\"handle\"),a=t(26),s=t(\"ee\"),c=t(\"loader\"),f=t(\"gos\"),u=window.onerror,d=!1,p=\"nr@seenError\",l=0;c.features.err=!0,t(1),window.onerror=r;try{throw new Error}catch(h){\"stack\"in h&&(t(13),t(12),\"addEventListener\"in window&&t(6),c.xhrWrappable&&t(14),d=!0)}s.on(\"fn-start\",function(t,e,n){d&&(l+=1)}),s.on(\"fn-err\",function(t,e,n){d&&!n[p]&&(f(n,p,function(){return!0}),this.thrown=!0,o(n))}),s.on(\"fn-end\",function(){d&&!this.thrown&&l>0&&(l-=1)}),s.on(\"internal-error\",function(t){i(\"ierr\",[t,c.now(),!0])})},{}],3:[function(t,e,n){t(\"loader\").features.ins=!0},{}],4:[function(t,e,n){function r(){L++,C=g.hash,this[u]=y.now()}function o(){L--,g.hash!==C&&i(0,!0);var t=y.now();this[h]=~~this[h]+t-this[u],this[d]=t}function i(t,e){E.emit(\"newURL\",[\"\"+g,e])}function a(t,e){t.on(e,function(){this[e]=y.now()})}var s=\"-start\",c=\"-end\",f=\"-body\",u=\"fn\"+s,d=\"fn\"+c,p=\"cb\"+s,l=\"cb\"+c,h=\"jsTime\",m=\"fetch\",v=\"addEventListener\",w=window,g=w.location,y=t(\"loader\");if(w[v]&&y.xhrWrappable){var x=t(10),b=t(11),E=t(8),O=t(6),R=t(13),P=t(7),T=t(14),N=t(9),M=t(\"ee\"),S=M.get(\"tracer\");t(16),y.features.spa=!0;var C,L=0;M.on(u,r),M.on(p,r),M.on(d,o),M.on(l,o),M.buffer([u,d,\"xhr-done\",\"xhr-resolved\"]),O.buffer([u]),R.buffer([\"setTimeout\"+c,\"clearTimeout\"+s,u]),T.buffer([u,\"new-xhr\",\"send-xhr\"+s]),P.buffer([m+s,m+\"-done\",m+f+s,m+f+c]),E.buffer([\"newURL\"]),x.buffer([u]),b.buffer([\"propagate\",p,l,\"executor-err\",\"resolve\"+s]),S.buffer([u,\"no-\"+u]),N.buffer([\"new-jsonp\",\"cb-start\",\"jsonp-error\",\"jsonp-end\"]),a(T,\"send-xhr\"+s),a(M,\"xhr-resolved\"),a(M,\"xhr-done\"),a(P,m+s),a(P,m+\"-done\"),a(N,\"new-jsonp\"),a(N,\"jsonp-end\"),a(N,\"cb-start\"),E.on(\"pushState-end\",i),E.on(\"replaceState-end\",i),w[v](\"hashchange\",i,!0),w[v](\"load\",i,!0),w[v](\"popstate\",function(){i(0,L>1)},!0)}},{}],5:[function(t,e,n){function r(t){}if(window.performance&&window.performance.timing&&window.performance.getEntriesByType){var o=t(\"ee\"),i=t(\"handle\"),a=t(13),s=t(12),c=\"learResourceTimings\",f=\"addEventListener\",u=\"resourcetimingbufferfull\",d=\"bstResource\",p=\"resource\",l=\"-start\",h=\"-end\",m=\"fn\"+l,v=\"fn\"+h,w=\"bstTimer\",g=\"pushState\",y=t(\"loader\");y.features.stn=!0,t(8),\"addEventListener\"in window&&t(6);var x=NREUM.o.EV;o.on(m,function(t,e){var n=t[0];n instanceof x&&(this.bstStart=y.now())}),o.on(v,function(t,e){var n=t[0];n instanceof x&&i(\"bst\",[n,e,this.bstStart,y.now()])}),a.on(m,function(t,e,n){this.bstStart=y.now(),this.bstType=n}),a.on(v,function(t,e){i(w,[e,this.bstStart,y.now(),this.bstType])}),s.on(m,function(){this.bstStart=y.now()}),s.on(v,function(t,e){i(w,[e,this.bstStart,y.now(),\"requestAnimationFrame\"])}),o.on(g+l,function(t){this.time=y.now(),this.startPath=location.pathname+location.hash}),o.on(g+h,function(t){i(\"bstHist\",[location.pathname+location.hash,this.startPath,this.time])}),f in window.performance&&(window.performance[\"c\"+c]?window.performance[f](u,function(t){i(d,[window.performance.getEntriesByType(p)]),window.performance[\"c\"+c]()},!1):window.performance[f](\"webkit\"+u,function(t){i(d,[window.performance.getEntriesByType(p)]),window.performance[\"webkitC\"+c]()},!1)),document[f](\"scroll\",r,{passive:!0}),document[f](\"keypress\",r,!1),document[f](\"click\",r,!1)}},{}],6:[function(t,e,n){function r(t){for(var e=t;e&&!e.hasOwnProperty(u);)e=Object.getPrototypeOf(e);e&&o(e)}function o(t){s.inPlace(t,[u,d],\"-\",i)}function i(t,e){return t[1]}var a=t(\"ee\").get(\"events\"),s=t(\"wrap-function\")(a,!0),c=t(\"gos\"),f=XMLHttpRequest,u=\"addEventListener\",d=\"removeEventListener\";e.exports=a,\"getPrototypeOf\"in Object?(r(document),r(window),r(f.prototype)):f.prototype.hasOwnProperty(u)&&(o(window),o(f.prototype)),a.on(u+\"-start\",function(t,e){var n=t[1],r=c(n,\"nr@wrapped\",function(){function t(){if(\"function\"==typeof n.handleEvent)return n.handleEvent.apply(n,arguments)}var e={object:t,\"function\":n}[typeof n];return e?s(e,\"fn-\",null,e.name||\"anonymous\"):n});this.wrapped=t[1]=r}),a.on(d+\"-start\",function(t){t[1]=this.wrapped||t[1]})},{}],7:[function(t,e,n){function r(t,e,n){var r=t[e];\"function\"==typeof r&&(t[e]=function(){var t=i(arguments),e={};o.emit(n+\"before-start\",[t],e);var a;e[m]&&e[m].dt&&(a=e[m].dt);var s=r.apply(this,t);return o.emit(n+\"start\",[t,a],s),s.then(function(t){return o.emit(n+\"end\",[null,t],s),t},function(t){throw o.emit(n+\"end\",[t],s),t})})}var o=t(\"ee\").get(\"fetch\"),i=t(26),a=t(25);e.exports=o;var s=window,c=\"fetch-\",f=c+\"body-\",u=[\"arrayBuffer\",\"blob\",\"json\",\"text\",\"formData\"],d=s.Request,p=s.Response,l=s.fetch,h=\"prototype\",m=\"nr@context\";d&&p&&l&&(a(u,function(t,e){r(d[h],e,f),r(p[h],e,f)}),r(s,\"fetch\",c),o.on(c+\"end\",function(t,e){var n=this;if(e){var r=e.headers.get(\"content-length\");null!==r&&(n.rxSize=r),o.emit(c+\"done\",[null,e],n)}else o.emit(c+\"done\",[t],n)}))},{}],8:[function(t,e,n){var r=t(\"ee\").get(\"history\"),o=t(\"wrap-function\")(r);e.exports=r;var i=window.history&&window.history.constructor&&window.history.constructor.prototype,a=window.history;i&&i.pushState&&i.replaceState&&(a=i),o.inPlace(a,[\"pushState\",\"replaceState\"],\"-\")},{}],9:[function(t,e,n){function r(t){function e(){c.emit(\"jsonp-end\",[],p),t.removeEventListener(\"load\",e,!1),t.removeEventListener(\"error\",n,!1)}function n(){c.emit(\"jsonp-error\",[],p),c.emit(\"jsonp-end\",[],p),t.removeEventListener(\"load\",e,!1),t.removeEventListener(\"error\",n,!1)}var r=t&&\"string\"==typeof t.nodeName&&\"script\"===t.nodeName.toLowerCase();if(r){var o=\"function\"==typeof t.addEventListener;if(o){var a=i(t.src);if(a){var u=s(a),d=\"function\"==typeof u.parent[u.key];if(d){var p={};f.inPlace(u.parent,[u.key],\"cb-\",p),t.addEventListener(\"load\",e,!1),t.addEventListener(\"error\",n,!1),c.emit(\"new-jsonp\",[t.src],p)}}}}}function o(){return\"addEventListener\"in window}function i(t){var e=t.match(u);return e?e[1]:null}function a(t,e){var n=t.match(p),r=n[1],o=n[3];return o?a(o,e[r]):e[r]}function s(t){var e=t.match(d);return e&&e.length>=3?{key:e[2],parent:a(e[1],window)}:{key:t,parent:window}}var c=t(\"ee\").get(\"jsonp\"),f=t(\"wrap-function\")(c);if(e.exports=c,o()){var u=/[?&](?:callback|cb)=([^&#]+)/,d=/(.*)\\\\.([^.]+)/,p=/^(\\\\w+)(\\\\.|$)(.*)$/,l=[\"appendChild\",\"insertBefore\",\"replaceChild\"];Node&&Node.prototype&&Node.prototype.appendChild?f.inPlace(Node.prototype,l,\"dom-\"):(f.inPlace(HTMLElement.prototype,l,\"dom-\"),f.inPlace(HTMLHeadElement.prototype,l,\"dom-\"),f.inPlace(HTMLBodyElement.prototype,l,\"dom-\")),c.on(\"dom-start\",function(t){r(t[0])})}},{}],10:[function(t,e,n){var r=t(\"ee\").get(\"mutation\"),o=t(\"wrap-function\")(r),i=NREUM.o.MO;e.exports=r,i&&(window.MutationObserver=function(t){return this instanceof i?new i(o(t,\"fn-\")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype)},{}],11:[function(t,e,n){function r(t){var e=a.context(),n=s(t,\"executor-\",e),r=new f(n);return a.context(r).getCtx=function(){return e},a.emit(\"new-promise\",[r,e],e),r}function o(t,e){return e}var i=t(\"wrap-function\"),a=t(\"ee\").get(\"promise\"),s=i(a),c=t(25),f=NREUM.o.PR;e.exports=a,f&&(window.Promise=r,[\"all\",\"race\"].forEach(function(t){var e=f[t];f[t]=function(n){function r(t){return function(){a.emit(\"propagate\",[null,!o],i),o=o||!t}}var o=!1;c(n,function(e,n){Promise.resolve(n).then(r(\"all\"===t),r(!1))});var i=e.apply(f,arguments),s=f.resolve(i);return s}}),[\"resolve\",\"reject\"].forEach(function(t){var e=f[t];f[t]=function(t){var n=e.apply(f,arguments);return t!==n&&a.emit(\"propagate\",[t,!0],n),n}}),f.prototype[\"catch\"]=function(t){return this.then(null,t)},f.prototype=Object.create(f.prototype,{constructor:{value:r}}),c(Object.getOwnPropertyNames(f),function(t,e){try{r[e]=f[e]}catch(n){}}),a.on(\"executor-start\",function(t){t[0]=s(t[0],\"resolve-\",this),t[1]=s(t[1],\"resolve-\",this)}),a.on(\"executor-err\",function(t,e,n){t[1](n)}),s.inPlace(f.prototype,[\"then\"],\"then-\",o),a.on(\"then-start\",function(t,e){this.promise=e,t[0]=s(t[0],\"cb-\",this),t[1]=s(t[1],\"cb-\",this)}),a.on(\"then-end\",function(t,e,n){this.nextPromise=n;var r=this.promise;a.emit(\"propagate\",[r,!0],n)}),a.on(\"cb-end\",function(t,e,n){a.emit(\"propagate\",[n,!0],this.nextPromise)}),a.on(\"propagate\",function(t,e,n){this.getCtx&&!e||(this.getCtx=function(){if(t instanceof Promise)var e=a.context(t);return e&&e.getCtx?e.getCtx():this})}),r.toString=function(){return\"\"+f})},{}],12:[function(t,e,n){var r=t(\"ee\").get(\"raf\"),o=t(\"wrap-function\")(r),i=\"equestAnimationFrame\";e.exports=r,o.inPlace(window,[\"r\"+i,\"mozR\"+i,\"webkitR\"+i,\"msR\"+i],\"raf-\"),r.on(\"raf-start\",function(t){t[0]=o(t[0],\"fn-\")})},{}],13:[function(t,e,n){function r(t,e,n){t[0]=a(t[0],\"fn-\",null,n)}function o(t,e,n){this.method=n,this.timerDuration=isNaN(t[1])?0:+t[1],t[0]=a(t[0],\"fn-\",this,n)}var i=t(\"ee\").get(\"timer\"),a=t(\"wrap-function\")(i),s=\"setTimeout\",c=\"setInterval\",f=\"clearTimeout\",u=\"-start\",d=\"-\";e.exports=i,a.inPlace(window,[s,\"setImmediate\"],s+d),a.inPlace(window,[c],c+d),a.inPlace(window,[f,\"clearImmediate\"],f+d),i.on(c+u,r),i.on(s+u,o)},{}],14:[function(t,e,n){function r(t,e){d.inPlace(e,[\"onreadystatechange\"],\"fn-\",s)}function o(){var t=this,e=u.context(t);t.readyState>3&&!e.resolved&&(e.resolved=!0,u.emit(\"xhr-resolved\",[],t)),d.inPlace(t,g,\"fn-\",s)}function i(t){y.push(t),h&&(b?b.then(a):v?v(a):(E=-E,O.data=E))}function a(){for(var t=0;t<y.length;t++)r([],y[t]);y.length&&(y=[])}function s(t,e){return e}function c(t,e){for(var n in t)e[n]=t[n];return e}t(6);var f=t(\"ee\"),u=f.get(\"xhr\"),d=t(\"wrap-function\")(u),p=NREUM.o,l=p.XHR,h=p.MO,m=p.PR,v=p.SI,w=\"readystatechange\",g=[\"onload\",\"onerror\",\"onabort\",\"onloadstart\",\"onloadend\",\"onprogress\",\"ontimeout\"],y=[];e.exports=u;var x=window.XMLHttpRequest=function(t){var e=new l(t);try{u.emit(\"new-xhr\",[e],e),e.addEventListener(w,o,!1)}catch(n){try{u.emit(\"internal-error\",[n])}catch(r){}}return e};if(c(l,x),x.prototype=l.prototype,d.inPlace(x.prototype,[\"open\",\"send\"],\"-xhr-\",s),u.on(\"send-xhr-start\",function(t,e){r(t,e),i(e)}),u.on(\"open-xhr-start\",r),h){var b=m&&m.resolve();if(!v&&!m){var E=1,O=document.createTextNode(E);new h(a).observe(O,{characterData:!0})}}else f.on(\"fn-end\",function(t){t[0]&&t[0].type===w||a()})},{}],15:[function(t,e,n){function r(t){if(!i(t))return null;var e=window.NREUM;if(!e.loader_config)return null;var n=(e.loader_config.accountID||\"\").toString()||null,r=(e.loader_config.agentID||\"\").toString()||null,s=(e.loader_config.trustKey||\"\").toString()||null;if(!n||!r)return null;var c=a.generateCatId(),f=a.generateCatId(),u=Date.now(),d=o(c,f,u,n,r,s);return{header:d,guid:c,traceId:f,timestamp:u}}function o(t,e,n,r,o,i){var a=\"btoa\"in window&&\"function\"==typeof window.btoa;if(!a)return null;var s={v:[0,1],d:{ty:\"Browser\",ac:r,ap:o,id:t,tr:e,ti:n}};return i&&r!==i&&(s.d.tk=i),btoa(JSON.stringify(s))}function i(t){var e=!1,n=!1,r={};if(\"init\"in NREUM&&\"distributed_tracing\"in NREUM.init&&(r=NREUM.init.distributed_tracing,n=!!r.enabled),n)if(t.sameOrigin)e=!0;else if(r.allowed_origins instanceof Array)for(var o=0;o<r.allowed_origins.length;o++){var i=s(r.allowed_origins[o]);if(t.hostname===i.hostname&&t.protocol===i.protocol&&t.port===i.port){e=!0;break}}return n&&e}var a=t(23),s=t(17);e.exports={generateTracePayload:r,shouldGenerateTrace:i}},{}],16:[function(t,e,n){function r(t){var e=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var r=0;r<p;r++)t.removeEventListener(d[r],this.listener,!1);e.aborted||(n.duration=a.now()-this.startTime,this.loadCaptureCalled||4!==t.readyState?null==e.status&&(e.status=0):i(this,t),n.cbTime=this.cbTime,u.emit(\"xhr-done\",[t],t),s(\"xhr\",[e,n,this.startTime]))}}function o(t,e){var n=c(e),r=t.params;r.host=n.hostname+\":\"+n.port,r.pathname=n.pathname,t.parsedOrigin=c(e),t.sameOrigin=t.parsedOrigin.sameOrigin}function i(t,e){t.params.status=e.status;var n=v(e,t.lastSize);if(n&&(t.metrics.rxSize=n),t.sameOrigin){var r=e.getResponseHeader(\"X-NewRelic-App-Data\");r&&(t.params.cat=r.split(\", \").pop())}t.loadCaptureCalled=!0}var a=t(\"loader\");if(a.xhrWrappable){var s=t(\"handle\"),c=t(17),f=t(15).generateTracePayload,u=t(\"ee\"),d=[\"load\",\"error\",\"abort\",\"timeout\"],p=d.length,l=t(\"id\"),h=t(21),m=t(20),v=t(18),w=window.XMLHttpRequest;a.features.xhr=!0,t(14),t(7),u.on(\"new-xhr\",function(t){var e=this;e.totalCbs=0,e.called=0,e.cbTime=0,e.end=r,e.ended=!1,e.xhrGuids={},e.lastSize=null,e.loadCaptureCalled=!1,t.addEventListener(\"load\",function(n){i(e,t)},!1),h&&(h>34||h<10)||window.opera||t.addEventListener(\"progress\",function(t){e.lastSize=t.loaded},!1)}),u.on(\"open-xhr-start\",function(t){this.params={method:t[0]},o(this,t[1]),this.metrics={}}),u.on(\"open-xhr-end\",function(t,e){\"loader_config\"in NREUM&&\"xpid\"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader(\"X-NewRelic-ID\",NREUM.loader_config.xpid);var n=f(this.parsedOrigin);n&&n.header&&(e.setRequestHeader(\"newrelic\",n.header),this.dt=n)}),u.on(\"send-xhr-start\",function(t,e){var n=this.metrics,r=t[0],o=this;if(n&&r){var i=m(r);i&&(n.txSize=i)}this.startTime=a.now(),this.listener=function(t){try{\"abort\"!==t.type||o.loadCaptureCalled||(o.params.aborted=!0),(\"load\"!==t.type||o.called===o.totalCbs&&(o.onloadCalled||\"function\"!=typeof e.onload))&&o.end(e)}catch(n){try{u.emit(\"internal-error\",[n])}catch(r){}}};for(var s=0;s<p;s++)e.addEventListener(d[s],this.listener,!1)}),u.on(\"xhr-cb-time\",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&\"function\"==typeof n.onload||this.end(n)}),u.on(\"xhr-load-added\",function(t,e){var n=\"\"+l(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),u.on(\"xhr-load-removed\",function(t,e){var n=\"\"+l(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),u.on(\"addEventListener-end\",function(t,e){e instanceof w&&\"load\"===t[0]&&u.emit(\"xhr-load-added\",[t[1],t[2]],e)}),u.on(\"removeEventListener-end\",function(t,e){e instanceof w&&\"load\"===t[0]&&u.emit(\"xhr-load-removed\",[t[1],t[2]],e)}),u.on(\"fn-start\",function(t,e,n){e instanceof w&&(\"onload\"===n&&(this.onload=!0),(\"load\"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=a.now()))}),u.on(\"fn-end\",function(t,e){this.xhrCbStart&&u.emit(\"xhr-cb-time\",[a.now()-this.xhrCbStart,this.onload,e],e)}),u.on(\"fetch-before-start\",function(t){var e,n=t[1]||{};\"string\"==typeof t[0]?e=t[0]:t[0]&&t[0].url&&(e=t[0].url),e&&(this.parsedOrigin=c(e),this.sameOrigin=this.parsedOrigin.sameOrigin);var r=f(this.parsedOrigin);if(r&&r.header){var o=r.header;if(\"string\"==typeof t[0]){var i={};for(var a in n)i[a]=n[a];i.headers=new Headers(n.headers||{}),i.headers.set(\"newrelic\",o),this.dt=r,t.length>1?t[1]=i:t.push(i)}else t[0]&&t[0].headers&&(t[0].headers.append(\"newrelic\",o),this.dt=r)}})}},{}],17:[function(t,e,n){var r={};e.exports=function(t){if(t in r)return r[t];var e=document.createElement(\"a\"),n=window.location,o={};e.href=t,o.port=e.port;var i=e.href.split(\"://\");!o.port&&i[1]&&(o.port=i[1].split(\"/\")[0].split(\"@\").pop().split(\":\")[1]),o.port&&\"0\"!==o.port||(o.port=\"https\"===i[0]?\"443\":\"80\"),o.hostname=e.hostname||n.hostname,o.pathname=e.pathname,o.protocol=i[0],\"/\"!==o.pathname.charAt(0)&&(o.pathname=\"/\"+o.pathname);var a=!e.protocol||\":\"===e.protocol||e.protocol===n.protocol,s=e.hostname===document.domain&&e.port===n.port;return o.sameOrigin=a&&(!e.hostname||s),\"/\"===o.pathname&&(r[t]=o),o}},{}],18:[function(t,e,n){function r(t,e){var n=t.responseType;return\"json\"===n&&null!==e?e:\"arraybuffer\"===n||\"blob\"===n||\"json\"===n?o(t.response):\"text\"===n||\"document\"===n||\"\"===n||void 0===n?o(t.responseText):void 0}var o=t(20);e.exports=r},{}],19:[function(t,e,n){function r(){}function o(t,e,n){return function(){return i(t,[f.now()].concat(s(arguments)),e?null:this,n),e?void 0:this}}var i=t(\"handle\"),a=t(25),s=t(26),c=t(\"ee\").get(\"tracer\"),f=t(\"loader\"),u=NREUM;\"undefined\"==typeof window.newrelic&&(newrelic=u);var d=[\"setPageViewName\",\"setCustomAttribute\",\"setErrorHandler\",\"finished\",\"addToTrace\",\"inlineHit\",\"addRelease\"],p=\"api-\",l=p+\"ixn-\";a(d,function(t,e){u[e]=o(p+e,!0,\"api\")}),u.addPageAction=o(p+\"addPageAction\",!0),u.setCurrentRouteName=o(p+\"routeName\",!0),e.exports=newrelic,u.interaction=function(){return(new r).get()};var h=r.prototype={createTracer:function(t,e){var n={},r=this,o=\"function\"==typeof e;return i(l+\"tracer\",[f.now(),t,n],r),function(){if(c.emit((o?\"\":\"no-\")+\"fn-start\",[f.now(),r,o],n),o)try{return e.apply(this,arguments)}catch(t){throw c.emit(\"fn-err\",[arguments,this,t],n),t}finally{c.emit(\"fn-end\",[f.now()],n)}}}};a(\"actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get\".split(\",\"),function(t,e){h[e]=o(l+e)}),newrelic.noticeError=function(t,e){\"string\"==typeof t&&(t=new Error(t)),i(\"err\",[t,f.now(),!1,e])}},{}],20:[function(t,e,n){e.exports=function(t){if(\"string\"==typeof t&&t.length)return t.length;if(\"object\"==typeof t){if(\"undefined\"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if(\"undefined\"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if(!(\"undefined\"!=typeof FormData&&t instanceof FormData))try{return JSON.stringify(t).length}catch(e){return}}}},{}],21:[function(t,e,n){var r=0,o=navigator.userAgent.match(/Firefox[\\\\/\\\\s](\\\\d+\\\\.\\\\d+)/);o&&(r=+o[1]),e.exports=r},{}],22:[function(t,e,n){function r(t,e){var n=t.getEntries();n.forEach(function(t){\"first-paint\"===t.name?c(\"timing\",[\"fp\",Math.floor(t.startTime)]):\"first-contentful-paint\"===t.name&&c(\"timing\",[\"fcp\",Math.floor(t.startTime)])})}function o(t,e){var n=t.getEntries();n.length>0&&c(\"lcp\",[n[n.length-1]])}function i(t){if(t instanceof u&&!p){var e,n=Math.round(t.timeStamp);e=n>1e12?Date.now()-n:f.now()-n,p=!0,c(\"timing\",[\"fi\",n,{type:t.type,fid:e}])}}if(!(\"init\"in NREUM&&\"page_view_timing\"in NREUM.init&&\"enabled\"in NREUM.init.page_view_timing&&NREUM.init.page_view_timing.enabled===!1)){var a,s,c=t(\"handle\"),f=t(\"loader\"),u=NREUM.o.EV;if(\"PerformanceObserver\"in window&&\"function\"==typeof window.PerformanceObserver){a=new PerformanceObserver(r),s=new PerformanceObserver(o);try{a.observe({entryTypes:[\"paint\"]}),s.observe({entryTypes:[\"largest-contentful-paint\"]})}catch(d){}}if(\"addEventListener\"in document){var p=!1,l=[\"click\",\"keydown\",\"mousedown\",\"pointerdown\",\"touchstart\"];l.forEach(function(t){document.addEventListener(t,i,!1)})}}},{}],23:[function(t,e,n){function r(){function t(){return e?15&e[n++]:16*Math.random()|0}var e=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&(e=r.getRandomValues(new Uint8Array(31)));for(var o,i=\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\",a=\"\",s=0;s<i.length;s++)o=i[s],\"x\"===o?a+=t().toString(16):\"y\"===o?(o=3&t()|8,a+=o.toString(16)):a+=o;return a}function o(){function t(){return e?15&e[n++]:16*Math.random()|0}var e=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&Uint8Array&&(e=r.getRandomValues(new Uint8Array(31)));for(var o=[],i=0;i<16;i++)o.push(t().toString(16));return o.join(\"\")}e.exports={generateUuid:r,generateCatId:o}},{}],24:[function(t,e,n){function r(t,e){if(!o)return!1;if(t!==o)return!1;if(!e)return!0;if(!i)return!1;for(var n=i.split(\".\"),r=e.split(\".\"),a=0;a<r.length;a++)if(r[a]!==n[a])return!1;return!0}var o=null,i=null,a=/Version\\\\/(\\\\S+)\\\\s+Safari/;if(navigator.userAgent){var s=navigator.userAgent,c=s.match(a);c&&s.indexOf(\"Chrome\")===-1&&s.indexOf(\"Chromium\")===-1&&(o=\"Safari\",i=c[1])}e.exports={agent:o,version:i,match:r}},{}],25:[function(t,e,n){function r(t,e){var n=[],r=\"\",i=0;for(r in t)o.call(t,r)&&(n[i]=e(r,t[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],26:[function(t,e,n){function r(t,e,n){e||(e=0),\"undefined\"==typeof n&&(n=t?t.length:0);for(var r=-1,o=n-e||0,i=Array(o<0?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=r},{}],27:[function(t,e,n){e.exports={exists:\"undefined\"!=typeof window.performance&&window.performance.timing&&\"undefined\"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(t,e,n){function r(){}function o(t){function e(t){return t&&t instanceof r?t:t?c(t,s,i):i()}function n(n,r,o,i){if(!p.aborted||i){t&&t(n,r,o);for(var a=e(o),s=m(n),c=s.length,f=0;f<c;f++)s[f].apply(a,r);var d=u[y[n]];return d&&d.push([x,n,r,a]),a}}function l(t,e){g[t]=m(t).concat(e)}function h(t,e){var n=g[t];if(n)for(var r=0;r<n.length;r++)n[r]===e&&n.splice(r,1)}function m(t){return g[t]||[]}function v(t){return d[t]=d[t]||o(n)}function w(t,e){f(t,function(t,n){e=e||\"feature\",y[n]=e,e in u||(u[e]=[])})}var g={},y={},x={on:l,addEventListener:l,removeEventListener:h,emit:n,get:v,listeners:m,context:e,buffer:w,abort:a,aborted:!1};return x}function i(){return new r}function a(){(u.api||u.feature)&&(p.aborted=!0,u=p.backlog={})}var s=\"nr@context\",c=t(\"gos\"),f=t(25),u={},d={},p=e.exports=o();p.backlog=u},{}],gos:[function(t,e,n){function r(t,e,n){if(o.call(t,e))return t[e];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return t[e]=r,r}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],handle:[function(t,e,n){function r(t,e,n,r){o.buffer([t],r),o.emit(t,e,n)}var o=t(\"ee\").get(\"handle\");e.exports=r,r.ee=o},{}],id:[function(t,e,n){function r(t){var e=typeof t;return!t||\"object\"!==e&&\"function\"!==e?-1:t===window?0:a(t,i,function(){return o++})}var o=1,i=\"nr@id\",a=t(\"gos\");e.exports=r},{}],loader:[function(t,e,n){function r(){if(!E++){var t=b.info=NREUM.info,e=l.getElementsByTagName(\"script\")[0];if(setTimeout(u.abort,3e4),!(t&&t.licenseKey&&t.applicationID&&e))return u.abort();f(y,function(e,n){t[e]||(t[e]=n)}),c(\"mark\",[\"onload\",a()+b.offset],null,\"api\");var n=l.createElement(\"script\");n.src=\"https://\"+t.agent,e.parentNode.insertBefore(n,e)}}function o(){\"complete\"===l.readyState&&i()}function i(){c(\"mark\",[\"domContent\",a()+b.offset],null,\"api\")}function a(){return O.exists&&performance.now?Math.round(performance.now()):(s=Math.max((new Date).getTime(),s))-b.offset}var s=(new Date).getTime(),c=t(\"handle\"),f=t(25),u=t(\"ee\"),d=t(24),p=window,l=p.document,h=\"addEventListener\",m=\"attachEvent\",v=p.XMLHttpRequest,w=v&&v.prototype;NREUM.o={ST:setTimeout,SI:p.setImmediate,CT:clearTimeout,XHR:v,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var g=\"\"+location,y={beacon:\"${beacon}\",errorBeacon:\"${errorBeacon}\",agent:\"${agent}\"},x=v&&w&&w[h]&&!/CriOS/.test(navigator.userAgent),b=e.exports={offset:s,now:a,origin:g,features:{},xhrWrappable:x,userAgent:d};t(19),t(22),l[h]?(l[h](\"DOMContentLoaded\",i,!1),p[h](\"load\",r,!1)):(l[m](\"onreadystatechange\",o),p[m](\"onload\",r)),c(\"mark\",[\"firstbyte\",s],null,\"api\");var E=0,O=t(27)},{}],\"wrap-function\":[function(t,e,n){function r(t){return!(t&&t instanceof Function&&t.apply&&!t[a])}var o=t(\"ee\"),i=t(26),a=\"nr@original\",s=Object.prototype.hasOwnProperty,c=!1;e.exports=function(t,e){function n(t,e,n,o){function nrWrapper(){var r,a,s,c;try{a=this,r=i(arguments),s=\"function\"==typeof n?n(r,a):n||{}}catch(f){p([f,\"\",[r,a,o],s])}u(e+\"start\",[r,a,o],s);try{return c=t.apply(a,r)}catch(d){throw u(e+\"err\",[r,a,d],s),d}finally{u(e+\"end\",[r,a,c],s)}}return r(t)?t:(e||(e=\"\"),nrWrapper[a]=t,d(t,nrWrapper),nrWrapper)}function f(t,e,o,i){o||(o=\"\");var a,s,c,f=\"-\"===o.charAt(0);for(c=0;c<e.length;c++)s=e[c],a=t[s],r(a)||(t[s]=n(a,f?s+o:o,i,s))}function u(n,r,o){if(!c||e){var i=c;c=!0;try{t.emit(n,r,o,e)}catch(a){p([a,n,r,o])}c=i}}function d(t,e){if(Object.defineProperty&&Object.keys)try{var n=Object.keys(t);return n.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(r){p([r])}for(var o in t)s.call(t,o)&&(e[o]=t[o]);return e}function p(e){try{t.emit(\"internal-error\",e)}catch(n){}}return t||(t=o),n.inPlace=f,n.flag=a,n}},{}]},{},[\"loader\",2,16,5,3,4]);\n        ;NREUM.loader_config={accountID:\"2626105\",trustKey:\"2626105\",agentID:\"${applicationID}\",licenseKey:\"${licenseKey}\",applicationID:\"${applicationID}\"}\n        ;NREUM.info={beacon:\"${beacon}\",errorBeacon:\"${errorBeacon}\",licenseKey:\"${licenseKey}\",applicationID:\"${applicationID}\",sa:1}\n  `;\n}\n\nexport default enableNewRelic;\n","import { createContext, useContext } from 'react';\n\nexport interface NewRelicApi {\n    getAppId(): string;\n    getLicenseKey(): string;\n}\nexport const NewRelicApiContext = createContext<NewRelicApi>(undefined!);\n\nexport function useNewRelicApi() {\n    return useContext(NewRelicApiContext);\n}\n","import { useEffect } from 'react';\nimport NewRelic from './generate';\nimport { useNewRelicApi } from '../../tools/newRelic/NewRelic';\n\nconst InjectNewRelic = () => {\n    const config = useNewRelicApi();\n\n    const script = document.createElement('script');\n    script.async = true;\n    script.innerHTML = NewRelic({\n        applicationID: config.getAppId(),\n        licenseKey: config.getLicenseKey(),\n    });\n\n    useEffect(() => {\n        document.head.appendChild(script);\n\n        return () => {\n            document.head.removeChild(script);\n        };\n    }, [script]);\n\n    return null;\n};\n\nexport default InjectNewRelic;\n","import { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport {\n    SubmissionReview,\n    SubmissionV2\n} from '../../../constants/interfaces/Reviews';\nimport { createSelectorContext, selectItemsByIds } from '../../../tools/redux';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface ExtraPaginationResult<TData = any> extends ListResult {\n    timestamp: number;\n}\n\nexport interface SubmissionsState {\n    data?: ListResult<SubmissionV2>;\n    checked: number[];\n    submissionChallenges?: ExtraPaginationResult<Challenge>;\n    submissionPractisSets?: ExtraPaginationResult<PractisSets>;\n    loading?: boolean;\n    error?: string;\n}\n\nexport interface SubmissionPaginationState {\n    submissionIds?: number[];\n    totalCount?: number;\n    loading?: boolean;\n    error?: string;\n}\n\nexport interface AccuracyScoreState {\n    data?: ListResult<SubmissionV2>;\n    checked: number[];\n    loading?: boolean;\n    error?: string;\n}\n\nexport type SubmissionsStateSelector = (state: any) => SubmissionsState;\n\nexport type SubmissionPaginationStateSelector = (state: any) => SubmissionPaginationState;\n\nexport type AccuracyScoreStateSelector = (state: any) => AccuracyScoreState;\n\nexport const SubmissionsStateSelectorContext = React.createContext<SubmissionsStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport const SubmissionPaginationStateSelectorContext = React.createContext<SubmissionPaginationStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport const AccuracyScoreStateSelectorContext = React.createContext<AccuracyScoreStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useSubmissionsState(): SubmissionsState {\n    return useSelector(useContext(SubmissionsStateSelectorContext));\n}\n\nexport function useSubmissionPaginationState(): SubmissionPaginationState {\n    return useSelector(useContext(SubmissionPaginationStateSelectorContext));\n}\n\nexport function selectSelectedSubmissions(\n    state: SubmissionsState\n): SubmissionV2[] {\n    return selectItemsByIds<SubmissionV2>(state?.checked, state?.data?.items);\n}\n\nexport function selectSelectedAccuracyScores(\n    state: AccuracyScoreState\n): SubmissionV2[] {\n    return selectItemsByIds<SubmissionV2>(state?.checked, state?.data?.items);\n}\n\nexport function useAccuracyScoreState(): AccuracyScoreState {\n    return useSelector(useContext(AccuracyScoreStateSelectorContext));\n}\n\nexport interface UpdatedSubmissionsState {\n    data?: number[];\n    updateType?: 'create' | 'update' | 'delete';\n    loading?: boolean;\n}\n\nexport const UpdatedSubmissionsStateSelectorContext = createSelectorContext<UpdatedSubmissionsState>();\n\nexport function useUpdatedSubmissionsState(): UpdatedSubmissionsState {\n    return useSelector(useContext(UpdatedSubmissionsStateSelectorContext));\n}\n\nexport interface SubmissionDetailsState {\n    details?: SubmissionV2;\n    review?: Partial<SubmissionReview>;\n    loading?: boolean;\n    error?: string;\n}\n\nexport const SubmissionDetailsStateSelectorContext = createSelectorContext<SubmissionDetailsState>();\n\nexport function useSubmissionDetailsState(): SubmissionDetailsState {\n    return useSelector(useContext(SubmissionDetailsStateSelectorContext));\n}\nexport interface UpdatedAccuracyScoreState {\n    data?: SubmissionV2;\n    updateType?: 'create' | 'update' | 'delete';\n    loading?: boolean;\n}\n\nexport const UpdatedAccuracyScoreStateSelectorContext = createSelectorContext<UpdatedAccuracyScoreState>();\n\n","import { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { SubmissionReview, SubmissionV2 } from '../../../constants/interfaces/Reviews';\n\nexport enum ACTIONS {\n    SEARCH_CHALLENGE_SUBMISSIONS_START = 'SEARCH_CHALLENGE_SUBMISSIONS_START',\n    SEARCH_CHALLENGE_SUBMISSIONS_SUCCESS = 'SEARCH_CHALLENGE_SUBMISSIONS_SUCCESS',\n    SEARCH_CHALLENGE_SUBMISSIONS_FAILURE = 'SEARCH_CHALLENGE_SUBMISSIONS_FAILURE',\n\n    SEARCH_SUBMISSION_PAGINATION_START = 'SEARCH_SUBMISSION_PAGINATION_START',\n    SEARCH_SUBMISSION_PAGINATION_SUCCESS = 'SEARCH_SUBMISSION_PAGINATION_SUCCESS',\n    SEARCH_SUBMISSION_PAGINATION_FAILURE = 'SEARCH_SUBMISSION_PAGINATION_FAILURE',\n\n    SEARCH_CHALLENGES_FOR_SUBMISSIONS_START = 'SEARCH_CHALLENGES_FOR_SUBMISSIONS_START',\n    SEARCH_CHALLENGES_FOR_SUBMISSIONS_SUCCESS = 'SEARCH_CHALLENGES_FOR_SUBMISSIONS_SUCCESS',\n    SEARCH_CHALLENGES_FOR_SUBMISSIONS_FAILURE = 'SEARCH_CHALLENGES_FOR_SUBMISSIONS_FAILURE',\n\n    SEARCH_PRACTIS_SETS_FOR_SUBMISSIONS_START = 'SEARCH_PRACTIS_SETS_FOR_SUBMISSIONS_START',\n    SEARCH_PRACTIS_SETS_FOR_SUBMISSIONS_SUCCESS = 'SEARCH_PRACTIS_SETS_FOR_SUBMISSIONS_SUCCESS',\n    SEARCH_PRACTIS_SETS_FOR_SUBMISSIONS_FAILURE = 'SEARCH_PRACTIS_SETS_FOR_SUBMISSIONS_FAILURE',\n\n    UPDATE_CHALLENGE_SUBMISSION_START = 'UPDATE_CHALLENGE_SUBMISSION_START',\n    UPDATE_CHALLENGE_SUBMISSION_SUCCESS = 'UPDATE_CHALLENGE_SUBMISSION_SUCCESS',\n    UPDATE_CHALLENGE_SUBMISSION_FAILURE = 'UPDATE_CHALLENGE_SUBMISSION_FAILURE',\n\n    GET_SUBMISSION_DETAILS_START = 'GET_SUBMISSION_DETAILS_START',\n    GET_SUBMISSION_DETAILS_SUCCESS = 'GET_SUBMISSION_DETAILS_SUCCESS',\n    GET_SUBMISSION_DETAILS_FAILURE = 'GET_SUBMISSION_DETAILS_FAILURE',\n    GET_SUBMISSION_REVIEW_SUCCESS = 'GET_SUBMISSION_REVIEW_SUCCESS',\n\n    UPDATE_SUBMISSION_DETAILS_START = 'UPDATE_SUBMISSION_DETAILS_START',\n    UPDATE_SUBMISSION_DETAILS_SUCCESS = 'UPDATE_SUBMISSION_DETAILS_SUCCESS',\n    UPDATE_SUBMISSION_DETAILS_FAILURE = 'UPDATE_SUBMISSION_DETAILS_FAILURE',\n\n    UPDATE_SCORE_START = 'UPDATE_SCORE_START',\n    UPDATE_SCORE_SUCCESS = 'UPDATE_SCORE_SUCCESS',\n    UPDATE_SCORE_FAILURE = 'UPDATE_SCORE_FAILURE',\n\n    MODIFY_SCORE = 'MODIFY_SCORE',\n\n    CHECK_ALL_SUBMISSIONS = 'CHECK_ALL_SUBMISSIONS',\n    CHECK_SINGLE_SUBMISSION = 'CHECK_SINGLE_SUBMISSION',\n\n    UPDATE_SUBMISSION_DELETE_LABEL_SUCCESS = 'UPDATE_SUBMISSION_DELETE_LABEL_SUCCESS',\n\n    SEARCH_ACCURACY_SCORE_START = 'SEARCH_ACCURACY_SCORE_START',\n    SEARCH_ACCURACY_SCORE_SUCCESS = 'SEARCH_ACCURACY_SCORE_SUCCESS',\n    SEARCH_ACCURACY_SCORE_FAILURE = 'SEARCH_ACCURACY_SCORE_FAILURE',\n\n    CHECK_ALL_ACCURACY_SCORES = 'CHECK_ALL_ACCURACY_SCORES',\n    CHECK_SINGLE_ACCURACY_SCORE = 'CHECK_SINGLE_ACCURACY_SCORE',\n}\n\nexport function searchAccuracyScoreStart() {\n    return {\n        type: ACTIONS.SEARCH_ACCURACY_SCORE_START as ACTIONS.SEARCH_ACCURACY_SCORE_START,\n    };\n}\n\nexport function searchAccuracyScoreSuccess(\n    accuracyScores: ListResult<SubmissionV2>\n) {\n    return {\n        type: ACTIONS.SEARCH_ACCURACY_SCORE_SUCCESS as ACTIONS.SEARCH_ACCURACY_SCORE_SUCCESS,\n        accuracyScores,\n    };\n}\n\nexport function searchAccuracyScoreFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_ACCURACY_SCORE_FAILURE as ACTIONS.SEARCH_ACCURACY_SCORE_FAILURE,\n        error,\n    };\n}\n\nexport function searchChallengeSubmissionsStart() {\n    return {\n        type: ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_START as ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_START,\n    };\n}\n\nexport function searchChallengeSubmissionsSuccess(\n    submissions: ListResult<SubmissionV2>\n) {\n    return {\n        type: ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_SUCCESS as ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_SUCCESS,\n        submissions,\n    };\n}\n\nexport function searchChallengeSubmissionsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_FAILURE as ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_FAILURE,\n        error,\n    };\n}\n\nexport function searchSubmissionPaginationStart() {\n    return {\n        type: ACTIONS.SEARCH_SUBMISSION_PAGINATION_START as ACTIONS.SEARCH_SUBMISSION_PAGINATION_START,\n    };\n}\n\nexport function searchSubmissionPaginationSuccess(\n    submissionIds: number[], totalCount: number\n) {\n    return {\n        type: ACTIONS.SEARCH_SUBMISSION_PAGINATION_SUCCESS as ACTIONS.SEARCH_SUBMISSION_PAGINATION_SUCCESS,\n        submissionIds,\n        totalCount\n    };\n}\n\nexport function searchSubmissionPaginationFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_SUBMISSION_PAGINATION_FAILURE as ACTIONS.SEARCH_SUBMISSION_PAGINATION_FAILURE,\n        error,\n    };\n}\n\nexport function updateChallengeSubmissionStart() {\n    return {\n        type: ACTIONS.UPDATE_CHALLENGE_SUBMISSION_START as ACTIONS.UPDATE_CHALLENGE_SUBMISSION_START,\n    };\n}\n\nexport function updateChallengeSubmissionSuccess(\n    submissionIds: number[],\n    updateType: 'create' | 'update' | 'delete'\n) {\n    return {\n        type: ACTIONS.UPDATE_CHALLENGE_SUBMISSION_SUCCESS as ACTIONS.UPDATE_CHALLENGE_SUBMISSION_SUCCESS,\n        submissionIds,\n        updateType,\n    };\n}\n\nexport function updateChallengeSubmissionFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_CHALLENGE_SUBMISSION_FAILURE as ACTIONS.UPDATE_CHALLENGE_SUBMISSION_FAILURE,\n        error,\n    };\n}\n\nexport function getSubmissionDetailsStart() {\n    return {\n        type: ACTIONS.GET_SUBMISSION_DETAILS_START as ACTIONS.GET_SUBMISSION_DETAILS_START,\n    };\n}\n\nexport function getSubmissionDetailsFailure(error: string) {\n    return {\n        type: ACTIONS.GET_SUBMISSION_DETAILS_FAILURE as ACTIONS.GET_SUBMISSION_DETAILS_FAILURE,\n        error,\n    };\n}\n\nexport function getSubmissionDetailsSuccess(submission: SubmissionV2, review?: SubmissionReview) {\n    return {\n        type: ACTIONS.GET_SUBMISSION_DETAILS_SUCCESS as ACTIONS.GET_SUBMISSION_DETAILS_SUCCESS,\n        submission,\n        review,\n    };\n}\n\nexport function getSubmissionReviewSuccess(review: SubmissionReview) {\n    return {\n        type: ACTIONS.GET_SUBMISSION_REVIEW_SUCCESS as ACTIONS.GET_SUBMISSION_REVIEW_SUCCESS,\n        review,\n    };\n}\n\nexport function modifyScore(value: string | number, field: string) {\n    return {\n        type: ACTIONS.MODIFY_SCORE as ACTIONS.MODIFY_SCORE,\n        field: field,\n        value: value,\n    };\n}\n\nexport function checkSingleSubmission(id: number) {\n    return {\n        type: ACTIONS.CHECK_SINGLE_SUBMISSION as ACTIONS.CHECK_SINGLE_SUBMISSION,\n        id,\n    };\n}\n\nexport function checkAllSubmissions(\n    submissionId: any,\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.CHECK_ALL_SUBMISSIONS as ACTIONS.CHECK_ALL_SUBMISSIONS,\n        submissionId,\n        checked,\n        partial,\n    };\n}\n\nexport function checkAllAccuracyScores(\n    submissionId: any,\n    checked: boolean,\n    partial?: boolean\n) {\n    return {\n        type: ACTIONS.CHECK_ALL_ACCURACY_SCORES as ACTIONS.CHECK_ALL_ACCURACY_SCORES,\n        submissionId,\n        checked,\n        partial,\n    };\n}\n\nexport function checkSingleAccuracyScore(id: number) {\n    return {\n        type: ACTIONS.CHECK_SINGLE_ACCURACY_SCORE as ACTIONS.CHECK_SINGLE_ACCURACY_SCORE,\n        id,\n    };\n}\n\nexport function updateSubmissionDeleteLabelSuccess(\n    labelId: number,\n    id: number\n) {\n    return {\n        type: ACTIONS.UPDATE_SUBMISSION_DELETE_LABEL_SUCCESS as ACTIONS.UPDATE_SUBMISSION_DELETE_LABEL_SUCCESS,\n        labelId,\n        id,\n    };\n}\n","import { Challenge } from './Challenge';\r\nimport { UserInterface } from './User';\r\nimport { UserInfo } from './UserInfo';\r\nimport { CompanyInterface } from './Company';\r\nimport { PractisSets } from './PractisSets';\r\nimport { Score } from './Score';\r\nimport { Label } from './Label';\r\n\r\nexport interface Submission {\r\n    id: number;\r\n    challengeId?: number;\r\n    title: '';\r\n    status: 'PENDING' | 'REVIEWED' | 'ARCHIVED' | 'UPLOADING';\r\n    video: string | null;\r\n    note: string;\r\n    reviewedAt: string;\r\n    createdAt: string;\r\n    updatedAt: string;\r\n    score: Score;\r\n    scoreId?: string;\r\n    challenge: Challenge;\r\n    user: UserInterface;\r\n    company: CompanyInterface;\r\n    practisSet: PractisSets;\r\n    submittedAt: string;\r\n    labels: Label[];\r\n    isViewed?: boolean;\r\n}\r\n\r\nexport enum SUBMISSION_TYPE {\r\n    SCENARIO = 'scenario',\r\n    CHALLENGE = 'challenge',\r\n}\r\n\r\nexport enum SUBMISSION_VISIBILITY {\r\n    VISIBLE = 'visible',\r\n    ARCHIVED = 'archived'\r\n}\r\n\r\nexport enum SUBMISSION_FLAG_TYPE {\r\n    ADMIN = 'admin',\r\n    COMPANY = 'company',\r\n}\r\n\r\nexport interface SubmissionFlag {\r\n    id: number;\r\n    type: SUBMISSION_FLAG_TYPE;\r\n    createdAt: string;\r\n    userId: number;\r\n}\r\n\r\nexport interface SubmissionV2 {\r\n    id: number;\r\n    type: SUBMISSION_TYPE.CHALLENGE | SUBMISSION_TYPE.SCENARIO;\r\n    status: string;\r\n    enrollmentId: number;\r\n    challenge?: {\r\n        id: number;\r\n        title: string;\r\n        description: string;\r\n        status: string;\r\n        companyId: number;\r\n        sourceScenarioId?: number;\r\n        createdAt: string;\r\n        updatedAt: string;\r\n    };\r\n    scenario?: {\r\n        id: number;\r\n        title: string;\r\n        description: string;\r\n        status: string;\r\n        companyId: number;\r\n        createdAt: string;\r\n        updatedAt: string;\r\n    };\r\n    practisSet?: {\r\n        id: number;\r\n        name: string;\r\n        description: string;\r\n        status: string;\r\n        companyId: number;\r\n        createdAt: string;\r\n        updatedAt: string;\r\n    };\r\n    user: UserInfo;\r\n    userLabels?: number[];\r\n    company: {\r\n        id: number;\r\n        name: string;\r\n        logo: string;\r\n    };\r\n    createdAt: string;\r\n    updatedAt: string;\r\n    mediaUrl?: string;\r\n    placeholderUrl?: string;\r\n    accuracy: {\r\n        accuracyId: number;\r\n        state: string;\r\n        modeAccuracy: string;\r\n        modeScenario: string;\r\n        accuracy: number;\r\n    };\r\n    flags: SubmissionFlag[];\r\n    counters: {\r\n        dislikesCount: number;\r\n        likesCount: number;\r\n        viewsCount: number;\r\n        feedbacksCount: number;\r\n    };\r\n    relation: {\r\n        isLiked: boolean;\r\n        isDisliked: boolean;\r\n        isViewed: boolean;\r\n    };\r\n    score: number;\r\n    reviewedAt: string;\r\n    isVisible: boolean;\r\n}\r\n\r\nexport interface SubmissionReview {\r\n    id: number;\r\n    submissionId: number;\r\n    date: string;\r\n    user: UserInfo;\r\n    clarity: number;\r\n    knowledge: number;\r\n    confidence: number;\r\n    enthusiasm: number;\r\n    goalAchieved: number;\r\n    value: number;\r\n    note: string;\r\n}","import { useMemo } from \"react\";\nimport { SubmissionV2 } from \"../../../constants/interfaces/Reviews\";\nimport { UserProfile } from \"../../../constants/interfaces/User\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\n\nexport enum SubmissionActions {\n    ARCHIVE,\n    RESTORE,\n}\n\nfunction createSubmissionActionsHelper(loggedInUser: UserProfile | undefined) {    \n    const canArchive = (submission: SubmissionV2) =>\n        submission.isVisible\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.ARCHIVE_SUBMISSION);\n    \n    const canRestore = (submission: SubmissionV2) =>\n        !submission.isVisible\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.RESTORE_SUBMISSION);\n    \n\n    const getBulkActions = (submissions: SubmissionV2[] | undefined) =>\n        getBulkActionsAvailability(\n            submissions,\n            [\n                getBulkActionAvailabilityItem(\n                    SubmissionActions.ARCHIVE,\n                    submissions,\n                    canArchive\n                ),\n                getBulkActionAvailabilityItem(\n                    SubmissionActions.RESTORE,\n                    submissions,\n                    canRestore\n                ),\n            ]\n        );\n\n    return {\n        canArchive,\n        canRestore,\n        getBulkActions,\n    };\n}\n\nexport type SubmissionActionsHelper = ReturnType<typeof createSubmissionActionsHelper>;\n\nexport function useSubmissionActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createSubmissionActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}","import { useMemo } from \"react\";\nimport { SubmissionV2 } from \"../../../constants/interfaces/Reviews\";\nimport { UserProfile } from \"../../../constants/interfaces/User\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\n\nexport enum AccuracyScoreActions {\n    ARCHIVE,\n    RESTORE,\n}\n\nfunction createAccuracyScoreActionsHelper(loggedInUser: UserProfile | undefined) {    \n    const canArchive = (submission: SubmissionV2) =>\n        submission.isVisible\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.ARCHIVE_SUBMISSION);\n    \n    const canRestore = (submission: SubmissionV2) =>\n        !submission.isVisible\n            && hasPermission(loggedInUser, NEW_PERMISSIONS.RESTORE_SUBMISSION);\n    \n\n    const getBulkActions = (submissions: SubmissionV2[] | undefined) =>\n        getBulkActionsAvailability(\n            submissions,\n            [\n                getBulkActionAvailabilityItem(\n                    AccuracyScoreActions.ARCHIVE,\n                    submissions,\n                    canArchive\n                ),\n                getBulkActionAvailabilityItem(\n                    AccuracyScoreActions.RESTORE,\n                    submissions,\n                    canRestore\n                ),\n            ]\n        );\n\n    return {\n        canArchive,\n        canRestore,\n        getBulkActions,\n    };\n}\n\nexport type AccuracyScoreActionsHelper = ReturnType<typeof createAccuracyScoreActionsHelper>;\n\nexport function useAccuracyScoreActionsHelper() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createAccuracyScoreActionsHelper(loggedInUser),\n        [loggedInUser]\n    );\n}\n ","import { SearchSubmissionsParams } from '../../../api/submissions/types';\r\n\r\nimport { SearchParams } from '../../../constants/interfaces/filters';\r\nimport { SUBMISSION_VISIBILITY } from '../../../constants/interfaces/Reviews';\r\nimport { SubmissionFilters } from '../../../constants/interfaces/SubmissionSearchFilters';\r\nimport { getSearchSortingValue } from '../../../helpers/functions/search-params-helpers';\r\n\r\nexport const SUBMISSION_STATUS = {\r\n    PENDING: 'pending',\r\n    ACTIVE: 'active',\r\n    ARCHIVED: 'deleted'\r\n};\r\n\r\nexport const CHALLENGE_SUBMISSION_REVIEW_STATUS = {\r\n    NOT_REVIEWED: 'not_reviewed',\r\n    REVIEWED: 'reviewed'\r\n};\r\n\r\nexport const CHALLENGE_SUBMISSION_REVIEW_STATUS_ITEMS: Array<{ name: string; value: string }> = [\r\n    {\r\n        name: 'Needs Review',\r\n        value: CHALLENGE_SUBMISSION_REVIEW_STATUS.NOT_REVIEWED,\r\n    },\r\n    {\r\n        name: 'Reviewed',\r\n        value: CHALLENGE_SUBMISSION_REVIEW_STATUS.REVIEWED,\r\n    },\r\n];\r\n\r\nexport const calculateScoreValue = (items: number[]): number => {\r\n    return items.length && items.reduce((total, amount, index, array) => {\r\n        total += amount;\r\n        if (index === array.length - 1) {\r\n            return total / array.length;\r\n        } else {\r\n            return total;\r\n        }\r\n    });\r\n};\r\n\r\nexport const generateScoreItemArray = (obj: any, fields: string[]) => {\r\n    const arr = [];\r\n    for (let field of fields) {\r\n        if (!!obj[field]) {\r\n            arr.push(obj[field]);\r\n        }\r\n    }\r\n    return arr;\r\n};\r\n\r\nexport const countAppliedFiltersCount = (searchParams: SearchParams) => {\r\n    let total = 0;\r\n\r\n    if (searchParams && searchParams.teamIds && searchParams.teamIds.length) {\r\n        total = total + searchParams.teamIds.length;\r\n    }\r\n\r\n    if (searchParams && searchParams.labelIDs && searchParams.labelIDs.length) {\r\n        total = total + searchParams.labelIDs.filter(id => id > 0).length;\r\n    }\r\n\r\n    if (\r\n        searchParams &&\r\n        searchParams.filterByStatus &&\r\n        searchParams.filterByStatus.length\r\n    ) {\r\n        total = total + searchParams.filterByStatus.length;\r\n    }\r\n\r\n    return total;\r\n};\r\n\r\n\r\n\r\nexport const countAppliedFiltersCountAccuracy = (searchParams: SearchParams) => {\r\n    let total = 0;\r\n    const scenariosFilter: any = searchParams?.filters?.find(item => item.field === 'scenarioId')?.value;\r\n\r\n\r\n    if (searchParams && searchParams.teamIds && searchParams.teamIds.length) {\r\n        total = total + searchParams.teamIds.length;\r\n    }\r\n\r\n    if (searchParams && searchParams.labelIDs && searchParams.labelIDs.length) {\r\n        total = total + searchParams.labelIDs.filter(id => id > 0).length;\r\n    }\r\n\r\n    if (searchParams && searchParams.filters && scenariosFilter) {\r\n        total = total + scenariosFilter?.length;\r\n    }\r\n\r\n    if (\r\n        searchParams &&\r\n        searchParams.filterByStatus &&\r\n        searchParams.filterByStatus.length\r\n    ) {\r\n        total = total + searchParams.filterByStatus.length;\r\n    }\r\n\r\n    return total;\r\n};\r\n\r\n/**\r\n * @function createSearchSubmissionsParams\r\n * @returns { SearchSubmissionsParams }\r\n */\r\nexport const createSearchSubmissionsParams = (\r\n    searchParams: SearchParams,\r\n    companyId: number,\r\n    type: string,\r\n    filters: SubmissionFilters\r\n): SearchSubmissionsParams => {\r\n    return {\r\n        limit: searchParams.limit ?? 20,\r\n        offset: searchParams.offset ?? 0,\r\n        companyId: companyId?.toString(),\r\n        query: searchParams.searchTerm,\r\n        order: getSearchSortingValue(searchParams.orderBy, ''),\r\n        status: SUBMISSION_STATUS.ACTIVE,\r\n        visibility: filters.showArchived\r\n            ? SUBMISSION_VISIBILITY.ARCHIVED\r\n            : SUBMISSION_VISIBILITY.VISIBLE,\r\n        teamId: filters.teamIds.join(','),\r\n        labelId: filters.labelIds.join(','),\r\n        type\r\n    };\r\n};","export const UNAVAILABLE_SUBMISSION_ERROR = 'Submission was not found';\nexport const ALREADY_REQUESTED_REDO_ERROR = 'Someone has already sent a redo request';","import { SearchParams } from '../../../../constants/interfaces/filters';\nimport {\n    AccuracyTestSubmissionFilters,\n    ChallengeSubmissionFilters,\n} from '../../../../constants/interfaces/SubmissionSearchFilters';\n\nexport type UpdateSubmissionStatuses = 'Archive' | 'Restore';\nexport enum SubmissionUpdateActions {\n    ARCHIVE = 'Archive',\n    RESTORE = 'Restore',\n}\n\nexport type UpdateSubmissionStatusChunkRequestParameters = {\n    searchParams: SearchParams;\n    filters: AccuracyTestSubmissionFilters | ChallengeSubmissionFilters;\n    onSuccessCallback: (numberOfDoneItems: number) => void;\n    totalItems: number\n};","export const pluralize = (count: number, noun: string, suffix = 's') =>\n    `${count} ${noun}${count !== 1 ? suffix : ''}`;\n","import { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { SearchParams } from '../../../constants/interfaces/filters';\r\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\r\nimport {\r\n    usePerformSubmissionActionApi,\r\n    useRequestSubmissionRedoApi,\r\n    useArchiveSubmissionsApi,\r\n    useRestoreSubmissionsApi,\r\n    useSearchSubmissionsApi,\r\n    useGetSubmissionDetailsApi,\r\n    useGetSubmissionReviewApi,\r\n    usePerformSubmissionReviewApi,\r\n} from '../../../api';\r\nimport {\r\n    checkAllAccuracyScores,\r\n    checkAllSubmissions,\r\n    checkSingleAccuracyScore,\r\n    checkSingleSubmission,\r\n    getSubmissionDetailsFailure,\r\n    getSubmissionDetailsStart,\r\n    getSubmissionDetailsSuccess,\r\n    getSubmissionReviewSuccess,\r\n    modifyScore,\r\n    searchAccuracyScoreFailure,\r\n    searchAccuracyScoreStart,\r\n    searchAccuracyScoreSuccess,\r\n    searchSubmissionPaginationFailure,\r\n    searchSubmissionPaginationStart,\r\n    searchSubmissionPaginationSuccess,\r\n    searchChallengeSubmissionsFailure,\r\n    searchChallengeSubmissionsStart,\r\n    searchChallengeSubmissionsSuccess,\r\n    updateChallengeSubmissionFailure,\r\n    updateChallengeSubmissionStart,\r\n    updateChallengeSubmissionSuccess,\r\n} from './actions';\r\nimport { SubmissionReview, SubmissionV2, SUBMISSION_TYPE } from '../../../constants/interfaces/Reviews';\r\nimport { setSearchState } from '../../searchState/store/actions';\r\nimport { SEARCH_STATE } from '../../searchState/constants';\r\nimport { SearchSubmissionsParams, SubmissionRedoParams, SubmissionReviewParams } from '../../../api/submissions/types';\r\nimport { copyTextToClipboard } from '../../../helpers/functions/copy-to-clipboard';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { createSearchSubmissionsParams } from '../tools';\r\nimport { AccuracyTestSubmissionFilters, ChallengeSubmissionFilters } from '../../../constants/interfaces/SubmissionSearchFilters';\r\nimport {\r\n    UNAVAILABLE_SUBMISSION_ERROR,\r\n    ALREADY_REQUESTED_REDO_ERROR\r\n} from './constants';\r\nimport { pluralize } from '../../../helpers/functions/pluralize';\r\n\r\n/**\r\n * @function useSearchChallengeSubmissionsService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useSearchChallengeSubmissionsService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchSubmissionsApi = useSearchSubmissionsApi();\r\n    const profile = useSelector(getProfileState);\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { SearchParams } searchParams\r\n     * @param { ChallengeSubmissionFilters } filters\r\n     * @param { boolean? } shouldRemainFilterState\r\n     * @param { void }\r\n     */\r\n    return useCallback(\r\n        (\r\n            searchParams: SearchParams,\r\n            filters: ChallengeSubmissionFilters,\r\n            shouldRemainFilterState?: boolean\r\n        ) => {\r\n            dispatch(searchChallengeSubmissionsStart());\r\n\r\n            const searchSubmissionsParams = createSearchSubmissionsParams(\r\n                searchParams,\r\n                profile?.companyId ?? 0,\r\n                SUBMISSION_TYPE.CHALLENGE,\r\n                filters\r\n            );\r\n\r\n            if (filters.reviewStatuses.length === 1) {\r\n                searchSubmissionsParams.filterChallenge = filters.reviewStatuses[0];\r\n            }\r\n\r\n            searchSubmissionsApi(searchSubmissionsParams)\r\n                .then(data => {\r\n                    if(!shouldRemainFilterState){\r\n                        const combinedParams: SearchParams = {\r\n                            ...searchParams,\r\n                            customFilters: filters\r\n                        };\r\n                        dispatch(setSearchState(SEARCH_STATE.SUBMISSIONS.name, SEARCH_STATE.SUBMISSIONS.childrenKeys, combinedParams));\r\n                    }\r\n                    dispatch(searchChallengeSubmissionsSuccess(data));\r\n                    dispatch(\r\n                        searchSubmissionPaginationSuccess(\r\n                            data.items.map(submission => submission.id),\r\n                            data.count\r\n                    ));\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchChallengeSubmissionsFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, profile?.companyId, searchSubmissionsApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useSearchChallengeSubmissionPaginationService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useSearchChallengeSubmissionPaginationService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchSubmissionsApi = useSearchSubmissionsApi();\r\n    const profile = useSelector(getProfileState);\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { SearchParams } searchParams\r\n     * @param { ChallengeSubmissionFilters } filters\r\n     * @param { Function } successCallback\r\n     * @param { void }\r\n     */\r\n    return useCallback(\r\n        (\r\n            searchParams: SearchParams,\r\n            filters: ChallengeSubmissionFilters,\r\n            successCallback?: ((data: number[]) => void)\r\n        ) => {\r\n            dispatch(searchSubmissionPaginationStart());\r\n\r\n            const searchSubmissionsParams = createSearchSubmissionsParams(\r\n                searchParams,\r\n                profile?.companyId ?? 0,\r\n                SUBMISSION_TYPE.CHALLENGE,\r\n                filters\r\n            );\r\n\r\n            if (filters.reviewStatuses.length === 1) {\r\n                searchSubmissionsParams.filterChallenge = filters.reviewStatuses[0];\r\n            }\r\n\r\n            searchSubmissionsApi(searchSubmissionsParams)\r\n                .then(data => {\r\n                    const submissionIds = data.items.map(submission => submission.id);\r\n                    dispatch(\r\n                        searchSubmissionPaginationSuccess(\r\n                            submissionIds,\r\n                            data.count\r\n                    ));\r\n                    successCallback?.(submissionIds);\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchSubmissionPaginationFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, profile?.companyId, searchSubmissionsApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useGetSubmissionDetailsService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useGetSubmissionDetailsService = () => {\r\n    const dispatch = useDispatch();\r\n    const showMessage = useShowMessage();\r\n    const getSubmissionDetailsApi = useGetSubmissionDetailsApi();\r\n    const getSubmissionReviewApi = useGetSubmissionReviewApi();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { string | number } submissionId\r\n     * @param { Function } successCallback\r\n     * @param { void }\r\n     */\r\n     return useCallback(\r\n        (\r\n            submissionId: number | string,\r\n            successCallback?: (data: SubmissionV2) => void\r\n        ) => {\r\n            let submission: SubmissionV2;\r\n            dispatch(getSubmissionDetailsStart());\r\n            getSubmissionDetailsApi(submissionId)\r\n                .then(data => {\r\n                    submission = data;\r\n                    if (submission.reviewedAt) {\r\n                        return getSubmissionReviewApi(submissionId)\r\n                            .catch((error: ErrorResult) => {\r\n                                showMessage(error.message, 'error');\r\n                                return Promise.resolve(undefined);\r\n                            });\r\n                    } else {\r\n                        return Promise.resolve(undefined);\r\n                    }\r\n                })\r\n                .then((review?: SubmissionReview) => {\r\n                    dispatch(\r\n                        getSubmissionDetailsSuccess(submission, review)\r\n                    );\r\n                    successCallback?.(submission);\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    if (error.code === 404) {\r\n                        dispatch(getSubmissionDetailsFailure(\r\n                            UNAVAILABLE_SUBMISSION_ERROR\r\n                        ));\r\n                    } else {\r\n                        dispatch(getSubmissionDetailsFailure(error.message));\r\n                        showMessage(error.message, 'error');\r\n                    }\r\n                });\r\n        },\r\n        [dispatch, getSubmissionDetailsApi, getSubmissionReviewApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useGetSubmissionReviewService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useGetSubmissionReviewService = () => {\r\n    const dispatch = useDispatch();\r\n    const getSubmissionReviewApi = useGetSubmissionReviewApi();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { number } submissionId\r\n     * @param { Promise }\r\n     */\r\n     return useCallback((submissionId: number) => {\r\n        return getSubmissionReviewApi(submissionId)\r\n            .then((review: SubmissionReview) => {\r\n                dispatch(\r\n                    getSubmissionReviewSuccess(review)\r\n                );\r\n                return Promise.resolve(review);\r\n            });\r\n        },\r\n        [dispatch, getSubmissionReviewApi]\r\n    );\r\n};\r\n\r\n/**\r\n * @function usePerformSubmissionReviewService\r\n * @returns { CallableFunction }\r\n */\r\nexport const usePerformSubmissionReviewService = () => {\r\n    const dispatch = useDispatch();\r\n    const performSubmissionReviewApi = usePerformSubmissionReviewApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { number } submissionId\r\n     * @param { Promise }\r\n     */\r\n    return useCallback(\r\n        (submissionId: number, data: SubmissionReviewParams) => {\r\n            dispatch(updateChallengeSubmissionStart());\r\n            return performSubmissionReviewApi(submissionId, data)\r\n                .then(data => {\r\n                    dispatch(updateChallengeSubmissionSuccess([submissionId], 'update'));\r\n                    showMessage('Review created!', 'success');\r\n                    return Promise.resolve(data);\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateChallengeSubmissionFailure(error.message));\r\n                    return Promise.reject(error);\r\n                });\r\n        },\r\n        [dispatch, performSubmissionReviewApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useRequestSubmissionRedoService = () => {\r\n    const dispatch = useDispatch();\r\n    const requestSubmissionRedoApi = useRequestSubmissionRedoApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (submissionId: number, redo: SubmissionRedoParams) => {\r\n            dispatch(updateChallengeSubmissionStart());\r\n\r\n            return requestSubmissionRedoApi(submissionId, redo)\r\n                .then(data => {\r\n                    dispatch(updateChallengeSubmissionSuccess([submissionId], 'update'));\r\n                    showMessage('Request Submitted', 'success');\r\n                    return 'success';\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    if (error.code === 404) { // redo request was already submitted\r\n                        dispatch(updateChallengeSubmissionSuccess([submissionId], 'update'));\r\n                        showMessage(ALREADY_REQUESTED_REDO_ERROR, 'error');\r\n                        return 'success';\r\n                    } else {\r\n                        dispatch(updateChallengeSubmissionFailure(error.message));\r\n                        showMessage(error.message, 'error');\r\n                        return 'error';\r\n                    }\r\n                });\r\n        },\r\n        [dispatch, requestSubmissionRedoApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useModifyScoreService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (value: any, field?: string) => {\r\n            dispatch(modifyScore(value, field ? field : 'clarity'));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useCheckAllSubmissionsService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (submissionId: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(checkAllSubmissions(submissionId, checked, partial));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useCheckSingleSubmissionService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (submissionId: number) => {\r\n            dispatch(checkSingleSubmission(submissionId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useCheckSingleAccuracyScoreService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (submissionId: number) => {\r\n            dispatch(checkSingleAccuracyScore(submissionId));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\nexport const useCheckAllAccuracyScoresService = () => {\r\n    const dispatch = useDispatch();\r\n    return useCallback(\r\n        (submissionId: number[], checked: boolean, partial?: boolean) => {\r\n            dispatch(checkAllAccuracyScores(submissionId, checked, partial));\r\n        },\r\n        [dispatch]\r\n    );\r\n};\r\n\r\n\r\nexport const useMarkSubmissionAsViewedService = () => {\r\n    const dispatch = useDispatch();\r\n    const performSubmissionActionApi = usePerformSubmissionActionApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (submissionId: any) => {\r\n            performSubmissionActionApi(submissionId, 'view')\r\n                .then(() => {\r\n                    dispatch(\r\n                        updateChallengeSubmissionSuccess(\r\n                            [submissionId],\r\n                            'update'\r\n                        )\r\n                    );\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [showMessage, performSubmissionActionApi, dispatch]\r\n    );\r\n};\r\n\r\nexport const useSearchAccuracyScoreService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchSubmissionsApi = useSearchSubmissionsApi();\r\n    const profile = useSelector(getProfileState);\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (searchParams: SearchParams, filters: AccuracyTestSubmissionFilters) => {\r\n            dispatch(searchAccuracyScoreStart());\r\n\r\n            const searchSubmissionsParams = createSearchSubmissionsParams(\r\n                searchParams,\r\n                profile?.companyId ?? 0,\r\n                SUBMISSION_TYPE.SCENARIO,\r\n                filters\r\n            );\r\n            if (filters.scenarioIds.length > 0) {\r\n                searchSubmissionsParams.scenarioId = filters.scenarioIds.join(',');\r\n            }\r\n\r\n            searchSubmissionsApi(searchSubmissionsParams)\r\n                .then(data => {\r\n                    const combinedParams: SearchParams = {\r\n                        ...searchParams,\r\n                        customFilters: filters\r\n                    };\r\n                    dispatch(\r\n                        setSearchState(\r\n                            SEARCH_STATE.ACCURACY.name,\r\n                            SEARCH_STATE.ACCURACY.childrenKeys,\r\n                            combinedParams\r\n                        )\r\n                    );\r\n                    dispatch(searchAccuracyScoreSuccess(data));\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(searchAccuracyScoreFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [\r\n            dispatch,\r\n            profile?.companyId,\r\n            searchSubmissionsApi,\r\n            showMessage,\r\n        ]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useGetSubmissionFromFeedService\r\n * @returns { CallableFunction }\r\n */\r\nexport const useGetSubmissionFromFeedService = () => {\r\n    const dispatch = useDispatch();\r\n    const searchSubmissionsApi = useSearchSubmissionsApi();\r\n    const getSubmissionReviewApi = useGetSubmissionReviewApi();\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { string | number } submissionId\r\n     * @param { boolean } loadReview\r\n     * @param { Function } successCallback\r\n     * @param { void }\r\n     */\r\n    return useCallback(\r\n        (\r\n            submissionId: number | string,\r\n            successCallback?: (data: SubmissionV2) => void\r\n        ) => {\r\n            dispatch(getSubmissionDetailsStart());\r\n            const params: SearchSubmissionsParams = {\r\n                submissionId: submissionId.toString(),\r\n                limit: 1,\r\n                offset: 0\r\n            };\r\n            let submission: SubmissionV2;\r\n            searchSubmissionsApi(params)\r\n                .then((data) => {\r\n                    if (data.items.length > 0) {\r\n                        submission = data.items[0];\r\n                        if (submission.reviewedAt) {\r\n                            return getSubmissionReviewApi(submissionId)\r\n                                .catch((error: ErrorResult) => {\r\n                                    showMessage(error.message, 'error');\r\n                                    return Promise.resolve(undefined);\r\n                                });\r\n                        } else {\r\n                            return Promise.resolve(undefined);\r\n                        }\r\n                    } else {\r\n                        return Promise.reject({ message: UNAVAILABLE_SUBMISSION_ERROR });\r\n                    }\r\n                })\r\n                .then((review) => {\r\n                    successCallback?.(submission);\r\n                    dispatch(\r\n                        getSubmissionDetailsSuccess(submission, review)\r\n                    );\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(getSubmissionDetailsFailure(error.message));\r\n                    if (error.message !== UNAVAILABLE_SUBMISSION_ERROR) {\r\n                        showMessage(error.message, 'error');\r\n                    }\r\n                });\r\n        },\r\n        [dispatch, searchSubmissionsApi, getSubmissionReviewApi, showMessage]\r\n    );\r\n};\r\n\r\nexport const useArchiveSubmissionsService = (isAccuracyTest: boolean) => {\r\n    const dispatch = useDispatch();\r\n    const archiveSubmissionsApi = useArchiveSubmissionsApi();\r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (submissionIds: number[]) => {\r\n            dispatch(updateChallengeSubmissionStart());\r\n            return archiveSubmissionsApi(submissionIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        updateChallengeSubmissionSuccess(submissionIds, 'update')\r\n                    );\r\n                    const countText = pluralize(submissionIds.length, isAccuracyTest ? 'Accuracy Test' : 'Challenge Submission');\r\n                    const message =\r\n                        submissionIds.length > 1\r\n                            ? `${countText} have been archived`\r\n                            : `${countText} has been archived`;\r\n                    showMessage(message, 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateChallengeSubmissionFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, archiveSubmissionsApi, isAccuracyTest, showMessage]\r\n    );\r\n};\r\n\r\nexport const useRestoreSubmissionsService = (isAccuracyTest: boolean) => {\r\n    const dispatch = useDispatch();\r\n    const restoreSubmissionsApi = useRestoreSubmissionsApi();\r\n  \r\n    const showMessage = useShowMessage();\r\n    return useCallback(\r\n        (submissionIds: number[]) => {\r\n            dispatch(updateChallengeSubmissionStart());\r\n            return restoreSubmissionsApi(submissionIds)\r\n                .then(data => {\r\n                    dispatch(\r\n                        updateChallengeSubmissionSuccess(submissionIds, 'update')\r\n                    );\r\n                    const countText = pluralize(submissionIds.length, isAccuracyTest ? 'Accuracy Test' : 'Challenge Submission');\r\n                    const message =\r\n                        submissionIds.length > 1\r\n                            ? `${countText} have been restored`\r\n                            : `${countText} has been restored`;\r\n                    showMessage(message, 'success');\r\n                    return data;\r\n                })\r\n                .catch((error: ErrorResult) => {\r\n                    dispatch(updateChallengeSubmissionFailure(error.message));\r\n                    showMessage(error.message, 'error');\r\n                });\r\n        },\r\n        [dispatch, isAccuracyTest, restoreSubmissionsApi, showMessage]\r\n    );\r\n};\r\n\r\n/**\r\n * @function useCopyAccuracyLink\r\n * @returns { CallableFunction }\r\n */\r\nexport const useCopyAccuracyLink = () => {\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { SubmissionV2 } submission\r\n     * @param { void }\r\n     */\r\n    return useCallback((submission: SubmissionV2) => {\r\n        const content = 'This is an Accuracy Test'\r\n            + (submission.user ? ` from ${submission.user.firstName} ${submission.user.lastName}` : '')\r\n            + (submission.scenario ? ` for Scenario ${submission.scenario.title}` : '')\r\n            + `. Check it out: ${window.location.href}`;\r\n        if (copyTextToClipboard(content)) {\r\n            showMessage('Link copied to clipboard', 'success');\r\n        }\r\n    }, [showMessage]);\r\n}\r\n\r\n/**\r\n * @function useCopyChallengeLink\r\n * @returns { CallableFunction }\r\n */\r\n export const useCopyChallengeLink = () => {\r\n    const showMessage = useShowMessage();\r\n\r\n    /**\r\n     * @function callback\r\n     * @param { SubmissionV2 } submission\r\n     * @param { void }\r\n     */\r\n    return useCallback((submission: SubmissionV2) => {\r\n        const content = 'This is a Challenge'\r\n            + (submission.user ? ` from ${submission.user.firstName} ${submission.user.lastName}` : '')\r\n            + (submission.practisSet ? ` for Practis Set ${submission.practisSet.name}` : '')\r\n            + `. Check it out: ${window.location.href}`;\r\n        if (copyTextToClipboard(content)) {\r\n            showMessage('Link copied to clipboard', 'success');\r\n        }\r\n    }, [showMessage]);\r\n}","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nexport const Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nexport const LabelsContainer = styled.div`\n    width: 208px;\n    height: 100%;\n\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const StatusContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    background-color: inherit;\n\n    > div:last-child {\n        flex-grow: 1;\n        margin-top: 28px;\n    }\n`;\n\nexport const StatusSection = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 152px;\n`;\n\nexport const StatusItem = styled.div`\n    margin-bottom: 8px;\n`;\n\nexport const Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nexport const SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n    margin-right: 24px;\n    color: var(--ps-grey-1);\n`;\n\nexport const ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;","import React, {\n    FC,\n    useCallback,\n    useEffect,\n    useState,\n} from 'react';\nimport { kebabCase } from 'lodash';\nimport { Variables } from '../../../../theme/variables';\nimport { Button } from '../../../../ui/components/Button';\nimport { Fieldset } from '../../../../ui/components/Fieldset';\nimport Checkbox from '../../../../ui/components/Checkbox';\nimport { PortableLabelsWithStore } from '../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../portableLabels/store/hors/withLabels/services';\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\nimport {\n    CHALLENGE_SUBMISSION_REVIEW_STATUS_ITEMS\n} from '../../tools';\nimport { PortableTeamsWithStore } from '../../../portableTeams';\nimport { useTeamsState } from '../../../portableTeams/store/hors/withTeams/states';\nimport {\n    useDeselectAllTeams,\n    useSaveTeams,\n} from '../../../portableTeams/store/hors/withTeams/services';\nimport { toggleItemInArray } from '../../../../helpers/functions/array-helpers';\nimport { ChallengeSubmissionFilters } from '../../../../constants/interfaces/SubmissionSearchFilters';\nimport {\n    Container,\n    Wrapper,\n    LabelsContainer,\n    TeamsContainer,\n    StatusContainer,\n    StatusSection,\n    StatusItem,\n    Actions,\n    SummaryCaption,\n    ButtonWrapper\n} from './styles';\n\nexport const SubmissionFilters: FC<{\n    filters: ChallengeSubmissionFilters;\n    onSuccessApply: (filters: ChallengeSubmissionFilters) => void;\n}> = ({\n    filters,\n    onSuccessApply,\n}) => {\n    const labels = useLabelsState();\n    const teams = useTeamsState();\n    const saveLabels = useSaveLabels();\n    const selectLabels = useSelectLabels();\n    const saveTeams = useSaveTeams();\n    const ifPreselectedLabelsChanged = useIfChanged(filters.labelIds);\n\n    const [reviewStatuses, setReviewStatuses] = useState<string[] | undefined>();\n    const [showArchived, setShowArchived] = useState<boolean | undefined>();\n\n    const handleReviewStatusSelection = useCallback(\n        (reviewStatus: string) => {\n            const statuses = toggleItemInArray(\n                reviewStatuses ?? filters.reviewStatuses, reviewStatus);\n            setReviewStatuses(statuses);\n        },\n        [setReviewStatuses, reviewStatuses, filters.reviewStatuses]\n    );\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(filters.labelIds);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        filters.labelIds,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    const onApplyHandler = useCallback(() => {\n        saveLabels();\n        saveTeams();\n        onSuccessApply({\n            reviewStatuses: reviewStatuses ?? filters.reviewStatuses,\n            showArchived: showArchived ?? filters.showArchived,\n            labelIds: labels.selected,\n            teamIds: teams.selected\n        })\n    }, [\n        reviewStatuses,\n        showArchived,\n        labels.selected,\n        teams.selected,\n        saveLabels,\n        saveTeams,\n        onSuccessApply,\n        filters\n    ]);\n\n    const totalFiltersSelected =\n        teams.selected.length +\n        labels.selected.filter(id => id > 0).length +\n        ((showArchived ?? filters.showArchived) ? 1 : 0) +\n        (reviewStatuses ?? filters.reviewStatuses).length;\n\n    const deselectTeams = useDeselectAllTeams();\n    const deselectLabels = useDeselectAllLabels();\n\n    const onClearHandler = () => {\n        setShowArchived(false);\n        setReviewStatuses([]);\n        deselectTeams();\n        deselectLabels();\n    };\n\n    return (\n        <Container>\n            <Wrapper>\n                <StatusContainer>\n                    <Fieldset title={'Review Status'} dataTest=\"review-status-section-title\">\n                        <StatusSection>\n                            {CHALLENGE_SUBMISSION_REVIEW_STATUS_ITEMS.map(item => (\n                                <StatusItem key={item.value} data-test=\"review-status-item-container\">\n                                    <Checkbox\n                                        key={item.value}\n                                        checked={\n                                            (reviewStatuses ?? filters.reviewStatuses)\n                                                .includes(item.value)\n                                        }\n                                        handleChange={() => {\n                                            handleReviewStatusSelection(item.value);\n                                        }}\n                                        label={item.name}\n                                        border={Variables.Colors.steelGrey}\n                                        size={12}\n                                        fontColor={Variables.Colors.black}\n                                        dataTest={`${kebabCase(item.name)}-checkbox`}\n                                    />\n                                </StatusItem>\n                            ))}\n                        </StatusSection>\n                    </Fieldset>\n                    <Fieldset title={'Status'} dataTest=\"status-section-title\">\n                        <StatusSection>\n                            <StatusItem data-test=\"status-item-container\">\n                                <Checkbox\n                                    checked={showArchived ?? filters.showArchived}\n                                    handleChange={e => {\n                                        setShowArchived(e.target.checked);\n                                    }}\n                                    label=\"Archived\"\n                                    border={Variables.Colors.steelGrey}\n                                    size={12}\n                                    fontColor={Variables.Colors.black}\n                                    dataTest=\"archived-checkbox\"\n                                />\n                            </StatusItem>\n                        </StatusSection>\n                    </Fieldset>\n                </StatusContainer>\n                <Fieldset title={'Teams'} dataTest=\"teams-section-title\">\n                    <TeamsContainer>\n                        <PortableTeamsWithStore\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant={'inverse'}\n                        width={'122px'}\n                        action={() => onClearHandler()}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={onApplyHandler}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Files = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 20 20\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M18.75 20H1.25C.56 20 0 19.44 0 18.75v-7.5L2.5 0h15L20 11.25v7.5c0 .69-.56 1.25-1.25 1.25zm-2.5-18.75H3.75l-2.5 10h5.625v2.5h6.25v-2.5h5.625l-2.5-10zm2.5 11.875c0-.345-.28-.625-.625-.625h-3.75V15h-8.75v-2.5h-3.75c-.345 0-.625.28-.625.625v5c0 .346.28.625.625.625h16.25c.345 0 .625-.28.625-.626v-4.999zM14.375 8.75h-8.75C5.28 8.75 5 8.47 5 8.125s.28-.625.625-.625h8.75c.345 0 .625.28.625.625s-.28.625-.625.625zM13.125 5h-6.25c-.345 0-.625-.28-.625-.626 0-.344.28-.624.625-.624h6.25c.345 0 .625.28.625.624 0 .346-.28.626-.625.626z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Files;\n","import React, { FC } from 'react';\nimport ROUTES from '../../../routes/routes';\nimport Navigation from '../../../ui/components/Navigation/Navigation';\nimport styled from 'styled-components';\n\nconst StyledSubmissionsNavigationContainer = styled.div`\n  *:before{\n      max-width: 107px;\n  }\n`;\n\n\nconst SubmissionsNavigation: FC<{\n    notReviewedCount?: number;\n    dataTest?: string;\n}> = ({\n    notReviewedCount,\n    dataTest\n})  => {\n    return (\n        <StyledSubmissionsNavigationContainer>\n            <Navigation\n                menu={[\n                    {\n                        key: 'accuracytests',\n                        title: 'Accuracy Tests',\n                        url: ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.ALL,\n                    },\n                    {\n                        key: 'challenges',\n                        title: 'Challenges',\n                        url: ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL,\n                        notReviewedCount: notReviewedCount\n                    }\n                ]}\n                dataTest={dataTest}\n            />\n        </StyledSubmissionsNavigationContainer>\n    );\n};\n\nexport const SubmissionsNavigationContainer: FC<{\n    notReviewedCount?: number;\n    dataTest?: string;\n}> = ({\n    notReviewedCount,\n    dataTest\n})  => {\n    return <SubmissionsNavigation notReviewedCount={notReviewedCount} dataTest={dataTest} />;\n};\n\nexport default SubmissionsNavigationContainer;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const CheckMark = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0z\"\n                    fill=\"#066150\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default CheckMark;\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\nimport AvatarPlaceholder from '../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\n\nexport const AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n`;\n\nexport const StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    min-width: 200px;\n`;\n\nexport const Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 8px;\n`;\n\nexport const FlexWrapper = styled.div`\n    display: flex;\n    align-items: center;\n\n    svg {\n        margin-right: 4px;\n        transform: translateY(-1px);\n    }\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: '0px !important',\n    },\n\n    minWidthTableCell: {\n        padding: '0px !important',\n        minWidth: 200,\n    },\n}));\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport { SUBMISSION_TYPE } from '../../../../constants/interfaces/Reviews';\nimport {\n    AccuracyTestSubmissionFilters,\n    ChallengeSubmissionFilters,\n} from '../../../../constants/interfaces/SubmissionSearchFilters';\nimport { convertPresentVerbToPastVerb } from '../../../../helpers/functions/strings';\nimport { useChunkRequestsService } from '../../../../services/ChunkRequestService/hooks';\nimport { ChunkRequestActionInterface } from '../../../../services/ChunkRequestService/hooks/types';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport {\n    showModalDialog,\n    useHideModalDialog,\n} from '../../../../ui/components/ModalDialogs/store/actions';\nimport { GeneralBulkActionModalInterface } from '../../../../ui/components/ModalDialogs/types';\nimport { UPDATE_SUBMISSION_STATUS_ACTION } from './constants';\nimport { useHandleSearchSubmissionsAndUpdateStatus } from './helpers';\nimport {\n    UpdateSubmissionStatusChunkRequestParameters,\n    UpdateSubmissionStatuses,\n} from './types';\n\n/**\n *\n * @description Custom hook to update submission status with chunk service\n * when all items are selected.\n * @function useUpdateSubmissionStatusBulkActionService\n * @param { SearchParams } searchParams\n * @param { number } companyId\n * @param { Function } onSuccessCallback\n * @param { Function } onErrorCallback\n * @returns { CallableFunction }\n */\nexport function useUpdateSubmissionStatusBulkActionService(\n    scope: keyof typeof SUBMISSION_TYPE,\n    searchParams: SearchParams,\n    filters: AccuracyTestSubmissionFilters | ChallengeSubmissionFilters,\n    totalUsersCount: number,\n    onSuccessCallback?: () => void,\n    onErrorCallback?: () => void\n) {\n    const updateActionRef = useRef<UpdateSubmissionStatuses>('Archive');\n\n    const dispatch = useDispatch();\n\n    const searchSubmissionsAndUpdateStatus =\n        useHandleSearchSubmissionsAndUpdateStatus(\n            scope,\n            updateActionRef.current\n        );\n\n    const hideModalDialog = useHideModalDialog();\n    const showMessage = useShowMessage();\n\n    const totalCompletedItems = useRef<number>(0);\n\n    const [isRunning, setIsRunning] = useState<boolean>(false);\n\n    const actionList: ChunkRequestActionInterface<UpdateSubmissionStatusChunkRequestParameters>[] =\n        [\n            {\n                actionName: UPDATE_SUBMISSION_STATUS_ACTION,\n                actionFunction: searchSubmissionsAndUpdateStatus,\n                actionFunctionOptions: {\n                    parameters: {\n                        searchParams: {\n                            ...searchParams,\n                            offset: 0,\n                        },\n                        filters,\n                        onSuccessCallback: numberOfDoneItems =>\n                            (totalCompletedItems.current =\n                                totalCompletedItems.current +\n                                numberOfDoneItems),\n                        totalItems: totalUsersCount,\n                    },\n                    fieldName: 'totalItems',\n                },\n            },\n        ];\n\n    /**\n     * @function clearTotalCompletedItems\n     * @returns { void }\n     */\n    const clearTotalCompletedItems = () => (totalCompletedItems.current = 0);\n\n    /**\n     * @function handleSuccessServiceCallback\n     * @returns { void }\n     */\n    const handleSuccessServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            setTimeout(() => {\n                hideModalDialog();\n            }, 900);\n\n            isRunning && setIsRunning(false);\n            clearTotalCompletedItems();\n\n            onSuccessCallback?.();\n        });\n\n        showMessage(\n            `${\n                totalCompletedItems.current\n            } submissions have been ${convertPresentVerbToPastVerb(\n                updateActionRef.current\n            )}`,\n            'success'\n        );\n    }, [hideModalDialog, isRunning, onSuccessCallback, showMessage]);\n\n    /**\n     * @function handleFailedBulkActionServiceCallback\n     * @returns { void }\n     */\n    const handleFailedBulkActionServiceCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_FAILED_MODAL',\n                    modalProps: {\n                        modalTitle: `${updateActionRef.current} submission`,\n                        onClose: hideModalDialog,\n                    } as GeneralBulkActionModalInterface,\n                })\n            );\n\n            clearTotalCompletedItems();\n\n            isRunning && setIsRunning(false);\n\n            onErrorCallback?.();\n        });\n    }, [dispatch, hideModalDialog, isRunning, onErrorCallback]);\n\n    const { setIsStopped } = useChunkRequestsService(\n        actionList,\n        handleSuccessServiceCallback,\n        handleFailedBulkActionServiceCallback\n    );\n\n    /**\n     * @function handleStopBulkActionService\n     * @returns { void }\n     */\n    const handleStopBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            setIsStopped(true);\n            setIsRunning(false);\n            hideModalDialog();\n\n            clearTotalCompletedItems();\n\n            onSuccessCallback?.();\n        });\n\n        showMessage(\n            `${\n                totalCompletedItems.current\n            } submissions have been ${convertPresentVerbToPastVerb(\n                updateActionRef.current\n            )}`,\n            'success'\n        );\n    }, [hideModalDialog, onSuccessCallback, setIsStopped, showMessage]);\n\n    /**\n     * @function handleStartBulkActionService\n     * @returns { void }\n     */\n    const handleStartBulkActionService = useCallback(() => {\n        Promise.resolve().then(() => {\n            dispatch(\n                showModalDialog({\n                    modalType: 'BULK_ACTION_PROGRESS_MODAL',\n                    modalProps: {\n                        modalTitle: `${updateActionRef.current} submission`,\n                        onStopBulkActionService: handleStopBulkActionService,\n                        onClose: hideModalDialog,\n                    },\n                })\n            );\n\n            setIsStopped(false);\n        });\n    }, [dispatch, handleStopBulkActionService, hideModalDialog, setIsStopped]);\n\n    useEffect(() => {\n        if (isRunning) {\n            handleStartBulkActionService();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isRunning]);\n\n    return useCallback((action: UpdateSubmissionStatuses) => {\n        updateActionRef.current = action;\n\n        setIsRunning(true);\n    }, []);\n}","import { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport { isEmpty } from 'lodash';\nimport {\n    useArchiveSubmissionsApi,\n    useRestoreSubmissionsApi,\n    useSearchSubmissionsApi,\n} from '../../../../api';\n\nimport { SearchParams } from '../../../../constants/interfaces/filters';\nimport { SUBMISSION_TYPE } from '../../../../constants/interfaces/Reviews';\nimport {\n    AccuracyTestSubmissionFilters,\n    ChallengeSubmissionFilters,\n} from '../../../../constants/interfaces/SubmissionSearchFilters';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport { createSearchSubmissionsParams } from '../../tools';\nimport {\n    SubmissionUpdateActions,\n    UpdateSubmissionStatuses,\n} from './types';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\n\n/**\n * @function useHandleSearchSubmissionsAndUpdateStatus\n * @param { keyof typeof SUBMISSION_TYPE } scope\n * @param { UpdateSubmissionStatuses } status\n * @returns { CallableFunction }\n */\nexport const useHandleSearchSubmissionsAndUpdateStatus = (\n    scope: keyof typeof SUBMISSION_TYPE,\n    status: UpdateSubmissionStatuses\n) => {\n    const searchSubmissionsApi = useSearchSubmissionsApi();\n    const archiveSubmissionApi = useArchiveSubmissionsApi();\n    const restoreSubmissionApi = useRestoreSubmissionsApi();\n    const profile = useSelector(getProfileState);\n    const showMessage = useShowMessage();\n\n    /**\n     * @param { SearchParams } searchParams\n     * @param { AccuracyTestSubmissionFilters | ChallengeSubmissionFilters } filters\n     * @param { Function } onSuccessCallback\n     */\n    return useCallback(\n        async (\n            searchParams: SearchParams,\n            filters: AccuracyTestSubmissionFilters | ChallengeSubmissionFilters,\n            onSuccessCallback: (numberOfDoneItems: number) => void\n        ) => {\n            const UpdateSubmissionActionList = {\n                [SubmissionUpdateActions.ARCHIVE]: archiveSubmissionApi,\n                [SubmissionUpdateActions.RESTORE]: restoreSubmissionApi,\n            };\n\n            const searchSubmissionsParams = createSearchSubmissionsParams(\n                searchParams,\n                profile?.companyId ?? 0,\n                scope === 'SCENARIO'\n                    ? SUBMISSION_TYPE.SCENARIO\n                    : SUBMISSION_TYPE.CHALLENGE,\n                filters\n            );\n\n            if (\n                (filters as AccuracyTestSubmissionFilters)?.scenarioIds\n                    ?.length > 0\n            ) {\n                searchSubmissionsParams.scenarioId = (\n                    filters as AccuracyTestSubmissionFilters\n                ).scenarioIds.join(',');\n            }\n\n            if (\n                (filters as ChallengeSubmissionFilters)?.reviewStatuses\n                    ?.length === 1\n            ) {\n                searchSubmissionsParams.filterChallenge = (\n                    filters as ChallengeSubmissionFilters\n                ).reviewStatuses[0];\n            }\n\n            const updateSubmissionAction = UpdateSubmissionActionList[status];\n\n            await searchSubmissionsApi(searchSubmissionsParams)\n                .then(async response => {\n                    if (!isEmpty(response.items)) {\n                        const submissionIds = response.items.map(\n                            item => item.id\n                        );\n\n                        await updateSubmissionAction(submissionIds)\n                            .then(() => onSuccessCallback(submissionIds.length))\n                            .catch((error: ErrorResult) => {\n                                error?.message &&\n                                    showMessage(error.message, 'error');\n                                throw error;\n                            });\n                    }\n                })\n                .catch((error: unknown) => {\n                    throw error;\n                });\n        },\n        [\n            archiveSubmissionApi,\n            profile?.companyId,\n            restoreSubmissionApi,\n            scope,\n            searchSubmissionsApi,\n            showMessage,\n            status,\n        ]\n    );\n};","export const UPDATE_SUBMISSION_STATUS_ACTION =\n    'UPDATE_SUBMISSION_STATUS_ACTION';","import { FC, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { isEmpty as lodashIsEmpty, difference } from 'lodash';\r\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport {\r\n    selectSelectedSubmissions,\r\n    useSubmissionsState,\r\n    useUpdatedSubmissionsState,\r\n} from '../store/states';\r\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { SubmissionV2 } from '../../../constants/interfaces/Reviews';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../constants/interfaces/filters';\r\nimport {\r\n    useArchiveSubmissionsService,\r\n    useCheckAllSubmissionsService,\r\n    useCheckSingleSubmissionService,\r\n    useRestoreSubmissionsService,\r\n    useSearchChallengeSubmissionsService,\r\n} from '../store/services';\r\nimport { useSelector } from 'react-redux';\r\nimport { CHALLENGE_SUBMISSION_REVIEW_STATUS } from '../tools';\r\nimport { formatDate } from '../../../helpers/functions/date-convert';\r\nimport { useHistory } from 'react-router';\r\nimport { History } from 'history';\r\nimport ROUTES from '../../../routes/routes';\r\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\r\nimport { Challenge } from '../../../constants/interfaces/Challenge';\r\nimport {\r\n    UpdatedLabelsState,\r\n    useLabelsState,\r\n    useUpdatedLabelsState,\r\n} from '../../labels/store/states';\r\nimport { LoadingComponent } from '../../../ui/components/LoadingCopmonent';\r\nimport { ActionButton, ActionItem } from '../../../ui/components/ActionButton';\r\nimport { CheckPermission } from '../../permissions';\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport { useHandleAccessPage } from '../../../helpers/hooks/usePagePermissions';\r\nimport { UserProfile } from '../../../constants/interfaces/User';\r\nimport { usePermissionsState } from '../../permissions/store/state';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { Popup } from '../../../ui/components/Popup';\r\nimport FilterByHandler from '../../../ui/components/Filters/FilterByHandler';\r\nimport { useSaveUserFiltersService } from '../../labels/store/services';\r\nimport { SubmissionFilters } from '../components/SubmissionFilters/SubmissionFilters';\r\nimport { Team } from '../../../constants/interfaces/Team';\r\nimport { useUpdateTeamsState } from '../../teams/store/states';\r\nimport { WithLabelsContext } from '../../portableLabels';\r\nimport { WithTeamsContext } from '../../portableTeams';\r\nimport Files from '../../../ui/icons/Files';\r\nimport {\r\n    SubmissionActions,\r\n    SubmissionActionsHelper,\r\n    useSubmissionActionsHelper,\r\n} from '../tools';\r\nimport { useSessionEffect } from '../../common';\r\nimport SubmissionsNavigationContainer from '../components/SubmissionsNavigation';\r\nimport CheckMark from '../../../ui/icons/CheckMark';\r\nimport { getSearchState } from '../../searchState/store/reducer';\r\nimport { SEARCH_STATE } from '../../searchState/constants';\r\nimport { isEmpty } from '../../../helpers/functions/object-helpers';\r\nimport { SearchStateInterface } from '../../searchState/store/states';\r\nimport { TableWrapper } from '../../../ui/components/table-wrapper';\r\nimport {\r\n    Avatar,\r\n    AvatarTile,\r\n    FlexWrapper,\r\n    StyledFirstTableContent,\r\n    useStyles,\r\n} from './styles';\r\nimport { useOrderBy } from '../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../ui/components/table-wrapper/helper';\r\nimport TableTitleOverflowText from '../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\r\nimport { ChallengeSubmissionFilters } from '../../../constants/interfaces/SubmissionSearchFilters';\r\nimport { useUpdateSubmissionStatusBulkActionService } from '../services/SubmissionsBulkActionsService';\r\n\r\nconst qs = require('query-string');\r\n\r\nexport const ITEMS_PER_PAGE = 20;\r\nconst DEFAULT_REVIEW_STATUSES = [\r\n    CHALLENGE_SUBMISSION_REVIEW_STATUS.NOT_REVIEWED,\r\n    CHALLENGE_SUBMISSION_REVIEW_STATUS.REVIEWED,\r\n];\r\n\r\nconst ChallengeSubmissions: FC<{\r\n    profile?: UserProfile;\r\n    submissions?: ListResult<SubmissionV2>;\r\n    challenges?: ListResult<Challenge>;\r\n    practisSets?: ListResult<PractisSets>;\r\n    searchSubmissions(\r\n        searchParams: SearchParams,\r\n        filters: ChallengeSubmissionFilters\r\n    ): void;\r\n    loading?: boolean;\r\n    updatedSubmissions?: number[];\r\n    history: History<any>;\r\n    selectedLabels?: number[];\r\n    onArchiveSubmission?(submissionIds: number[]): Promise<void>;\r\n    onRestoreSubmission?(submissionIds: number[]): Promise<void>;\r\n    selectedSubmissionIds?: number[];\r\n    selectedSubmissions?: SubmissionV2[];\r\n    actionsHelper: SubmissionActionsHelper;\r\n    updateAllSelectedSubmissions(\r\n        submissionIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    updateSelectedSubmission(submissionId: number): void;\r\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\r\n    updatedLabels?: UpdatedLabelsState;\r\n    updatedTeams?: Team;\r\n    searchState: SearchStateInterface;\r\n}> = ({\r\n    profile,\r\n    submissions,\r\n    searchSubmissions,\r\n    loading,\r\n    updatedSubmissions,\r\n    history,\r\n    selectedLabels,\r\n    onArchiveSubmission,\r\n    selectedSubmissionIds,\r\n    selectedSubmissions,\r\n    actionsHelper,\r\n    updateAllSelectedSubmissions,\r\n    updateSelectedSubmission,\r\n    onRestoreSubmission,\r\n    saveGlobalLabelFilters,\r\n    searchState,\r\n}) => {\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        orderBy: {},\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n    };\r\n\r\n    const usableParams: SearchParams =\r\n        !isEmpty(searchState) &&\r\n        !!searchState.params &&\r\n        searchState.key === SEARCH_STATE.SUBMISSIONS.name\r\n            ? searchState.params\r\n            : initialSearchParams;\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setOffset,\r\n        refreshSearchParams,\r\n    } = useSearchParamsState(usableParams);\r\n\r\n    const classes = useStyles();\r\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\r\n    const [labelsOpen, setLabelsOpen] = useState<number | undefined>();\r\n\r\n    const handleToggleLabels = (itemId?: number) => {\r\n        if (!itemId) return;\r\n        if (labelsOpen === itemId) {\r\n            setLabelsOpen(undefined);\r\n        } else {\r\n            setLabelsOpen(itemId);\r\n        }\r\n    };\r\n    const [isSelectAll, setIsSelectAll] = useState<any>(false);\r\n    const initialFilters = searchParams.customFilters as ChallengeSubmissionFilters ?? {\r\n        reviewStatuses: DEFAULT_REVIEW_STATUSES,\r\n        showArchived: false,\r\n        teamIds: [],\r\n        labelIds: selectedLabels ?? [],\r\n    };\r\n    const [filters, setFilters] = useState<ChallengeSubmissionFilters>(initialFilters);\r\n\r\n    const canAccessPage = useHandleAccessPage();\r\n\r\n    const refreshData = useCallback(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchSubmissions(searchParams, filters);\r\n        setLastRefreshed(new Date());\r\n        updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [searchSubmissions, searchParams, filters]);\r\n\r\n    /**\r\n     * @function handleViewSubmissionDetails\r\n     * @param { Submission } submission\r\n     * @returns { void }\r\n     */\r\n    const handleViewSubmissionDetails = (submission: SubmissionV2) => {\r\n        if (!submission) return;\r\n        history.push(\r\n            ROUTES.SUBMISSION_SETTINGS.CHALLENGES.SINGLE.replace(\r\n                ':submissionId',\r\n                submission.id?.toString()\r\n            ),\r\n            {\r\n                useGoBack: true,\r\n                submissionId: submission.id,\r\n                isNew: !submission.relation.isViewed,\r\n                searchParams,\r\n                filters\r\n            }\r\n        );\r\n    };\r\n\r\n    const handleViewPractisSetReport = (\r\n        userId: number,\r\n        enrollmentId: number\r\n    ) => {\r\n            history.push(\r\n                ROUTES.TRAINEE_DETAILS\r\n                    .replace(\r\n                        ':userId',\r\n                        userId.toString()\r\n                    )\r\n                    .replace(\r\n                        ':enrollmentId',\r\n                        enrollmentId.toString()\r\n                    ),\r\n                { useGoBack: true }\r\n            );\r\n    };\r\n\r\n    const permissions = usePermissionsState();\r\n\r\n    const handleViewProfile = (userId: number) => {\r\n        if (permissions.includes(NEW_PERMISSIONS.VIEW_USER_PERFORMANCE)) {\r\n            history.push(\r\n                ROUTES.USER_PERFORMANCE.replace(':userId', userId!.toString()),\r\n                { useGoBack: true }\r\n            );\r\n        } else {\r\n            return;\r\n        }\r\n    };\r\n\r\n    const archiveSubmission = (submissionIds: number[]) => {\r\n        if (!submissionIds || (!!submissionIds && !submissionIds.length))\r\n            return;\r\n        onArchiveSubmission && onArchiveSubmission(submissionIds);\r\n    };\r\n\r\n    const restoreSubmission = (submissionIds: number[]) => {\r\n        if (!submissionIds || (!!submissionIds && !submissionIds.length))\r\n            return;\r\n        onRestoreSubmission && onRestoreSubmission(submissionIds);\r\n    };\r\n\r\n    const isCheckboxPartiallySelected =\r\n        submissions &&\r\n        submissions.items &&\r\n        selectedSubmissionIds &&\r\n        selectedSubmissionIds.length < submissions.items.length;\r\n\r\n    const updateAllSubmissionsCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const submissionIds =\r\n                (submissions &&\r\n                    submissions.items.map((submission: SubmissionV2) =>\r\n                        Number(submission.id)\r\n                    )) ||\r\n                [];\r\n            updateAllSelectedSubmissions(\r\n                submissionIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [submissions, isCheckboxPartiallySelected, updateAllSelectedSubmissions]\r\n    );\r\n\r\n    const handleSubmissionCheck = (e: any, submission: SubmissionV2) => {\r\n        e.stopPropagation();\r\n        if (!!submission.id) {\r\n            updateSelectedSubmission(submission.id);\r\n        }\r\n    };\r\n\r\n    const updateSubmissionStatusBulkActionService =\r\n        useUpdateSubmissionStatusBulkActionService(\r\n            'CHALLENGE',\r\n            searchParams,\r\n            filters,\r\n            submissions?.count ?? 0,\r\n            refreshData\r\n        );\r\n\r\n    const archiveSubmissions = useCallback(() => {\r\n        if (isSelectAll) {\r\n            updateSubmissionStatusBulkActionService('Archive');\r\n        } else {\r\n            if (\r\n                !selectedSubmissionIds ||\r\n                (!!selectedSubmissionIds && !selectedSubmissionIds.length) ||\r\n                !onArchiveSubmission\r\n            ) {\r\n                return;\r\n            }\r\n\r\n            onArchiveSubmission(selectedSubmissionIds).then((result: any) => {\r\n                if (!!result) {\r\n                    updateAllSelectedSubmissions(\r\n                        selectedSubmissionIds,\r\n                        false,\r\n                        false\r\n                    );\r\n                }\r\n            });\r\n        }\r\n\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [\r\n        selectedSubmissionIds,\r\n        onArchiveSubmission,\r\n        updateAllSelectedSubmissions,\r\n    ]);\r\n\r\n    const restoreSubmissions = useCallback(() => {\r\n        if (isSelectAll) {\r\n            updateSubmissionStatusBulkActionService('Restore');\r\n        } else {\r\n            if (\r\n                !selectedSubmissionIds ||\r\n                (!!selectedSubmissionIds && !selectedSubmissionIds.length) ||\r\n                !onRestoreSubmission\r\n            ) {\r\n                return;\r\n            }\r\n\r\n            onRestoreSubmission(selectedSubmissionIds).then((result: any) => {\r\n                if (!!result) {\r\n                    updateAllSelectedSubmissions(\r\n                        selectedSubmissionIds,\r\n                        false,\r\n                        false\r\n                    );\r\n                }\r\n            });\r\n        }\r\n\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [\r\n        selectedSubmissionIds,\r\n        onRestoreSubmission,\r\n        updateAllSelectedSubmissions,\r\n    ]);\r\n\r\n    const handleApplyFilters = useCallback(\r\n        (newFilters: ChallengeSubmissionFilters) => {\r\n            saveGlobalLabelFilters(newFilters.labelIds);\r\n            setFilters(newFilters);\r\n        },\r\n        [saveGlobalLabelFilters]\r\n    );\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const sbFirstName = useOrderBy('user_name', orderBy, setOrderBy);\r\n    const sbPractisSetName = useOrderBy('pset_name', orderBy, setOrderBy);\r\n    const sbChallengeTitle = useOrderBy('challenge_title', orderBy, setOrderBy);\r\n    const sbReviewedAt = useOrderBy('reviewed', orderBy, setOrderBy);\r\n    const sbScore = useOrderBy('score', orderBy, setOrderBy);\r\n    const sbSubmittedAt = useOrderBy('submission_date', orderBy, setOrderBy);\r\n\r\n    const location = history.location;\r\n    const pageIndex = parseInt(qs.parse(location.search).page);\r\n    const initialOffset = pageIndex\r\n        ? pageIndex === 1\r\n            ? 0\r\n            : (pageIndex - 1) * ITEMS_PER_PAGE\r\n        : 0;\r\n\r\n    const appliedFiltersCount =\r\n        filters.labelIds.length +\r\n        filters.teamIds.length +\r\n        (filters.showArchived ? 1 : 0) +\r\n        (!lodashIsEmpty(filters.reviewStatuses) \r\n            ? 1\r\n            : 0);\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: appliedFiltersCount,\r\n        itemsCount: submissions?.items.length || 0,\r\n        filtersAreAlwaysEnabled: true,\r\n    });\r\n\r\n    const bulkActions = useMemo(\r\n        () => actionsHelper.getBulkActions(selectedSubmissions),\r\n        [selectedSubmissions, actionsHelper]\r\n    );\r\n\r\n    useSessionEffect(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchSubmissions(searchParams, filters);\r\n    }, [searchSubmissions, searchParams, filters]);\r\n\r\n    useEffect(() => {\r\n        if (updatedSubmissions) refreshSearchParams();\r\n    }, [updatedSubmissions, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            selectedLabels &&\r\n            (selectedLabels.length !== filters.labelIds.length ||\r\n                difference(selectedLabels, filters.labelIds).length > 0)\r\n        ) {\r\n            setFilters({\r\n                ...filters,\r\n                labelIds: selectedLabels,\r\n            });\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [selectedLabels, setFilters]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            selectedSubmissions?.length &&\r\n            selectedSubmissions.length === submissions?.count\r\n        ) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [submissions?.count, selectedSubmissions]);\r\n\r\n    useEffect(() => {\r\n        return () =>\r\n            updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [submissions]);\r\n\r\n    useEffect(() => {\r\n        if (pageIndex > 1) {\r\n            setOffset(initialOffset);\r\n        } else if (pageIndex === 1) {\r\n            setOffset(0);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [pageIndex]);\r\n\r\n    useEffect(() => {\r\n        canAccessPage([NEW_PERMISSIONS.LIST_SUBMISSION]);\r\n    }, [canAccessPage]);\r\n\r\n    /**\r\n     * @function handlePageChange\r\n     * @param { number } limit\r\n     * @param { number } offset\r\n     * @returns { void }\r\n     */\r\n    const handlePageChange = (offset: number) => {\r\n        setOffset(offset);\r\n    };\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        updateAllSubmissionsCheck(true);\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        setIsSelectAll(false);\r\n        updateAllSubmissionsCheck(event.target.checked);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked =\r\n        !!selectedSubmissionIds && !!selectedSubmissionIds.length;\r\n\r\n    const isMasterCheckBoxDisabled =\r\n        !submissions || (submissions && submissions.items.length < 1);\r\n\r\n    /**\r\n     * @functiononRowClick\r\n     * @param { AccuracyScore } submission\r\n     * @returns { void }\r\n     */\r\n    const onRowClick = (submission: SubmissionV2) => {\r\n        handleViewSubmissionDetails(submission);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { Submission } submission\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (submission: SubmissionV2): boolean =>\r\n        !!selectedSubmissionIds &&\r\n        !!submission.id &&\r\n        selectedSubmissionIds.includes(submission.id);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { Submission } submission\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, submission: SubmissionV2) => {\r\n        setIsSelectAll(false);\r\n        handleSubmissionCheck(event, submission);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsLabelTagsOpen\r\n     * @param { Submission } accuracyScore\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsLabelTagsOpen = (submission: SubmissionV2): boolean => {\r\n        return labelsOpen === submission.id;\r\n    };\r\n\r\n    return (\r\n        <MainWrapper\r\n            subTitle=\"Feed\"\r\n            tabs={<SubmissionsNavigationContainer dataTest=\"challenges-nav\" />}\r\n            hideDivider={!!selectedSubmissions?.length}\r\n            htmlPageTitle=\"Feed - Practis\"\r\n            dataTest=\"challenges\"\r\n        >\r\n            {loading && !isSelectAll && <LoadingComponent />}\r\n            <TableWrapper\r\n                tableStates={tableStates}\r\n                data={submissions?.items}\r\n                cornered={selectedLabels && !!selectedLabels.length}\r\n                shouldHideTableDivider={!!selectedSubmissions?.length}\r\n                selectedLabels={selectedLabels}\r\n                tableRefreshConfigurations={{\r\n                    lastRefreshed: lastRefreshed,\r\n                    refreshData: refreshData,\r\n                    dataTest: 'challenges-timestamp',\r\n                }}\r\n                tableToolsOptions={{\r\n                    pagingOptions: {\r\n                        totalCount: submissions?.count ?? 0,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onPageChange: handlePageChange,\r\n                        searchOrFiltersApplied:\r\n                            searchParams.searchTerm.length ||\r\n                            tableStates.showNoFilterResultsState,\r\n                        dataTest: 'challenges-paging',\r\n                    },\r\n                    searchInputOptions: {\r\n                        initialValue: searchParams.searchTerm,\r\n                        onSearchChange: setSearchTerm,\r\n                        isSearchInputDisabled: tableStates.disableSearch,\r\n                        dataTest: 'challenges-search-input',\r\n                    },\r\n                    isSelectedItemOptionsVisible:\r\n                        !lodashIsEmpty(selectedSubmissions) &&\r\n                        !lodashIsEmpty(submissions),\r\n                    selectedItemOptions: {\r\n                        isSelectAll: isSelectAll,\r\n                        selectedLength: selectedSubmissions?.length,\r\n                        totalCount: submissions?.count,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onClearSelection: onClearSelection,\r\n                        onSelectAll: onSelectAll,\r\n                        bulkActionsConfig: {\r\n                            disabled: bulkActions.areBulkActionsDisabled(),\r\n                            disabledLabel: bulkActions.areItemsEmpty()\r\n                                ? undefined\r\n                                : \"Bulk actions can't be applied\",\r\n                            archivePermissions: bulkActions.isBulkActionVisible(\r\n                                SubmissionActions.ARCHIVE\r\n                            )\r\n                                ? [NEW_PERMISSIONS.ARCHIVE_SUBMISSION]\r\n                                : [],\r\n                            isArchiveDisabled: bulkActions.isBulkActionDisabled(\r\n                                SubmissionActions.ARCHIVE\r\n                            ),\r\n                            onArchiveSubmissionsSubmit: archiveSubmissions,\r\n                            restorePermissions: bulkActions.isBulkActionVisible(\r\n                                SubmissionActions.RESTORE\r\n                            )\r\n                                ? [NEW_PERMISSIONS.RESTORE_SUBMISSION]\r\n                                : [],\r\n                            isRestoreDisabled: bulkActions.isBulkActionDisabled(\r\n                                SubmissionActions.RESTORE\r\n                            ),\r\n                            onRestoreSubmissionsSubmit: restoreSubmissions,\r\n                            isSelectAll: isSelectAll,\r\n                            totalCount: submissions?.count,\r\n                        },\r\n                    },\r\n                    filterOptions: {\r\n                        filterComponent: (\r\n                            <Popup<HTMLButtonElement>\r\n                                content={({ hide }) => (\r\n                                    <SubmissionFilters\r\n                                        filters={filters}\r\n                                        onSuccessApply={newFilters => {\r\n                                            handleApplyFilters(newFilters);\r\n                                            hide();\r\n                                        }}\r\n                                    />\r\n                                )}\r\n                                anchorOrigin={{\r\n                                    vertical: 'bottom',\r\n                                    horizontal: 'right',\r\n                                }}\r\n                                horizontalOffset={256}\r\n                            >\r\n                                {(ref, { toggleShown, shown }) => (\r\n                                    <FilterByHandler\r\n                                        ref={ref}\r\n                                        open={shown}\r\n                                        toggleOpen={toggleShown}\r\n                                        filtersCount={\r\n                                            submissions\r\n                                                ? appliedFiltersCount\r\n                                                : 0\r\n                                        }\r\n                                        disabled={tableStates.disableFilters}\r\n                                        dataTest=\"challenges-filters\"\r\n                                    />\r\n                                )}\r\n                            </Popup>\r\n                        ),\r\n                    },\r\n                }}\r\n                tableEmptyStateConfigurations={{\r\n                    shouldShowEmptyState:\r\n                        !loading && submissions?.items?.length === 0,\r\n                    noEntriesOptions: {\r\n                        icon: Files,\r\n                        text: (\r\n                            <>\r\n                                {' '}\r\n                                No Challenge\r\n                                <br />\r\n                                Submissions Yet\r\n                            </>\r\n                        ),\r\n                        dataTest: 'challenges-no-entries',\r\n                    },\r\n                    noSearchResultsOptions: {\r\n                        entityName: (\r\n                            <>\r\n                                Challenge\r\n                                <br />\r\n                                Submissions\r\n                            </>\r\n                        ),\r\n                        dataTest: 'challenges-no-search-results',\r\n                    },\r\n                    noFilterResultsOptions: {\r\n                        dataTest: 'challenges-no-filter-results',\r\n                    },\r\n                }}\r\n                configurations={{\r\n                    masterCheckBoxConfig: {\r\n                        checked: isMasterCheckBoxChecked,\r\n                        disabled: isMasterCheckBoxDisabled,\r\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\r\n                        handleCheck: onCheckMasterCheckbox,\r\n                        dataTest: 'challenges-master-checkbox',\r\n                    },\r\n                    columns: [\r\n                        {\r\n                            title: 'Users',\r\n                            width: 20,\r\n                            ...sbFirstName,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'challenges-users-column',\r\n                        },\r\n                        {\r\n                            title: 'Challenge',\r\n                            width: 17,\r\n                            ...sbChallengeTitle,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'challenge-column',\r\n                        },\r\n                        {\r\n                            title: 'Review Status',\r\n                            width: 12,\r\n                            ...sbReviewedAt,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'challenges-review-status-column',\r\n                        },\r\n                        {\r\n                            title: 'Score',\r\n                            width: 12,\r\n                            ...sbScore,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'challenges-score-column',\r\n                        },\r\n                        {\r\n                            title: 'Submitted',\r\n                            width: 12,\r\n                            ...sbSubmittedAt,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'challenges-submitted-column',\r\n                        },\r\n                        {\r\n                            title: 'Practis Set',\r\n                            width: 17,\r\n                            ...sbPractisSetName,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'challenges-practis-set-column',\r\n                        },\r\n                        {\r\n                            width: 2,\r\n                        },\r\n                        {\r\n                            width: 2,\r\n                        },\r\n                    ],\r\n                    rowConfig: {\r\n                        onRowClick: onRowClick,\r\n                        onRowCheckHandler: onRowCheckHandler,\r\n                        isRowChecked: checkIsRowChecked,\r\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\r\n                        getLabelTagsProps: (submission: SubmissionV2) => ({\r\n                            selectedLabels: submission.userLabels || [],\r\n                            deletePermissions: [\r\n                                NEW_PERMISSIONS.REMOVE_CHALLENGE_LABEL,\r\n                            ],\r\n                        }),\r\n                        dataTest: 'challenges-item',\r\n\r\n                        cells: [\r\n                            {\r\n                                fieldType: 'CUSTOM_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                getCustomFieldComponent: (\r\n                                    submission: SubmissionV2\r\n                                ) => (\r\n                                    <StyledFirstTableContent>\r\n                                        <AvatarTile>\r\n                                            <Avatar\r\n                                                profile={submission.user}\r\n                                                size=\"sm\"\r\n                                                dataTest=\"challenges-item-user-avatar\"\r\n                                            />\r\n                                            <TableTitleOverflowText\r\n                                                isCurrent={\r\n                                                    submission.user &&\r\n                                                    profile &&\r\n                                                    submission.user.id ===\r\n                                                        profile.id\r\n                                                }\r\n                                                isNew={\r\n                                                    !submission.relation\r\n                                                        .isViewed\r\n                                                }\r\n                                                dataTest=\"challenges-item-user-full-name\"\r\n                                            >\r\n                                                {submission.user &&\r\n                                                    submission.user.firstName +\r\n                                                        ' ' +\r\n                                                        submission.user\r\n                                                            .lastName}\r\n                                            </TableTitleOverflowText>\r\n                                        </AvatarTile>\r\n                                    </StyledFirstTableContent>\r\n                                ),\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    submission: SubmissionV2\r\n                                ) => !submission.challenge?.title,\r\n                                fieldProps: {\r\n                                    isOverFlowText: true,\r\n                                    renderTitle: (submission: SubmissionV2) =>\r\n                                        submission.challenge?.title,\r\n                                    dataTest: 'challenges-item-challenge',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'BADGE_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    submission: SubmissionV2\r\n                                ) => !submission.reviewedAt,\r\n                                fieldProps: {\r\n                                    getBadgeFieldProps: (\r\n                                        submission: SubmissionV2\r\n                                    ) => ({\r\n                                        status: 'ACTIVE',\r\n                                        className: classes.customTableCellStyle,\r\n                                    }),\r\n\r\n                                    renderTitle: (submission: SubmissionV2) => (\r\n                                        <FlexWrapper data-test=\"challenges-item-review-status\">\r\n                                            <CheckMark />\r\n                                            {formatDate(submission.reviewedAt)}\r\n                                        </FlexWrapper>\r\n                                    ),\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    submission: SubmissionV2\r\n                                ) => !submission.score,\r\n                                fieldProps: {\r\n                                    renderTitle: (submission: SubmissionV2) =>\r\n                                        submission.score,\r\n                                    dataTest: 'challenges-item-score',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    submission: SubmissionV2\r\n                                ) => !submission.createdAt,\r\n                                fieldProps: {\r\n                                    renderTitle: (submission: SubmissionV2) =>\r\n                                        formatDate(submission.createdAt),\r\n                                    dataTest: 'challenges-item-submission-date',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    submission: SubmissionV2\r\n                                ) => !submission.practisSet?.name,\r\n                                fieldProps: {\r\n                                    isOverFlowText: true,\r\n                                    className: classes.minWidthTableCell,\r\n                                    renderTitle: (submission: SubmissionV2) =>\r\n                                        submission.practisSet?.name,\r\n                                    dataTest: 'challenges-item-practis-set',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LABEL_TAGS',\r\n                                fieldProps: {\r\n                                    getLabelTagsProps: (\r\n                                        submission: SubmissionV2\r\n                                    ) => ({\r\n                                        open: labelsOpen === submission.id,\r\n                                        toggleOpen: () =>\r\n                                            handleToggleLabels(submission.id),\r\n                                        selectedLabels:\r\n                                            submission.userLabels || [],\r\n                                        dataTest: 'challenges-item-labels',\r\n                                    }),\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LIST_ACTIONS',\r\n                                fieldProps: {\r\n                                    getListActionsComponent: (\r\n                                        submission: SubmissionV2\r\n                                    ) => (\r\n                                        <ActionButton\r\n                                            customWidth={224}\r\n                                            isHidden={\r\n                                                !!selectedSubmissions?.length\r\n                                            }\r\n                                            dataTest=\"challenges-item-menu\"\r\n                                        >\r\n                                            <CheckPermission\r\n                                                permissions={[\r\n                                                    NEW_PERMISSIONS.VIEW_SUBMISSION,\r\n                                                ]}\r\n                                            >\r\n                                                <ActionItem\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        handleViewSubmissionDetails(\r\n                                                            submission\r\n                                                        );\r\n                                                    }}\r\n                                                    dataTest=\"view-submission-action\"\r\n                                                >\r\n                                                    View Submission\r\n                                                </ActionItem>\r\n                                            </CheckPermission>\r\n\r\n                                            <CheckPermission\r\n                                                permissions={[\r\n                                                    NEW_PERMISSIONS.VIEW_USER_PRACTIS_SET_REPORT,\r\n                                                ]}\r\n                                            >\r\n                                                <ActionItem\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        handleViewPractisSetReport(\r\n                                                            submission.user.id,\r\n                                                            submission.enrollmentId\r\n                                                        );\r\n                                                    }}\r\n                                                    dataTest=\"view-practis-set-report-action\"\r\n                                                >\r\n                                                    View Practis Set Report\r\n                                                </ActionItem>\r\n                                            </CheckPermission>\r\n\r\n                                            <CheckPermission\r\n                                                permissions={[\r\n                                                    NEW_PERMISSIONS.VIEW_USER_PERFORMANCE,\r\n                                                ]}\r\n                                            >\r\n                                                <ActionItem\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        handleViewProfile(\r\n                                                            submission.user.id\r\n                                                        );\r\n                                                    }}\r\n                                                    dataTest=\"view-profile-action\"\r\n                                                >\r\n                                                    View Profile\r\n                                                </ActionItem>\r\n                                            </CheckPermission>\r\n\r\n                                            {actionsHelper.canRestore(\r\n                                                submission\r\n                                            ) && (\r\n                                                <ActionItem\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        restoreSubmission([\r\n                                                            submission.id,\r\n                                                        ]);\r\n                                                    }}\r\n                                                    dataTest=\"restore-action\"\r\n                                                >\r\n                                                    Restore\r\n                                                </ActionItem>\r\n                                            )}\r\n                                            {actionsHelper.canArchive(\r\n                                                submission\r\n                                            ) && (\r\n                                                <ActionItem\r\n                                                    destructive={true}\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        archiveSubmission([\r\n                                                            submission.id,\r\n                                                        ]);\r\n                                                    }}\r\n                                                    dataTest=\"archive-action\"\r\n                                                >\r\n                                                    Archive\r\n                                                </ActionItem>\r\n                                            )}\r\n                                        </ActionButton>\r\n                                    ),\r\n                                },\r\n                            },\r\n                        ],\r\n                    },\r\n                }}\r\n            />\r\n        </MainWrapper>\r\n    );\r\n};\r\n\r\nconst ChallengeSubmissionsContainer = () => {\r\n    const history = useHistory();\r\n    const profile = useSelector(getProfileState);\r\n    const submissions = useSubmissionsState();\r\n    const loading = useSubmissionsState().loading;\r\n    const updatedSubmissions = useUpdatedSubmissionsState();\r\n\r\n    const searchSubmissions = useSearchChallengeSubmissionsService();\r\n    const archiveSubmissions = useArchiveSubmissionsService(false);\r\n    const restoreSubmissions = useRestoreSubmissionsService(false);\r\n    const updateAllSelectedSubmissions = useCheckAllSubmissionsService();\r\n    const updateSelectedSubmission = useCheckSingleSubmissionService();\r\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\r\n    const updatedLabels = useUpdatedLabelsState();\r\n    const updatedTeamsState = useUpdateTeamsState();\r\n\r\n    const actionsHelper = useSubmissionActionsHelper();\r\n\r\n    const labels = useLabelsState();\r\n\r\n    const selectedSubmissions = useMemo(\r\n        () => selectSelectedSubmissions(submissions),\r\n        [submissions]\r\n    );\r\n    const searchState = useSelector(getSearchState);\r\n\r\n    return (\r\n        <WithLabelsContext.Provider value={{ reducerName: 'submissions' }}>\r\n            <WithTeamsContext.Provider value={{ reducerName: 'submissions' }}>\r\n                <ChallengeSubmissions\r\n                    profile={profile}\r\n                    submissions={submissions.data}\r\n                    challenges={submissions.submissionChallenges}\r\n                    practisSets={submissions.submissionPractisSets}\r\n                    selectedSubmissionIds={submissions.checked}\r\n                    selectedSubmissions={selectedSubmissions}\r\n                    actionsHelper={actionsHelper}\r\n                    loading={loading || labels.saveLoading}\r\n                    searchSubmissions={searchSubmissions}\r\n                    updatedSubmissions={updatedSubmissions.data}\r\n                    history={history}\r\n                    selectedLabels={labels.selected}\r\n                    onArchiveSubmission={archiveSubmissions}\r\n                    onRestoreSubmission={restoreSubmissions}\r\n                    updateAllSelectedSubmissions={updateAllSelectedSubmissions}\r\n                    updateSelectedSubmission={updateSelectedSubmission}\r\n                    saveGlobalLabelFilters={saveGlobalLabelFilters}\r\n                    updatedLabels={updatedLabels}\r\n                    updatedTeams={updatedTeamsState.data}\r\n                    searchState={searchState}\r\n                />\r\n            </WithTeamsContext.Provider>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n\r\nexport default ChallengeSubmissionsContainer;","import { AppState } from '../../../../../store/reducers';\n\nexport type Scope = typeof DEFAULT_SCENARIOS_SCOPE | string;\n\nexport const DEFAULT_SCENARIOS_SCOPE = 'primary';\n\nexport const WithScenarioScopes: Partial<Record<keyof AppState, Scope[]>> = {\n    accuracyscore: ['assignFilters']\n};\n","import { createContext } from 'react';\n\nimport { AppState } from '../../../../../../store/reducers';\nimport { DEFAULT_SCENARIOS_SCOPE, Scope } from '../scopes';\n\nexport type WithScenariosContextProps<T = keyof AppState, K = Scope> = {\n    reducerName?: T;\n    scope?: K;\n};\n\nexport const WithScenariosContext = createContext<WithScenariosContextProps>({\n    reducerName: 'portableScenarios',\n    scope: DEFAULT_SCENARIOS_SCOPE,\n});\n","import { useContext } from 'react';\n\nimport { WithScenariosContextProps, WithScenariosContext } from './context';\n\nexport const useWithScenariosContext = (): WithScenariosContextProps => {\n    const context = useContext(WithScenariosContext);\n\n    if (!context) {\n        throw new Error(\n            'Cannot find WithTeams context provider. Please make a sure that you are located on the children of WithTeamsProvider'\n        );\n    }\n    return context;\n};\n","import { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\n\nimport { useWithScenariosContext } from '../context/useWithTeamsContext';\nimport { encapsulateAction } from '../../../../../../store/helpers/encapsulateAction';\nimport { ActionScenario } from '../actions';\nimport { DEFAULT_SCENARIOS_SCOPE, Scope, WithScenarioScopes } from '../scopes';\n\nexport const useEncapsulatedDispatch = () => {\n    const dispatch = useDispatch();\n    const { reducerName, scope } =  useWithScenariosContext();\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithScenariosContext.Provider props'\n        );\n    }\n\n    const targetScope = (scope || DEFAULT_SCENARIOS_SCOPE) as Scope;\n    if (\n        targetScope !== DEFAULT_SCENARIOS_SCOPE &&\n        !WithScenarioScopes[reducerName]?.includes(targetScope)\n    ) {\n        throw new Error(\n            `Undefined \"${targetScope}\" scope of portableTeams. Please check config (WithScenarioScopes) for \"${reducerName}\" reducer`\n        );\n    }\n\n    return useCallback(\n        <T extends ActionScenario>(action: T) => {\n            action._scope = targetScope;\n            dispatch(encapsulateAction(`accuracyscore/scenarios/`, action));\n        },\n        [dispatch, targetScope]\n    );\n};\n","import { useCallback } from 'react';\n\nimport { useSearchScenariosApi } from '../../../../../api';\nimport {\n    clearAction,\n    saveAction,\n    searchFailureAction,\n    searchSuccessAction,\n    clearPortableScenariosAction,\n    selectAllAction,\n    deselectAllAction,\n    selectScenariosAction,\n    searchStartAction,\n    resetSelectedAction,\n    resetAction,\n    selectMultipleScenariosAction,\n} from './actions';\n\nimport { useEncapsulatedDispatch } from './helpers/useEncapsulatedDispatch';\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\nimport { useDispatch } from 'react-redux';\nimport { createSearchLibraryParams } from '../../../../library/tools';\n\nexport const useSearchScenariosService = (\n    initialSearchParams?: SearchParams\n) => {\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n    const searchScenarios = useSearchScenariosApi();\n\n    return useCallback(\n        (searchParams: SearchParams) => {\n            const searchScenariosParams = createSearchLibraryParams(\n                initialSearchParams || searchParams\n            );\n\n            dispatch(searchStartAction());\n\n            return searchScenarios(searchScenariosParams)\n                .then(data => {\n                    dispatch(searchSuccessAction(data));\n                    return data;\n                })\n                .catch((e: ErrorResult) => {\n                    dispatch(searchFailureAction(e.message));\n                    showMessage(e.message, 'error');\n                });\n        },\n        [dispatch, searchScenarios, initialSearchParams, showMessage]\n    );\n};\n\n/**\n * @function useClearPortableScenarios\n * @returns { CallableFunction }\n */\nexport const useClearPortableScenarios = () => {\n    const dispatch = useDispatch();\n\n    /**\n     * @function callback\n     * @returns { void }\n     */\n    return useCallback(() => {\n        dispatch(clearPortableScenariosAction());\n    }, [dispatch]);\n}\n\nexport const useClearTeams = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(clearAction());\n    }, [dispatch]);\n};\n\nexport const useSaveScenarios = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(saveAction());\n    }, [dispatch]);\n};\n\nexport const useSelectTeams = () => {\n    const dispatch = useEncapsulatedDispatch();\n    return useCallback(\n        (ids: number) => {\n            dispatch(selectScenariosAction(ids));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSelectMultipleTeams = () => {\n    const dispatch = useEncapsulatedDispatch();\n    return useCallback(\n        (ids: number[]) => {\n   \n            dispatch(selectMultipleScenariosAction(ids));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSelectAllTeams = () => {\n    const dispatch = useEncapsulatedDispatch();\n   \n    return useCallback(\n        (processedTeams: number[]) => {\n      \n            dispatch(selectAllAction(processedTeams));\n        },\n        [dispatch]\n    );\n};\n\nexport const useDeselectAllScenarios = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(deselectAllAction());\n    }, [dispatch]);\n};\n\nexport const useResetSelectedTeams = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(resetSelectedAction());\n    }, [dispatch]);\n};\n\nexport const useResetTeams = () => {\n    const dispatch = useEncapsulatedDispatch();\n\n    return useCallback(() => {\n        dispatch(resetAction());\n    }, [dispatch]);\n};\n","import { Action } from 'redux';\n\nimport { ListResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { Scope } from './scopes';\nimport { Scenario } from '../../../../../constants/interfaces/Scenario';\n\n//region Types\ntype ReturnTypeScenarioAction<T extends (...args: any) => any> = ReturnType<T> &\n    ActionPayload;\n\ntype ActionPayload = { _scope?: Scope };\n\nexport type ActionScenario<T = any> = Action<T> & ActionPayload;\n\nexport type Actions =\n    | ReturnTypeScenarioAction<typeof selectAllAction>\n    | ReturnTypeScenarioAction<typeof deselectAllAction>\n    | ReturnTypeScenarioAction<typeof resetSelectedAction>\n    | ReturnTypeScenarioAction<typeof selectScenariosAction>\n    | ReturnTypeScenarioAction<typeof selectMultipleScenariosAction>\n    | ReturnTypeScenarioAction<typeof clearAction>\n    | ReturnTypeScenarioAction<typeof saveAction>\n    | ReturnTypeScenarioAction<typeof resetAction>;\n\n//endregion\n\nexport const searchStartAction = (): ActionScenario<'searchStartScenarios'> => ({\n    type: 'searchStartScenarios',\n});\n\nexport const searchSuccessAction = (\n    result: ListResult<Scenario>\n): ActionScenario<'searchSuccessScenarios'> & {\n    result: ListResult<Scenario>;\n} => ({\n    type: 'searchSuccessScenarios',\n    result,\n});\n\nexport const searchFailureAction = (\n    message: string\n): ActionScenario<'searchFailureScenarios'> & { message: string } => ({\n    type: 'searchFailureScenarios',\n    message,\n});\n\nexport const clearPortableScenariosAction = (): ActionScenario<'clearPortableScenarios'> => ({\n    type: 'clearPortableScenarios',\n});\n\nexport const selectAllAction = (\n    allScenarios: number[]\n): ActionScenario<'selectAllScenarios'> & { allScenarios: number[] } => ({\n    type: 'selectAllScenarios',\n    allScenarios,\n});\n\nexport const deselectAllAction = (): ActionScenario<'deselectAllScenarios'> => ({\n    type: 'deselectAllScenarios',\n});\n\nexport const resetSelectedAction = (): ActionScenario<'resetSelectedScenarios'> => ({\n    type: 'resetSelectedScenarios',\n});\n\nexport const selectScenariosAction = (\n    id: number\n): ActionScenario<'selectScenarios'> & { id: number } => ({\n    type: 'selectScenarios',\n    id,\n});\n\nexport const selectMultipleScenariosAction = (\n    ids: number[]\n): ActionScenario<'selectMultipleScenarios'> & { ids: number[] } => ({\n    type: 'selectMultipleScenarios',\n    ids,\n});\n\nexport const clearAction = (): ActionScenario<'clearScenarios'> => ({\n    type: 'clearScenarios',\n});\n\nexport const saveAction = (): ActionScenario<'saveScenarios'> => ({\n    type: 'saveScenarios',\n});\n\nexport const resetAction = (): ActionScenario<'resetScenarios'> => ({\n    type: 'resetScenarios',\n});\n","import { useSelector } from 'react-redux';\n\nimport {  useWithScenariosContext } from './context/useWithTeamsContext';\nimport { ScenariosState } from './reducer';\nimport { DEFAULT_LABELS_SCOPE } from '../../../../portableLabels/store/hors/withLabels/scopes';\n\nexport const useScenariosState = (): ScenariosState => {\n    const { reducerName, scope } = useWithScenariosContext();\n    const appState = useSelector(state => state);\n\n    if (reducerName === undefined) {\n        throw new Error(\n            '`Reducer name` cannot be an `undefined`. Please check WithTeamsContext.Provider props'\n        );\n    }\n\n    const labelsState: ScenariosState | undefined =\n        // @ts-ignore\n        // TODO implement `_teams?: TeamsState` field into each reducer (create general type)\n        // interface GeneralReducer {\n        //     ...\n        //     _teams?: StateWithTeams;\n        // }\n        appState['accuracyscore']?._scenarios?.[scope || DEFAULT_LABELS_SCOPE];\n        // appState[reducerName].data.items;\n        // console.log(appState)\n    \n    if (!labelsState) {\n        throw new Error(\n            `Wrap your reducer ${reducerName} via \"withScenariosReducer\" HOR`\n        );\n    }\n\n    return labelsState;\n};\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport Checkbox from '../../../ui/components/Checkbox';\nimport { handleToggleSelectedItems } from '../../../pages/ActionPages/NewUser/tools';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\n\nconst StyledTeamsList = styled.div`\n    overflow: auto;\n    height: 100%;\n`;\n\nconst TopSideList = styled.span``;\n\nconst GeneralList = styled.span``;\n\nconst TeamsItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 10px 0;\n`;\n\n\nconst TeamsItem = styled.div<{ disabled?: boolean }>`\n    color: ${props => props.theme.Colors.black};\n    cursor: ${props => props.disabled ? `default` : `pointer`};\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 12px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n`;\nexport const PortableScenariosList: FC<{\n    teams?: Scenario[];\n    selectedTeams: number[];\n    disabled?: boolean;\n    showDefaultMembers?: boolean\n    setTeamFilters?: (teamIds: number[]) => void;\n}> = ({ teams, selectedTeams, showDefaultMembers, setTeamFilters  }) => {\n    const isChecked = useCallback(\n        (setId?: number) => {\n            return !!selectedTeams && !!setId && selectedTeams.includes(setId);\n        },\n        [selectedTeams]\n    );\n\n\n\n    const isPartiallyChecked = useCallback(\n        (teamId?: number) => {\n            return (\n                !!selectedTeams &&\n                !!teamId &&\n                selectedTeams.includes(-Number(teamId))\n            );\n        },\n        [selectedTeams]\n    );\n\n    const changeHandler = (teamId?: number) => {\n        if (teamId && setTeamFilters) {        \n            setTeamFilters(handleToggleSelectedItems(selectedTeams, teamId));\n          \n        }\n    };\n\n    if (!teams || (teams && teams.length === 0)) return null;\n \n    const topListScenarios = teams.filter(\n        team => (team.id && selectedTeams.map(id => Math.abs(id)).includes(team.id))\n    );\n\n    const bottomListScenarios = teams.filter(\n        team =>  team.id && !selectedTeams.map(id => Math.abs(id)).includes(team.id)\n    );\n\n    const processedTopListTeams = topListScenarios;\n\n    \n    return (\n        <StyledTeamsList>\n            {topListScenarios.length > 0 && (\n                <TopSideList>\n                    {processedTopListTeams.map(team => {\n                        return (\n                            <TeamsItemWrapper key={team.id}>\n                                <Checkbox\n                                    size={12}\n                                    checked={\n                                        isChecked(team.id) ||\n                                        isPartiallyChecked(team.id)\n                                    }\n                                    partial={isPartiallyChecked(team.id)}\n                                    handleChange={() =>\n                                        changeHandler(team.id)\n                                    }\n                                />\n                                <TeamsItem\n                                    onClick={() => changeHandler(team.id)}\n                                >\n                                    {team.title}\n                                </TeamsItem>\n                            </TeamsItemWrapper>\n                        );\n                    })}\n                    {topListScenarios.length < teams.length && <TableDivider width=\"98%\" />}\n                </TopSideList>\n            )}\n            <GeneralList>\n                {bottomListScenarios.map(team => {\n                    return (\n                        <TeamsItemWrapper key={team.id}>\n                            <Checkbox\n                                size={12}\n                                checked={\n                                    isChecked(team.id) ||\n                                    isPartiallyChecked(team.id)\n                                }\n                                partial={isPartiallyChecked(team.id)}\n                                handleChange={() => changeHandler(team.id)}\n                            />\n                            <TeamsItem onClick={() => changeHandler(team.id)}>\n                                {team.title}\n                            </TeamsItem>\n                        </TeamsItemWrapper>\n                    );\n                })}\n            </GeneralList>\n        </StyledTeamsList>\n    );\n};","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport EmptyBox from '../../../ui/icons/EmptyBox';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\nimport NoSearchResult from '../../../ui/icons/NoSearchResult';\n\nconst StyledEmptyScenarios = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst StyledEmptyScenariosContent = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst IconWrapper = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoTeamsTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst EmptyScenarios: FC<{ loading?: boolean; isEmpty?: boolean }> = ({\n    loading,\n    isEmpty,\n}) => {\n    if (loading) {\n        return (\n            <StyledEmptyScenarios>\n                <Loading />\n            </StyledEmptyScenarios>\n        );\n    }\n\n    return (\n        <StyledEmptyScenarios>\n            <StyledEmptyScenariosContent>\n                <IconWrapper data-test={isEmpty ? 'no-scenarios-icon' : 'no-scenarios-found-icon'}>\n                    {isEmpty ? <EmptyBox /> : <NoSearchResult />}\n                </IconWrapper>\n                <NoTeamsTitle data-test={isEmpty ? 'no-scenarios-text' : 'no-scenarios-found-text'}>\n                    {isEmpty ? 'No Scenarios yet' : 'No Scenarios found'}\n                </NoTeamsTitle>\n            </StyledEmptyScenariosContent>\n        </StyledEmptyScenarios>\n    );\n};\n\nexport default EmptyScenarios;\n","import { FC, useCallback, useMemo, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { PortableScenariosList } from './PortableScenariosList';\nimport { Button } from '../../../ui/components/Button';\nimport { Variables } from '../../../theme/variables';\nimport EmptyScenarios from './EmptyScenarios';\nimport { sortBy } from 'lodash';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { TableSearchInput } from '../../../ui/components/table-wrapper/table-tools/table-search-input';\n\n//region Types\ntype Action = 'clear' | 'select';\n\nexport type PortableScenariosProps = {\n    teams?: ListResult<Scenario>;\n    selectedList: number[];\n    onSave?: () => void;\n    onSelectAll?: (processedTeams: number[]) => void;\n    onDeselectAll?: () => void;\n    onClearSelected?: () => void;\n    onSetSelected?: (teamIds: number[]) => void;\n    filtersTitle?: string;\n    disabled?: boolean;\n    loading?: boolean;\n    showSelectActions?: boolean;\n    showSearch?: boolean;\n    showSave?: boolean;\n    showDefaultMembers?: boolean;\n};\n//endregion\n\n//region Styles\nconst StyledCreateTeams = styled.div`\n    flex: 1;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n`;\n\nconst CreateTeamsBody = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n`;\n\nconst FiltersHeader = styled.div`\n    padding: 0 16px;\n    display: flex;\n    justify-content: space-between;\n    height: 24px;\n    align-items: center;\n    margin-bottom: 8px;\n    flex-shrink: 0;\n`;\n\nconst FiltersSavePanel = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n`;\n\nconst SelectActions = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n\n    margin-bottom: 8px;\n`;\n\nconst PlainAction = styled.span<{\n    disabled?: boolean;\n    color: string;\n    colorHover: string;\n    colorActive: string;\n}>`\n    cursor: pointer;\n    user-select: none;\n\n    ${props =>\n        props.disabled\n            ? css`\n                  color: ${props.theme.Colors.cloudyBlue};\n                  pointer-events: none;\n              `\n            : css`\n                  color: ${props.color};\n              `}\n\n    &:hover {\n        color: ${({ colorHover }) => colorHover};\n    }\n    &:active {\n        color: ${({ colorActive }) => colorActive};\n    }\n    &:not(:last-of-type) {\n        margin-right: 8px;\n    }\n`;\n\nconst SelectedCaption = styled.span`\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst FilterTitle = styled.p`\n    margin: 0;\n    font-size: 13px;\n    color: ${props => props.theme.Colors.black};\n    font-weight: 600;\n`;\n\nconst SearchWrapper = styled.div`\n    margin-bottom: 16px;\n`;\n\nconst StyledPlainActionsWrapper = styled.div`\n    padding-right: 15px;\n`;\n//endregion\n\nconst PortableScenarios: FC<PortableScenariosProps> = ({\n    teams,\n    selectedList,\n    disabled,\n    loading,\n    onSave,\n    onClearSelected,\n    onDeselectAll,\n    onSelectAll,\n    onSetSelected,\n    filtersTitle,\n    showSelectActions,\n    showSearch,\n    showDefaultMembers,\n    showSave = true,\n}) => {\n    const actionConfig: Record<\n        Action,\n        {\n            color: string;\n            colorHover: string;\n            colorActive: string;\n        }\n    > = {\n        clear: {\n            color: Variables.Colors.darkSkyBlue,\n            colorHover: Variables.Colors.lightBlue,\n            colorActive: Variables.Colors.windowsBlue,\n        },\n        select: {\n            color: Variables.Colors.darkSkyBlue,\n            colorHover: Variables.Colors.lightBlue,\n            colorActive: Variables.Colors.windowsBlue,\n        },\n    };\n\n    const clearHandler = useCallback(() => {\n        onClearSelected?.();\n    }, [onClearSelected]);\n\n    const [processedSelectedList, setProcessedSelectedList] = useState<\n        number[]\n    >([]);\n\n    const [searchTerm, setSearchTerm] = useState<string | undefined>(undefined);\n    const searchHandler = (value: string) => setSearchTerm(value);\n    const [, setAllSelected] = useState<boolean>(false);\n    \n    const processedTeams = useMemo(() => {\n        let result = teams?.items || [];\n        if (!!searchTerm) {\n            result = result.filter(\n                item =>\n                    item.title\n                        .toLowerCase()\n                        .indexOf(searchTerm.toLowerCase()) !== -1\n            );\n        }\n        if (result.length > 0) {\n            result = sortBy(result, t => t.title?.toLowerCase());\n            const processedDataIds = result.map(item => item.id!);   \n     \n            setProcessedSelectedList(\n                selectedList.filter(item =>\n                    processedDataIds.includes(Math.abs(item))\n                )\n            );\n        }\n        return result;\n    }, [teams?.items, searchTerm, selectedList]);\n\n    const isAllSelected = useMemo(\n        () => selectedList && selectedList.length === teams?.items?.length,\n        [selectedList, teams]\n    );\n\n    //TODO: [MM]: Refactor: Use `deSelectAllHandler` either for both `Select All` and `Unselect All` buttons and delete `clearHandler`\n    //or rename confusing `deSelectAllHandler` to `handleClickSelectAll` and get rid of `if (isAllSelected && onDeselectAll` statement.\n    const toggleAllHandler = useCallback(() => {\n        if (isAllSelected && onDeselectAll) {\n            onDeselectAll();\n            setAllSelected(false)\n        } else if (onSelectAll) {\n            setAllSelected(true)\n            onSelectAll(processedTeams.map(item => item.id!));\n        }\n    }, [onDeselectAll, onSelectAll, isAllSelected, processedTeams]);\n\n\n    const showNoItems = !teams?.count;\n    const showEmptyState = !processedTeams.length || loading;\n    const selectedTeamsLength = processedSelectedList.filter(id => id > 0)\n        .length;\n   \n    return (\n        <StyledCreateTeams>\n            <CreateTeamsBody>\n                {filtersTitle && (\n                    <FiltersHeader>\n                        <FilterTitle>{filtersTitle}</FilterTitle>\n                    </FiltersHeader>\n                )}\n                {showSearch && (\n                    <SearchWrapper>\n                        <TableSearchInput\n                            onChange={searchHandler}\n                            disabled={showNoItems}\n                            dataTest=\"scenarios-search\"\n                        />\n                    </SearchWrapper>\n                )}\n                {showSelectActions && !showNoItems && (\n                    <SelectActions>\n                        <div>\n                            <SelectedCaption data-test=\"scenarios-selected-text\">\n                                {selectedTeamsLength > 0\n                                    ? `${selectedTeamsLength} ${selectedTeamsLength > 1\n                                        ? ' Scenarios selected'\n                                        : ' Scenario selected'\n                                    }`\n                                    : 'No Scenarios selected'}\n                            </SelectedCaption>\n                        </div>\n                        <StyledPlainActionsWrapper>\n                            {isAllSelected ? (\n                                <PlainAction\n                                    disabled={\n                                        selectedList.length === 0 ||\n                                        showEmptyState\n                                    }\n                                    color={actionConfig.clear.color}\n                                    colorActive={actionConfig.clear.colorActive}\n                                    colorHover={actionConfig.clear.colorHover}\n                                    onClick={clearHandler}\n                                    data-test=\"scenarios-unselect-all\"\n                                >\n                                    Unselect All\n                                </PlainAction>\n                            ) : (\n                                <PlainAction\n                                    disabled={showEmptyState}\n                                    color={actionConfig.select.color}\n                                    colorActive={\n                                        actionConfig.select.colorActive\n                                    }\n                                    colorHover={actionConfig.select.colorHover}\n                                    onClick={toggleAllHandler}\n                                    data-test=\"scenarios-select-all\"\n                                >\n                                    Select All\n                                </PlainAction>\n                            )}\n                        </StyledPlainActionsWrapper>\n                    </SelectActions>\n                )}\n                {showEmptyState ? (\n                    <EmptyScenarios\n                        loading={loading}\n                        isEmpty={!teams?.count}\n                    />\n                ) : (\n                    <>\n                        <PortableScenariosList\n                            showDefaultMembers={showDefaultMembers}\n                            teams={processedTeams}\n                            selectedTeams={selectedList}\n                            disabled={disabled}\n                            setTeamFilters={onSetSelected}\n                        />\n                        {onSave && showSave && (\n                            <FiltersSavePanel>\n                                <Button\n                                    type={'button'}\n                                    label={'Save'}\n                                    action={() => onSave()}\n                                    height={'48px'}\n                                    width={'160px'}\n                                    dataTest=\"scenarios-save\"\n                                />\n                            </FiltersSavePanel>\n                        )}\n                    </>\n                )}\n            </CreateTeamsBody>\n        </StyledCreateTeams>\n    );\n};\n\nexport { PortableScenarios };\n\n","import { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { useSelector } from 'react-redux';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\n\ntype PortableScenariosBaseState = {\n    data: ListResult<Scenario>;\n    loading: boolean;\n};\n\nexport type PortableScenariosState = PortableScenariosBaseState;\n\nexport const initialState = {\n    data: {\n        items: [],\n        limit: 0,\n        offset: 0,\n        numberOfPages: 0,\n        count: 0,\n        lastUpdated: undefined,\n    },\n    loading: false,\n};\n\nexport const usePortableScenariosState = (): PortableScenariosBaseState => {\n    const appState = useSelector(state => state);\n    return appState.portableScenarios;\n};\n","import { FC, useEffect } from 'react';\n\nimport {\n    useClearTeams,\n    useDeselectAllScenarios,\n    useResetSelectedTeams,\n    useSaveScenarios,\n    useSearchScenariosService,\n    useSelectAllTeams,\n    useSelectMultipleTeams,\n} from '../store/hors/withTeams/services';\nimport { useScenariosState } from '../store/hors/withTeams/states';\nimport { PortableScenarios, PortableScenariosProps } from './PortableScenarios';\nimport { usePortableScenariosState } from '../store/states';\nimport { LIBRARY_STATUS } from '../../library/tools';\n\ntype Props = Pick<\n    PortableScenariosProps,\n    | 'filtersTitle'\n    | 'onSetSelected'\n    | 'showSelectActions'\n    | 'showSearch'\n    | 'showSave'\n> & {\n    fetchOnMount?: boolean;\n    resetSelectedOnUnmount?: boolean;\n    showDefaultMembers?: boolean;\n    selectedTeams?: number[];\n};\n\nconst initialSearchParams: any = {\n    searchTerm: '',\n    labelIDs: [],\n    filters: [{ field: 'status', value: [LIBRARY_STATUS.ACTIVE] }],\n    orderBy: {\n        field: 'title',\n        asc: false,\n    },\n    limit: 100,\n    offset: 0,\n};\n\nexport const PortableScenariosWithStore: FC<Props> = ({\n    onSetSelected,\n    selectedTeams,\n    fetchOnMount = true,\n    resetSelectedOnUnmount = true,\n    showDefaultMembers,\n    ...rest\n}) => {\n    const search = useSearchScenariosService();\n    const { selected } = useScenariosState();\n    const { data, loading } = usePortableScenariosState();\n    const clearHandler = useClearTeams();\n    const saveHandler = useSaveScenarios();\n    const select = useSelectMultipleTeams();\n    const selectAll = useSelectAllTeams();\n    const deselectAll = useDeselectAllScenarios();\n    const resetSelected = useResetSelectedTeams();\n\n    useEffect(() => {\n        if (fetchOnMount && !data.items.length) {\n            search(initialSearchParams);\n        }\n\n        return () => {\n            if (resetSelectedOnUnmount) {\n                resetSelected();\n            }\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n \n    useEffect(() => {\n        if (selectedTeams) {\n            selectAll(selectedTeams);\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return (\n        <PortableScenarios\n            teams={data}\n            selectedList={selected}\n            loading={loading}\n            onClearSelected={() => {\n                onSetSelected && onSetSelected([]);\n                clearHandler();\n            }}\n            onSave={saveHandler}\n            onSetSelected={(team) => { \n                onSetSelected && onSetSelected(team);\n                select(team);\n             }}\n            showDefaultMembers={showDefaultMembers}\n            onSelectAll={(teams) => { \n                onSetSelected && onSetSelected(teams);\n                selectAll(teams);\n             }}\n            onDeselectAll={deselectAll}\n            {...rest}\n        />\n    );\n};\n","import React, {\n    FC,\n    useCallback,\n    useEffect,\n    useState\n} from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../../theme/variables';\nimport { Button } from '../../../../ui/components/Button';\nimport { Fieldset } from '../../../../ui/components/Fieldset';\nimport Checkbox from '../../../../ui/components/Checkbox';\nimport { PortableLabelsWithStore } from '../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../portableLabels/store/hors/withLabels/services';\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\nimport { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\nimport { PortableTeamsWithStore } from '../../../portableTeams';\nimport { useTeamsState } from '../../../portableTeams/store/hors/withTeams/states';\nimport {\n    useDeselectAllTeams,\n    useSaveTeams,\n} from '../../../portableTeams/store/hors/withTeams/services';\nimport { PortableScenariosWithStore } from '../../../portableScenarios';\nimport { useScenariosState } from '../../../portableScenarios/store/hors/withTeams/states';\nimport { useDeselectAllScenarios, useSaveScenarios } from '../../../portableScenarios/store/hors/withTeams/services';\nimport { AccuracyTestSubmissionFilters } from '../../../../constants/interfaces/SubmissionSearchFilters';\n\n//region Styles\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    height: 100%;\n\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst StatusContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 152px;\n    background-color: inherit;\n`;\n\nconst StatusItem = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n//endregion\n\nexport const AccuracyTestsFilters: FC<{\n    filters: AccuracyTestSubmissionFilters;\n    onSuccessApply: (filters: AccuracyTestSubmissionFilters) => void;\n}> = ({\n    filters,\n    onSuccessApply,\n}) => {\n    const labels = useLabelsState();\n    const teams = useTeamsState();\n    const scenarios = useScenariosState();\n \n    const saveLabels = useSaveLabels();\n    const selectLabels = useSelectLabels();\n    const saveTeams = useSaveTeams();\n    const saveScenarios = useSaveScenarios();\n    \n    const [showArchived, setShowArchived] = useState<boolean | undefined>();\n    const ifPreselectedLabelsChanged = useIfChanged(filters.labelIds);\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(filters.labelIds);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        filters.labelIds,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    const onApplyHandler = useCallback(() => {\n        saveLabels();\n        saveTeams();\n        saveScenarios();\n        onSuccessApply({\n            showArchived: showArchived ?? filters.showArchived,\n            labelIds: labels.selected,\n            teamIds: teams.selected,\n            scenarioIds: scenarios.selected\n        });\n    }, [\n        saveLabels,\n        saveTeams,\n        saveScenarios,\n        showArchived,\n        labels.selected,\n        teams.selected,\n        scenarios.selected,\n        onSuccessApply,\n        filters\n    ]);\n\n    const totalFiltersSelected =\n        labels &&\n        teams.selected.length + scenarios.selected.length +\n            labels.selected.filter(id => id > 0).length +\n            ((showArchived ?? filters.showArchived) ? 1 : 0);\n\n    const deselectTeams = useDeselectAllTeams();\n    const deselectLabels = useDeselectAllLabels();\n    const deselectScenarios = useDeselectAllScenarios();\n\n    const onClearHandler = () => {\n        setShowArchived(false);\n        deselectTeams();\n        deselectLabels();\n        deselectScenarios();\n    };\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Status'} dataTest=\"status-section-title\">\n                    <StatusContainer>\n                        <StatusItem data-test=\"status-item-container\">\n                            <Checkbox\n                                checked={showArchived ?? filters.showArchived}\n                                handleChange={e => {\n                                    setShowArchived(e.target.checked);\n                                }}\n                                label=\"Archived\"\n                                border={Variables.Colors.steelGrey}\n                                size={12}\n                                fontColor={Variables.Colors.black}\n                                dataTest=\"archived-checkbox\"\n                            />\n                        </StatusItem>\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Scenarios'} dataTest=\"scenarios-section-title\">\n                    <TeamsContainer>\n                        <PortableScenariosWithStore\n                            showSearch\n                            showSelectActions\n                            showSave={false}\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Teams'} dataTest=\"teams-section-title\">\n                    <TeamsContainer>\n                        <PortableTeamsWithStore\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant={'inverse'}\n                        width={'122px'}\n                        action={() => onClearHandler()}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={onApplyHandler}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Accuracy = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 49 48\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M3.5 4.7a1.8 1.8 0 1 0 0 3.6h4.999v15.011c-2.97 1.973-4.64 5.305-4.63 9.002v9.137a1.8 1.8 0 0 0 1.544 1.782l.427.062h.001l.008.001c1.405.204 2.787.405 4.38.405 1.507 0 2.832-.188 4.147-.374l.008-.001.65-.092a1.8 1.8 0 0 0 1.555-1.783v-8.92c0-.394-.019-.785-.057-1.172a35.32 35.32 0 0 0 23.311-1.934 1.8 1.8 0 0 0 1.066-1.644V8.3h5.87a1.8 1.8 0 0 0 0-3.6H3.5zm11.822 22.545c-.762-1.457-1.85-2.71-3.223-3.63V16.26h25.21v10.33a31.718 31.718 0 0 1-21.987.655zm1.174 3.794zM8.8 23.119h-.001V8 23.12zm-.001.355zm-.3.2c-2.776 1.926-4.34 5.104-4.33 8.638v9.138a1.5 1.5 0 0 0 1.287 1.485l.427.062c.706.102 1.4.203 2.114.279-.714-.076-1.407-.177-2.112-.279l-.428-.062A1.5 1.5 0 0 1 4.17 41.45v-9.138c-.01-3.533 1.553-6.711 4.329-8.637v-.001zm15.361 5.485a32.019 32.019 0 0 0 13.749-2.367V15.96v10.832a32.021 32.021 0 0 1-13.749 2.367zM46.871 5.003A1.524 1.524 0 0 0 46.78 5H3.5h43.28l.091.003zM37.31 12.66h-25.21V8.3h25.21v4.36zm-25.51.3h25.81V8v4.96h-25.81zm-1.726 13.277c1.956 1.214 3.216 3.535 3.216 6.293v7.615c-1.061.146-1.998.255-3.06.255a16.177 16.177 0 0 1 .001 0c1.062 0 1.998-.108 3.06-.255V32.53c0-2.758-1.26-5.08-3.216-6.294zM7.47 32.305c-.007-2.392.97-4.417 2.617-5.703 1.76 1.18 2.903 3.343 2.903 5.928v7.353c-.952.128-1.805.217-2.76.217-.954 0-1.812-.086-2.76-.212V32.305z\" fill=\"currentColor\"/>\n            </svg>\n        );\n    }\n);\n\nexport default Accuracy;\n","import { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { isEmpty as lodashIsEmpty, difference } from 'lodash';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport {\n    useAccuracyScoreState,\n    useUpdatedSubmissionsState,\n    selectSelectedAccuracyScores,\n} from '../store/states';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { SubmissionV2 } from '../../../constants/interfaces/Reviews';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../constants/interfaces/filters';\nimport {\n    useCheckAllAccuracyScoresService,\n    useSearchAccuracyScoreService,\n    useCheckSingleAccuracyScoreService,\n    useArchiveSubmissionsService,\n    useRestoreSubmissionsService,\n} from '../store/services';\nimport { useSelector } from 'react-redux';\nimport { AccuracyScoreActionsHelper } from '../tools';\nimport styled from 'styled-components';\nimport { formatDate } from '../../../helpers/functions/date-convert';\nimport { useHistory } from 'react-router';\nimport { History } from 'history';\nimport ROUTES from '../../../routes/routes';\n\nimport {\n    UpdatedLabelsState,\n    useLabelsState,\n    useUpdatedLabelsState,\n} from '../../labels/store/states';\nimport { LoadingComponent } from '../../../ui/components/LoadingCopmonent';\nimport { ActionButton, ActionItem } from '../../../ui/components/ActionButton';\nimport { CheckPermission } from '../../permissions';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport { useHandleAccessPage } from '../../../helpers/hooks/usePagePermissions';\nimport { UserProfile } from '../../../constants/interfaces/User';\nimport { usePermissionsState } from '../../permissions/store/state';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport { Popup } from '../../../ui/components/Popup';\nimport FilterByHandler from '../../../ui/components/Filters/FilterByHandler';\nimport { useSaveUserFiltersService } from '../../labels/store/services';\nimport { Team } from '../../../constants/interfaces/Team';\nimport { useUpdateTeamsState } from '../../teams/store/states';\nimport { WithLabelsContext } from '../../portableLabels';\nimport { WithTeamsContext } from '../../portableTeams';\nimport { AccuracyScoreActions, useAccuracyScoreActionsHelper } from '../tools';\nimport { useSessionEffect } from '../../common';\nimport SubmissionsNavigationContainer from '../components/SubmissionsNavigation';\nimport { AccuracyTestsFilters } from '../components/Filters/AccuracyTestFilters';\nimport AvatarPlaceholder from '../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport Accuracy from '../../../ui/icons/Accuracy';\nimport { getSearchState } from '../../searchState/store/reducer';\nimport { isEmpty } from '../../../helpers/functions/object-helpers';\nimport { SearchStateInterface } from '../../searchState/store/states';\nimport { SEARCH_STATE } from '../../searchState/constants';\nimport { TableWrapper } from '../../../ui/components/table-wrapper';\nimport { useStyles } from './styles';\nimport { useOrderBy } from '../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useTableStateHelper } from '../../../ui/components/table-wrapper/helper';\nimport TableTitleOverflowText from '../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\nimport { AccuracyTestSubmissionFilters } from '../../../constants/interfaces/SubmissionSearchFilters';\nimport { useUpdateSubmissionStatusBulkActionService } from '../services/SubmissionsBulkActionsService';\nimport { useClearPortableScenarios } from '../../portableScenarios/store/hors/withTeams/services';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\n\nconst Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 8px;\n`;\n\nconst AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n\n    & + span {\n        transform: translateY(3px);\n        display: inline-block;\n    }\n`;\n\nconst StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    min-width: 200px;\n`;\n\nconst AccuracyScores: FC<{\n    profile?: UserProfile;\n    accuracyScores?: ListResult<SubmissionV2>;\n    searchSubmissions(\n        searchParams: SearchParams,\n        filters: AccuracyTestSubmissionFilters\n    ): void;\n    loading?: boolean;\n    updatedSubmissions?: number[];\n    history: History<any>;\n    selectedLabels?: number[];\n    onArchiveSubmission?(submissionIds: number[]): Promise<void>;\n    onRestoreSubmission?(submissionIds: number[]): Promise<void>;\n    selectedSubmissionIds?: number[];\n    selectedAccuracyScores?: SubmissionV2[];\n    actionsHelper: AccuracyScoreActionsHelper;\n    updateAllSelectedSubmissions(\n        submissionIds: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedSubmission(submissionId: number): void;\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\n    updatedLabels?: UpdatedLabelsState;\n    updatedTeams?: Team;\n    searchState?: SearchStateInterface;\n}> = ({\n    profile,\n    accuracyScores,\n    searchSubmissions,\n    loading,\n    updatedSubmissions,\n    history,\n    selectedLabels,\n    onArchiveSubmission,\n    selectedSubmissionIds,\n    selectedAccuracyScores,\n    actionsHelper,\n    updateAllSelectedSubmissions,\n    updateSelectedSubmission,\n    onRestoreSubmission,\n    saveGlobalLabelFilters,\n    searchState,\n}) => {\n    const classes = useStyles();\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [],\n        orderBy: {},\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const useableParams: SearchParams =\n        !isEmpty(searchState) &&\n        !!searchState?.params &&\n        searchState?.key === SEARCH_STATE.ACCURACY.name\n            ? searchState?.params\n            : initialSearchParams;\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setOffset,\n        refreshSearchParams,\n    } = useSearchParamsState(useableParams);\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [labelsOpen, setLabelsOpen] = useState<number | undefined>();\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n    const initialFilters = searchParams.customFilters as AccuracyTestSubmissionFilters ?? {\n        showArchived: false,\n        teamIds: [],\n        scenarioIds: [],\n        labelIds: selectedLabels ?? [],\n    };\n    const [filters, setFilters] = useState<AccuracyTestSubmissionFilters>(initialFilters);\n\n    const canAccessPage = useHandleAccessPage();\n    const clearPortableScenarios = useClearPortableScenarios();\n\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const isCheckboxPartiallySelected =\n        accuracyScores &&\n        accuracyScores.items &&\n        selectedSubmissionIds &&\n        selectedSubmissionIds.length < accuracyScores.items.length;\n\n    const refreshData = useCallback(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchSubmissions(searchParams, filters);\n        setLastRefreshed(new Date());\n        updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\n        setIsSelectAll(false);\n    }, [\n        searchParams,\n        initialOffset,\n        searchSubmissions,\n        updateAllSelectedSubmissions,\n        isCheckboxPartiallySelected,\n        filters,\n    ]);\n\n    const handleViewSubmissionDetails = (submissionId?: number | string) => {\n        if (!submissionId) return;\n\n        history.push(\n            ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.SINGLE.replace(\n                ':submissionId',\n                submissionId.toString()\n            ),\n            {\n                useGoBack: true,\n            }\n        );\n    };\n\n    const handleViewPractisSetReport = (\n        userId: number,\n        enrollmentId: number\n    ) => {\n        history.push(\n            ROUTES.TRAINEE_DETAILS\n                .replace(\n                    ':userId',\n                    userId.toString()\n                )\n                .replace(\n                    ':enrollmentId',\n                    enrollmentId.toString()\n                ),\n            { useGoBack: true }\n        );\n    };\n\n    const permissions = usePermissionsState();\n\n    const handleViewProfile = (userId: number) => {\n        if (permissions.includes(NEW_PERMISSIONS.VIEW_USER_PERFORMANCE)) {\n            history.push(\n                ROUTES.USER_PERFORMANCE.replace(':userId', userId.toString()),\n                { useGoBack: true }\n            );\n        } else {\n            return;\n        }\n    };\n\n    const archiveSubmission = (submissionIds: number[]) => {\n        if (!submissionIds || (!!submissionIds && !submissionIds.length))\n            return;\n\n        onArchiveSubmission && onArchiveSubmission(submissionIds);\n    };\n\n    const restoreSubmission = (submissionIds: number[]) => {\n        if (!submissionIds || (!!submissionIds && !submissionIds.length))\n            return;\n        onRestoreSubmission && onRestoreSubmission(submissionIds);\n    };\n\n    const updateAllSubmissionsCheck = useCallback(\n        (checked: boolean) => {\n            const submissionIds =\n                (accuracyScores &&\n                    accuracyScores.items.map((accuracyScore: SubmissionV2) =>\n                        Number(accuracyScore.id)\n                    )) ||\n                [];\n            updateAllSelectedSubmissions(\n                submissionIds,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [\n            accuracyScores,\n            isCheckboxPartiallySelected,\n            updateAllSelectedSubmissions,\n        ]\n    );\n\n    const handleSubmissionCheck = (e: any, accuracyScore: SubmissionV2) => {\n        e.stopPropagation();\n        if (!!accuracyScore.id) {\n            updateSelectedSubmission(accuracyScore.id);\n        }\n    };\n    const updateSubmissionStatusBulkActionService =\n        useUpdateSubmissionStatusBulkActionService(\n            'SCENARIO',\n            searchParams,\n            filters,\n            accuracyScores?.count ?? 0,\n            refreshData\n        );\n\n    const archiveSubmissions = useCallback(() => {\n        if (isSelectAll) {\n            updateSubmissionStatusBulkActionService('Archive');\n        } else {\n            if (\n                !selectedSubmissionIds ||\n                (!!selectedSubmissionIds && !selectedSubmissionIds.length) ||\n                !onArchiveSubmission\n            ) {\n                return;\n            }\n\n            onArchiveSubmission(selectedSubmissionIds).then((result: any) => {\n                if (!!result) {\n                    updateAllSelectedSubmissions(\n                        selectedSubmissionIds,\n                        false,\n                        false\n                    );\n                }\n            });\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        selectedSubmissionIds,\n        onArchiveSubmission,\n        updateAllSelectedSubmissions,\n    ]);\n\n    const restoreSubmissions = useCallback(() => {\n        if (isSelectAll) {\n            updateSubmissionStatusBulkActionService('Restore');\n        } else {\n            if (\n                !selectedSubmissionIds ||\n                (!!selectedSubmissionIds && !selectedSubmissionIds.length) ||\n                !onRestoreSubmission\n            ) {\n                return;\n            }\n\n            onRestoreSubmission(selectedSubmissionIds).then((result: any) => {\n                if (!!result) {\n                    updateAllSelectedSubmissions(\n                        selectedSubmissionIds,\n                        false,\n                        false\n                    );\n                }\n            });\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        selectedSubmissionIds,\n        onRestoreSubmission,\n        updateAllSelectedSubmissions,\n    ]);\n\n    const handleApplyFilters = useCallback(\n        (newFilters: AccuracyTestSubmissionFilters) => {\n            saveGlobalLabelFilters(newFilters.labelIds);\n            setFilters(newFilters);\n        },\n        [saveGlobalLabelFilters]\n    );\n\n    const orderBy = searchParams.orderBy;\n    const sbFirstName = useOrderBy('user_name', orderBy, setOrderBy);\n    const sbPractisSetName = useOrderBy('pset_name', orderBy, setOrderBy);\n    const sbScenarioTitle = useOrderBy('scenario_title', orderBy, setOrderBy);\n    const sbScore = useOrderBy('accuracy', orderBy, setOrderBy);\n    const sbSubmittedAt = useOrderBy('submission_date', orderBy, setOrderBy);\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(undefined);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const appliedFiltersCount =\n        filters.labelIds.length +\n        filters.teamIds.length +\n        filters.scenarioIds.length +\n        (filters.showArchived ? 1 : 0);\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: appliedFiltersCount,\n        itemsCount: accuracyScores?.items.length || 0,\n        filtersAreAlwaysEnabled: true,\n    });\n\n    const bulkActions = useMemo(\n        () => actionsHelper.getBulkActions(selectedAccuracyScores),\n        [selectedAccuracyScores, actionsHelper]\n    );\n\n    useSessionEffect(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchSubmissions(searchParams, filters);\n    }, [searchSubmissions, searchParams, filters]);\n\n    useEffect(() => {\n        if (updatedSubmissions) refreshSearchParams();\n    }, [updatedSubmissions, refreshSearchParams]);\n\n    useEffect(() => {\n        if (\n            selectedLabels &&\n            (selectedLabels.length !== filters.labelIds.length ||\n                difference(selectedLabels, filters.labelIds).length > 0)\n        ) {\n            setFilters({\n                ...filters,\n                labelIds: selectedLabels,\n            });\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [selectedLabels, setFilters]);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setOffset(initialOffset);\n        } else if (pageIndex === 1) {\n            setOffset(0);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [pageIndex]);\n\n    useEffect(() => {\n        return () => {\n            updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\n            clearPortableScenarios();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [accuracyScores]);\n\n    useEffect(() => {\n        if (\n            selectedAccuracyScores?.length &&\n            selectedAccuracyScores.length === accuracyScores?.count\n        ) {\n            setIsSelectAll(true);\n        }\n    }, [accuracyScores?.count, selectedAccuracyScores]);\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_SUBMISSION]);\n    }, [canAccessPage]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (offset: number) => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onClearSelection\n     * @returns { void }\n     */\n    const onClearSelection = () => {\n        updateAllSelectedSubmissions([], true, isCheckboxPartiallySelected);\n        setIsSelectAll(false);\n    };\n\n    /**\n     * @function onSelectAll\n     * @returns { void }\n     */\n    const onSelectAll = () => {\n        updateAllSubmissionsCheck(true);\n        setIsSelectAll(true);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        setIsSelectAll(false);\n        updateAllSubmissionsCheck(event.target.checked);\n    };\n\n    const isMasterCheckBoxChecked =\n        !!selectedSubmissionIds && !!selectedSubmissionIds.length;\n\n    const isMasterCheckBoxDisabled =\n        !accuracyScores || (accuracyScores && accuracyScores.items.length < 1);\n\n    /**\n     * @functiononRowClick\n     * @param { SubmissionV2 } accuracyScore\n     * @returns { void }\n     */\n    const onRowClick = (accuracyScore: SubmissionV2) => {\n        handleViewSubmissionDetails(accuracyScore.id);\n    };\n\n    /**\n     * @function checkIsRowChecked\n     * @param { SubmissionV2 } challenge\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (accuracyScore: SubmissionV2): boolean =>\n        !!selectedSubmissionIds &&\n        !!accuracyScore.id &&\n        selectedSubmissionIds.includes(accuracyScore.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { SubmissionV2 } accuracyScore\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, accuracyScore: SubmissionV2) => {\n        setIsSelectAll(false);\n        handleSubmissionCheck(event, accuracyScore);\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { SubmissionV2 } accuracyScore\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (accuracyScore: SubmissionV2): boolean => {\n        return labelsOpen === accuracyScore.id;\n    };\n\n    return (\n        <MainWrapper\n            subTitle=\"Feed\"\n            tabs={<SubmissionsNavigationContainer dataTest=\"accuracy-nav\" />}\n            hideDivider={!!selectedAccuracyScores?.length}\n            htmlPageTitle=\"Feed - Practis\"\n            dataTest=\"accuracy\"\n        >\n            {loading && !isSelectAll && <LoadingComponent />}\n            <TableWrapper\n                tableStates={tableStates}\n                data={accuracyScores?.items}\n                cornered={selectedLabels && !!selectedLabels.length}\n                shouldHideTableDivider={!!selectedAccuracyScores?.length}\n                selectedLabels={selectedLabels}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'accuracy-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: accuracyScores?.count ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            tableStates.showNoFilterResultsState,\n                        dataTest: 'accuracy-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        dataTest: 'accuracy-search-input',\n                    },\n                    isSelectedItemOptionsVisible:\n                        !lodashIsEmpty(selectedAccuracyScores) &&\n                        !lodashIsEmpty(accuracyScores),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedAccuracyScores?.length,\n                        totalCount: accuracyScores?.count,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: onClearSelection,\n                        onSelectAll: onSelectAll,\n                        bulkActionsConfig: {\n                            disabled: bulkActions.areBulkActionsDisabled(),\n                            disabledLabel: bulkActions.areItemsEmpty()\n                                ? undefined\n                                : \"Bulk actions can't be applied\",\n                            archivePermissions: bulkActions.isBulkActionVisible(\n                                AccuracyScoreActions.ARCHIVE\n                            )\n                                ? [NEW_PERMISSIONS.ARCHIVE_SUBMISSION]\n                                : [],\n                            isArchiveDisabled: bulkActions.isBulkActionDisabled(\n                                AccuracyScoreActions.ARCHIVE\n                            ),\n                            onArchiveSubmissionsSubmit: archiveSubmissions,\n                            restorePermissions: bulkActions.isBulkActionVisible(\n                                AccuracyScoreActions.RESTORE\n                            )\n                                ? [NEW_PERMISSIONS.RESTORE_SUBMISSION]\n                                : [],\n                            isRestoreDisabled: bulkActions.isBulkActionDisabled(\n                                AccuracyScoreActions.RESTORE\n                            ),\n                            onRestoreSubmissionsSubmit: restoreSubmissions,\n                            isSelectAll: isSelectAll,\n                            totalCount: accuracyScores?.count,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <AccuracyTestsFilters\n                                        filters={filters}\n                                        onSuccessApply={newFilters => {\n                                            handleApplyFilters(newFilters);\n                                            hide();\n                                        }}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={256}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={appliedFiltersCount}\n                                        disabled={\n                                            // tableStates.disableFilters\n                                            false\n                                        }\n                                        dataTest=\"accuracy-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && accuracyScores?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: Accuracy,\n                        text: 'No Accuracy Tests Yet',\n                        dataTest: 'accuracy-no-entries',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: <>Accuracy Tests</>,\n                        dataTest: 'accuracy-no-search-results',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: isMasterCheckBoxChecked,\n                        disabled: isMasterCheckBoxDisabled,\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'accuracy-master-checkbox',\n                    },\n                    columns: [\n                        {\n                            title: 'Users',\n                            width: 24,\n                            ...sbFirstName,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'accuracy-users-column',\n                        },\n                        {\n                            title: 'Accuracy Test',\n                            width: 14,\n                            ...sbScore,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'accuracy-test-column',\n                        },\n                        {\n                            title: 'Submitted',\n                            width: 12,\n                            ...sbSubmittedAt,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'accuracy-submitted-column',\n                        },\n                        {\n                            title: 'Scenario',\n                            width: 10,\n                            ...sbScenarioTitle,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'accuracy-scenario-column',\n                        },\n\n                        {\n                            title: 'Practis Set',\n                            width: 15,\n                            ...sbPractisSetName,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'accuracy-practis-set-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n                    rowConfig: {\n                        onRowClick: onRowClick,\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        getLabelTagsProps: (accuracyScore: SubmissionV2) => ({\n                            selectedLabels: accuracyScore.userLabels ?? [],\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_CHALLENGE_LABEL,\n                            ],\n                        }),\n                        dataTest: 'accuracy-item',\n                        cells: [\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                cellClassName: classes.customTableCellStyle,\n                                getCustomFieldComponent: (\n                                    accuracyScore: SubmissionV2\n                                ) => (\n                                    <StyledFirstTableContent>\n                                        <AvatarTile>\n                                            <Avatar\n                                                className=\"avatar\"\n                                                customProfile={{\n                                                    firstName:\n                                                        accuracyScore.user\n                                                            .firstName,\n                                                    lastName:\n                                                        accuracyScore.user\n                                                            .lastName,\n                                                    picture:\n                                                        accuracyScore.user\n                                                            .imageUrl,\n                                                    status: accuracyScore.user\n                                                        .status,\n                                                }}\n                                                size=\"sm\"\n                                                dataTest=\"accuracy-item-user-avatar\"\n                                            />\n                                            <TableTitleOverflowText\n                                                isCurrent={\n                                                    accuracyScore.user &&\n                                                    profile &&\n                                                    accuracyScore.user.id ===\n                                                        profile.id\n                                                }\n                                                dataTest=\"accuracy-item-user-full-name\"\n                                            >\n                                                {accuracyScore.user &&\n                                                    accuracyScore.user\n                                                        .firstName +\n                                                        ' ' +\n                                                        accuracyScore.user\n                                                            .lastName}\n                                            </TableTitleOverflowText>\n                                        </AvatarTile>\n                                    </StyledFirstTableContent>\n                                ),\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    accuracyScore: SubmissionV2\n                                ) => !accuracyScore.accuracy?.accuracy,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    renderTitle: (\n                                        accuracyScore: SubmissionV2\n                                    ) =>\n                                        `${Math.floor(\n                                            accuracyScore.accuracy.accuracy *\n                                                100\n                                        )}%`,\n                                    dataTest: 'accuracy-item-score',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    accuracyScore: SubmissionV2\n                                ) => !accuracyScore.createdAt,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    renderTitle: (\n                                        accuracyScore: SubmissionV2\n                                    ) => formatDate(accuracyScore.createdAt),\n                                    dataTest: 'accuracy-item-submission-date',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                cellClassName: classes.minWidthTableCell,\n                                shouldShowEmptyCell: (\n                                    accuracyScore: SubmissionV2\n                                ) => !accuracyScore.scenario?.title,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    className: classes.minWidthTableCell,\n                                    renderTitle: (\n                                        accuracyScore: SubmissionV2\n                                    ) => accuracyScore.scenario?.title,\n                                    dataTest: 'accuracy-item-scenario',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    accuracyScore: SubmissionV2\n                                ) => !accuracyScore.practisSet?.name,\n                                fieldProps: {\n                                    isOverFlowText: true,\n                                    renderTitle: (\n                                        accuracyScore: SubmissionV2\n                                    ) => accuracyScore.practisSet?.name,\n                                    dataTest: 'accuracy-item-practis-set',\n                                },\n                            },\n                            {\n                                fieldType: 'LABEL_TAGS',\n                                fieldProps: {\n                                    getLabelTagsProps: (\n                                        accuracyScore: SubmissionV2\n                                    ) => ({\n                                        open: labelsOpen === accuracyScore.id,\n                                        toggleOpen: () =>\n                                            handleToggleLabels(\n                                                accuracyScore.id\n                                            ),\n                                        selectedLabels:\n                                            accuracyScore.userLabels ?? [],\n                                        dataTest: 'accuracy-item-labels',\n                                    }),\n                                },\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (\n                                        accuracyScore: SubmissionV2\n                                    ) => (\n                                        <ActionButton\n                                            customWidth={224}\n                                            isHidden={\n                                                !!selectedAccuracyScores?.length\n                                            }\n                                            dataTest=\"accuracy-item-menu\"\n                                        >\n                                            <CheckPermission\n                                                permissions={[\n                                                    NEW_PERMISSIONS.VIEW_SUBMISSION,\n                                                ]}\n                                            >\n                                                <ActionItem\n                                                    onClick={e => {\n                                                        e.stopPropagation();\n                                                        handleViewSubmissionDetails(\n                                                            accuracyScore.id\n                                                        );\n                                                    }}\n                                                    dataTest=\"view-accuracy-test-action\"\n                                                >\n                                                    View Accuracy Test\n                                                </ActionItem>\n                                            </CheckPermission>\n\n                                            <CheckPermission\n                                                permissions={[\n                                                    NEW_PERMISSIONS.VIEW_USER_PRACTIS_SET_REPORT,\n                                                ]}\n                                            >\n                                                <ActionItem\n                                                    onClick={e => {\n                                                        e.stopPropagation();\n                                                        handleViewPractisSetReport(\n                                                            accuracyScore.user\n                                                                .id,\n                                                            accuracyScore.enrollmentId\n                                                        );\n                                                    }}\n                                                    dataTest=\"view-practis-set-report-action\"\n                                                >\n                                                    View Practis Set Report\n                                                </ActionItem>\n                                            </CheckPermission>\n\n                                            <CheckPermission\n                                                permissions={[\n                                                    NEW_PERMISSIONS.VIEW_USER_PERFORMANCE,\n                                                ]}\n                                            >\n                                                <ActionItem\n                                                    onClick={e => {\n                                                        e.stopPropagation();\n                                                        handleViewProfile(\n                                                            accuracyScore.user\n                                                                .id\n                                                        );\n                                                    }}\n                                                    dataTest=\"view-profile-action\"\n                                                >\n                                                    View Profile\n                                                </ActionItem>\n                                            </CheckPermission>\n\n                                            {actionsHelper.canArchive(\n                                                accuracyScore\n                                            ) && (\n                                                <ActionItem\n                                                    destructive={true}\n                                                    onClick={e => {\n                                                        e.stopPropagation();\n                                                        archiveSubmission([\n                                                            accuracyScore.id,\n                                                        ]);\n                                                    }}\n                                                    dataTest=\"archive-action\"\n                                                >\n                                                    Archive\n                                                </ActionItem>\n                                            )}\n                                            {actionsHelper.canRestore(\n                                                accuracyScore\n                                            ) && (\n                                                <ActionItem\n                                                    onClick={e => {\n                                                        e.stopPropagation();\n                                                        restoreSubmission([\n                                                            accuracyScore.id,\n                                                        ]);\n                                                    }}\n                                                    dataTest=\"restore-action\"\n                                                >\n                                                    Restore\n                                                </ActionItem>\n                                            )}\n                                        </ActionButton>\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nconst AccuracyScoreContainer = () => {\n    const history = useHistory();\n    const profile = useSelector(getProfileState);\n    const accuracyScores = useAccuracyScoreState();\n    const loading = useAccuracyScoreState().loading;\n    const updatedSubmissions = useUpdatedSubmissionsState();\n\n    const searchAccuracyScores = useSearchAccuracyScoreService();\n    const archiveSubmissions = useArchiveSubmissionsService(true);\n\n    const restoreSubmissions = useRestoreSubmissionsService(true);\n    const updateAllSelectedSubmissions = useCheckAllAccuracyScoresService();\n    const updateSelectedSubmission = useCheckSingleAccuracyScoreService();\n\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const updatedLabels = useUpdatedLabelsState();\n    const updatedTeamsState = useUpdateTeamsState();\n    const actionsHelper = useAccuracyScoreActionsHelper();\n\n    const labels = useLabelsState();\n    const searchState = useSelector(getSearchState);\n\n    const selectedAccuracyScores = useMemo(\n        () => selectSelectedAccuracyScores(accuracyScores),\n        [accuracyScores]\n    );\n\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'submissions' }}>\n            <WithTeamsContext.Provider value={{ reducerName: 'submissions' }}>\n                <AccuracyScores\n                    profile={profile}\n                    accuracyScores={accuracyScores.data}\n                    selectedSubmissionIds={accuracyScores.checked}\n                    selectedAccuracyScores={selectedAccuracyScores}\n                    actionsHelper={actionsHelper}\n                    loading={loading || labels.saveLoading}\n                    searchSubmissions={searchAccuracyScores}\n                    updatedSubmissions={updatedSubmissions.data}\n                    history={history}\n                    selectedLabels={labels.selected}\n                    onArchiveSubmission={archiveSubmissions}\n                    onRestoreSubmission={restoreSubmissions}\n                    updateAllSelectedSubmissions={updateAllSelectedSubmissions}\n                    updateSelectedSubmission={updateSelectedSubmission}\n                    saveGlobalLabelFilters={saveGlobalLabelFilters}\n                    updatedLabels={updatedLabels}\n                    updatedTeams={updatedTeamsState.data}\n                    searchState={searchState}\n                />\n            </WithTeamsContext.Provider>\n        </WithLabelsContext.Provider>\n    );\n};\n\nexport default AccuracyScoreContainer;","import React from 'react';\nimport AccuracyTests from './AccuracyTests';\nimport Challenges from './ChallengeSubmissions';\nimport { Switch, Redirect } from 'react-router-dom';\nimport PrivateRoute from '../../../routes/PrivateRouter';\nimport ROUTES from '../../../routes/routes';\n\nconst Submissions = () => (\n    <Switch>\n        <Redirect\n            from={ROUTES.SUBMISSIONS}\n            exact\n            to={ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.ALL}\n        />\n        <PrivateRoute\n            path={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL}\n            component={AccuracyTests}\n        />\n        <PrivateRoute\n            path={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL}\n            component={Challenges}\n        />\n    </Switch>\n);\n\nexport default Submissions;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PlayIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 14 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                data-test={dataTest}\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M366.08 564L352 572 352 556z\"\n                    transform=\"translate(-352 -556)\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default PlayIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PauseIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"-45 0 327 327\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"m158 0h71c4.417969 0 8 3.582031 8 8v311c0 4.417969-3.582031 8-8 8h-71c-4.417969 0-8-3.582031-8-8v-311c0-4.417969 3.582031-8 8-8zm0 0\"\n                />\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"m8 0h71c4.417969 0 8 3.582031 8 8v311c0 4.417969-3.582031 8-8 8h-71c-4.417969 0-8-3.582031-8-8v-311c0-4.417969 3.582031-8 8-8zm0 0\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default PauseIcon;\n","import { FC } from 'react';\nimport { Slider, withStyles } from '@material-ui/core';\n\nconst CustomSlider = withStyles({\n    root: {\n        height: 4,\n        padding: '8px 0',\n    },\n    rail: {\n        height: 4,\n        opacity: 0.18,\n        borderRadius: 4,\n        backgroundColor: 'var(--ps-white-1)',\n        color: 'var(--ps-black)'\n    },\n    track: {\n        height: 4,\n        borderRadius: 4,\n        backgroundColor: 'var(--ps-blue-main)',\n    },\n    thumb: {\n        height: 16,\n        width: 16,\n        marginTop: -6,\n        marginLeft: -7,\n        backgroundColor: 'var(--ps-blue-main)',\n        '&:focus': {\n            boxShadow: `none`,\n        },\n        '&:hover': {\n            boxShadow: `0 0 0 6px var(--ps-grey-12)`,\n        },\n        '&:active': {\n            boxShadow: `0 0 0 8px var(--ps-grey-12)`,\n        },\n    },\n})(Slider);\n\nconst VideoRangeSlider: FC<{\n    played: number;\n    onChange(e: any, newValue: any): void;\n    onMouseDown(e: any): void;\n    onChangeCommitted(e: any, newValue: any): void;\n}> = ({ played, onChange, onChangeCommitted, onMouseDown }) => {\n    return (\n        <CustomSlider\n            min={0}\n            max={1}\n            step={0.01}\n            value={played}\n            onChange={onChange}\n            onChangeCommitted={onChangeCommitted}\n            onMouseDown={onMouseDown}\n        />\n    );\n};\n\nexport default VideoRangeSlider;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const DownloadIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M351.467 192h-14.934c-.294 0-.533-.257-.533-.574v-4.592c0-.317.239-.574.533-.574.295 0 .534.257.534.574v4.018h13.866v-4.018c0-.317.24-.574.534-.574.294 0 .533.257.533.574v4.592c0 .318-.239.574-.533.574zm-7.085-4.687c-.005.006-.014.004-.02.01-.09.091-.211.148-.345.153h-.003c-.143.005-.287-.045-.396-.163l-3.197-4.014c-.21-.226-.21-.593 0-.82.21-.225.551-.225.761 0l2.285 2.87v-8.775c0-.317.239-.574.533-.574.295 0 .533.257.533.574v8.775l2.285-2.87c.21-.225.55-.225.76 0 .211.227.211.594 0 .82l-3.196 4.014z\"\n                                transform=\"translate(-656 -576) translate(320 400)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default DownloadIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const FullScreenIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M0 11.296l1.434-.002v2.354c0 .506.396.933.918 1.029l.114.015.124.006 3.057-.001V16H2.59c-1.308 0-2.398-.883-2.568-2.046l-.016-.153L0 13.648v-2.352zm14.566 2.352v-2.354l1.434.002v2.352c0 1.187-.972 2.178-2.252 2.332l-.169.015-.168.005h-3.058v-1.303h3.058c.557 0 1.027-.36 1.132-.834l.017-.103.006-.112zM5.647 0v1.324H2.59c-.557 0-1.028.366-1.133.848l-.017.105-.006.114v3.255L0 5.647V2.391C0 1.184.972.177 2.252.021l.169-.016L2.59 0h3.057zm7.764 0c1.307 0 2.397.897 2.567 2.08l.016.155.006.156v3.256l-1.434-.001V2.39c0-.514-.395-.949-.918-1.046l-.114-.015-.123-.006h-3.058V0h3.058z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default FullScreenIcon;\n","import { FC } from 'react';\nimport { Slider, withStyles } from '@material-ui/core';\n\nconst CustomSlider = withStyles({\n    root: {\n        height: 3,\n        padding: '5px 0',\n    },\n    rail: {\n        height: 3,\n        opacity: 0.18,\n        borderRadius: 4,\n        backgroundColor: 'var(--ps-white-1)',\n        color: 'var(--ps-black)'\n    },\n    track: {\n        height: 3,\n        borderRadius: 4,\n        backgroundColor: 'var(--ps-white-1)',\n    },\n    thumb: {\n        display: 'none',\n        height: 9,\n        width: 9,\n        marginTop: -3,\n        marginLeft: -3,\n        backgroundColor: 'var(--ps-blue-main)',\n        '&:focus': {\n            boxShadow: `none`,\n        },\n        '&:hover': {\n            boxShadow: `0 0 0 2px var(--ps-grey-12)`,\n        },\n        '&:active': {\n            boxShadow: `0 0 0 3px var(--ps-grey-12)`,\n        },\n    },\n})(Slider);\n\nconst VolumeRangeSlider: FC<{\n    volume: number;\n    onChange(e: any, newValue: any): void;\n    onChangeCommitted(e: any, newValue: any): void;\n}> = ({ volume, onChange, onChangeCommitted }) => {\n    return (\n        <CustomSlider\n            min={0}\n            max={1}\n            step={0.01}\n            value={volume}\n            onChange={onChange}\n            onChangeCommitted={onChangeCommitted}\n        />\n    );\n};\n\nexport default VolumeRangeSlider;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const CopyLink = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path d=\"M9.06 7.44a.498.498 0 0 1-.353-.147 2.002 2.002 0 0 0-2.828 0 .5.5 0 1 1-.707-.707 3.003 3.003 0 0 1 4.242 0 .5.5 0 0 1-.353.853zM8.707 10.292a2.99 2.99 0 0 1-2.121-.878.5.5 0 1 1 .707-.707c.78.78 2.049.78 2.828 0a.5.5 0 1 1 .707.707 2.992 2.992 0 0 1-2.12.878z\" fill=\"currentColor\"/>\n                <path d=\"M10.475 9.56a.5.5 0 0 1-.354-.854l2.793-2.792a.5.5 0 1 1 .707.707l-2.793 2.793a.498.498 0 0 1-.353.147zM6.268 13.768a.5.5 0 0 1-.354-.854l1.562-1.561a.5.5 0 1 1 .707.707L6.62 13.621a.497.497 0 0 1-.353.147zM2.732 10.232a.5.5 0 0 1-.353-.854l2.793-2.792a.5.5 0 1 1 .707.707l-2.793 2.793a.5.5 0 0 1-.354.146zM8.171 4.794a.499.499 0 0 1-.354-.854L9.38 2.38a.5.5 0 0 1 .707.707L8.525 4.647a.5.5 0 0 1-.354.147z\" fill=\"currentColor\"/>\n                <path d=\"M4.5 14.484a2.991 2.991 0 0 1-2.121-.863c-1.15-1.15-1.15-3.093 0-4.243a.5.5 0 1 1 .707.707c-.767.767-.767 2.063 0 2.829.766.767 2.062.767 2.828 0a.5.5 0 1 1 .707.707 2.99 2.99 0 0 1-2.121.863zM13.268 6.768a.5.5 0 0 1-.354-.853c.767-.767.767-2.063 0-2.83-.766-.766-2.062-.766-2.828 0a.5.5 0 1 1-.707-.706c1.15-1.15 3.093-1.15 4.242 0 1.15 1.15 1.15 3.092 0 4.242a.5.5 0 0 1-.353.147z\" fill=\"currentColor\"/>\n            </svg>\n        );\n    }\n);\n\nexport default CopyLink;\n","import { FC } from 'react';\nimport { VolumeUp, VolumeOff } from '@material-ui/icons';\nimport styled from 'styled-components';\n\nimport PlayIcon from '../../../icons/PlayIcon';\nimport PauseIcon from '../../../icons/PauseIcon';\nimport VideoRangeSlider from '../components/VideoRangeSlider';\nimport DownloadIcon from '../..//../icons/DownloadIcon';\nimport FullScreenIcon from '../..//../icons/FullScreenIcon';\nimport VolumeRangeSlider from '../components/VolumeRangeSlider';\nimport CopyLink from '../../../icons/CopyLink';\nimport { Loading } from '../../LoadingCopmonent';\n\nconst StyledVideoPlayerControls = styled.div`\n    width: 100%;\n`;\n\nconst ControlsWrapper = styled.div`\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    padding: 0 24px 21px 24px;\n    box-sizing: content-box;\n    z-index: 10;\n`;\n\nconst Controls = styled.div`\n    width: 100%;\n    display: flex;\n    align-items: center;\n    margin-top: 4px;\n`;\n\nconst IconContainerSpacer = styled.div`\n    margin: 0 8px;\n    display: flex;\n    align-items: center;\n`;\n\nconst VolumeRangeContainer = styled.div`\n    width: 50px;\n`;\n\nconst IconContainer = styled.div<{ disabled?: boolean }>`\n    height: 16px;\n    width: 16px;\n    color: ${props => props.theme.Colors.white};\n    border-radius: 100%;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    user-select: none;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    &:hover {\n        opacity: 0.9;\n        box-shadow: 0 0 0 6px ${props => props.theme.Colors.hoverGray};\n        background: ${props => props.theme.Colors.hoverGray};\n    }\n    ${props =>\n        !props.disabled &&\n        `\n        &:active {\n        opacity: 0.7;\n        box-shadow: 0 0 0 8px ${props.theme.Colors.hoverGray};\n        background: ${props.theme.Colors.hoverGray};\n    }\n    `}\n`;\n\nconst LeftControls = styled.div`\n    width: 16px;\n    margin-right: 18px;\n`;\n\nconst RangeControls = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n`;\n\nconst InfoControls = styled.div`\n    display: flex;\n    justify-content: space-between;\n    flex: 1;\n`;\n\nconst StyledTimer = styled.div`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.white};\n    width: 40px;\n    display: flex;\n    align-items: center;\n`;\n\nconst StyledVolume = styled.div`\n    display: flex;\n`;\n\nconst StyledInfoTools = styled.div`\n    display: flex;\n    flex-wrap: wrap;\n`;\n\nexport const VideoPlayerControls: FC<{\n    playing: boolean;\n    muted: boolean;\n    volume: number;\n    played: number;\n    elapsedTime: string;\n    totalDuration?: string;\n    setPlaying(): void;\n    setMuted(): void;\n    onRewind(): void;\n    onVolumeChange(e: any, newValue: any): void;\n    onVolumeSeekDown(e: any, newValue: any): void;\n    onToggleFullScreen(): void;\n    onSeek(e: any, newValue: any): void;\n    onSeekMouseDown(e: any): void;\n    onSeekMouseUp(e: any, newValue: any): void;\n    onDownloadVideo?(): void;\n    onCopyLink?(): void;\n    videoLoading?: boolean;\n}> = ({\n    playing,\n    muted,\n    volume,\n    played,\n    setPlaying,\n    setMuted,\n    onVolumeChange,\n    onVolumeSeekDown,\n    onToggleFullScreen,\n    onSeek,\n    onSeekMouseDown,\n    onSeekMouseUp,\n    onDownloadVideo,\n    onCopyLink,\n    videoLoading,\n    elapsedTime,\n}) => {\n    return (\n        <StyledVideoPlayerControls>\n            <ControlsWrapper\n                onClick={e => {\n                    e.stopPropagation();\n                }}\n                onDoubleClick={e => {\n                    e.stopPropagation();\n                }}\n            >\n                <Controls>\n                    <LeftControls>\n                        <IconContainer onClick={setPlaying}>\n                            {playing ? <PauseIcon /> : <PlayIcon />}\n                        </IconContainer>\n                    </LeftControls>\n                    <RangeControls>\n                        <VideoRangeSlider\n                            played={played}\n                            onChange={onSeek}\n                            onMouseDown={onSeekMouseDown}\n                            onChangeCommitted={onSeekMouseUp}\n                        />\n                    </RangeControls>\n                </Controls>\n                <Controls>\n                    <LeftControls />\n                    <InfoControls>\n                        <StyledInfoTools>\n                            <StyledTimer>{elapsedTime}</StyledTimer>\n                            <StyledVolume>\n                                <IconContainerSpacer>\n                                    {muted ? (\n                                        <IconContainer onClick={setMuted}>\n                                            <VolumeOff fontSize={'small'} />\n                                        </IconContainer>\n                                    ) : (\n                                        <IconContainer onClick={setMuted}>\n                                            <VolumeUp fontSize={'small'} />\n                                        </IconContainer>\n                                    )}\n                                </IconContainerSpacer>\n                                <VolumeRangeContainer>\n                                    <VolumeRangeSlider\n                                        volume={volume}\n                                        onChange={onVolumeChange}\n                                        onChangeCommitted={onVolumeSeekDown}\n                                    />\n                                </VolumeRangeContainer>\n                            </StyledVolume>\n                        </StyledInfoTools>\n                        <StyledInfoTools>\n                            {onCopyLink && (\n                                <IconContainerSpacer>\n                                    <IconContainer\n                                        onClick={onCopyLink}\n                                        title=\"Copy link\"\n                                    >\n                                        <CopyLink />\n                                    </IconContainer>\n                                </IconContainerSpacer>\n                            )}\n                            {onDownloadVideo && (\n                                <IconContainerSpacer>\n                                    {videoLoading ? (\n                                        <IconContainer disabled={true}>\n                                            <Loading size={16} />\n                                        </IconContainer>\n                                    ) : (\n                                        <IconContainer\n                                            onClick={onDownloadVideo}\n                                            title=\"Download\"\n                                        >\n                                            <DownloadIcon />\n                                        </IconContainer>\n                                    )}\n                                </IconContainerSpacer>\n                            )}\n                            <IconContainerSpacer>\n                                <IconContainer\n                                    onClick={onToggleFullScreen}\n                                    title=\"Full screen mode\"\n                                >\n                                    <FullScreenIcon />\n                                </IconContainer>\n                            </IconContainerSpacer>\n                        </StyledInfoTools>\n                    </InfoControls>\n                </Controls>\n            </ControlsWrapper>\n        </StyledVideoPlayerControls>\n    );\n};\n","export default __webpack_public_path__ + \"static/media/no-video.a29fdc78.svg\";","import { FC, useEffect, useRef, useState } from 'react';\nimport { Box } from '@material-ui/core';\nimport ReactPlayer from 'react-player';\nimport styled from 'styled-components';\nimport screenfull from 'screenfull';\n\nimport { VideoPlayerControls } from './VideoPlayerControls';\nimport { Variables } from '../../../../theme/variables';\nimport { Loading } from '../../LoadingCopmonent';\nimport novideo from '../../../../assets/images/no-video.svg'\n\nconst formatDisplayDate = (seconds: any) => {\n    if (isNaN(seconds)) {\n        return '00:00';\n    }\n\n    const date = new Date(seconds * 1000);\n    const hh = date.getUTCHours();\n    const mm = date.getUTCMinutes();\n    const ss = date\n        .getUTCSeconds()\n        .toString()\n        .padStart(2, '0');\n\n    if (hh) {\n        return `${hh}:${mm.toString().padStart(2, '0')}:${ss}`;\n    }\n\n    return `${mm}:${ss}`;\n};\n\nconst ReactPlayerContainer = styled.div`\n    position: relative;\n    border-top-left-radius: 8px;\n    border-top-right-radius: 8px;\n    overflow: hidden;\n    max-height: 421px;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    max-width: 416px;\n`;\n\nconst LoadingContainer = styled.div`\n    position: absolute;\n    margin: 0 auto;\n    left:0;\n    right:0;\n    width: 32px;\n    z-index: 1;\n`;\n\nconst NoVideoContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    color: white;\n    width: 416px;\n    font-size: 13px;\n    color: #b0bdc6;\n`;\n\nexport const VideoPlayer: FC<{\n    url?: string;\n    onDownloadVideo?(): void;\n    onCopyLink?(): void;\n    videoLoading?: boolean;\n    className?: string;\n    getDuration?(duration: number): void;\n    getPlaying?(playing: boolean): void;\n    muteVideo?: boolean;\n    autoPlay?: boolean;\n}> = ({\n    url,\n    onDownloadVideo,\n    onCopyLink,\n    videoLoading,\n    className,\n    getDuration,\n    getPlaying,\n    muteVideo,\n    autoPlay,\n}) => {\n        const [showControls, setShowControls] = useState(false);\n        const [state, setState] = useState({\n            playing: !!autoPlay,\n            muted: false,\n            volume: 0.5,\n            played: 0,\n            playedSeconds: 0,\n        });\n        const [seeking, setSeeking] = useState(false);\n        const [showLoading, setShowLoading] = useState(true);\n\n        const { playing, muted, volume, played, playedSeconds } = state;\n\n        const playerRef = useRef<any>(null);\n        const playerContainerRef = useRef<any>(null);\n\n        const handlePlayPause = () => {\n            setState({ ...state, playing: !state.playing });\n        };\n\n        const handleMute = () => {\n            setState({ ...state, muted: !state.muted });\n        };\n\n        const handleRewind = () => {\n            playerRef.current.seekTo(playerRef.current.getCurrentTime() - 10);\n        };\n\n        const handleVolumeChange = (e: any, newValue: any) => {\n            setState({\n                ...state,\n                volume: parseFloat(newValue),\n                muted: newValue === 0,\n            });\n        };\n\n        const handleVolumeSeekDown = (e: any, newValue: any) => {\n            setState({\n                ...state,\n                volume: parseFloat(newValue),\n                muted: newValue === 0,\n            });\n        };\n\n        const handleToggleFullScreen = () => {\n            if (screenfull.isEnabled) {\n                screenfull.toggle(playerContainerRef.current);\n            }\n        };\n\n        const handleProgress = (changeState: any) => {\n            if (!seeking) {\n                setState({ ...state, ...changeState });\n                if (changeState.played === 1) {\n                    setState({ ...state, playing: false, played: 1 });\n                }\n            }\n        };\n\n        const handleSeekChange = (e: any, newValue: any) => {\n            setState({\n                ...state,\n                playedSeconds: parseFloat(newValue),\n            });\n        };\n\n        const handleSeekMouseDown = () => {\n            setSeeking(true);\n        };\n\n        const handleSeekMouseUp = (e: any, newValue: any) => {\n            setSeeking(false);\n            if (playerRef.current.getDuration() === Infinity) {\n                return;\n            }\n            //This check is needed due to library bug, when value is 1 (1oo%) it jumps to 0:01 time frame instead\n            if (newValue === 1) {\n                playerRef.current.seekTo(playerRef.current.getDuration());\n            } else {\n                playerRef.current.seekTo(newValue);\n            }\n        };\n\n        const currentTime = playerRef.current\n            ? playerRef.current.getCurrentTime()\n            : '00:00';\n\n        const elapsedTime = formatDisplayDate(currentTime);\n\n        useEffect(() => {\n            if (getDuration) {\n                getDuration(playedSeconds);\n            }\n        }, [playedSeconds, getDuration]);\n\n        useEffect(() => {\n            if (getPlaying) {\n                getPlaying(playing);\n            }\n        }, [playing, getPlaying]);\n\n        useEffect(() => {\n            if(!url){\n                setShowLoading(false);\n            }\n        }, [url])\n     \n\n        return (\n            <ReactPlayerContainer\n                onClick={handlePlayPause}\n                onDoubleClick={handleToggleFullScreen}\n                ref={playerContainerRef}\n                className={className}\n            >\n                {url && (\n                    <ReactPlayer\n                        ref={playerRef}\n                        config={{\n                            file: {\n                                attributes: {\n                                    preload: 'auto',\n                                },\n                            },\n                        }}\n                        width={'100%'}\n                        height={'100%'}\n                        style={{\n                            background: Variables.Colors.backgroundDark,\n                            zIndex: 1,\n                        }}\n                        url={url}\n                        className=\"player-background\"\n                        playing={playing}\n                        muted={muteVideo || muted}\n                        volume={volume}\n                        onReady={() => {\n                            setShowControls(true);\n                            setShowLoading(false);\n                        }}\n                        onProgress={handleProgress}\n                    />\n                )}\n                {showLoading && (\n                    <LoadingContainer>\n                        <Loading width={'32px'} />\n                    </LoadingContainer>\n                )}\n\n                {!url && (\n                    <NoVideoContainer>\n                        <img src={novideo} alt=\"org\" />\n                        <Box component=\"span\" mt={1}>\n                            This video is not available for playback\n                        </Box>\n                    </NoVideoContainer>\n                )}\n\n                {showControls && url && (\n                    <VideoPlayerControls\n                        played={played}\n                        playing={playing}\n                        muted={muted}\n                        volume={volume}\n                        setPlaying={handlePlayPause}\n                        setMuted={handleMute}\n                        onRewind={handleRewind}\n                        onVolumeChange={handleVolumeChange}\n                        onVolumeSeekDown={handleVolumeSeekDown}\n                        onToggleFullScreen={handleToggleFullScreen}\n                        onSeek={handleSeekChange}\n                        onSeekMouseDown={handleSeekMouseDown}\n                        onSeekMouseUp={handleSeekMouseUp}\n                        onDownloadVideo={onDownloadVideo}\n                        onCopyLink={onCopyLink}\n                        videoLoading={videoLoading}\n                        elapsedTime={elapsedTime}\n                    />\n                )}\n            </ReactPlayerContainer>\n        );\n    };\n","import React, { FC } from 'react';\nimport { UserInterface, UserProfile } from '../../../constants/interfaces/User';\nimport AvatarPlaceholder from '../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport styled from 'styled-components';\n\nconst StyledDetailsHeader = styled.div`\n    display: flex;\n    align-items: center;\n    width: 100%;\n    height: 48px;\n    margin-bottom: 8px;\n`;\n\nconst StyledAvatar = styled.div`\n    width: 32px;\n    height: 32px;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst StyledName = styled.div`\n    margin-left: 16px;\n    font-size: 15px;\n    font-weight: 700;\n    letter-spacing: normal;\n    cursor: pointer;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst StyledAdditionalInfo = styled.span`\n    font-size: 13px;\n    font-weight: 600;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-left: 3px;\n`;\n\nconst DetailsHeader: FC<{\n    user?: UserInterface;\n    profile?: UserProfile;\n    action: (traineeId?: number) => void;\n}> = ({ user, profile, action }) => {\n    return (\n        <StyledDetailsHeader>\n            <StyledAvatar onClick={() => user && action(user.id)}>\n                <AvatarPlaceholder size=\"sm\" profile={user} />\n            </StyledAvatar>\n            <StyledName onClick={() => user && action(user.id)}>\n                {user && `${user.firstName} ${user.lastName}`}\n                {profile && user && user.id === profile.id && (\n                    <StyledAdditionalInfo> (You)</StyledAdditionalInfo>\n                )}\n            </StyledName>\n        </StyledDetailsHeader>\n    );\n};\n\nexport default DetailsHeader;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { VideoPlayer } from '../../../ui/components/VideoPlayer';\nimport DetailsHeader from './DetailsHeader';\nimport { UserInterface } from '../../../constants/interfaces/User';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\n\nconst StyledDetailsSubmissionInfo = styled.div`\n    margin: 8px 10px;\n    flex: 20;\n    max-width: 416px;\n    min-width: 416px;\n    margin-bottom: 25px;\n \n    display: flex;\n    flex-direction: column;\n\n    .video{\n        min-height: 421px;\n       \n\n        .player-background{\n            min-height: 421px;\n        }\n    }\n`;\n\nconst StyledInfoSection = styled.div`\n    padding: 24px 32px 0 32px;\n    margin-top: -5px;\n    background-color: ${props => props.theme.Colors.white};\n    min-height: 168px;\n    border-radius: 0 0 8px 8px;\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    border-top: none;\n    z-index: 1;\n\n    @media (max-width: 1440px){\n        min-height: 167px;\n    }\n`;\n\nconst Header = styled.div`\n    font-size: 11px;\n    font-weight: 600;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.tomato};\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.black};\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 15px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    margin-bottom: 5px;\n    word-break: break-word;\n\n    &:active {\n        opacity: 0.7;\n    }\n\n    &:hover {\n        cursor: pointer;\n        opacity: 0.7;\n    }\n`;\n\nconst Description = styled.div`\n    color: ${props => props.theme.Colors.black};\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 13px;\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    padding-bottom: 20px;\n\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nconst Row = styled.div`\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst DetailsSubmissionInfo: FC<{\n    url?: string | null;\n    challenge: { id: number; title: string; description: string; };\n    redirectToChallenge: (challengeId?: number | string) => void;\n    user?: UserInterface;\n    action: (traineeId?: number) => void;\n    handleDownloadVideo: () => void;\n    videoLoading?: boolean;\n    handleCopyLink: () => void;\n}> = ({\n    url,\n    challenge,\n    redirectToChallenge,\n    user,\n    action,\n    handleDownloadVideo,\n    videoLoading,\n    handleCopyLink,\n}) => {\n    const profile = useSelector(getProfileState);\n\n    return (\n        <StyledDetailsSubmissionInfo>\n            <DetailsHeader user={user} profile={profile} action={action} />\n            <VideoPlayer\n                url={url ? url : 'unknown'}\n                onDownloadVideo={handleDownloadVideo}\n                videoLoading={videoLoading}\n                className='video'\n                onCopyLink={handleCopyLink}\n            />\n            <StyledInfoSection>\n                <Row>\n                    <Header>Challenge</Header>\n                </Row>\n                <Row>\n                    <Title\n                        onClick={() =>\n                            challenge.id && redirectToChallenge(challenge.id)\n                        }\n                    >\n                        {challenge?.title}\n                    </Title>\n                </Row>\n                <Row>\n                    <Description\n                        onClick={() =>\n                            challenge.id && redirectToChallenge(challenge.id)\n                        }\n                    >\n                        {challenge?.description}\n                    </Description>\n                </Row>\n            </StyledInfoSection>\n        </StyledDetailsSubmissionInfo>\n    );\n};\n\nexport default DetailsSubmissionInfo;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../../theme/variables';\n\nconst StyledSelectBoxItemContainer = styled.div<{ widthPercent?: number }>`\n    position: relative;\n    width: ${props => props.widthPercent || 24}%;\n`;\n\nconst StyledSelectBoxItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    position: relative;\n`;\n\nconst StyledBulletBackground = styled.div`\n    width: 16px;\n    height: 2px;\n    background: ${props => props.theme.Colors.white};\n    position: absolute;\n    right: 0;\n`;\n\nconst StyledSelectBoxItem = styled.div<{\n    selected: boolean;\n    color: string;\n    round?: boolean;\n    spacing?: string;\n}>`\n    width: 100%;\n    background: ${props =>\n        props.selected ? props.color : Variables.Colors.paleGrey};\n    color: ${props =>\n        props.selected ? Variables.Colors.white : Variables.Colors.coolGray};\n    height: 2px;\n    margin: 25px 0;\n    cursor: pointer;\n    user-select: none;\n    &:hover {\n        opacity: 0.9;\n    }\n    &:active {\n        opacity: 0.7;\n    }\n`;\nconst StyledBullet = styled.div<{\n    alignRight?: boolean;\n    selected?: boolean;\n    color?: string;\n}>`\n    width: 16px;\n    height: 16px;\n    background: ${props =>\n        props.selected\n            ? props.theme.Colors.darkSkyBlue15\n            : props.theme.Colors.paleGreyTwo};\n    border: solid 1px\n        ${props =>\n            props.selected\n                ? props.theme.Colors.darkSkyBlue\n                : props.theme.Colors.cloudyBlue};\n    position: absolute;\n    ${props => (props.alignRight ? `right: 0` : `left: 0`)};\n    top: 18px;\n    border-radius: 50%;\n`;\n\nconst SelectBoxItem: FC<{\n    selected: boolean;\n    finalSpot: boolean;\n    finalItem: boolean;\n    firstItem: boolean;\n    name: string | number;\n    color?: string;\n    handleSelect: (value: string | number) => void;\n    isRound?: boolean;\n    spacing?: string;\n}> = ({\n    name,\n    selected,\n    finalSpot,\n    finalItem,\n    firstItem,\n    color,\n    handleSelect,\n    isRound,\n    spacing,\n}) => {\n    return (\n        <StyledSelectBoxItemContainer\n            onClick={() => handleSelect(name)}\n            widthPercent={firstItem ? 1.8 : 24}\n        >\n            <StyledSelectBoxItemWrapper>\n                <StyledSelectBoxItem\n                    selected={selected || (finalItem && finalSpot)}\n                    color={\n                        color ? color : Variables.Colors.transparentSoftBlueTwo\n                    }\n                    round={isRound}\n                    spacing={spacing}\n                />\n                <StyledBulletBackground />\n            </StyledSelectBoxItemWrapper>\n            <StyledBullet\n                alignRight={true}\n                selected={selected}\n                color={color ? color : Variables.Colors.transparentSoftBlueTwo}\n            />\n        </StyledSelectBoxItemContainer>\n    );\n};\n\nexport default SelectBoxItem;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Variables } from '../../../../theme/variables';\n\nconst Label = styled.div<{ color: string }>`\n    font-size: 17px;\n    font-weight: 600;\n    color: ${props => props.color};\n    margin-right: 15px;\n    padding: 10px;\n`;\n\nconst SelectBoxLabel: FC<{\n    label: string;\n    color?: string;\n}> = ({ label, color }) => {\n    return (\n        <Label color={color ? color : Variables.Colors.coolGray}>{label}</Label>\n    );\n};\n\nexport default SelectBoxLabel;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport SelectBoxItem from './SelectBoxItem';\nimport SelectBoxLabel from './SelectBoxLabel';\n\nconst StyledSelectBoxContainer = styled.div`\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n`;\n\nconst BoxArea = styled.div<{ marginLeft?: string }>`\n    flex: 1;\n    display: flex;\n    flex-wrap: wrap;\n    margin-left: ${props => (!!props.marginLeft ? props.marginLeft : '43px')};\n    margin-right: 4px;\n    max-height: 50px;\n    min-width: 100px;\n    flex-shrink: 0;\n    cursor: pointer;\n`;\n\ntype Item = string | number;\n\nexport const SelectBox: FC<{\n    items: Item[];\n    name?: string;\n    value?: Item | null;\n    label?: string;\n    handleSelect?: (value: string | number, field?: string) => void;\n    formatValueLabel?: string;\n    labelColor?: string;\n    color?: string;\n    isRound?: boolean;\n    readOnly?: boolean;\n    spacing?: string;\n    className?: string;\n    marginLeft?: string;\n}> = ({\n    name,\n    items,\n    label,\n    value,\n    handleSelect,\n    formatValueLabel,\n    labelColor,\n    color,\n    spacing,\n    isRound,\n    readOnly,\n    className,\n    marginLeft,\n}) => {\n    return (\n        <StyledSelectBoxContainer className={className}>\n            {label && (\n                <SelectBoxLabel\n                    color={labelColor && labelColor}\n                    label={label}\n                />\n            )}\n            <BoxArea marginLeft={marginLeft}>\n                {items.map((item: Item, index: number) => (\n                    <SelectBoxItem\n                        key={`${item}_${index}`}\n                        selected={!!value && item <= value}\n                        finalSpot={item === value}\n                        finalItem={item === items.length}\n                        firstItem={index === 0}\n                        name={`${item}${\n                            formatValueLabel ? formatValueLabel : ''\n                        }`}\n                        handleSelect={() =>\n                            !readOnly &&\n                            handleSelect &&\n                            handleSelect(item, name)\n                        }\n                        color={color}\n                        spacing={spacing}\n                        isRound={isRound}\n                    />\n                ))}\n            </BoxArea>\n        </StyledSelectBoxContainer>\n    );\n};\n","import styled from 'styled-components';\n\nexport const IconHolder = styled.div<{ scaleX?: number }>`\n    width: 7px;\n    height: 14px;\n    color: ${props => props.theme.Colors.steelGrey};\n    transform: scaleX(${props => props.scaleX || 1});\n`;\n\nexport const StyledButton = styled.div<{ disabled?: boolean }>`\n    width: 48px;\n    height: 48px;\n    align-items: center;\n    border-radius: 4px;\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    background-color: ${props => props.theme.Colors.white};\n    cursor: pointer;\n    display: flex;\n    justify-content: center;\n    user-select: none;\n    &:hover ${IconHolder} {\n        color: ${props => props.theme.Colors.black};\n    }\n    &:active ${IconHolder} {\n        color: ${props => props.theme.Colors.black};\n    }\n    &:active {\n        border: solid 1px ${props => props.theme.Colors.cloudyBlue};\n    }\n`;\n\n","import { FC, memo } from 'react';\n\nimport ArrowRightIcon from '../../icons/ArrowRight';\nimport { IconHolder, StyledButton } from './style';\nimport { ButtonArrowProps } from './type';\n\nexport const ButtonArrow: FC<ButtonArrowProps> = ({\n    action,\n    disabled,\n    loading,\n    className,\n    left,\n}) => {\n    return (\n        <StyledButton\n            disabled={disabled || loading}\n            onClick={action}\n            className={className}\n        >\n            <IconHolder scaleX={left ? -1 : 1}>\n                <ArrowRightIcon />\n            </IconHolder>\n        </StyledButton>\n    );\n};\n\nexport default memo(ButtonArrow);\n","import React, { FC, useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport { SubmissionReview } from '../../../constants/interfaces/Reviews';\r\nimport { Variables } from '../../../theme/variables';\r\nimport { SelectBox } from '../../../ui/components/SelectBox';\r\nimport TextAreaBox from '../../../ui/components/TextAreaBox/TextAreaBox';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { formatDate } from '../../../helpers/functions/date-convert';\r\nimport { ButtonArrow } from '../../../ui/components/ButtonArrow';\r\nimport { CheckPermission } from '../../permissions';\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport { calculateScoreValue, generateScoreItemArray } from '../tools';\r\n\r\nconst StyledDetailsSubmissionReview = styled.div`\r\n    margin: 8px 24px;\r\n    flex: 54;\r\n`;\r\n\r\nconst StyledDetailsBody = styled.div`\r\n    background: ${Variables.Colors.white};\r\n    border-radius: 8px;\r\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\r\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\r\n    padding: 41px 0 32px 32px;\r\n`;\r\n\r\nconst Divider = styled.div<{ margin?: number }>`\r\n    height: 1px;\r\n    width: 94%;\r\n    border: 1px solid ${Variables.Colors.paleGrey};\r\n    background: ${Variables.Colors.paleGrey};\r\n    margin-bottom: 9px;\r\n`;\r\n\r\nconst ScoreRow = styled.div<{ padding?: string; margin?: string }>`\r\n    display: flex;\r\n    width: 100%;\r\n    justify-content: space-between;\r\n    padding: ${props => props.padding || '0 40px 0 16px'};\r\n    margin: ${props => props.margin || '0 0 0 0'};\r\n    align-items: center;\r\n`;\r\n\r\nconst ActionRow = styled.div`\r\n    display: flex;\r\n    width: 100%;\r\n    margin: 24px 0;\r\n    flex-direction: row-reverse;\r\n`;\r\n\r\nconst Title = styled.div`\r\n    font-size: 17px;\r\n    font-weight: bold;\r\n`;\r\n\r\nconst ExampleContent = styled.div`\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    margin-left: 15px;\r\n    justify-content: flex-end;\r\n    margin-top: 8px;\r\n`;\r\n\r\nconst Example = styled.div`\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    color: ${Variables.Colors.cloudyBlue};\r\n    margin: 0 5px;\r\n`;\r\n\r\nconst Field = styled.div`\r\n    font-size: 15px;\r\n    color: ${Variables.Colors.dark};\r\n    font-weight: 600;\r\n    min-width: 110px;\r\n`;\r\n\r\nconst StyledSelectBox = styled(SelectBox)`\r\n    flex: 1;\r\n`;\r\n\r\nconst Value = styled.div<{ empty?: boolean }>`\r\n    font-size: 40px;\r\n    color: ${props =>\r\n        props.empty\r\n            ? Variables.Colors.cloudyBlue\r\n            : Variables.Colors.darkSkyBlue};\r\n    line-height: 1.06;\r\n    font-weight: bold;\r\n`;\r\n\r\nconst Description = styled.div<{ marginRight?: string }>`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    padding-left: 14px;\r\n    font-size: 15px;\r\n    font-weight: 500;\r\n    margin-right: ${props => props.marginRight || '0px'};\r\n`;\r\n\r\nconst StyledSelectBoxHeader = styled.div`\r\n    display: flex;\r\n    margin: 0 27px 9px 173px;\r\n`;\r\n\r\nconst StyledSelectBoxHeaderItem = styled.div<{ widthPercent?: number }>`\r\n    font-size: 15px;\r\n    font-weight: 500;\r\n    width: ${props => props.widthPercent || 23}%;\r\n    text-align: right;\r\n    color: ${props => props.theme.Colors.cloudyBlue};\r\n`;\r\n\r\nconst StyledDetailsHeader = styled.div`\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    height: 48px;\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst StyledDetailsArrowsContainer = styled.div`\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n`;\r\n\r\nconst StyledLeftArrowContainer = styled.div`\r\n    margin-right: 8px;\r\n`;\r\n\r\nconst StyledButtonContainer = styled.div`\r\n    margin-right: 24px;\r\n`;\r\n\r\nconst StyledRightArrowContainer = styled.div``;\r\n\r\nconst SCORE_ITEMS = [1, 2, 3, 4, 5];\r\n\r\nconst DetailsSubmissionReview: FC<{\r\n    mode?: 'edit' | 'view';\r\n    review?: Partial<SubmissionReview>;\r\n    submitted?: string;\r\n    canRedo: boolean;\r\n    modifyScore: (value: string | number, field?: string) => void;\r\n    onCompleteReviewClicked: () => void;\r\n    changeSubmission: (next: boolean) => void;\r\n    itemsTotalCount?: number;\r\n    currentItemPosition: number;\r\n    requestRedoClicked?: () => void;\r\n    reviewPermissionDenied?: boolean;\r\n}> = ({\r\n    mode,\r\n    review,\r\n    submitted,\r\n    canRedo,\r\n    modifyScore,\r\n    onCompleteReviewClicked,\r\n    changeSubmission,\r\n    itemsTotalCount,\r\n    currentItemPosition,\r\n    requestRedoClicked,\r\n    reviewPermissionDenied,\r\n}) => {\r\n    const reviewValue = useMemo(() => {\r\n        if (!review)\r\n            return 0;\r\n        if (review.value)\r\n            return review.value;\r\n        return calculateScoreValue(\r\n            generateScoreItemArray(review, [\r\n                'clarity',\r\n                'knowledge',\r\n                'confidence',\r\n                'enthusiasm',\r\n                'goalAchieved',\r\n            ])\r\n        );\r\n    }, [review]);\r\n\r\n    return (\r\n        <StyledDetailsSubmissionReview>\r\n            <StyledDetailsHeader>\r\n                <Description>\r\n                    Submitted {formatDate(submitted, true)}\r\n                </Description>\r\n                {itemsTotalCount && (\r\n                    <StyledDetailsArrowsContainer>\r\n                        <Description marginRight=\"16px\">\r\n                            {currentItemPosition + 1} of {itemsTotalCount}\r\n                        </Description>\r\n                        <StyledLeftArrowContainer>\r\n                            <ButtonArrow\r\n                                left\r\n                                action={() => changeSubmission(false)}\r\n                            />\r\n                        </StyledLeftArrowContainer>\r\n                        <StyledRightArrowContainer>\r\n                            <ButtonArrow action={() => changeSubmission(true)} />\r\n                        </StyledRightArrowContainer>\r\n                    </StyledDetailsArrowsContainer>\r\n                )}\r\n            </StyledDetailsHeader>\r\n            <StyledDetailsBody>\r\n                <ScoreRow>\r\n                    <Title>Challenge Score</Title>\r\n                </ScoreRow>\r\n                <ScoreRow\r\n                    style={{\r\n                        alignItems: 'flex-start',\r\n                        paddingTop: '9px',\r\n                        paddingLeft: '14px',\r\n                    }}\r\n                >\r\n                    <Value empty={!(reviewValue > 0)}>\r\n                        {reviewValue.toFixed(1)}\r\n                    </Value>\r\n                    <ExampleContent>\r\n                        <Example>1 - Poor;</Example>\r\n                        <Example>3 - Average;</Example>\r\n                        <Example>5 - Excellent</Example>\r\n                    </ExampleContent>\r\n                </ScoreRow>\r\n                <StyledSelectBoxHeader>\r\n                    {SCORE_ITEMS.map(item => (\r\n                        <StyledSelectBoxHeaderItem\r\n                            key={item}\r\n                            widthPercent={item === 1 ? 1 : 23}\r\n                        >\r\n                            {item}\r\n                        </StyledSelectBoxHeaderItem>\r\n                    ))}\r\n                </StyledSelectBoxHeader>\r\n                <Divider />\r\n                <ScoreRow>\r\n                    <Field>Clarity</Field>\r\n                    <StyledSelectBox\r\n                        color={Variables.Colors.darkSkyBlue50}\r\n                        items={SCORE_ITEMS}\r\n                        name={'clarity'}\r\n                        isRound={true}\r\n                        spacing={'3px'}\r\n                        value={review?.clarity}\r\n                        handleSelect={modifyScore}\r\n                        readOnly={mode !== 'edit'}\r\n                    />\r\n                </ScoreRow>\r\n                <ScoreRow>\r\n                    <Field>Knowledge</Field>\r\n                    <StyledSelectBox\r\n                        color={Variables.Colors.darkSkyBlue50}\r\n                        items={SCORE_ITEMS}\r\n                        name={'knowledge'}\r\n                        isRound={true}\r\n                        spacing={'3px'}\r\n                        value={review?.knowledge}\r\n                        handleSelect={modifyScore}\r\n                        readOnly={mode !== 'edit'}\r\n                    />\r\n                </ScoreRow>\r\n                <ScoreRow>\r\n                    <Field>Confidence</Field>\r\n                    <StyledSelectBox\r\n                        color={Variables.Colors.darkSkyBlue50}\r\n                        items={SCORE_ITEMS}\r\n                        name={'confidence'}\r\n                        isRound={true}\r\n                        spacing={'3px'}\r\n                        value={review?.confidence}\r\n                        handleSelect={modifyScore}\r\n                        readOnly={mode !== 'edit'}\r\n                    />\r\n                </ScoreRow>\r\n                <ScoreRow>\r\n                    <Field>Enthusiasm</Field>\r\n                    <StyledSelectBox\r\n                        color={Variables.Colors.darkSkyBlue50}\r\n                        items={SCORE_ITEMS}\r\n                        name={'enthusiasm'}\r\n                        isRound={true}\r\n                        spacing={'3px'}\r\n                        value={review?.enthusiasm}\r\n                        handleSelect={modifyScore}\r\n                        readOnly={mode !== 'edit'}\r\n                    />\r\n                </ScoreRow>\r\n                <ScoreRow margin=\"0 0 14px 0\">\r\n                    <Field>Goal Achieved</Field>\r\n                    <StyledSelectBox\r\n                        color={Variables.Colors.darkSkyBlue50}\r\n                        items={SCORE_ITEMS}\r\n                        name={'goalAchieved'}\r\n                        isRound={true}\r\n                        spacing={'3px'}\r\n                        value={review?.goalAchieved}\r\n                        handleSelect={modifyScore}\r\n                        readOnly={mode !== 'edit'}\r\n                    />\r\n                </ScoreRow>\r\n                <TextAreaBox\r\n                    value={review?.note ?? ''}\r\n                    name=\"notes\"\r\n                    placeholder=\"Write review notes…\"\r\n                    minRows={3}\r\n                    onChange={(event: { target: HTMLInputElement }) =>\r\n                        modifyScore(event.target.value, 'note')\r\n                    }\r\n                    background={Variables.Colors.whiteTwo}\r\n                    disabled={mode !== 'edit'}\r\n                    max={500}\r\n                    marginRight=\"31px\"\r\n                    fontSize=\"15px\"\r\n                    counterFontSize=\"13px\"\r\n                />\r\n            </StyledDetailsBody>\r\n            <ActionRow>\r\n                <CheckPermission\r\n                    permissions={[NEW_PERMISSIONS.REVIEW_SUBMISSION]}\r\n                >\r\n                    <Button\r\n                        height=\"40px\"\r\n                        width=\"176px\"\r\n                        disabled={\r\n                            !review ||\r\n                            !(\r\n                                review.knowledge &&\r\n                                review.clarity &&\r\n                                review.confidence &&\r\n                                review.enthusiasm &&\r\n                                review.goalAchieved\r\n                            ) ||\r\n                            mode === 'view' ||\r\n                            reviewPermissionDenied\r\n                        }\r\n                        customDisabledColor={Variables.Colors.cloudyBlue}\r\n                        action={onCompleteReviewClicked}\r\n                    >\r\n                        {mode === 'view'\r\n                            ? 'Review Completed'\r\n                            : 'Complete Review'}\r\n                    </Button>\r\n                </CheckPermission>\r\n                {canRedo && !reviewPermissionDenied && (\r\n                    <CheckPermission\r\n                        permissions={[NEW_PERMISSIONS.REQUEST_SUBMISSION_REDO]}\r\n                    >\r\n                        <StyledButtonContainer>\r\n                            <Button\r\n                                height=\"40px\"\r\n                                width=\"160px\"\r\n                                action={requestRedoClicked}\r\n                                color=\"warning-inverse\"\r\n                                variant=\"inverse\"\r\n                            >\r\n                                Request Redo\r\n                            </Button>\r\n                        </StyledButtonContainer>\r\n                    </CheckPermission>\r\n                )}\r\n            </ActionRow>\r\n        </StyledDetailsSubmissionReview>\r\n    );\r\n};\r\n\r\nexport default DetailsSubmissionReview;\r\n","import React, { FC, useState } from 'react';\nimport styled from 'styled-components';\nimport TextAreaPlaceholderBox from '../../../ui/components/TextAreaPlaceholderBox/TextAreaPlaceholderBox';\nimport { Button } from '../../../ui/components/Button';\nimport { Input } from '../../../ui/components/input';\nimport { Variables } from '../../../theme/variables';\n\nconst StyledTitle = styled.div`\n    font-size: 20px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    width: 100%;\n`;\n\nconst StyledContent = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-top: 9px;\n    height: 37px;\n    margin-bottom: 16px;\n`;\n\nconst StyledFormArea = styled.div`\n    width: 410px;\n`;\n\nconst StyledActions = styled.div`\n    width: 272px;\n    display: flex;\n    justify-content: space-between;\n    margin-top: 24px;\n    margin-bottom: 8px;\n    align-self: flex-end;\n`;\n\nconst StyledInput = styled(Input)`\n    font-family: ${props => props.theme.Fonts.manrope};\n    border-radius: 4px;\n    background-color: ${props => props.theme.Colors.whiteTwo};\n`;\n\nconst StyledInputContainer = styled.div`\n    margin-bottom: 12px;\n`;\n\nexport const RequestRedo: FC<{\n    fromUser?: string;\n    onSend?(data: any): void;\n    onClose?(): void;\n}> = ({ onSend, onClose, fromUser }) => {\n    const [messageData, setMessageData] = useState({\n        name: fromUser,\n        text: '',\n    });\n\n    const handleMessageDataChange = (key: string, value: any) => {\n        setMessageData(prevState => ({ ...prevState, [key]: value }));\n    };\n\n    return (\n        <>\n            <StyledTitle>Request a Redo</StyledTitle>\n            <StyledContent>\n                <StyledDescription>\n                    Clicking \"Submit\" will delete the submission from the list\n                    and the User will be asked to redo this challenge.\n                </StyledDescription>\n                <StyledFormArea>\n                    <StyledInputContainer>\n                        <StyledInput\n                            type=\"text\"\n                            name=\"name\"\n                            inputPadding=\"29px 24px 15px 24px\"\n                            value={messageData.name}\n                            label=\"From\"\n                            labelFontSize=\"13px\"\n                            labelLeftPosition=\"24px\"\n                            labelFontWeight={500}\n                            maxLength={100}\n                            height=\"40px\"\n                            handleChange={(e: any) =>\n                                handleMessageDataChange('name', e.target.value)\n                            }\n                        />\n                    </StyledInputContainer>\n                    <TextAreaPlaceholderBox\n                        value={messageData.text}\n                        onChange={(e: any) =>\n                            handleMessageDataChange('text', e.target.value)\n                        }\n                        name=\"messageToTrainee\"\n                        placeholder=\"Message to User\"\n                        max={200}\n                        minRows={7}\n                        fontSize=\"13px\"\n                        padding=\"23px 24px\"\n                        borderRadius=\"8px\"\n                        minHeight=\"178px\"\n                        placeholderFontWeight={500}\n                    />\n                </StyledFormArea>\n                <StyledActions>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={onClose}\n                        variant=\"inverse\"\n                        color=\"warning\"\n                        customColor={Variables.Colors.tomato}\n                    >\n                        Cancel\n                    </Button>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={() => !!onSend && onSend(messageData)}\n                        disabled={!messageData.name || !messageData.text}\n                        color=\"warning\"\n                        customColor={Variables.Colors.tomato}\n                    >\n                        Submit\n                    </Button>\n                </StyledActions>\n            </StyledContent>\n        </>\n    );\n};\n","import React, { ChangeEvent, FC } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../../../ui/components/Button';\nimport { Variables } from '../../../theme/variables';\nimport Checkbox from '../../../ui/components/Checkbox';\n\nconst StyledTitle = styled.div`\n    font-size: 20px;\n    font-weight: 800;\n    width: 100%;\n`;\n\nconst StyledContent = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst StyledDescription = styled.div`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-top: 7px;\n`;\n\nconst StyledActions = styled.div`\n    width: 272px;\n    display: flex;\n    justify-content: space-between;\n    margin-top: 25px;\n    align-self: flex-end;\n`;\n\nconst StyledCheckboxContainer = styled.div`\n    display: flex;\n    align-items: center;\n    margin-top: 11px;\n    margin-bottom: 5px;\n    align-self: flex-start;\n`;\n\nconst StyledReminderTitle = styled.div`\n    font-size: 13px;\n    font-weight: 500;\n    margin-left: 11px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const RequestReminder: FC<{\n    doNotShowWarning?: boolean;\n    onProceed?(): void;\n    onClose?(): void;\n    onShowWarningClicked: (e: ChangeEvent<HTMLInputElement>) => void;\n}> = ({ doNotShowWarning, onProceed, onClose, onShowWarningClicked }) => {\n    return (\n        <>\n            <StyledTitle>Reminder</StyledTitle>\n            <StyledContent>\n                <StyledDescription>\n                    Once you submit this review, you won't be able to request a\n                    redo for this submission.\n                </StyledDescription>\n                <StyledCheckboxContainer>\n                    <Checkbox\n                        size={16}\n                        checked={!!doNotShowWarning}\n                        border={Variables.Colors.coral}\n                        checkedBackground={Variables.Colors.coral}\n                        handleChange={onShowWarningClicked}\n                        checkboxMarginLeft=\"1px\"\n                    />\n                    <StyledReminderTitle>\n                        Don’t show this message again\n                    </StyledReminderTitle>\n                </StyledCheckboxContainer>\n                <StyledActions>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={onClose}\n                        variant=\"inverse\"\n                        color=\"warning\"\n                    >\n                        Go Back\n                    </Button>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={() => !!onProceed && onProceed()}\n                        color=\"warning\"\n                    >\n                        Proceed\n                    </Button>\n                </StyledActions>\n            </StyledContent>\n        </>\n    );\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    box-sizing: content-box;\n`;\n\nexport const Title = styled.div`\n    font-size: 20px;\n    font-weight: 800;\n    line-height: 1.25;\n    color: var(--ps-black-main);\n    padding-top: 32px;\n`;\n\nexport const Description = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    padding-top: 16px;\n    padding-right: 16px;\n`;\n\nexport const ButtonContainer = styled.div`\n    display: flex;\n    justify-content: right;\n    padding-top: 32px;\n`;","import DialogWrapper from '../DialogWrapper/DialogWrapper';\nimport { Button } from '../Button';\nimport { CopyLinkNotificationViewProps } from './types';\nimport {\n    Container,\n    Title,\n    Description,\n    ButtonContainer\n} from './styles';\n\nfunction CopyLinkNotificationView({ onClose }: CopyLinkNotificationViewProps) {\n    return (\n        <Container>\n            <DialogWrapper\n                customization={{ width: 328, padding: '0 32px 22px 40px' }}\n            >\n                <Title>Heads Up</Title>\n                <Description>\n                    Only Admins or Team Leaders of this specific Team will be\n                    able to view this submission you're sharing.\n                </Description>\n                <ButtonContainer>\n                    <Button\n                        width=\"128px\"\n                        height=\"40px\"\n                        action={onClose}\n                        color=\"default\"\n                    >\n                        Got it\n                    </Button>\n                </ButtonContainer>\n            </DialogWrapper>\n        </Container>\n    );\n}\n\nexport default CopyLinkNotificationView;","import CopyLinkNotification from './view';\n\nexport default CopyLinkNotification;","import { forwardRef } from 'react';\n\nimport { IconProps } from './types';\n\nexport const BrokenVideo = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"73\"\n                height=\"72\"\n                viewBox=\"0 0 73 72\"\n                fill=\"none\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#dopteucapa)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\">\n                    <path d=\"m68.66 60.75-7.6-7.6 7.6-7.61-3.54-3.53-7.6 7.6-7.6-7.6-3.53 3.53 7.6 7.61-7.6 7.6 3.53 3.53 7.6-7.6 7.6 7.6 3.54-3.53z\" fill=\"#EC513D\"/>\n                    <path d=\"M27.21 42.42V27.15c0-1.12 1.22-1.82 2.18-1.25l13.09 7.64c.96.56.96 1.95 0 2.51l-13.09 7.64c-.97.56-2.18-.13-2.18-1.25v-.02zm34.31-7.63h5.39c-.02-5.83-.42-11.72-1.22-17.32h.03l-.15-.85h-.01v-.03c-.06-.21-.11-.42-.19-.69-.91-3.03-2.96-5.37-5.57-6.28C54.92 8.02 36.04 8 35.24 8c-.8 0-19.63.02-24.57 1.62-1.05.36-2.02.97-2.88 1.79l-.13.14c-.19.19-.38.39-.56.6-.16.19-.31.38-.51.66l-.1.14c-.75 1.09-1.3 2.32-1.61 3.64l-.02.1c-1.8 11.32-1.82 24.66-.05 36.6l.03.22c.03.17.08.33.13.49l.07.23c.91 3.03 2.96 5.37 5.57 6.28 4.87 1.59 23.75 1.61 24.55 1.61.25 0 2.27 0 5.08-.05V56.7c-.75.01-1.44.02-2.02.03-.94.01-1.71.02-2.24.02h-1.64c-.53 0-1.3 0-2.25-.02-1.72-.02-4.35-.07-7.14-.17-3.1-.11-5.76-.26-7.9-.46-2.27-.2-4.06-.46-4.8-.7-.77-.3-1.75-1.27-2.17-3.04-1.63-11.04-1.64-23.45-.04-34.11.04-.2.07-.41.13-.62.2-.78.52-1.45.96-1.99.37-.42.79-.74 1.17-.88.41-.13 1.67-.45 4.63-.72l.44-.04c.21-.02.43-.04.61-.06l.43.09.03-.12c1.94-.15 4.15-.27 6.59-.35 2.79-.1 5.41-.15 7.12-.17.94-.01 1.71-.02 2.24-.02h1.64c.53 0 1.3 0 2.25.02 1.72.02 4.35.07 7.14.17 3.11.11 5.77.27 7.9.46 2.28.2 4.06.46 4.8.7.77.3 1.75 1.27 2.17 3.04.81 5.48 1.2 11.28 1.21 17.03h.02z\" fill=\"#fff\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"dopteucapa\">\n                        <path fill=\"#fff\" transform=\"translate(3.5 8)\" d=\"M0 0h65.16v56.28H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default BrokenVideo;\n\n","import styled from 'styled-components';\n\nexport const ErrorTitle = styled.div`\n    font-family: Merriweather;\n    color: var(--ps-white-1);\n    padding-top: 24px;\n    font-weight: 600;\n    font-size: 20px;\n    line-height: 25px;\n    text-align: center;\n`;\n\nexport const ErrorDescription = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    padding-top: 8px;\n    padding-bottom: 4px;\n\n    &:last-child {\n        padding-bottom: 0;\n    }\n\n    a {\n        color: var(--ps-blue-main);\n        text-decoration: none;\n    }\n`;","import BrokenVideo from '../../icons/BrokenVideo';\nimport {\n    ErrorTitle,\n    ErrorDescription\n} from './styles';\nimport LoginAuthWrapper from '../../wrapper/LoginAuthWrapper';\nimport { UnavailableContentProps } from './types';\n\nfunction UnavailableContentView({ title, description }: UnavailableContentProps) {\n    return (\n        <LoginAuthWrapper contentWidth={324} heightToShowScroll={500}>\n            <BrokenVideo />\n            <ErrorTitle>{title}</ErrorTitle>\n            <ErrorDescription>\n                {description}\n            </ErrorDescription>\n            <ErrorDescription>\n                You can also <a href='mailto:support@gopractis.com'>contact us</a> at Practis and we may be able to help.\n            </ErrorDescription>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default UnavailableContentView;","import UnavailableContent from './view';\n\nexport default UnavailableContent;","import UnavailableContent from '../../../../ui/components/UnavailableContent';\n\nfunction UnavailableChallengeView() {\n    return <UnavailableContent\n        title=\"This Challenge cannot be viewed\"\n        description=\"Looks like this Challenge was either deleted or it is being re-submitted by a learner.\"\n    />\n}\n\nexport default UnavailableChallengeView;","import UnavailableChallenge from './view';\n\nexport default UnavailableChallenge;","import styled from 'styled-components';\n\nexport const Header = styled.div`\n    height: 145px;\n    border-bottom: 1px solid var(--ps-grey-4);\n    padding-left: 16px;\n    padding-top: 32px;\n`;\n\nexport const Title = styled.div`\n    width: 137px;\n    height: 8px;\n    background-color: var(--ps-grey-4);\n`;\n\nexport const SubTitle = styled.div`\n    width: 296px;\n    height: 12px;\n    background-color: var(--ps-grey-4);\n    margin-top: 20px;\n`;\n\nexport const Content = styled.div`\n    padding: 22px 24px 0 10px;\n`;\n\nexport const UserInfo = styled.div`\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n`;\n\nexport const UserImage = styled.div`\n    width: 32px;\n    height: 32px;\n    margin-right: 16px;\n    border-radius: 8px;\n    background-color: var(--ps-grey-4);\n`;\n\nexport const UserText = styled.div`\n    width: 162px;\n    height: 8px;\n    background-color: var(--ps-grey-4);\n`;\n\nexport const MainContent = styled.div`\n    display: flex;\n    flex-direction: row;\n    margin-top: 16px;\n`;\n\nexport const ThumbnailContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n`;\n\nexport const Thumbnail = styled.div`\n    width: 416px;\n    height: 416px;\n    border-radius: 8px;\n    background-color: var(--ps-grey-4);\n    display: flex;\n    align-items: center;\n`\n\nexport const ThumbnailTitle = styled.div`\n    width: 312px;\n    height: 8px;\n    margin-top: 16px;\n    background-color: var(--ps-grey-4);\n`;\n\nexport const ThumbnailDescription = styled.div`\n    width: 244px;\n    height: 8px;\n    margin-top: 12px;\n    background-color: var(--ps-grey-4);\n`;\n\nexport const StatsContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    padding-left: 34px;\n    flex: 54 1 0%;\n`;\n\nexport const Stats = styled.div`\n    border-radius: 8px;\n    border: 1px solid var(--ps-grey-4);\n    box-shadow: rgb(0 0 0 / 5%) 0px 3px 10px 0px;\n    width: 100%;\n    height: 591px;\n    padding: 48px 33px;\n`\n\nexport const StatsTitle = styled.div`\n    width: 133px;\n    height: 12px;\n    background-color: var(--ps-grey-4);\n    margin-left: 15px;\n`;\n\nexport const StatsScore = styled.div`\n    width: 63px;\n    height: 32px;\n    background-color: var(--ps-grey-4);\n    margin-top: 21px;\n    margin-left: 15px;\n`;\n\nexport const StatsDelimiter = styled.div`\n    height: 2px;\n    background-color: var(--ps-grey-4);\n    width: 100%;\n    margin-top: 34px;\n    margin-bottom: 10px;\n`;\n\nexport const StatsItem = styled.div`\n    padding: 0 25px 0 15px;\n    height: 50px;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n`;\n\nexport const StatsItemTitle = styled.div`\n    width: 100px;\n    height: 8px;\n    background-color: var(--ps-grey-4);\n    margin-right: 49px;\n`;\n\nexport const StatsItemPoints = styled.div`\n    flex: 1 0 0%;\n    display: flex;\n`;\n\nexport const StatsItemLine = styled.div`\n    width: 100%;\n    position: relative;\n    height: 2px;\n    background-color: var(--ps-grey-4);\n    z-index: 1;\n`;\n\nexport const StatsItemPoint = styled.div<{ index: number }>`\n    width: 16px;\n    height: 16px;\n    border-radius: 50%;\n    background-color: var(--ps-white-4);\n    border: 1px solid var(--ps-grey-2);\n    position: absolute;\n    z-index: 2;\n    left: calc(${props => `${props.index * 25}% - 8px`});\n    top: -7px;\n`;\n\nexport const Buttons = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    padding-top: 24px;\n`;\n\nexport const WhiteButton = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 160px;\n    height: 40px;\n    border-radius: 4px;\n    border: solid 2px var(--ps-grey-4);\n    background-color: var(--ps-white-1);\n`;\n\nexport const WhiteButtonTitle = styled.div`\n    width: 85px;\n    height: 8px;\n    background-color: var(--ps-grey-4);\n`;\n\n\nexport const GreyButton = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 176px;\n    height: 40px;\n    border-radius: 4px;\n    border: solid 2px var(--ps-grey-4);\n    background-color: var(--ps-grey-4);\n    margin-left: 24px;\n`;\n\nexport const GreyButtonTitle = styled.div`\n    width: 85px;\n    height: 8px;\n    background-color: var(--ps-white-1);\n`;","import { Loading } from '../../../../ui/components/LoadingCopmonent';\nimport {\n    Header,\n    Title,\n    SubTitle,\n    Content,\n    UserInfo,\n    UserImage,\n    UserText,\n    MainContent,\n    ThumbnailContainer,\n    Thumbnail,\n    ThumbnailTitle,\n    ThumbnailDescription,\n    StatsContainer,\n    Stats,\n    StatsTitle,\n    StatsScore,\n    StatsDelimiter,\n    StatsItem,\n    StatsItemTitle,\n    StatsItemPoints,\n    StatsItemLine,\n    StatsItemPoint,\n    Buttons,\n    GreyButton,\n    GreyButtonTitle,\n    WhiteButton,\n    WhiteButtonTitle,\n} from './styles';\nimport {\n    StatsItemCount,\n    StatsItemPointCount,\n} from './constants';\nimport { range } from 'lodash';\n\nconst StatsItemsList = range(StatsItemCount);\nconst StatsItemPointList = range(StatsItemPointCount);\n\nfunction ScreenLoadingView() {\n    return <>\n        <Header>\n            <Title />\n            <SubTitle />\n        </Header>\n        <Content>\n            <UserInfo>\n                <UserImage />\n                <UserText />\n            </UserInfo>\n            <MainContent>\n                <ThumbnailContainer>\n                    <Thumbnail>\n                        <Loading size={44} />\n                    </Thumbnail>\n                    <ThumbnailTitle />\n                    <ThumbnailDescription />\n                </ThumbnailContainer>\n                <StatsContainer>\n                    <Stats>\n                        <StatsTitle />\n                        <StatsScore />\n                        <StatsDelimiter />\n                        {\n                            StatsItemsList.map(i =>\n                                <StatsItem>\n                                    <StatsItemTitle />\n                                    <StatsItemPoints>\n                                        <StatsItemLine>\n                                            {\n                                                StatsItemPointList.map(j =>\n                                                    <StatsItemPoint index={j} />\n                                                )\n                                            }\n                                        </StatsItemLine>\n                                    </StatsItemPoints>\n                                </StatsItem>\n                            )\n                        }\n                    </Stats>\n                    <Buttons>\n                        <WhiteButton>\n                            <WhiteButtonTitle />\n                        </WhiteButton>\n                        <GreyButton>\n                            <GreyButtonTitle />\n                        </GreyButton>\n                    </Buttons>\n                </StatsContainer>\n            </MainContent>\n        </Content>\n    </>;\n}\n\nexport default ScreenLoadingView;","export const StatsItemCount = 5;\nexport const StatsItemPointCount = 5;","export enum LogEvent {\n    CREATE_COMPANY = 'CREATE_COMPANY',\n    DELETE_COMPANY = 'DELETE_COMPANY',\n    UPDATE_COMPANY = 'UPDATE_COMPANY',\n    CREATE_PRACTIS_ADMIN = 'CREATE_PRACTIS_ADMIN',\n    DELETE_PRACTIS_ADMIN = 'DELETE_PRACTIS_ADMIN',\n    UPDATE_PRACTIS_ADMIN = 'UPDATE_PRACTIS_ADMIN',\n    CREATE_SCENARIO = 'CREATE_SCENARIO',\n    DELETE_SCENARIO = 'DELETE_SCENARIO',\n    UPDATE_SCENARIO = 'UPDATE_SCENARIO',\n    CREATE_CHALLENGE = 'CREATE_CHALLENGE',\n    DELETE_CHALLENGE = 'DELETE_CHALLENGE',\n    UPDATE_CHALLENGE = 'UPDATE_CHALLENGE',\n    GENERATE_CHALLENGE_FROM_SCENARIO = 'GENERATE_CHALLENGE_FROM_SCENARIO',\n    CREATE_PRACTIS_SET = 'CREATE_PRACTIS_SET',\n    DELETE_PRACTIS_SET = 'DELETE_PRACTIS_SET',\n    UPDATE_PRACTIS_SET = 'UPDATE_PRACTIS_SET',\n    INVITE_USER = 'INVITE_USER',\n    REVOKE_INVITATION = 'REVOKE_INVITATION',\n    RESEND_INVITATION = 'RESEND_INVITATION',\n    UPDATE_SETTING = 'UPDATE_SETTING',\n    CREATE_SUBMISSION = 'CREATE_SUBMISSION',\n    UPDATE_SUBMISSION = 'UPDATE_SUBMISSION',\n    DELETE_SUBMISSION = 'DELETE_SUBMISSION',\n    REVIEW_SUBMISSION = 'REVIEW_SUBMISSION',\n    CREATE_SCORE = 'CREATE_SCORE',\n    UPDATE_SCORE = 'UPDATE_SCORE',\n    DELETE_SCORE = 'DELETE_SCORE',\n    DELETE_USER = 'DELETE_USER',\n    CREATE_STAGING = 'CREATE_STAGING',\n    UPDATE_STAGING = 'UPDATE_STAGING',\n    DELETE_STAGING = 'DELETE_STAGING',\n    CREATE_TEAM = 'CREATE_TEAM',\n    DUPLICATE_TEAM = 'DUPLICATE_TEAM',\n    UPDATE_TEAM = 'UPDATE_TEAM',\n    DELETE_TEAM = 'DELETE_TEAM',\n    USER_TEAM_LEAD_PROMOTION = 'USER_TEAM_LEAD_PROMOTION',\n    USER_TEAM_LEAD_REVOKE = 'USER_TEAM_LEAD_REVOKE',\n    USER_ADDED_INTO_TEAM = 'USER_ADDED_INTO_TEAM',\n    CREATE_THEME = 'CREATE_THEME',\n    ADD_COVER_INTO_THEME = 'ADD_COVER_INTO_THEME',\n    DELETE_THEME = 'DELETE_THEME',\n    UPDATE_THEME = 'UPDATE_THEME',\n    REMOVE_COVER = 'REMOVE_COVER',\n    ASSIGN_THEME_TO_PRACTISE_SET = 'ASSIGN_THEME_TO_PRACTISE_SET',\n    ASSIGN_COVER_TO_PRACTISE_SET = 'ASSIGN_COVER_TO_PRACTISE_SET',\n    ASSIGN_COVER_TO_SCENARIO = 'ASSIGN_COVER_TO_SCENARIO',\n}\n","import ScreenLoading from './view';\n\nexport default ScreenLoading;","import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport {\r\n    useSubmissionDetailsState,\r\n    useSubmissionPaginationState,\r\n} from '../store/states';\r\nimport { SubmissionReview, SubmissionV2 } from '../../../constants/interfaces/Reviews';\r\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport { History } from 'history';\r\nimport ROUTES from '../../../routes/routes';\r\nimport { pushModal } from '../../../tools/router';\r\nimport {\r\n    useGetSubmissionDetailsService,\r\n    useGetSubmissionFromFeedService,\r\n    useMarkSubmissionAsViewedService,\r\n    useModifyScoreService,\r\n    useRequestSubmissionRedoService,\r\n    usePerformSubmissionReviewService,\r\n    useGetSubmissionReviewService,\r\n    useSearchChallengeSubmissionPaginationService,\r\n} from '../store/services';\r\nimport DetailsSubmissionInfo from '../components/DetailsSubmissionInfo';\r\nimport DetailsSubmissionReview from '../components/DetailsSubmissionReview';\r\nimport styled from 'styled-components';\r\nimport { getCompanyState } from '../../../pages/CompanySettings/store/reducers';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport {\r\n    LocalStorage,\r\n    useLocalStorage,\r\n} from '../../../tools/localStorage/LocalStorage';\r\nimport { RequestRedo } from '../components/RequestRedo';\r\nimport { RequestReminder } from '../components/RequestReminder';\r\nimport { UserProfile } from '../../../constants/interfaces/User';\r\nimport { useGetChallengeService } from '../../challenges/store/services';\r\nimport { useChallengeState } from '../../challenges/store/states';\r\nimport { Challenge } from '../../../constants/interfaces/Challenge';\r\nimport { useCopyChallengeLink } from '../store/services';\r\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\r\nimport CopyLinkNotification from '../../../ui/components/CopyLinkNotification';\r\nimport UnavailableChallenge from '../components/UnavailableChallenge';\r\nimport ScreenLoading from '../components/ScreenLoading';\r\nimport { SubmissionRedoParams, SubmissionReviewParams } from '../../../api/submissions/types';\r\nimport { handleDownloadVideoFile } from '../../../helpers/functions/file-download';\r\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport { SearchParams } from '../../../constants/interfaces/filters';\r\nimport { ChallengeSubmissionFilters } from '../../../constants/interfaces/SubmissionSearchFilters';\r\nimport { ITEMS_PER_PAGE } from './ChallengeSubmissions';\r\nimport DialogWrapper from '../../../ui/components/DialogWrapper/DialogWrapper';\r\n\r\nconst StyledDetailsContainer = styled.div`\r\n    display: flex;\r\n    width: 100%;\r\n    justify-content: center;\r\n`;\r\n\r\nconst StyledDetailsContainerInner = styled.div`\r\n    display: flex;\r\n    width: 100%;\r\n    flex-wrap: wrap;\r\n    align-items: flex-start;\r\n    padding-top: 6px;\r\n`;\r\n\r\nconst ChallengeCopiedKeyName = 'challengeLinkWasCopied';\r\n\r\nconst SubmissionDetails: FC<{\r\n    submission?: SubmissionV2;\r\n    review?: Partial<SubmissionReview>;\r\n    challenge?: Challenge;\r\n    loading?: boolean;\r\n    modifyScore: (value: string | number, field?: string) => void;\r\n    company: CompanyInterface;\r\n    history: History<any>;\r\n    handleSaveSubmissionReview: (\r\n        submissionId: number,\r\n        data: SubmissionReviewParams\r\n    ) => any;\r\n    changeSubmission: (next: boolean) => void;\r\n    itemsTotalCount?: number;\r\n    currentItemPosition: number;\r\n    localStorage?: LocalStorage;\r\n    requestSubmissionRedo: (\r\n        submissionId: number,\r\n        redo: SubmissionRedoParams\r\n    ) => Promise<string>;\r\n    profile?: UserProfile;\r\n    markSubmissionAsViewedService(teamId: any): void;\r\n    handleCopyChallengeLink: () => void;\r\n    showCopyLinkNotification: boolean;\r\n    handleHideCopyLinkNotification: () => void;\r\n    getSubmissionReview: (submissionId: number) => Promise<SubmissionReview>;\r\n}> = ({\r\n    loading,\r\n    submission,\r\n    review,\r\n    challenge,\r\n    history,\r\n    company,\r\n    modifyScore,\r\n    handleSaveSubmissionReview,\r\n    changeSubmission,\r\n    itemsTotalCount,\r\n    currentItemPosition,\r\n    localStorage,\r\n    requestSubmissionRedo,\r\n    profile,\r\n    markSubmissionAsViewedService,\r\n    handleCopyChallengeLink,\r\n    showCopyLinkNotification,\r\n    handleHideCopyLinkNotification,\r\n    getSubmissionReview\r\n}) => {\r\n    const prevCompanyRef = useRef(company);\r\n    const DO_NOT_SHOW_WARNINGS = 'do_not_show_request_redo_warnings';\r\n\r\n    const [requestRedoOpened, setRequestRedoOpened] = useState(false);\r\n    const [requestRedoReminderOpened, setRequestRedoReminderOpened] =\r\n        useState(false);\r\n    const [doNotShowWarning, setDoNotShowWarning] = useState(false);\r\n    const [reviewPermissionDenied, setReviewPermissionDenied] = useState(false);\r\n\r\n    const showMessage = useShowMessage();\r\n\r\n    useEffect(() => {\r\n        prevCompanyRef.current = company;\r\n    });\r\n    const prevCompany = prevCompanyRef.current;\r\n\r\n    useEffect(() => {\r\n        if ((company && !company.id) || (prevCompany && !prevCompany.id))\r\n            return;\r\n        if (company.id !== prevCompany.id) {\r\n            history.push(ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL);\r\n        }\r\n    }, [company, prevCompany, history]);\r\n\r\n    useEffect(() => {\r\n        const isNew = history.location.state?.isNew;\r\n        const submissionId = history.location.state?.submissionId;\r\n\r\n        if (isNew && submissionId) {\r\n            markSubmissionAsViewedService(submissionId);\r\n        }\r\n    }, [markSubmissionAsViewedService, history]);\r\n\r\n    const saveReview = useCallback(() => {\r\n        if (!review) return;\r\n\r\n        const data: SubmissionReviewParams = {\r\n            note: review.note ?? '',\r\n            clarity: review.clarity ?? 0,\r\n            knowledge: review.knowledge ?? 0,\r\n            confidence: review.confidence ?? 0,\r\n            enthusiasm: review.enthusiasm ?? 0,\r\n            goalAchieved: review.goalAchieved ?? 0\r\n        };\r\n        handleSaveSubmissionReview(submission!.id, data)\r\n            .then(() => history.push(ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL))\r\n            .catch((error: ErrorResult) => {\r\n                switch (error.code) {\r\n                    case 404:\r\n                        showMessage('Challenge has been requested to redo', 'error');\r\n                        history.push(ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL);\r\n                        break;\r\n                    case 409:\r\n                        getSubmissionReview(submission!.id)\r\n                            .then((newReview) => {\r\n                                setRequestRedoReminderOpened(false);\r\n                                showMessage(\r\n                                    `Challenge has been already reviewed by ${newReview.user.firstName} ${newReview.user.lastName}`,\r\n                                    'error'\r\n                                );\r\n                            });\r\n                        break;\r\n                    case 500:\r\n                    case 403:\r\n                        setReviewPermissionDenied(true);\r\n                        showMessage(error.message, 'error');\r\n                        break;\r\n                    default:\r\n                        showMessage(error.message, 'error');\r\n                        break;\r\n                }\r\n            }\r\n        );\r\n\r\n        if (doNotShowWarning && !!localStorage && !!profile) {\r\n            const restrictedUsersList = localStorage.get(DO_NOT_SHOW_WARNINGS);\r\n            let finalUsersList = [];\r\n            if (restrictedUsersList) {\r\n                finalUsersList = JSON.parse(restrictedUsersList);\r\n            }\r\n\r\n            finalUsersList.push(profile.id);\r\n            localStorage.set(\r\n                DO_NOT_SHOW_WARNINGS,\r\n                JSON.stringify(finalUsersList)\r\n            );\r\n        }\r\n    }, [\r\n        localStorage,\r\n        doNotShowWarning,\r\n        handleSaveSubmissionReview,\r\n        submission,\r\n        history,\r\n        profile,\r\n        review,\r\n        getSubmissionReview,\r\n        showMessage\r\n    ]);\r\n\r\n    const onCompleteReviewClicked = useCallback(() => {\r\n        let doNotShowRequestRedoWarning = false;\r\n        const restrictedUsersList =\r\n            localStorage && localStorage.get(DO_NOT_SHOW_WARNINGS);\r\n        if (restrictedUsersList && !!profile) {\r\n            const finalUsersList = JSON.parse(restrictedUsersList);\r\n            doNotShowRequestRedoWarning = finalUsersList.includes(profile.id);\r\n        }\r\n\r\n        if (doNotShowRequestRedoWarning) {\r\n            saveReview();\r\n        } else {\r\n            setRequestRedoReminderOpened(true);\r\n        }\r\n    }, [localStorage, saveReview, profile]);\r\n\r\n    const requestRedoSubmitted = useCallback(\r\n        (data: any) => {\r\n            if (!submission || !data) return;\r\n            setRequestRedoOpened(false);\r\n            const redo: SubmissionRedoParams = {\r\n                senderName: data.name,\r\n                text: data.text\r\n            };\r\n            requestSubmissionRedo(submission.id, redo).then(\r\n                (response: string) => {\r\n                    if (response === 'success') {\r\n                        history.push(ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL);\r\n                    }\r\n                }\r\n            );\r\n        },\r\n        [submission, requestSubmissionRedo, history]\r\n    );\r\n\r\n    const handleViewTraineeDetails = (traineeId?: number) => {\r\n        if (!traineeId) return;\r\n        history.push(\r\n            ROUTES.USER_PERFORMANCE.replace(':userId', traineeId.toString()),\r\n            { useGoBack: true }\r\n        );\r\n    };\r\n\r\n    const handleViewChallenge = (challengeId?: number | string) => {\r\n        if (!challengeId) return;\r\n        pushModal(\r\n            history,\r\n            ROUTES.LIBRARY_SETTINGS.CHALLENGES.SINGLE.replace(\r\n                ':challengeId',\r\n                challengeId.toString()\r\n            )\r\n        );\r\n    };\r\n\r\n    const [videoLoading, setVideoLoading] = useState(false);\r\n\r\n    const handleDownloadVideo = () => {\r\n        if (!submission) return;\r\n        setVideoLoading(true);\r\n        const url = submission?.mediaUrl;\r\n        const fileName = submission.practisSet?.name;\r\n        \r\n        if (url && fileName) {\r\n            handleDownloadVideoFile(url, fileName).then(() =>\r\n                setVideoLoading(false)\r\n            );\r\n        }\r\n    };\r\n\r\n    if (!submission || loading) {\r\n        return (\r\n            <MainWrapper hideHeader={true}>\r\n                <ScreenLoading />\r\n            </MainWrapper>\r\n        );\r\n    }\r\n\r\n    const mode = !submission.reviewedAt ? 'edit' : 'view';\r\n\r\n    return (\r\n        <MainWrapper\r\n            title=\"Submission Details\"\r\n            subTitle={submission.practisSet ? submission.practisSet.name : ''}\r\n            goBackUrl={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL}\r\n            useGoBack={!!history.location.state?.useGoBack}\r\n            htmlPageTitle={`Challenge - ${\r\n                submission.practisSet ? submission.practisSet.name : ''\r\n            } - ${\r\n                submission.user &&\r\n                `${submission.user.firstName} ${submission.user.lastName}`\r\n            } - Practis`}\r\n        >\r\n            <StyledDetailsContainer>\r\n                <StyledDetailsContainerInner>\r\n                    <DetailsSubmissionInfo\r\n                        url={submission.mediaUrl}\r\n                        challenge={\r\n                            challenge &&\r\n                            submission.challenge?.id === challenge.id\r\n                                ? (challenge as any)\r\n                                : submission.challenge!\r\n                        }\r\n                        redirectToChallenge={handleViewChallenge}\r\n                        user={submission.user}\r\n                        action={handleViewTraineeDetails}\r\n                        handleDownloadVideo={handleDownloadVideo}\r\n                        videoLoading={videoLoading}\r\n                        handleCopyLink={handleCopyChallengeLink}\r\n                    />\r\n                    <DetailsSubmissionReview\r\n                        review={review}\r\n                        mode={mode}\r\n                        submitted={submission.createdAt}\r\n                        canRedo={mode === 'edit'}\r\n                        modifyScore={modifyScore}\r\n                        onCompleteReviewClicked={onCompleteReviewClicked}\r\n                        changeSubmission={changeSubmission}\r\n                        itemsTotalCount={itemsTotalCount}\r\n                        currentItemPosition={currentItemPosition}\r\n                        requestRedoClicked={() => setRequestRedoOpened(true)}\r\n                        reviewPermissionDenied={reviewPermissionDenied}\r\n                    />\r\n                    {requestRedoOpened && (\r\n                        <DialogWrapper\r\n                            customization={{\r\n                                width: 480,\r\n                                padding: '31px 32px 27px 40px',\r\n                            }}\r\n                        >\r\n                            <RequestRedo\r\n                                fromUser={\r\n                                    !!profile\r\n                                        ? `${profile.firstName} ${profile.lastName}`\r\n                                        : ''\r\n                                }\r\n                                onSend={requestRedoSubmitted}\r\n                                onClose={() => setRequestRedoOpened(false)}\r\n                            />\r\n                        </DialogWrapper>\r\n                    )}\r\n                    {requestRedoReminderOpened && !reviewPermissionDenied && (\r\n                        <DialogWrapper\r\n                            customization={{\r\n                                width: 400,\r\n                                padding: '30px 32px 43px 40px',\r\n                            }}\r\n                        >\r\n                            <RequestReminder\r\n                                onProceed={saveReview}\r\n                                doNotShowWarning={doNotShowWarning}\r\n                                onShowWarningClicked={(e: any) =>\r\n                                    setDoNotShowWarning(e.target.checked)\r\n                                }\r\n                                onClose={() =>\r\n                                    setRequestRedoReminderOpened(false)\r\n                                }\r\n                            />\r\n                        </DialogWrapper>\r\n                    )}\r\n                </StyledDetailsContainerInner>\r\n            </StyledDetailsContainer>\r\n            {showCopyLinkNotification && (\r\n                <CopyLinkNotification\r\n                    onClose={handleHideCopyLinkNotification}\r\n                />\r\n            )}\r\n        </MainWrapper>\r\n    );\r\n};\r\n\r\nconst SubmissionDetailsContainer = () => {\r\n    const submission = useSubmissionDetailsState();\r\n    const [localOffset, setLocalOffset] = useState(0);\r\n\r\n    const history = useHistory();\r\n    const submissionPagination = useSubmissionPaginationState().submissionIds;\r\n    const submissionPaginationLoading = useSubmissionPaginationState().loading;\r\n    const submissionTotalCount = useSubmissionPaginationState().totalCount;\r\n    const loading = useSubmissionDetailsState().loading;\r\n    const params = useParams<{ submissionId?: string }>();\r\n    const modifyScore = useModifyScoreService();\r\n    const saveSubmissionReview = usePerformSubmissionReviewService();\r\n    const requestSubmissionRedo = useRequestSubmissionRedoService();\r\n    const company = useSelector(getCompanyState);\r\n    const profile = useSelector(getProfileState);\r\n    const localStorage = useLocalStorage();\r\n    const markSubmissionAsViewedService = useMarkSubmissionAsViewedService();\r\n    const getSubmissionDetails = useGetSubmissionDetailsService();\r\n    const getSubmissionFromFeed = useGetSubmissionFromFeedService();\r\n    const getChallenge = useGetChallengeService();\r\n    const { data: challenge, loading: challengeLoading } = useChallengeState();\r\n    const [showCopyLinkNotification, setShowCopyLinkNotification] = useState(false);\r\n    const copyChallengeLink = useCopyChallengeLink();\r\n    const getSubmissionReview = useGetSubmissionReviewService();\r\n    const searchChallengeSubmissionPaginationService =\r\n        useSearchChallengeSubmissionPaginationService();\r\n\r\n    /**\r\n     * @function successGetSubmissionDetailCallback\r\n     * @returns { void }\r\n     */\r\n    const successGetSubmissionDetailCallback = useCallback(\r\n        (submission: SubmissionV2) => {\r\n            if (submission) {\r\n                const challengeId = submission.challenge?.id;\r\n                if (challengeId) {\r\n                    getChallenge(String(challengeId));\r\n                }\r\n            }\r\n        },\r\n        [getChallenge]\r\n    );\r\n\r\n    const state: any = history.location.state;\r\n    const isDirectLink = !state?.useGoBack;\r\n    const locationSearchParams = state?.searchParams as SearchParams | undefined;\r\n    const locationFilters = state?.filters as ChallengeSubmissionFilters | undefined;\r\n\r\n    useEffect(() => {\r\n        if (params.submissionId) {\r\n            const isOwnRoute = history.location.pathname.indexOf(\r\n                ROUTES.SUBMISSION_SETTINGS.CHALLENGES.SINGLE\r\n                    .replace(':submissionId', params.submissionId)\r\n            ) > -1;\r\n            if (!isOwnRoute) return;\r\n            if (isDirectLink) {\r\n                getSubmissionFromFeed(params.submissionId, successGetSubmissionDetailCallback);\r\n            } else {\r\n                getSubmissionDetails(params.submissionId, successGetSubmissionDetailCallback);\r\n            }\r\n        }\r\n    }, [\r\n        history.location.pathname,\r\n        params.submissionId,\r\n        isDirectLink,\r\n        getSubmissionDetails,\r\n        getSubmissionFromFeed,\r\n        successGetSubmissionDetailCallback\r\n    ]);\r\n\r\n    const currentItemPosition = useMemo(() => {\r\n        if (\r\n            submissionPagination &&\r\n            submission?.details &&\r\n            locationSearchParams\r\n        ) {\r\n            const submissionIndex = submissionPagination.findIndex(\r\n                submissionId => submissionId === submission.details!.id\r\n            );\r\n            return locationSearchParams.offset + localOffset + submissionIndex;\r\n        }\r\n        return 0;\r\n    }, [submissionPagination, submission?.details, locationSearchParams, localOffset]);\r\n\r\n    /**\r\n     * @function changeSubmissionHandler\r\n     * @description loads neighbor challenge submission by next/prev id from the submission list\r\n     * if required submission is outside of the loaded list, it increases/decreases offset\r\n     * and loads the next/prev list of submissions and then loads submission details by proper\r\n     * submission id from the new list\r\n     * @param { boolean } next\r\n     * @returns { void }\r\n     */\r\n    const changeSubmissionHandler = useCallback((next: boolean) => {\r\n        if (submissionPagination && !loading && !challengeLoading && locationSearchParams) {\r\n            const submissionIndex = currentItemPosition - locationSearchParams.offset - localOffset;\r\n            if (next) {\r\n                if (currentItemPosition === submissionTotalCount! - 1)\r\n                    return;\r\n                if (submissionIndex === ITEMS_PER_PAGE - 1) {\r\n                    searchChallengeSubmissionPaginationService(\r\n                        {\r\n                            ...locationSearchParams,\r\n                            offset: locationSearchParams.offset + localOffset + ITEMS_PER_PAGE\r\n                        },\r\n                        locationFilters!,\r\n                        (data) => {\r\n                            setLocalOffset(localOffset + ITEMS_PER_PAGE);\r\n                            const nextSubmissionId = data[0];\r\n                            getSubmissionDetails(nextSubmissionId, successGetSubmissionDetailCallback);\r\n                        });\r\n                } else {\r\n                    const nextSubmissionId = submissionPagination[submissionIndex + 1];\r\n                    getSubmissionDetails(nextSubmissionId, successGetSubmissionDetailCallback);\r\n                }\r\n            } else {\r\n                if (currentItemPosition === 0)\r\n                    return;\r\n                if (submissionIndex === 0) {\r\n                    searchChallengeSubmissionPaginationService(\r\n                        {\r\n                            ...locationSearchParams,\r\n                            offset: locationSearchParams.offset + localOffset - ITEMS_PER_PAGE\r\n                        },\r\n                        locationFilters!,\r\n                        (data) => {\r\n                            setLocalOffset(localOffset - ITEMS_PER_PAGE);\r\n                            const nextSubmissionId = data[data.length - 1];\r\n                            getSubmissionDetails(nextSubmissionId, successGetSubmissionDetailCallback);\r\n                        });\r\n                } else {\r\n                    const nextSubmissionId = submissionPagination[submissionIndex - 1];\r\n                    getSubmissionDetails(nextSubmissionId, successGetSubmissionDetailCallback);\r\n                }\r\n            }\r\n        }\r\n    }, [\r\n        currentItemPosition,\r\n        localOffset,\r\n        locationSearchParams,\r\n        locationFilters,\r\n        loading,\r\n        challengeLoading,\r\n        submissionPagination,\r\n        submissionTotalCount,\r\n        searchChallengeSubmissionPaginationService,\r\n        getSubmissionDetails,\r\n        successGetSubmissionDetailCallback\r\n    ]);\r\n\r\n    /**\r\n     * @function handleCopyChallengeLink\r\n     * @description shows a notification modal for the first time or copies link to a clipboard\r\n     * @returns { void }\r\n     */\r\n     const handleCopyChallengeLink = useCallback(() => {\r\n        if (localStorage.get(ChallengeCopiedKeyName)) {\r\n            copyChallengeLink(submission.details!);\r\n        } else {\r\n            setShowCopyLinkNotification(true);\r\n        }\r\n    }, [submission?.details, localStorage, copyChallengeLink]);\r\n\r\n    /**\r\n     * @function handleHideCopyLinkNotification\r\n     * @description hides a notification modal and copies link to a clipboard\r\n     * @returns { void }\r\n     */\r\n     const handleHideCopyLinkNotification = useCallback(() => {\r\n        setShowCopyLinkNotification(false);\r\n        copyChallengeLink(submission.details!);\r\n        localStorage.set(ChallengeCopiedKeyName, true);\r\n    }, [submission?.details, copyChallengeLink, localStorage]);\r\n\r\n    return (\r\n        submission?.error\r\n        ? <UnavailableChallenge />\r\n        : <SubmissionDetails\r\n            submission={submission.details}\r\n            review={submission.review}\r\n            challenge={challenge}\r\n            loading={loading || submissionPaginationLoading}\r\n            history={history}\r\n            company={company}\r\n            modifyScore={modifyScore}\r\n            handleSaveSubmissionReview={saveSubmissionReview}\r\n            changeSubmission={changeSubmissionHandler}\r\n            itemsTotalCount={submissionTotalCount}\r\n            currentItemPosition={currentItemPosition}\r\n            profile={profile}\r\n            localStorage={localStorage}\r\n            requestSubmissionRedo={requestSubmissionRedo}\r\n            markSubmissionAsViewedService={markSubmissionAsViewedService}\r\n            handleCopyChallengeLink={handleCopyChallengeLink}\r\n            showCopyLinkNotification={showCopyLinkNotification}\r\n            handleHideCopyLinkNotification={handleHideCopyLinkNotification}\r\n            getSubmissionReview={getSubmissionReview}\r\n        />\r\n    );\r\n};\r\n\r\nexport default SubmissionDetailsContainer;\r\n","import styled from 'styled-components';\n\nexport const StyledResetContent = styled.div`\n    width: 100%;\n    height: 140px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--ps-grey-10);\n    font-weight: bold;\n    font-size: 14px;\n    padding: 0 5px;\n    line-height: 1.14;\n`;\n\nexport const Header = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 50px;\n    flex-wrap: wrap;\n    margin-bottom: 5px;\n    font-size: 20px;\n    font-weight: bold;\n    color: var(--ps-white-1);\n`;","import LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport {\n    StyledResetContent,\n    Header\n} from './styles';\n\nconst TraineeLogin = () => {\n    return (\n        <LoginAuthWrapper contentWidth={510} hideLogo={true}>\n            <Header>Reset Password</Header>\n            <StyledResetContent>\n                Password has been reset, Open mobile app to log in\n            </StyledResetContent>\n        </LoginAuthWrapper>\n    );\n};\n\nexport default TraineeLogin;\n","import React, { FC, useCallback, useEffect, useState, ChangeEvent } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Fieldset } from '../../../../../ui/components/Fieldset';\r\nimport Checkbox from '../../../../../ui/components/Checkbox';\r\nimport { Variables } from '../../../../../theme/variables';\r\nimport { toggleItemInArray } from '../../../../../helpers/functions/array-helpers';\r\nimport { Button } from '../../../../../ui/components/Button';\r\nimport { PRACTIS_SET_STATUS_ITEMS } from '../../../../../constants/enums';\r\nimport { DueDateFilters } from '../../../../../constants/interfaces/DueDates';\r\nimport OverdueFlag from '../../../../../ui/icons/OverdueFlag';\r\n\r\nconst Container = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: inherit;\r\n    margin-left: 8px;\r\n    margin-right: 8px;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n    display: flex;\r\n    gap: 16px;\r\n    max-height: 416px;\r\n    flex-grow: 1;\r\n    background-color: inherit;\r\n`;\r\n\r\nconst Actions = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-end;\r\n    flex-shrink: 0;\r\n    margin-top: 16px;\r\n`;\r\n\r\nconst StatusContainer = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    width: 158px;\r\n    background-color: inherit;\r\n    height: 114px;\r\n`;\r\n\r\nconst StatusItem = styled.div`\r\n    margin-bottom: 8px;\r\n    display: flex;\r\n    align-items: center;\r\n`;\r\n\r\nconst CheckBoxWrapper = styled.div`\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst ButtonWrapper = styled.div`\r\n    margin-right: 10px;\r\n`;\r\n\r\nconst OverdueFlagWrapped = styled(OverdueFlag)`\r\n    margin-left: 4px;\r\n`;\r\n\r\nconst SelectedSubtitle = styled.div`\r\n    font-size: 11px;\r\n    margin-right: 12px;\r\n    color: ${props => props.theme?.Colors?.steelGrey};\r\n    min-width: 55px;\r\n`;\r\n\r\n// TODO-REFACTOR: filter contants in one place\r\nconst overduesMap: Record<DueDateFilters, { title: string }> = {\r\n    [DueDateFilters.ASSIGNED]: { title: 'Assigned' },\r\n    [DueDateFilters.NO_DUEDATE]: { title: 'No Due Date' },\r\n    [DueDateFilters.OVERDUE]: { title: 'Overdue' },\r\n};\r\n\r\nexport const UserProfileFilters: FC<{\r\n    selectedStatuses: string[];\r\n    savedStatuses: string[];\r\n    handleSelectStatus: (ids: string[]) => void;\r\n    handleSaveStatus: (ids: string[]) => void;\r\n    onSuccessApply: () => void;\r\n    onOverdueChange: (dueDate: DueDateFilters[]) => void;\r\n    dueDate: DueDateFilters[];\r\n    isInvitation?: boolean;\r\n}> = ({\r\n    selectedStatuses,\r\n    savedStatuses,\r\n    handleSelectStatus,\r\n    handleSaveStatus,\r\n    onSuccessApply,\r\n    onOverdueChange,\r\n    dueDate,\r\n    isInvitation\r\n}) => {\r\n    useEffect(() => {\r\n        handleSelectStatus(savedStatuses);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    const [overdues, setOverdues] = useState(dueDate);\r\n\r\n    const handleStatusSelection = useCallback(\r\n        (status: string) => {\r\n            handleSelectStatus(toggleItemInArray(selectedStatuses, status));\r\n        },\r\n        [handleSelectStatus, selectedStatuses]\r\n    );\r\n\r\n    const onApplyHandler = useCallback(() => {\r\n        handleSaveStatus(selectedStatuses);\r\n        onOverdueChange(overdues);\r\n        onSuccessApply();\r\n    }, [handleSaveStatus, selectedStatuses, onSuccessApply, overdues, onOverdueChange]);\r\n\r\n    // TODO refactor filter state management from one parent component\r\n    const onClearHandler = useCallback(() => {\r\n        handleSelectStatus([]);\r\n        setOverdues([]);\r\n    }, [handleSelectStatus]);\r\n\r\n    const onOverdueChangeHandler = useCallback(\r\n        (dueDateIn: DueDateFilters, e: ChangeEvent<HTMLInputElement>) => {\r\n            if (e.target.checked) {\r\n                setOverdues([...overdues, dueDateIn]);\r\n            } else {\r\n                setOverdues(overdues.filter(item => item !== dueDateIn));\r\n            }\r\n        },\r\n        [overdues, setOverdues]\r\n    );\r\n\r\n    const totalFiltersSelectedCount = selectedStatuses.length + overdues.length;\r\n\r\n    return (\r\n        <Container>\r\n            <Wrapper>\r\n               {!isInvitation && (<Fieldset title={'Progress Status'}>\r\n                    <StatusContainer>\r\n                        {PRACTIS_SET_STATUS_ITEMS.map(item => {\r\n                            return (\r\n                                <CheckBoxWrapper key={item.value}>\r\n                                    <Checkbox\r\n                                        key={item.value}\r\n                                        handleChange={() => {\r\n                                            handleStatusSelection(item.value);\r\n                                        }}\r\n                                        checked={selectedStatuses.includes(\r\n                                            item.value\r\n                                        )}\r\n                                        size={12}\r\n                                        label={item.name}\r\n                                        fontSize={13}\r\n                                        fontColor={Variables.Colors.black}\r\n                                        fontWeight={'500'}\r\n                                    />\r\n                                </CheckBoxWrapper>\r\n                            );\r\n                        })}\r\n                    </StatusContainer>\r\n                </Fieldset>)}\r\n                <Fieldset title={'Due Date'}>\r\n                    <StatusContainer>\r\n                        {(Object.keys(\r\n                            overduesMap\r\n                        ) as DueDateFilters[]).map(item => (\r\n                            <StatusItem>\r\n                                <Checkbox\r\n                                    key={item}\r\n                                    checked={overdues.includes(item)}\r\n                                    handleChange={e =>\r\n                                        onOverdueChangeHandler(item, e)\r\n                                    }\r\n                                    label={overduesMap[item].title}\r\n                                    border={Variables.Colors.steelGrey}\r\n                                    size={12}\r\n                                    fontColor={Variables.Colors.black}\r\n                                />\r\n                                {item === DueDateFilters.OVERDUE && <OverdueFlagWrapped />}\r\n                            </StatusItem>\r\n                        ))}\r\n                    </StatusContainer>\r\n                </Fieldset>\r\n            </Wrapper>\r\n            <Actions>\r\n                <SelectedSubtitle>\r\n                    {totalFiltersSelectedCount} selected\r\n                </SelectedSubtitle>\r\n                <ButtonWrapper>\r\n                    <Button\r\n                        width={'104px'}\r\n                        variant={'inverse'}\r\n                        action={() => onClearHandler()}\r\n                        disabled={totalFiltersSelectedCount < 1}\r\n                    >\r\n                        Clear\r\n                    </Button>\r\n                </ButtonWrapper>\r\n                <Button width={'104px'} action={() => onApplyHandler()}>\r\n                    Apply Filter\r\n                </Button>\r\n            </Actions>\r\n        </Container>\r\n    );\r\n};\r\n","import { makeStyles } from '@material-ui/core';\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: 0,\n    },\n}));\n\n","import {\r\n    FC,\r\n    forwardRef,\r\n    MutableRefObject,\r\n    useCallback,\r\n    useEffect,\r\n    useImperativeHandle,\r\n    useRef,\r\n    useState,\r\n    ReactNode,\r\n} from 'react';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport { isEmpty as isLodashEmpty } from 'lodash';\r\n\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../constants/interfaces/filters';\r\nimport { PaginationResult } from '../../../constants/interfaces/PaginationResult';\r\nimport { EnrollmentInterface } from '../../../constants/interfaces/Enrollments';\r\nimport { History } from 'history';\r\nimport { ActionButton, ActionItem } from '../../../ui/components/ActionButton';\r\nimport ROUTES from '../../../routes/routes';\r\nimport { pushModal } from '../../../tools/router';\r\nimport {\r\n    formatDate,\r\n    formatDateWithTimeZone,\r\n} from '../../../helpers/functions/date-convert';\r\nimport {\r\n    UpdatedLabelsState,\r\n    useUpdatedLabelsState,\r\n} from '../../labels/store/states';\r\nimport styled from 'styled-components';\r\nimport { clearSelectedItemIfNotLoaded } from '../../labels/tools';\r\nimport { LoadingComponent } from '../../../ui/components/LoadingCopmonent';\r\nimport { CheckPermission } from '../../permissions';\r\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\r\nimport { useHandleAccessPage } from '../../../helpers/hooks/usePagePermissions';\r\nimport { useUpdateAssignedLibraryPractisSetService } from '../../library/store/services';\r\nimport {\r\n    usePractisSetsEnrollmentsService,\r\n    useRemindUsersService,\r\n    useResetUserPerformanceService,\r\n    useSearchUserPractisSetsService,\r\n    useUnEnrollPractisSetService,\r\n    useUpdateAllPractisSetsCheckedStateService,\r\n    useUpdateTraineeProfilePractisSetsCheckedStateService,\r\n    useUserPerformanceService,\r\n} from '../store/services';\r\nimport {\r\n    useUpdatedUserPractisSetsState,\r\n    useUserPerformanceState,\r\n} from '../store/states';\r\nimport { PerformanceTrainee } from '../../../constants/interfaces/PerformanceTrainee';\r\nimport { EnrollmentStatusEnum } from '../../../constants/interfaces/Enrollments';\r\nimport Box from '../../../ui/icons/Box';\r\nimport { useSearchDebounced } from '../../../helpers/hooks/useSearch';\r\nimport FilterByHandler from '../../../ui/components/Filters/FilterByHandler';\r\nimport { Popup } from '../../../ui/components/Popup';\r\nimport { UserProfileFilters } from './Filters/UserProfileFilters/UserProfileFilters';\r\nimport { isTeamLeader } from '../../../constants/enums';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { UserInterface } from '../../../constants/interfaces/User';\r\nimport { useSessionEffect } from '../../common';\r\nimport GeneralProgressCol from '../../../features/teams/pages/Training/components/ProgressDetails/GeneralProgressCol';\r\nimport { secondsToMinSimple } from '../../../helpers/functions/convert-time';\r\nimport OverdueFlag from '../../../ui/icons/OverdueFlag';\r\nimport { DueDateFilters } from '../../../constants/interfaces/DueDates';\r\nimport { isEmpty } from 'lodash';\r\nimport { TableWrapper } from '../../../ui/components/table-wrapper';\r\nimport { useStyles } from '../pages/Performance/styles';\r\nimport { useOrderBy } from '../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../ui/components/table-wrapper/helper';\r\nimport { useDeleteEnrollmentBulkActionService } from '../../teams/pages/Training/services/EnrollmentBulkActionsService';\r\nimport { useShowConfirmModalDialog } from '../../../ui/components/ModalDialogs/store/actions';\r\n\r\nconst qs = require('query-string');\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst StyledFirstTableContent = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 0;\r\n    height: 100%;\r\n`;\r\n\r\nconst ProgressBarContainer = styled.div`\r\n    width: 128px;\r\n`;\r\n\r\nconst DueDateWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n`;\r\n\r\nconst StyledOverdueFlag = styled(OverdueFlag)`\r\n    margin-left: 8px;\r\n`;\r\n\r\nconst PerformanceSectionRef = forwardRef((props: any, ref) => {\r\n    return <PerformanceSection reff={ref} {...props} />;\r\n});\r\n\r\nconst PerformanceSection: FC<{\r\n    trainee?: PerformanceTrainee;\r\n    practisSets?: PaginationResult<EnrollmentInterface>;\r\n    onPractisSetsUpdate(practisSetsCount: number): void;\r\n    updatedPractisSets?: EnrollmentInterface;\r\n    searchUserPractisSets(searchParams: SearchParams): void;\r\n    fetchPortablePractisSets(): void;\r\n    params: { userId: string };\r\n    history: History<any>;\r\n    profile?: UserInterface;\r\n    selectedPractisSets?: number[];\r\n    loading?: boolean;\r\n    updateAllPractisSetsCheckedState(\r\n        practisSetIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    updateSelectedPractisSetCheckedState(practisSetId: number): void;\r\n    updatedLabels?: UpdatedLabelsState;\r\n    unEnrollPractisSetService(\r\n        unEnrolledPractisSets: number[],\r\n        search?: SearchParams,\r\n        selectAll?: boolean\r\n    ): any;\r\n    isInvitation: boolean;\r\n    onGetTrainee: (userId: number, isInvitation: boolean) => void;\r\n    remindUsers: (enrollmentIds: number[]) => any;\r\n    setAssignPractisSetsAction?(practisSetIds: number[]): void;\r\n    reff?: MutableRefObject<any>;\r\n}> = ({\r\n    trainee,\r\n    practisSets,\r\n    params,\r\n    onPractisSetsUpdate,\r\n    searchUserPractisSets,\r\n    history,\r\n    profile,\r\n    updatedPractisSets,\r\n    selectedPractisSets,\r\n    updateAllPractisSetsCheckedState,\r\n    updateSelectedPractisSetCheckedState,\r\n    updatedLabels,\r\n    loading,\r\n    unEnrollPractisSetService,\r\n    isInvitation,\r\n    onGetTrainee,\r\n    remindUsers,\r\n    setAssignPractisSetsAction,\r\n    reff,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\r\n    const [selectedStatuses, setSelectedStatuses] = useState<string[]>([]);\r\n    const [savedStatuses, setSavedStatuses] = useState<string[]>([]);\r\n\r\n    const canAccessPage = useHandleAccessPage();\r\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        filters: [],\r\n        labelIDs: [],\r\n        orderBy: {},\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        filterByStatus: null,\r\n    };\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setOffset,\r\n        refreshSearchParams,\r\n        setCustom,\r\n    } = useSearchParamsState(initialSearchParams);\r\n\r\n    const location = history.location;\r\n    const pageIndex = parseInt(qs.parse(location.search).page);\r\n    const initialOffset = pageIndex\r\n        ? pageIndex === 1\r\n            ? 0\r\n            : (pageIndex - 1) * ITEMS_PER_PAGE\r\n        : 0;\r\n\r\n    const handleItemEdit = (enrollment: EnrollmentInterface) => {\r\n        pushModal(\r\n            history,\r\n            ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE.replace(\r\n                ':practisSetId',\r\n                enrollment.practisSet.id!.toString()\r\n            )\r\n        );\r\n    };\r\n\r\n    const isCheckboxPartiallySelected =\r\n        practisSets &&\r\n        practisSets.items &&\r\n        selectedPractisSets &&\r\n        selectedPractisSets.length < practisSets.items.length;\r\n\r\n    const updateAllPractisSetCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const setIds =\r\n                (practisSets &&\r\n                    practisSets.items.map((set: EnrollmentInterface) =>\r\n                        Number(set.id)\r\n                    )) ||\r\n                [];\r\n            updateAllPractisSetsCheckedState(\r\n                setIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [\r\n            practisSets,\r\n            isCheckboxPartiallySelected,\r\n            updateAllPractisSetsCheckedState,\r\n        ]\r\n    );\r\n\r\n    const handlePractisSetCheck = (e: any, enrollment: EnrollmentInterface) => {\r\n        e.stopPropagation();\r\n        if (!!enrollment.id) {\r\n            updateSelectedPractisSetCheckedState(enrollment.id);\r\n        }\r\n    };\r\n\r\n    const handleDeleteEnrollmentsSuccess = useCallback(() => {\r\n        if (!!trainee && !!trainee.id) {\r\n            setAssignPractisSetsAction?.([]);\r\n            onGetTrainee(trainee.id, isInvitation);\r\n        }\r\n    }, [trainee, setAssignPractisSetsAction, onGetTrainee, isInvitation]);\r\n\r\n    const handleDeleteEnrollmentsBulkActionService =\r\n        useDeleteEnrollmentBulkActionService(\r\n            {\r\n                userId: (trainee?.id || 0).toString(),\r\n                searchParams,\r\n            },\r\n            'practisSet',\r\n            practisSets?.count,\r\n            handleDeleteEnrollmentsSuccess\r\n        );\r\n\r\n    const handleUnEnrollPractisSet = useCallback(\r\n        (enrollmentIds: number[]) => {\r\n            if (isSelectAll) {\r\n                handleDeleteEnrollmentsBulkActionService();\r\n            } else {\r\n                unEnrollPractisSetService(enrollmentIds).then(() =>\r\n                    handleDeleteEnrollmentsSuccess()\r\n                );\r\n            }\r\n        },\r\n        [\r\n            handleDeleteEnrollmentsBulkActionService,\r\n            handleDeleteEnrollmentsSuccess,\r\n            unEnrollPractisSetService,\r\n            isSelectAll,\r\n        ]\r\n    );\r\n\r\n    /**\r\n     * Set filter list with filterByDueDate\r\n     * @param dueDates - DueDateFilters[], due date types array\r\n     * Returns void\r\n     */\r\n    const filterOverdueHandler = (dueDates: DueDateFilters[]) => {\r\n        setCustom('filterByDueDate', dueDates);\r\n    };\r\n\r\n    const handleViewPractisSetReport = (userId: number, enrollmentId: number) => {\r\n        updateAllPractisSetsCheckedState([], false, false);\r\n        history.push(\r\n            ROUTES.TRAINEE_DETAILS\r\n                .replace(\r\n                    ':userId',\r\n                    userId.toString()\r\n                )\r\n                .replace(\r\n                    ':enrollmentId',\r\n                    enrollmentId.toString()\r\n                ),\r\n            { useGoBack: true }\r\n        );\r\n    };\r\n\r\n    const isOptionsDisabled =\r\n        !selectedPractisSets ||\r\n        (selectedPractisSets && !selectedPractisSets.length);\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const hcName = useOrderBy('pset_name', orderBy, setOrderBy);\r\n\r\n    const hcLastTrainingAt = useOrderBy('last_training', orderBy, setOrderBy);\r\n    const hcAssigned = useOrderBy('assigned', orderBy, setOrderBy);\r\n    const hcStarted = useOrderBy('started', orderBy, setOrderBy);\r\n    const hcAccuracyAvg = useOrderBy('accuracy', orderBy, setOrderBy);\r\n    const hcTrainingTime = useOrderBy('training_time', orderBy, setOrderBy);\r\n    const hcProgressValue = useOrderBy('progress', orderBy, setOrderBy);\r\n    const hcOverdue = useOrderBy('due_date', orderBy, setOrderBy);\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters:\r\n            (searchParams.labelIDs?.length || 0) +\r\n            (searchParams.filterByStatus?.length || 0) +\r\n            (searchParams.filterByDueDate?.length || 0),\r\n        itemsCount: practisSets?.items.length || 0,\r\n    });\r\n\r\n    const onSelectStatus = (status: string[]) => {\r\n        setSelectedStatuses(status);\r\n    };\r\n    const onSaveStatus = (status: string[]) => {\r\n        setSavedStatuses(status);\r\n    };\r\n\r\n    const isTeamLead = isTeamLeader(profile?.role?.name);\r\n\r\n    useImperativeHandle(reff, () => {\r\n        return {\r\n            refreshSearchParams,\r\n        };\r\n    });\r\n\r\n    /**\r\n     * Returns due date column data.\r\n     * @param { Boolean } hasOverdue - Boolean, describes practis set is overdue or not\r\n     * @param { Date } dueDate - Date, due date of practis set\r\n     * @param { string } completedAt - String, date of completion\r\n     * @returns { ReactNode | String }\r\n     */\r\n    const showDueDateData = (\r\n        hasOverdue?: boolean,\r\n        dueDate?: string | null,\r\n        completedAt?: string\r\n    ): ReactNode | string => {\r\n        const Flag = hasOverdue && !completedAt ? <StyledOverdueFlag /> : null;\r\n        const dueDateData = dueDate ? (\r\n            <DueDateWrapper>\r\n                {formatDateWithTimeZone(dueDate)}\r\n                {Flag}\r\n            </DueDateWrapper>\r\n        ) : null;\r\n\r\n        return dueDateData;\r\n    };\r\n\r\n    const filterIconCount =\r\n        savedStatuses.length +\r\n        (searchParams.labelIDs?.length || 0) +\r\n        (searchParams?.filterByDueDate?.length || 0);\r\n\r\n    /**\r\n     * @function onConfirmDeletePractisSet\r\n     * @param { number[] } practisSetIds\r\n     * @returns { void }\r\n     */\r\n    const onConfirmDeletePractisSet = (practisSetIds: number[]): void => {\r\n        !isEmpty(practisSetIds) && handleUnEnrollPractisSet(practisSetIds);\r\n    };\r\n\r\n    /**\r\n     * @function handleDeletePractisSet\r\n     * @param { number[] } ids\r\n     * @returns { void }\r\n     */\r\n    const handleDeletePractisSets = (ids: number[]) => {\r\n        showConfirmationModalDialog({\r\n            modalTitle: 'Are you sure?',\r\n            description: 'User will get notified about this change.',\r\n            cancelButtonText: 'Go Back',\r\n            confirmButtonText: 'Proceed',\r\n            onConfirm: () => onConfirmDeletePractisSet(ids),\r\n            customization: {\r\n                padding: '32px 32px 32px 40px',\r\n                titleMarginBottom: 14,\r\n                descriptionMarginBottom: 37,\r\n            },\r\n        });\r\n    };\r\n\r\n    /**\r\n     * @function handleDeleteMultiplePractisSets\r\n     * @returns { void }\r\n     */\r\n    const handleDeleteMultiplePractisSets = (): void => {\r\n        if (\r\n            !isLodashEmpty(practisSets?.items) &&\r\n            !isLodashEmpty(selectedPractisSets)\r\n        ) {\r\n            const enrollmentIds = practisSets?.items\r\n                .filter(set => selectedPractisSets?.includes(set.id!))\r\n                .map(item => item.id!);\r\n\r\n            enrollmentIds && handleDeletePractisSets(enrollmentIds);\r\n        }\r\n    };\r\n\r\n    useSessionEffect(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchUserPractisSets(searchParams);\r\n    }, [searchUserPractisSets, searchParams]);\r\n\r\n    useEffect(() => {\r\n        if (practisSets && practisSets.items) {\r\n            onPractisSetsUpdate(practisSets.items.length);\r\n        }\r\n    }, [onPractisSetsUpdate, practisSets, practisSets?.items]);\r\n\r\n    useEffect(() => {\r\n        if (updatedPractisSets || updatedLabels?.data) {\r\n            refreshSearchParams();\r\n        }\r\n    }, [updatedPractisSets, updatedLabels?.data, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        const filteredUsers = practisSets\r\n            ? practisSets.items.map(practisSet => Number(practisSet.id))\r\n            : [];\r\n        const usersToClear = clearSelectedItemIfNotLoaded(\r\n            selectedPractisSets,\r\n            filteredUsers\r\n        );\r\n        if (usersToClear && usersToClear.length > 0) {\r\n            updateAllPractisSetsCheckedState(usersToClear, false);\r\n        }\r\n    }, [selectedPractisSets, practisSets, updateAllPractisSetsCheckedState]);\r\n\r\n    useEffect(() => {\r\n        return () => updateAllPractisSetsCheckedState([], false, false);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        updateAllPractisSetsCheckedState([], false, false);\r\n    }, [\r\n        practisSets,\r\n        history.location.pathname,\r\n        updateAllPractisSetsCheckedState,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            selectedPractisSets?.length &&\r\n            selectedPractisSets.length === practisSets?.count\r\n        ) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [practisSets?.count, selectedPractisSets]);\r\n\r\n    useEffect(() => {\r\n        if (pageIndex >= 1) {\r\n            setTimeout(() => {\r\n                setOffset(initialOffset);\r\n            }, 100);\r\n        }\r\n    }, [initialOffset, pageIndex, setOffset]);\r\n\r\n    useEffect(() => {\r\n        setCustom(\r\n            'filterByStatus',\r\n            savedStatuses.length > 0 ? savedStatuses : null\r\n        );\r\n    }, [savedStatuses, setCustom]);\r\n\r\n    useEffect(() => {\r\n        canAccessPage([NEW_PERMISSIONS.LIST_PRACTIS_SET]);\r\n    }, [canAccessPage]);\r\n\r\n    /**\r\n     * @function handlePageChange\r\n     * @param { number } limit\r\n     * @param { number } offset\r\n     * @returns { void }\r\n     */\r\n    const handlePageChange = (limit: number, offset: number): void => {\r\n        setOffset(offset);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        updateAllPractisSetCheck(event.target.checked);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function onRowClick\r\n     * @param { EnrollmentInterface } enrollment\r\n     * @returns { void }\r\n     */\r\n    const onRowClick = (enrollment: EnrollmentInterface) => {\r\n        handleViewPractisSetReport(enrollment.user.id, enrollment.id);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { EnrollmentInterface } enrollment\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (enrollment: EnrollmentInterface): boolean =>\r\n        !!selectedPractisSets &&\r\n        !!enrollment.practisSet.id &&\r\n        selectedPractisSets.includes(enrollment.id);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { EnrollmentInterface } enrollment\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, enrollment: EnrollmentInterface) => {\r\n        handlePractisSetCheck(event, enrollment);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {loading && !isSelectAll && <LoadingComponent />}\r\n            <TableWrapper\r\n                tableStates={tableStates}\r\n                data={practisSets?.items}\r\n                tableToolsOptions={{\r\n                    pagingOptions: {\r\n                        totalCount: practisSets?.count ?? 0,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onPageChange: handlePageChange,\r\n                        searchOrFiltersApplied:\r\n                            searchParams.searchTerm.length ||\r\n                            searchParams.labelIDs?.length,\r\n                        dataTest: 'user-profile-paging',\r\n                    },\r\n                    searchInputOptions: {\r\n                        initialValue: searchParams.searchTerm,\r\n                        onSearchChange: setSearchTerm,\r\n                        isSearchInputDisabled: tableStates.disableSearch,\r\n                        dataTest: 'user-profile-search-input',\r\n                    },\r\n                    isSelectedItemOptionsVisible:\r\n                        !isLodashEmpty(selectedPractisSets) &&\r\n                        !isLodashEmpty(practisSets),\r\n                    selectedItemOptions: {\r\n                        isSelectAll: isSelectAll,\r\n                        selectedLength: selectedPractisSets?.length,\r\n                        totalCount: practisSets?.count,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onClearSelection: () => {\r\n                            updateAllPractisSetsCheckedState([], false, false);\r\n                            setIsSelectAll(false);\r\n                        },\r\n                        onSelectAll: () => {\r\n                            const ids =\r\n                                (practisSets &&\r\n                                    practisSets.items.map(\r\n                                        (item: EnrollmentInterface) =>\r\n                                            item.id as number\r\n                                    )) ||\r\n                                ([] as number[]);\r\n                            updateAllPractisSetsCheckedState(\r\n                                ids,\r\n                                true,\r\n                                isCheckboxPartiallySelected\r\n                            );\r\n                            setIsSelectAll(true);\r\n                        },\r\n                        bulkActionsConfig: {\r\n                            disabled: isOptionsDisabled,\r\n                            removePractisSetPermission: [\r\n                                NEW_PERMISSIONS.UNASSIGN_ENROLLMENT,\r\n                            ],\r\n                            onRemovePractisSetSubmit:\r\n                                handleDeleteMultiplePractisSets,\r\n                            isSelectAll: isSelectAll,\r\n                            totalCount: practisSets?.count,\r\n                        },\r\n                    },\r\n                    filterOptions: {\r\n                        filterComponent: (\r\n                            <Popup<HTMLButtonElement>\r\n                                content={({ hide }) => (\r\n                                    <UserProfileFilters\r\n                                        selectedStatuses={selectedStatuses}\r\n                                        savedStatuses={savedStatuses}\r\n                                        handleSelectStatus={onSelectStatus}\r\n                                        handleSaveStatus={onSaveStatus}\r\n                                        onSuccessApply={() => hide()}\r\n                                        onOverdueChange={filterOverdueHandler}\r\n                                        dueDate={\r\n                                            (searchParams.filterByDueDate as DueDateFilters[]) ||\r\n                                            []\r\n                                        }\r\n                                        isInvitation={isInvitation}\r\n                                    />\r\n                                )}\r\n                                horizontalOffset={216}\r\n                            >\r\n                                {(ref, { toggleShown, shown }) => (\r\n                                    <FilterByHandler\r\n                                        ref={ref}\r\n                                        open={shown}\r\n                                        toggleOpen={toggleShown}\r\n                                        filtersCount={filterIconCount}\r\n                                        disabled={tableStates.disableFilters}\r\n                                        dataTest=\"user-profile-filters\"\r\n                                    />\r\n                                )}\r\n                            </Popup>\r\n                        ),\r\n                    },\r\n                }}\r\n                tableEmptyStateConfigurations={{\r\n                    shouldShowEmptyState:\r\n                        !loading && practisSets?.items?.length === 0,\r\n                    noEntriesOptions: {\r\n                        icon: Box,\r\n                        text: 'No Practis Sets Assigned Yet',\r\n                        dataTest: 'no-user-practis-sets',\r\n                        width: '140px'\r\n                    },\r\n                    noSearchResultsOptions: {\r\n                        entityName: 'Practis Sets',\r\n                        dataTest: 'no-found-user-practis-sets',\r\n                    },\r\n                }}\r\n                configurations={{\r\n                    masterCheckBoxConfig: {\r\n                        checked:\r\n                            !!selectedPractisSets &&\r\n                            !!selectedPractisSets.length,\r\n                        disabled:\r\n                            !practisSets || practisSets?.items?.length < 1,\r\n                        partial:\r\n                            (practisSets?.count &&\r\n                                practisSets.count > ITEMS_PER_PAGE &&\r\n                                !isSelectAll) ||\r\n                            isCheckboxPartiallySelected ||\r\n                            false,\r\n                        handleCheck: onCheckMasterCheckbox,\r\n                        dataTest: 'user-profile-master-checkbox',\r\n                    },\r\n                    columns: [\r\n                        {\r\n                            title: 'Practis Sets',\r\n                            width: 19,\r\n                            ...hcName,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'practis-sets-column',\r\n                        },\r\n                        {\r\n                            title: 'Due Date',\r\n                            width: 8,\r\n                            ...hcOverdue,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'due-date-column',\r\n                        },\r\n                        {\r\n                            title: 'Progress',\r\n                            width: 12,\r\n                            ...(isInvitation ? null : hcProgressValue),\r\n                            disabled: tableStates.disableSorting,\r\n                            withTooltip: true,\r\n                            tooltipText:\r\n                                'The percentage completion of all the items in a Practis Set.',\r\n                            dataTest: 'progress-column',\r\n                        },\r\n                        {\r\n                            title: 'Accuracy',\r\n                            width: 12,\r\n                            ...(isInvitation ? null : hcAccuracyAvg),\r\n                            disabled: tableStates.disableSorting,\r\n                            withTooltip: true,\r\n                            tooltipText:\r\n                                'The average of the accuracy scores for all submitted scenario accuracy tests.',\r\n                            dataTest: 'accuracy-column',\r\n                        },\r\n                        {\r\n                            title: 'Training Time',\r\n                            width: 15,\r\n                            ...(isInvitation ? null : hcTrainingTime),\r\n                            disabled: tableStates.disableSorting,\r\n                            withTooltip: true,\r\n                            tooltipText:\r\n                                'The total time spent by a user learning material.',\r\n                            dataTest: 'training-time-column',\r\n                        },\r\n                        {\r\n                            title: 'Assigned',\r\n                            width: 15,\r\n                            ...hcAssigned,\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'assigned-column',\r\n                        },\r\n                        {\r\n                            title: 'Started',\r\n                            width: 15,\r\n                            ...(isInvitation ? null : hcStarted),\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'started-column',\r\n                        },\r\n                        {\r\n                            title: 'Last Training',\r\n                            width: 8,\r\n                            ...(isInvitation ? null : hcLastTrainingAt),\r\n                            disabled: tableStates.disableSorting,\r\n                            dataTest: 'last-training-column',\r\n                        },\r\n                        {\r\n                            width: 2,\r\n                        },\r\n                    ],\r\n                    rowConfig: {\r\n                        onRowClick: onRowClick,\r\n                        onRowCheckHandler: onRowCheckHandler,\r\n                        isRowChecked: checkIsRowChecked,\r\n                        dataTest: 'user-practis-set-item',\r\n\r\n                        cells: [\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.practisSet.name,\r\n                                fieldProps: {\r\n                                    isOverFlowText: true,\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) => enrollment?.practisSet.name,\r\n                                    dataTest: 'user-practis-set-name',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.dueDate,\r\n                                fieldProps: {\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) =>\r\n                                        showDueDateData(\r\n                                            enrollment.hasOverdue,\r\n                                            enrollment.dueDate,\r\n                                            enrollment.completedAt\r\n                                        ) ?? '',\r\n                                    dataTest: 'user-practis-set-due-date',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'CUSTOM_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                getCustomFieldComponent: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => (\r\n                                    <StyledFirstTableContent data-test=\"user-practis-set-progress\">\r\n                                        {!isInvitation ? (\r\n                                            <ProgressBarContainer>\r\n                                                <GeneralProgressCol\r\n                                                    count={Math.round(\r\n                                                        enrollment.progress *\r\n                                                            100\r\n                                                    )}\r\n                                                    max={100}\r\n                                                    completedAt={\r\n                                                        enrollment.completedAt\r\n                                                    }\r\n                                                    status={enrollment.status}\r\n                                                />\r\n                                            </ProgressBarContainer>\r\n                                        ) : (\r\n                                            'Not Started'\r\n                                        )}\r\n                                    </StyledFirstTableContent>\r\n                                ),\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.averageAccuracy,\r\n                                fieldProps: {\r\n                                    isOverFlowText: true,\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) =>\r\n                                        enrollment?.averageAccuracy &&\r\n                                        `${Math.floor(\r\n                                            enrollment.averageAccuracy * 100\r\n                                        )}%`,\r\n                                    dataTest: 'user-practis-set-accuracy',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.trainingTime,\r\n                                fieldProps: {\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) =>\r\n                                        enrollment.trainingTime &&\r\n                                        `${secondsToMinSimple(\r\n                                            enrollment.trainingTime\r\n                                        )}`,\r\n                                    dataTest: 'user-practis-set-training-time',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.createdAt,\r\n                                fieldProps: {\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) => formatDate(enrollment?.createdAt),\r\n                                    dataTest: 'user-practis-set-creation-date',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.startedAt,\r\n                                fieldProps: {\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) =>\r\n                                        enrollment.status ===\r\n                                            EnrollmentStatusEnum.PENDING ||\r\n                                        isInvitation\r\n                                            ? ''\r\n                                            : enrollment.startedAt\r\n                                            ? formatDate(enrollment.startedAt)\r\n                                            : '',\r\n                                    dataTest: 'user-practis-set-enroll-date',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                shouldShowEmptyCell: (\r\n                                    enrollment: EnrollmentInterface\r\n                                ) => !enrollment?.lastTrainingAt,\r\n                                fieldProps: {\r\n                                    renderTitle: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) => formatDate(enrollment?.lastTrainingAt),\r\n                                    dataTest: 'user-practis-set-last-training',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LIST_ACTIONS',\r\n                                cellClassName: classes.customTableCellStyle,\r\n                                fieldProps: {\r\n                                    getListActionsComponent: (\r\n                                        enrollment: EnrollmentInterface\r\n                                    ) => (\r\n                                        <ActionButton\r\n                                            customWidth={227}\r\n                                            isHidden={\r\n                                                !!selectedPractisSets?.length\r\n                                            }\r\n                                            dataTest=\"user-practis-set-menu\"\r\n                                        >\r\n                                            <CheckPermission\r\n                                                permissions={[\r\n                                                    NEW_PERMISSIONS.VIEW_USER_PRACTIS_SET_REPORT,\r\n                                                ]}\r\n                                            >\r\n                                                <ActionItem\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        handleViewPractisSetReport(\r\n                                                            enrollment.user.id,\r\n                                                            enrollment.id\r\n                                                        );\r\n                                                    }}\r\n                                                    dataTest=\"view-practis-set-report\"\r\n                                                >\r\n                                                    View Practis Set Report\r\n                                                </ActionItem>\r\n                                            </CheckPermission>\r\n                                            <CheckPermission\r\n                                                permissions={[\r\n                                                    NEW_PERMISSIONS.VIEW_USER_PRACTIS_SET_REPORT,\r\n                                                ]}\r\n                                            >\r\n                                                <ActionItem\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        handleItemEdit(\r\n                                                            enrollment\r\n                                                        );\r\n                                                    }}\r\n                                                    dataTest={`${\r\n                                                        isTeamLead\r\n                                                            ? 'view'\r\n                                                            : 'edit'\r\n                                                    }-practis-set`}\r\n                                                >\r\n                                                    {isTeamLead\r\n                                                        ? 'View'\r\n                                                        : 'Edit'}{' '}\r\n                                                    Practis Set\r\n                                                </ActionItem>\r\n                                            </CheckPermission>\r\n\r\n                                            {!(enrollment.progress !== null) &&\r\n                                                !enrollment.startedAt &&\r\n                                                !isInvitation && (\r\n                                                    <ActionItem\r\n                                                        onClick={e => {\r\n                                                            remindUsers([\r\n                                                                enrollment.id ??\r\n                                                                    0,\r\n                                                            ]);\r\n                                                        }}\r\n                                                        dataTest=\"remind-practis-set\"\r\n                                                    >\r\n                                                        Remind\r\n                                                    </ActionItem>\r\n                                                )}\r\n                                            <CheckPermission\r\n                                                permissions={[\r\n                                                    NEW_PERMISSIONS.UNASSIGN_ENROLLMENT,\r\n                                                ]}\r\n                                            >\r\n                                                <ActionItem\r\n                                                    destructive={true}\r\n                                                    onClick={e => {\r\n                                                        e.stopPropagation();\r\n                                                        handleDeletePractisSets(\r\n                                                            [enrollment.id!]\r\n                                                        );\r\n                                                    }}\r\n                                                    dataTest=\"unassign-practis-set\"\r\n                                                >\r\n                                                    Unassign Practis Set\r\n                                                </ActionItem>\r\n                                            </CheckPermission>\r\n                                        </ActionButton>\r\n                                    ),\r\n                                },\r\n                            },\r\n                        ],\r\n                    },\r\n                }}\r\n            />\r\n        </>\r\n    );\r\n};\r\n\r\nexport const PerformanceSectionContainerRef = forwardRef((props: any, ref) => {\r\n    return <PerformanceSectionContainer reff={ref} {...props} />;\r\n});\r\n\r\nexport const PerformanceSectionContainer: FC<{\r\n    isInvitation: boolean;\r\n    onPractisSetsUpdate(practisSetsCount: number): void;\r\n    reff?: MutableRefObject<any>;\r\n}> = ({ isInvitation, onPractisSetsUpdate, reff }) => {\r\n    const trainee = useUserPerformanceState();\r\n    const params: { userId: string } = useParams();\r\n\r\n    const history = useHistory();\r\n    const profile = useSelector(getProfileState);\r\n    const getUserPerformance = useUserPerformanceService();\r\n    const remindUsers = useRemindUsersService();\r\n    const userId = trainee?.data?.id?.toString() || '';\r\n    const getUserPractisSets = useSearchUserPractisSetsService(userId);\r\n    const fetchPortablePractis = usePractisSetsEnrollmentsService(userId);\r\n\r\n    const searchUserPractisSets = getUserPractisSets;\r\n    const updatedUserPractisSetsState = useUpdatedUserPractisSetsState();\r\n    const searchUserPractisSetsDebounced = useSearchDebounced(\r\n        searchUserPractisSets\r\n    );\r\n\r\n    const updateAllPractisSetsCheckedState =\r\n        useUpdateAllPractisSetsCheckedStateService();\r\n    const updateSelectedPractisSetCheckedState =\r\n        useUpdateTraineeProfilePractisSetsCheckedStateService();\r\n    const unEnrollPractisSetService = useUnEnrollPractisSetService();\r\n    const updatedLabels = useUpdatedLabelsState();\r\n    const setAssignPractisSetsAction =\r\n        useUpdateAssignedLibraryPractisSetService();\r\n    const resetUserPerformance = useResetUserPerformanceService();\r\n\r\n    const perfSecConRef = useRef<any>(null);\r\n\r\n    useImperativeHandle(reff, () => {\r\n        return {\r\n            refreshPractisSetsSearch: () =>\r\n                perfSecConRef.current?.refreshSearchParams(),\r\n        };\r\n    });\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetUserPerformance();\r\n        };\r\n    }, [resetUserPerformance]);\r\n\r\n    return (\r\n        <PerformanceSectionRef\r\n            trainee={trainee.data}\r\n            params={params}\r\n            history={history}\r\n            profile={profile}\r\n            searchUserPractisSets={searchUserPractisSetsDebounced}\r\n            fetchPortablePractisSets={fetchPortablePractis}\r\n            practisSets={trainee.practisSets}\r\n            loading={trainee.loading || trainee.practisSetsLoading}\r\n            selectedPractisSets={trainee.selectedPractisSets}\r\n            updatedPractisSets={updatedUserPractisSetsState.data}\r\n            updateAllPractisSetsCheckedState={updateAllPractisSetsCheckedState}\r\n            updateSelectedPractisSetCheckedState={\r\n                updateSelectedPractisSetCheckedState\r\n            }\r\n            setAssignPractisSetsAction={setAssignPractisSetsAction}\r\n            updatedLabels={updatedLabels}\r\n            unEnrollPractisSetService={unEnrollPractisSetService}\r\n            isInvitation={isInvitation}\r\n            onGetTrainee={getUserPerformance}\r\n            remindUsers={remindUsers}\r\n            ref={perfSecConRef}\r\n            onPractisSetsUpdate={onPractisSetsUpdate}\r\n        />\r\n    );\r\n};\r\n\r\nexport default PerformanceSectionContainer;","import React, { FC, useCallback, useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { PortableLabelsWithStore } from '../../../../../../portableLabels';\r\nimport { useCalculatePreSelectedLabels } from '../../../../../../labels/tools';\r\nimport { useIfChanged } from '../../../../../../../helpers/hooks/usePreviousData';\r\nimport {\r\n    useResetSelectedLabels,\r\n    useSelectLabels,\r\n} from '../../../../../../portableLabels/store/hors/withLabels/services';\r\nimport { useLabelsState } from '../../../../../../portableLabels/store/hors/withLabels/states';\r\nimport { getCompanyState } from '../../../../../../../pages/CompanySettings/store/reducers';\r\nimport { PerformanceTrainee } from '../../../../../../../constants/interfaces/PerformanceTrainee';\r\n\r\nexport const FilterLabels: FC<{\r\n    user?: PerformanceTrainee;\r\n}> = ({ user }) => {\r\n    const labelsState = useLabelsState();\r\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabels();\r\n    const company = useSelector(getCompanyState);\r\n    const select = useSelectLabels();\r\n    const resetSelected = useResetSelectedLabels();\r\n    const ifCompanyChanged = useIfChanged(company);\r\n\r\n    const getPreselectedLabels = useCallback((): number[] | null => {\r\n        if (user) {\r\n            const processedUser = {\r\n                ...user,\r\n                labels:\r\n                    user?.labels?.map((labelId: number) => ({ id: labelId })) ??\r\n                    [],\r\n            };\r\n\r\n            const { preAssignedLabels } = calculatePreSelectedLabels(\r\n                [user.id!],\r\n                {\r\n                    items: [processedUser],\r\n                }\r\n            );\r\n            return preAssignedLabels;\r\n        }\r\n\r\n        return null;\r\n    }, [user, calculatePreSelectedLabels]);\r\n\r\n    const setDefaultState = useCallback(() => {\r\n        const preselectedLabels = getPreselectedLabels();\r\n\r\n        if (preselectedLabels !== null) {\r\n            select(preselectedLabels);\r\n        }\r\n    }, [select, getPreselectedLabels]);\r\n\r\n    useEffect(() => {\r\n        setDefaultState();\r\n    }, [setDefaultState, user]);\r\n\r\n    useEffect(() => {\r\n        setDefaultState();\r\n    }, [setDefaultState]);\r\n\r\n    useEffect(() => {\r\n        if (ifCompanyChanged) {\r\n            resetSelected();\r\n            setDefaultState();\r\n\r\n            const preselectedLabels = getPreselectedLabels();\r\n\r\n            if (preselectedLabels !== null) {\r\n                select(preselectedLabels);\r\n            }\r\n        }\r\n    }, [\r\n        getPreselectedLabels,\r\n        ifCompanyChanged,\r\n        labelsState.selected,\r\n        select,\r\n        resetSelected,\r\n        setDefaultState,\r\n    ]);\r\n\r\n    return (\r\n        <PortableLabelsWithStore\r\n            showSelectActions\r\n            showSave={false}\r\n            showSearch\r\n        />\r\n    );\r\n};\r\n","import React, { FC, useEffect } from 'react';\r\nimport { useCalculatePreSelectedPractisSets } from '../../../../../../portablePractisSets/tools';\r\nimport { PortablePractisSetsWithStore } from '../../../../../../portablePractisSets';\r\nimport { useSelectMultiplePractisSets } from '../../../../../../portablePractisSets/store/hors/withPractisSets/services';\r\nimport { PractisSetWithDueDate } from '../../../../../../../constants/interfaces/Draft';\r\n\r\nconst FilterPractisSets: FC<{\r\n    practisSetDueDates: PractisSetWithDueDate[] | undefined;\r\n    setInitialPractisSets?(practisSetId: PractisSetWithDueDate[]): void;\r\n}> = ({ practisSetDueDates, setInitialPractisSets }) => {\r\n    const setPractisSets = useSelectMultiplePractisSets();\r\n    const calculatePreSelectedPractisSets = useCalculatePreSelectedPractisSets();\r\n\r\n    useEffect(() => {\r\n        if (setInitialPractisSets) {\r\n            let practisSetsToSet = practisSetDueDates ?? []\r\n            setInitialPractisSets(practisSetsToSet);\r\n            setPractisSets(practisSetsToSet);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [calculatePreSelectedPractisSets]);\r\n\r\n    return (\r\n        <PortablePractisSetsWithStore\r\n            showSave={false}\r\n            showSelectActions={true}\r\n            showSearch={true}\r\n            resetSelectedOnUnmount={true}\r\n        />\r\n    );\r\n};\r\n\r\nexport default FilterPractisSets;\r\n","import React, { FC, useEffect } from 'react';\r\nimport { PortableTeamsWithStore } from '../../../../../../portableTeams';\r\nimport { PerformanceTrainee } from '../../../../../../../constants/interfaces/PerformanceTrainee';\r\nimport { useSelectMultipleTeams } from '../../../../../../portableTeams/store/hors/withTeams/services';\r\n\r\nconst FilterTeams: FC<{\r\n    user?: PerformanceTrainee;\r\n    setInitialTeams?: boolean;\r\n    showDefaultMembers?: boolean;\r\n}> = ({ user, showDefaultMembers, setInitialTeams }) => {\r\n    const setTeams = useSelectMultipleTeams();\r\n\r\n    useEffect(() => {\r\n        if (setInitialTeams) {\r\n            const preSelectedTeams = user?.teams ?? [];\r\n        \r\n            setTeams(preSelectedTeams);\r\n        }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n        <PortableTeamsWithStore\r\n            showDefaultMembers={showDefaultMembers}\r\n            showSave={false}\r\n            showSelectActions={true}\r\n            fetchOnMount={false}\r\n            showSearch={true}\r\n            resetSelectedOnUnmount={true}\r\n        />\r\n    );\r\n};\r\n\r\nexport default FilterTeams;\r\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    z-index: 2;\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nexport const Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nexport const LabelsContainer = styled.div`\n    width: 208px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const PractisSetsContainer = styled.div`\n    width: 312px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nexport const ButtonContainer = styled.div`\n    margin-right: 16px;\n`;\n\n","import { FC, useState } from 'react';\r\nimport { useCalculateDeletedLabels } from '../../../../labels/tools';\r\nimport { Button } from '../../../../../ui/components/Button';\r\nimport { Fieldset } from '../../../../../ui/components/Fieldset';\r\nimport { FilterLabels } from './components/FilterLabels/FilterLabels';\r\nimport FilterPractisSets from './components/FilterPractisSets/FilterPractisSets';\r\nimport {\r\n    useCalculateDeletedEnrollments,\r\n    calculateCreatedUpdatedEnrollmentIds,\r\n} from '../../../../portablePractisSets/tools';\r\nimport { usePractisSetsState } from '../../../../portablePractisSets/store/hors/withPractisSets/states';\r\nimport { useLabelsState } from '../../../../portableLabels/store/hors/withLabels/states';\r\nimport FilterTeams from './components/FilterTeams/FilterTeams';\r\nimport { useTeamsState } from '../../../../portableTeams/store/hors/withTeams/states';\r\nimport { useCalculateDeletedTeams } from '../../../../portableTeams/tools';\r\nimport { PerformanceTrainee } from '../../../../../constants/interfaces/PerformanceTrainee';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../../../pages/UserProfile/store/reducers';\r\nimport {\r\n    isCompanyAdminRole,\r\n    isPractisAdminRole,\r\n    isTeamLeader,\r\n} from '../../../../../constants/enums';\r\nimport { useUserPerformanceState } from '../../../store/states';\r\nimport { PractisSetWithDueDate } from '../../../../../constants/interfaces/Draft';\r\nimport dayjs from 'dayjs';\r\nimport { DATE_FORMAT } from '../../../../../constants/interfaces/DueDates';\r\nimport {\r\n    Actions,\r\n    ButtonContainer,\r\n    Container,\r\n    LabelsContainer,\r\n    PractisSetsContainer,\r\n    TeamsContainer,\r\n    Wrapper,\r\n} from './styles';\r\nimport { EnrollmentsDueDateType } from '../../../../../api/enrollments/types';\r\n\r\nexport const AssignFilters: FC<{\r\n    user?: PerformanceTrainee;\r\n    assignFilters(\r\n        assignedLabels: number[],\r\n        deletedLabels: number[],\r\n        assignedPractisSets: PractisSetWithDueDate[],\r\n        deletedEnrollmentIds: number[],\r\n        assignedTeams: number[],\r\n        deletedTeams: number[],\r\n        updatedEnrollments: EnrollmentsDueDateType[]\r\n    ): Promise<boolean>;\r\n    onSuccessApply: (isCancel?: boolean) => void;\r\n}> = ({ user, assignFilters, onSuccessApply }) => {\r\n    const [saving, setSaving] = useState(false);\r\n\r\n    const { selected: selectedLabels } = useLabelsState();\r\n    const trainee = useUserPerformanceState();\r\n\r\n    const selectedPractisSets: PractisSetWithDueDate[] =\r\n        trainee?._practisSets?.assignFilters?.data?.items?.map(practisSet => ({\r\n            practisSetId: practisSet.id ?? 0,\r\n            dueDate: practisSet?.dueDate\r\n                ? dayjs(practisSet.dueDate).format(DATE_FORMAT)\r\n                : null,\r\n        })) ?? [];\r\n\r\n    const { selected: selectedPractisSetsState } = usePractisSetsState();\r\n    const { selected: selectedTeams } = useTeamsState();\r\n    const getDeletedLabels = useCalculateDeletedLabels();\r\n    const getDeletedEnrollmentIds = useCalculateDeletedEnrollments();\r\n\r\n    const getDeletedTeams = useCalculateDeletedTeams();\r\n    const [initialPractisSets, setInitialPractisSets] =\r\n        useState<PractisSetWithDueDate[]>(selectedPractisSets);\r\n    const profile = useSelector(getProfileState);\r\n\r\n    const handleApplyFilters = () => {\r\n        const assignedLabels = selectedLabels.filter(x => x > 0);\r\n        const deletedLabels = getDeletedLabels(selectedLabels);\r\n\r\n        const deletedEnrollmentIds = getDeletedEnrollmentIds(\r\n            trainee?._practisSets?.assignFilters?.data?.items, \r\n            selectedPractisSetsState.map(\r\n                practisSetWithDueDate => practisSetWithDueDate.practisSetId\r\n            ),\r\n            initialPractisSets.map(\r\n                practisSetWithDueDate => practisSetWithDueDate.practisSetId\r\n        ));\r\n\r\n        const { addedPractisSets, updatedEnrollments } = calculateCreatedUpdatedEnrollmentIds(\r\n            trainee?._practisSets?.assignFilters?.data?.items,\r\n            selectedPractisSetsState,\r\n            initialPractisSets);\r\n        \r\n        const assignedTeams = selectedTeams.filter(x => x > 0);\r\n        const initialTeamIds = user?.teams.map((teamId: number) => teamId) || [];\r\n        const deletedTeams = getDeletedTeams(selectedTeams, initialTeamIds);\r\n        setSaving(true);\r\n\r\n        assignFilters(\r\n            assignedLabels,\r\n            deletedLabels,\r\n            addedPractisSets,\r\n            deletedEnrollmentIds,\r\n            assignedTeams,\r\n            deletedTeams,\r\n            updatedEnrollments\r\n        ).then(() => {\r\n            onSuccessApply();\r\n            setSaving(false);\r\n        });\r\n    };\r\n\r\n    return (\r\n        <Container>\r\n            <Wrapper>\r\n                {(!isTeamLeader(profile?.role?.name) ||\r\n                    isCompanyAdminRole(profile?.role?.name)) &&\r\n                    !isPractisAdminRole(user?.role?.name) && (\r\n                        <Fieldset\r\n                            title={'Teams'}\r\n                            dataTest=\"user-profile-assign-teams\"\r\n                        >\r\n                            <TeamsContainer>\r\n                                <FilterTeams\r\n                                    user={user}\r\n                                    setInitialTeams={true}\r\n                                    showDefaultMembers={true}\r\n                                />\r\n                            </TeamsContainer>\r\n                        </Fieldset>\r\n                    )}\r\n                <Fieldset\r\n                    title={'Practis Sets'}\r\n                    dataTest=\"user-profile-assign-practis-sets\"\r\n                >\r\n                    <PractisSetsContainer>\r\n                        <FilterPractisSets\r\n                            practisSetDueDates={selectedPractisSets}\r\n                            setInitialPractisSets={setInitialPractisSets}\r\n                        />\r\n                    </PractisSetsContainer>\r\n                </Fieldset>\r\n                <Fieldset\r\n                    title={'Labels'}\r\n                    dataTest=\"labels-section-title\"\r\n                >\r\n                    <LabelsContainer>\r\n                        <FilterLabels user={user} />\r\n                    </LabelsContainer>\r\n                </Fieldset>\r\n            </Wrapper>\r\n            <Actions>\r\n                <ButtonContainer>\r\n                    <Button\r\n                        label={'Cancel'}\r\n                        variant={'inverse'}\r\n                        action={() => onSuccessApply(true)}\r\n                        width={'112px'}\r\n                        disabled={saving}\r\n                    />\r\n                </ButtonContainer>\r\n                <Button\r\n                    label={'Apply'}\r\n                    action={handleApplyFilters}\r\n                    width={'112px'}\r\n                    loading={saving}\r\n                />\r\n            </Actions>\r\n        </Container>\r\n    );\r\n};\r\n","import { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport Skeleton from '@material-ui/lab/Skeleton';\n\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport styled from 'styled-components';\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport {\n    isCompanyAdminRole,\n    isPractisAdminRole,\n    pendingUserRoleTitle,\n    userRoleTitle,\n    isTeamLeader,\n} from '../../../../constants/enums';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport ROUTES from '../../../../routes/routes';\nimport { useHistory, useParams } from 'react-router';\nimport {\n    UserProfile,\n    UserInterface,\n} from '../../../../constants/interfaces/User';\nimport { PerformanceTrainee } from '../../../../constants/interfaces/PerformanceTrainee';\nimport { useUserPerformanceState } from '../../store/states';\nimport {\n    useNudgeTraineesService,\n    useAssignFiltersToUserService,\n    useFetchUserAllPractisSets,\n    useUserPerformanceService,\n} from '../../store/services';\nimport { useLabelsState } from '../../../labels/store/states';\nimport { useLibraryPractisSetState } from '../../../library/store/states';\nimport { useUpdateAssignedLibraryPractisSetService } from '../../../library/store/services';\nimport {\n    useSetAssignLabelsActionService,\n    useSetPreviouslyAssignedLabelsAction,\n} from '../../../labels/store/services';\nimport { treeToList } from '../../../../helpers/functions/tree-to-list';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useSelector } from 'react-redux';\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\nimport { History } from 'history';\nimport { CheckPermission } from '../../../permissions';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { Button } from '../../../../ui/components/Button';\nimport { PerformanceSectionContainerRef } from '../../components/PerformanceSection';\nimport { usePermissionsState } from '../../../permissions/store/state';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport { Variables } from '../../../../theme/variables';\nimport { WithPractisSetsContext } from '../../../portablePractisSets';\nimport { Popup } from '../../../../ui/components/Popup';\nimport UpArrow from '../../../../ui/icons/UpArrow';\nimport DownArrow from '../../../../ui/icons/DownArrow';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport { AssignFilters } from '../../components/Filters/UserProfileFilters/AssignFilters';\nimport { WithTeamsContext } from '../../../portableTeams';\nimport { PractisSetWithDueDate } from '../../../../constants/interfaces/Draft';\nimport { TableRefresh } from '../../../../ui/components/table-wrapper/table-refresh';\nimport { TableDivider } from '../../../../ui/components/table-wrapper/table-divider';\nimport { NudgeUser } from '../../../../ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser';\nimport { EnrollmentsDueDateType } from '../../../../api/enrollments/types';\nimport { NudgeData } from '../../../../api/alert/types';\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\n\nconst StyledContainer = styled.div``;\n\nconst StyledUserDetailsInfo = styled.div`\n    display: flex;\n    width: 100%;\n    justify-content: space-between;\n`;\n\nconst ReportGeneralInfoWrapper = styled.div`\n    display: flex;\n    justify-content: space-between;\n    padding: 17px 0 17px 0;\n    flex-wrap: wrap;\n`;\n\nconst StyledDetailsAvatar = styled.div`\n    height: 48px;\n    width: 48px;\n    border-radius: 4px;\n    margin-right: 22px;\n    overflow: hidden;\n`;\n\nconst StyledUserInfoWrapper = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nconst StyledUserInfoContainer = styled.div`\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst StyledUserInfo = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n`;\n\nconst UserRole = styled.p`\n    font-size: 11px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin: 0;\n    line-height: 1.2;\n    text-transform: capitalize;\n`;\n\nconst StyledName = styled.div<{ isFlex?: boolean }>`\n    ${props => !!props.isFlex && `display: flex; align-items: center;`}\n    font-size: 15px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.black};\n`;\n\nconst StyledEmail = styled.div`\n    font-size: 11px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst Content = styled.div``;\n\nconst StyledUserOptions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    align-content: center;\n\n    > * {\n        &:not(:last-child) {\n            margin-right: 16px;\n        }\n    }\n`;\n\nconst StyledPendingTitle = styled.span`\n    font-size: 13px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.brown};\n`;\n\nconst StyledPendingInvitationLabel = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    height: 24px;\n    border-radius: 20px;\n    background-color: ${props => props.theme.Colors.macaroniAndCheeseOpaque};\n    padding: 4px 12px;\n    margin-left: 10px;\n`;\n\nconst StyledAdditionalInfo = styled.span`\n    font-size: 15px;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-left: 3px;\n`;\n\nconst StyledLabelActionPanel = styled.div`\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin: 16px 0;\n`;\n\nconst ActionDropdownsWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n`;\n\nconst StyledAssignAction = styled.div<{ open?: boolean; disabled?: boolean }>`\n    display: flex;\n    height: 40px;\n    width: 152px;\n    border-radius: 4px;\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    background: ${props => props.theme.Colors.whiteFive};\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.cloudyBlue\n            : props.theme.Colors.steelGrey};\n    border: ${props =>\n        props.open\n            ? `1px solid ${props.theme.Colors.cloudyBlue}`\n            : `1px solid ${props.theme.Colors.whiteFive}`};\n    position: relative;\n`;\n\nconst IconHolder = styled.div`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    position: absolute;\n    right: 15px;\n    top: 0;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst StyledLabel = styled.div`\n    position: absolute;\n    top: 0;\n    left: 16px;\n    pointer-events: none;\n    font-size: 13px;\n    font-weight: normal;\n    display: flex;\n    align-items: center;\n    height: 100%;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst Performance: FC<{\n    history: History<any>;\n    trainee?: PerformanceTrainee;\n    profile?: UserProfile;\n    onGetTrainee: (userId: number, isInvitation: boolean) => any;\n    params: { userId?: number };\n    loading?: boolean;\n    assignedLabels?: number[];\n    setAssignPractisSetsAction?(practisSetIds: number[]): void;\n    setAssignLabelsAction?(labelIds: number[]): void;\n    setPreviouslyAssignedLabelsAction?(labels: number[]): void;\n    assignedPractisSets?: number[];\n    showMessage: any;\n    company?: CompanyInterface;\n    previouslyAssignedLabels?: number[];\n    isInvitation: boolean;\n    nudgeFromUser?: string;\n    onNudgeTrainees(\n        nudgeUserDate: NudgeData[],\n        successCallback?: () => void\n    ): void;\n}> = ({\n    history,\n    trainee,\n    profile,\n    onGetTrainee,\n    loading,\n    params,\n    setAssignPractisSetsAction,\n    setAssignLabelsAction,\n    showMessage,\n    company,\n    setPreviouslyAssignedLabelsAction,\n    previouslyAssignedLabels,\n    isInvitation,\n    nudgeFromUser,\n    onNudgeTrainees,\n}) => {\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [showNudgeDialog, setShowNudgeDialog] = useState(false);\n    const [, setPractisSetsCount] = useState(\n        trainee && trainee.practisSets && trainee.practisSets.length\n            ? trainee.practisSets.length\n            : 0\n    );\n    const [useGoBack, setUseGoBack] = useState(false);\n\n    const fetchUserAllPractisSets = useFetchUserAllPractisSets();\n\n    const permissions = usePermissionsState();\n\n    const handleSettingsClick = useCallback(() => {\n        if (trainee && permissions.includes(NEW_PERMISSIONS.VIEW_PROFILE)) {\n            history.push(\n                ROUTES.PROFILE.replace(':userId', trainee.id!.toString())\n            );\n        }\n    }, [history, trainee, permissions]);\n\n    const onNudgeUserSuccessCallback = () => {\n        setShowNudgeDialog(false);\n    };\n\n    const onNudgeSendButtonClicked = useCallback(\n        (data: any) => {\n            const { text, name: senderName } = data;\n            if (trainee && trainee.id) {\n                const nudgeUserData: NudgeData = {\n                    type: 'common',\n                    enrollmentId: null,\n                    receiverId: trainee.id,\n                    text,\n                    senderName,\n                };\n                onNudgeTrainees([nudgeUserData], onNudgeUserSuccessCallback);\n            }\n        },\n        [onNudgeTrainees, trainee]\n    );\n    const shouldAssignTeams =\n        (!isTeamLeader(profile?.role?.name) ||\n            isCompanyAdminRole(profile?.role?.name)) &&\n        !isPractisAdminRole(trainee?.role?.name);\n\n    const handleAssignFiltersToCheckedUsers = async (\n        assignedLabels: number[],\n        deletedLabels: number[],\n        assignedPractisSets: PractisSetWithDueDate[],\n        deletedEnrollmentIds: number[],\n        assignedTeams: number[],\n        deletedTeams: number[],\n        updatedEnrollments: EnrollmentsDueDateType[]\n    ) => {\n        if (!params.userId) return false;\n\n        return assignFiltersToUserService(params.userId, shouldAssignTeams, {\n            assignedLabelsIDs: assignedLabels,\n            deletedLabelIDs: deletedLabels,\n            assignedPractisSetIDs: assignedPractisSets,\n            deletedEnrollmentIds: deletedEnrollmentIds,\n            assignedTeamIDs: assignedTeams,\n            deletedTeamIDs: deletedTeams,\n            practisSetsWithEnrollmentIds: assignedPractisSets?.map(\n                assignedPractisSet => ({\n                    enrollmentId: assignedPractisSet.practisSetId,\n                    dueDate: assignedPractisSet.dueDate,\n                })\n            ),\n            updatedEnrollments\n        })\n            .then(() => {\n                showMessage(`Changes have been saved`, 'success');\n                return true;\n            })\n            .catch(() => {\n                return false;\n            });\n    };\n\n    /**\n     * @function handleOpenAssignFilter\n     * @param { Function } toggleShown\n     * @returns { Promise<void> }\n     */\n    const handleOpenAssignFilter = async (toggleShown: Function) =>\n        await fetchUserAllPractisSets(trainee!.id!.toString()).then(() => {\n            toggleShown();\n        });\n\n    const perfRef = useRef<any>(null);\n\n    const refreshPractisSets = useCallback(() => {\n        perfRef.current?.refreshPractisSetsSearch();\n\n        onGetTrainee(params.userId!, isInvitation);\n    }, [onGetTrainee, params.userId, isInvitation]);\n\n    useEffect(() => {\n        if (params.userId) {\n            onGetTrainee(params.userId, isInvitation);\n        }\n    }, [onGetTrainee, params.userId, isInvitation]);\n\n    const assignFiltersToUserService = useAssignFiltersToUserService();\n\n    const isPending = trainee?.status === 'PENDING';\n\n    const refreshData = useCallback(() => {\n        if (params.userId) {\n            onGetTrainee(params.userId, isInvitation);\n            setLastRefreshed(new Date());\n        }\n    }, [onGetTrainee, params.userId, isInvitation]);\n\n    const prevCompanyRef = useRef(company);\n    useEffect(() => {\n        prevCompanyRef.current = company;\n    });\n    const prevCompany = prevCompanyRef.current;\n\n    useEffect(() => {\n        if (!company!.id || !prevCompany!.id) return;\n        if (company!.id !== prevCompany!.id) {\n            history.push(ROUTES.USERS);\n        }\n    }, [company, prevCompany, history]);\n\n    useEffect(() => {\n        if (\n            trainee &&\n            trainee.labels &&\n            trainee.labels.length &&\n            setPreviouslyAssignedLabelsAction &&\n            params.userId &&\n            trainee.id === parseInt(params.userId.toString())\n        ) {\n            const flatList = treeToList((trainee && trainee.labels) || []);\n            const flatListIds = flatList.map((item: any) => item.id);\n            const labelIds = trainee.labels.map(label => label.id);\n            const updatedFlatListIds = flatListIds.map((id: any) =>\n                labelIds.includes(id) ? id : -id\n            );\n            setPreviouslyAssignedLabelsAction(updatedFlatListIds);\n        }\n    }, [trainee, setPreviouslyAssignedLabelsAction, params.userId]);\n\n    useEffect(() => {\n        if (\n            previouslyAssignedLabels &&\n            previouslyAssignedLabels.length &&\n            setAssignLabelsAction\n        ) {\n            setAssignLabelsAction(previouslyAssignedLabels);\n        }\n    }, [setAssignLabelsAction, previouslyAssignedLabels]);\n\n    useEffect(() => {\n        if (isInvitation && trainee && trainee.practisSets) {\n            const assignedPractisSets = trainee.practisSets.map(\n                (set: any) => set.id\n            );\n\n            setAssignPractisSetsAction?.(assignedPractisSets);\n        }\n    }, [trainee, setAssignPractisSetsAction, isInvitation]);\n\n    useEffect(() => {\n        return () => {\n            setAssignPractisSetsAction && setAssignPractisSetsAction([]);\n            setAssignLabelsAction && setAssignLabelsAction([]);\n            setPreviouslyAssignedLabelsAction &&\n                setPreviouslyAssignedLabelsAction([]);\n        };\n    }, [\n        setAssignPractisSetsAction,\n        setAssignLabelsAction,\n        setPreviouslyAssignedLabelsAction,\n    ]);\n\n    useEffect(() => {\n        // save useGoBack in local state on mount to keep back button working correctly after list paging\n        setUseGoBack(!!history.location.state?.useGoBack);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return (\n        <MainWrapper\n            subTitle=\"User Profile\"\n            goBackUrl={ROUTES.USERS}\n            useGoBack={useGoBack}\n            height=\"100%\"\n            htmlPageTitle={`User Profile ${\n                trainee ? `- ${trainee?.firstName} ${trainee?.lastName}` : ''\n            } - Practis`}\n            dataTest=\"user-profile\"\n        >\n            <TableRefresh\n                lastRefreshed={lastRefreshed}\n                refreshData={refreshData}\n                dataTest=\"user-profile-timestamp\"\n            />\n            {loading && <LoadingComponent />}\n            <StyledContainer>\n                <ReportGeneralInfoWrapper>\n                    <StyledUserDetailsInfo>\n                        <StyledUserInfoWrapper>\n                            <StyledDetailsAvatar>\n                                <AvatarPlaceholder\n                                    profile={\n                                        trainee as unknown as UserInterface\n                                    }\n                                    imgBorderRadius=\"4px\"\n                                    iconWidth={17}\n                                    iconHeight={20}\n                                    bottomPosition={-6}\n                                    noHint={true}\n                                    dataTest=\"user-profile-avatar\"\n                                />\n                            </StyledDetailsAvatar>\n                            <StyledUserInfo>\n                                {trainee ? (\n                                    <UserRole data-test=\"user-profile-role\">\n                                        {isInvitation\n                                            ? pendingUserRoleTitle(trainee)\n                                            : userRoleTitle(trainee)}\n                                    </UserRole>\n                                ) : (\n                                    <Skeleton\n                                        variant=\"text\"\n                                        width={20}\n                                        height={10}\n                                        style={{\n                                            background: 'var(--ps-grey-4',\n                                        }}\n                                    />\n                                )}\n\n                                {trainee ? (\n                                    <StyledName\n                                        isFlex={isInvitation || isPending}\n                                        data-test=\"user-profile-full-name\"\n                                    >\n                                        {`${trainee?.firstName ?? ''} ${\n                                            trainee?.lastName ?? ''\n                                        }`}\n\n                                        {profile?.id === trainee?.id && (\n                                            <StyledAdditionalInfo>\n                                                (You)\n                                            </StyledAdditionalInfo>\n                                        )}\n\n                                        {(isPending || isInvitation) && (\n                                            <StyledPendingInvitationLabel>\n                                                <StyledPendingTitle data-test=\"pending-registration-label\">\n                                                    Pending Registration\n                                                </StyledPendingTitle>\n                                            </StyledPendingInvitationLabel>\n                                        )}\n                                    </StyledName>\n                                ) : (\n                                    <Skeleton\n                                        variant=\"text\"\n                                        width={100}\n                                        height={10}\n                                        style={{\n                                            background: 'var(--ps-grey-4',\n                                        }}\n                                    />\n                                )}\n                                <StyledEmail data-test=\"user-profile-email\">\n                                    {trainee?.email ?? (\n                                        <Skeleton\n                                            variant=\"text\"\n                                            width={150}\n                                            height={10}\n                                            style={{\n                                                background: 'var(--ps-grey-4',\n                                            }}\n                                        />\n                                    )}\n                                </StyledEmail>\n                            </StyledUserInfo>\n                        </StyledUserInfoWrapper>\n                        <StyledUserInfoContainer>\n                            <StyledUserOptions>\n                                <StyledLabelActionPanel>\n                                    <ActionDropdownsWrapper>\n                                        <WithLabelsContext.Provider\n                                            value={{\n                                                reducerName: 'draftEdit',\n                                                scope: 'assignFilters',\n                                            }}\n                                        >\n                                            <WithPractisSetsContext.Provider\n                                                value={{\n                                                    reducerName: 'draftEdit',\n                                                    scope: 'assignFilters',\n                                                }}\n                                            >\n                                                <Popup<HTMLDivElement>\n                                                    content={({ hide }) => (\n                                                        <AssignFilters\n                                                            onSuccessApply={(\n                                                                isCancel?: boolean\n                                                            ) => {\n                                                                if (!isCancel) {\n                                                                    refreshPractisSets();\n                                                                }\n                                                                hide();\n                                                            }}\n                                                            user={trainee}\n                                                            assignFilters={\n                                                                handleAssignFiltersToCheckedUsers\n                                                            }\n                                                        />\n                                                    )}\n                                                    anchorOrigin={{\n                                                        vertical: 'bottom',\n                                                        horizontal: 'right',\n                                                    }}\n                                                    transformOrigin={{\n                                                        vertical: 'top',\n                                                        horizontal: 'right',\n                                                    }}\n                                                >\n                                                    {(\n                                                        ref,\n                                                        { toggleShown, shown }\n                                                    ) => (\n                                                        <StyledAssignAction\n                                                            ref={ref}\n                                                            onClick={() =>\n                                                                handleOpenAssignFilter(\n                                                                    toggleShown\n                                                                )\n                                                            }\n                                                            open={shown}\n                                                            data-test=\"user-profile-assign\"\n                                                        >\n                                                            <StyledLabel>\n                                                                Assign...\n                                                            </StyledLabel>\n                                                            <IconHolder>\n                                                                {shown ? (\n                                                                    <UpArrow />\n                                                                ) : (\n                                                                    <DownArrow />\n                                                                )}\n                                                            </IconHolder>\n                                                        </StyledAssignAction>\n                                                    )}\n                                                </Popup>\n                                            </WithPractisSetsContext.Provider>\n                                        </WithLabelsContext.Provider>\n                                    </ActionDropdownsWrapper>\n                                </StyledLabelActionPanel>\n\n                                <Button\n                                    width=\"136px\"\n                                    height=\"40px\"\n                                    action={handleSettingsClick}\n                                    variant=\"inverse\"\n                                    disabled={isInvitation || isPending}\n                                    customDisabledColor={\n                                        Variables.Colors.cloudyBlue\n                                    }\n                                    dataTest=\"user-settings\"\n                                >\n                                    User Settings\n                                </Button>\n                                <Button\n                                    width=\"152px\"\n                                    height=\"40px\"\n                                    action={() => setShowNudgeDialog(true)}\n                                    customDisabledColor={\n                                        Variables.Colors.cloudyBlue\n                                    }\n                                    disabled={isInvitation || isPending}\n                                    dataTest=\"nudge-user\"\n                                >\n                                    Nudge User\n                                </Button>\n                            </StyledUserOptions>\n                        </StyledUserInfoContainer>\n                    </StyledUserDetailsInfo>\n                </ReportGeneralInfoWrapper>\n                <TableDivider />\n                <CheckPermission\n                    permissions={[NEW_PERMISSIONS.VIEW_PRACTIS_SET_PROGRESS]}\n                >\n                    <Content>\n                        {trainee && !loading && (\n                            <PerformanceSectionContainerRef\n                                ref={perfRef}\n                                onPractisSetsUpdate={setPractisSetsCount}\n                                isInvitation={isInvitation}\n                            />\n                        )}\n                    </Content>\n                </CheckPermission>\n            </StyledContainer>\n            {showNudgeDialog && (\n                <DialogWrapper\n                    customization={{\n                        width: 480,\n                        padding: '49px 32px 32px 32px',\n                    }}\n                >\n                    <NudgeUser\n                        title={`Send a direct message to ${\n                            trainee ? trainee.firstName : ''\n                        } ${trainee ? trainee.lastName : ''}`}\n                        fromUser={nudgeFromUser}\n                        onSend={onNudgeSendButtonClicked}\n                        onClose={() => setShowNudgeDialog(false)}\n                        placeholder=\"Write your message here…\"\n                    />\n                </DialogWrapper>\n            )}\n        </MainWrapper>\n    );\n};\n\nexport const PerformanceContainer: FC<{ type?: string }> = ({ type }) => {\n    const isInvitation = type === 'invitation';\n\n    const trainee = useUserPerformanceState();\n    const getUserPerformance = useUserPerformanceService();\n    const params = useParams();\n    const history = useHistory();\n\n    const state = useLabelsState();\n    const company = useSelector(getCompanyState);\n    const libraryState = useLibraryPractisSetState();\n    const setAssignPractisSetsAction =\n        useUpdateAssignedLibraryPractisSetService();\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\n    const showMessage = useShowMessage();\n\n    const setPreviouslyAssignedLabelsAction =\n        useSetPreviouslyAssignedLabelsAction();\n    const profile = useSelector(getProfileState);\n    const nudgeTrainees = useNudgeTraineesService();\n\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'draftEdit' }}>\n            <WithTeamsContext.Provider value={{ reducerName: 'draftEdit' }}>\n                <WithPractisSetsContext.Provider\n                    value={{ reducerName: 'draftEdit' }}\n                >\n                    <Performance\n                        history={history}\n                        trainee={trainee.data}\n                        profile={profile}\n                        onGetTrainee={getUserPerformance}\n                        params={params}\n                        loading={trainee.loading}\n                        company={company}\n                        assignedLabels={state.assignedLabels}\n                        assignedPractisSets={libraryState.assignedPractisSets}\n                        setAssignPractisSetsAction={setAssignPractisSetsAction}\n                        setAssignLabelsAction={setAssignLabelsAction}\n                        showMessage={showMessage}\n                        setPreviouslyAssignedLabelsAction={\n                            setPreviouslyAssignedLabelsAction\n                        }\n                        previouslyAssignedLabels={\n                            state.previouslyAssignedLabels\n                        }\n                        isInvitation={isInvitation}\n                        nudgeFromUser={\n                            !!profile\n                                ? `${profile.firstName} ${profile.lastName}`\n                                : ''\n                        }\n                        onNudgeTrainees={nudgeTrainees}\n                    />\n                </WithPractisSetsContext.Provider>\n            </WithTeamsContext.Provider>\n        </WithLabelsContext.Provider>\n    );\n};\n\nexport default PerformanceContainer;","import React, { FC } from 'react';\nimport { Redirect, Route, RouteProps } from 'react-router-dom';\nimport { CompanyInterface } from '../constants/interfaces/Company';\nimport { UserInterface } from '../constants/interfaces/User';\nimport Storage from '../services/Storage';\nimport ROUTES from './routes';\n\nconst isAuthorized = () => {\n    return !!Storage.get('token');\n};\n\nexport interface PublicRouterProps extends RouteProps {\n    component?: any;\n    customPath?: string;\n    path?: string;\n    profile?: UserInterface;\n    company?: CompanyInterface;\n    editable?: boolean;\n    url?: string;\n}\n\nconst PublicRoute: FC<PublicRouterProps> = ({\n    component: Component,\n    customPath,\n    url,\n    children,\n    ...rest\n}) => {\n    return (\n        <Route\n            {...rest}\n            render={props =>\n                isAuthorized() ? (\n                    <Redirect\n                        to={{\n                            pathname: customPath ? customPath : ROUTES.SUBMISSIONS,\n                            state: { from: props.location },\n                        }}\n                    />\n                ) : (\n                    <Component {...props} {...rest} />\n                )\n            }\n        />\n    );\n};\n\nexport default PublicRoute;\n","import { CompanyInterface } from '../../constants/interfaces/Company';\nimport { UserInterface } from '../../constants/interfaces/User';\nimport { formatDate, formatTime } from '../../helpers/functions/date-convert';\nimport { LogEvent } from './models/LogEvent';\n\nexport {\n    userRoleTitle,\n} from '../../constants/enums';\n\ninterface LogEventInfo {\n    event: LogEvent;\n    name: string;\n    isAdminOnly?: true;\n}\n\nfunction eventInfo(event: LogEvent, name: string, isAdminOnly?: true): LogEventInfo {\n    return {\n        event,\n        name,\n        isAdminOnly,\n    };\n}\n\nconst eventInfos = [\n    eventInfo(LogEvent.CREATE_COMPANY, 'Create Company', true),\n    eventInfo(LogEvent.UPDATE_COMPANY, 'Update Company', true),\n    eventInfo(LogEvent.DELETE_COMPANY, 'Delete Company', true),\n    eventInfo(LogEvent.CREATE_PRACTIS_ADMIN, 'Create Practis Admin', true),\n    eventInfo(LogEvent.UPDATE_PRACTIS_ADMIN, 'Update Practis Admin', true),\n    eventInfo(LogEvent.DELETE_PRACTIS_ADMIN, 'Delete Practis Admin', true),\n    eventInfo(LogEvent.CREATE_SCENARIO, 'Create Scenario'),\n    eventInfo(LogEvent.UPDATE_SCENARIO, 'Update Scenario'),\n    eventInfo(LogEvent.DELETE_SCENARIO, 'Delete Scenario'),\n    eventInfo(LogEvent.CREATE_PRACTIS_SET, 'Create Practis Set'),\n    eventInfo(LogEvent.UPDATE_PRACTIS_SET, 'Update Practis Set'),\n    eventInfo(LogEvent.DELETE_PRACTIS_SET, 'Delete Practis Set'),\n    eventInfo(LogEvent.CREATE_CHALLENGE, 'Create Challenge'),\n    eventInfo(LogEvent.UPDATE_CHALLENGE, 'Update Challenge'),\n    eventInfo(LogEvent.DELETE_CHALLENGE, 'Delete Challenge'),\n    eventInfo(LogEvent.GENERATE_CHALLENGE_FROM_SCENARIO, 'Generate Challenge From Scenario'),\n    eventInfo(LogEvent.INVITE_USER, 'Invite User'),\n    eventInfo(LogEvent.RESEND_INVITATION, 'Resend Invitation'),\n    eventInfo(LogEvent.REVOKE_INVITATION, 'Revoke Invitation'),\n    eventInfo(LogEvent.DELETE_USER, 'Delete User'),\n    eventInfo(LogEvent.CREATE_STAGING, 'Create Staging'),\n    eventInfo(LogEvent.UPDATE_STAGING, 'Update Staging'),\n    eventInfo(LogEvent.DELETE_STAGING, 'Delete Staging'),\n    eventInfo(LogEvent.CREATE_SUBMISSION, 'Create Submission'),\n    eventInfo(LogEvent.UPDATE_SUBMISSION, 'Update Submission'),\n    eventInfo(LogEvent.DELETE_SUBMISSION, 'Delete Submission'),\n    eventInfo(LogEvent.REVIEW_SUBMISSION, 'Review Submission'),\n    eventInfo(LogEvent.CREATE_SCORE, 'Create Score'),\n    eventInfo(LogEvent.UPDATE_SCORE, 'Update Score'),\n    eventInfo(LogEvent.DELETE_SCORE, 'Delete Score'),\n    eventInfo(LogEvent.UPDATE_SETTING, 'Update Setting'),\n    eventInfo(LogEvent.CREATE_TEAM, 'Create Team'),\n    eventInfo(LogEvent.UPDATE_TEAM, 'Update Team'),\n    eventInfo(LogEvent.DELETE_TEAM, 'Delete Team'),\n    eventInfo(LogEvent.DUPLICATE_TEAM, 'Duplicate Team'),\n    eventInfo(LogEvent.USER_ADDED_INTO_TEAM, 'User Added Into Team'),\n    eventInfo(LogEvent.USER_TEAM_LEAD_PROMOTION, 'User Team Lead Promotion'),\n    eventInfo(LogEvent.USER_TEAM_LEAD_REVOKE, 'User Team Lead Revoke'),\n    eventInfo(LogEvent.CREATE_THEME, 'Create Theme'),\n    eventInfo(LogEvent.UPDATE_THEME, 'Update Theme'),\n    eventInfo(LogEvent.DELETE_THEME, 'Delete Theme'),\n    eventInfo(LogEvent.ASSIGN_THEME_TO_PRACTISE_SET, 'Assign Theme To Practis Set'),\n    eventInfo(LogEvent.ADD_COVER_INTO_THEME, 'Add Cover Into Theme'),\n    eventInfo(LogEvent.REMOVE_COVER, 'Remove Cover'),\n    eventInfo(LogEvent.ASSIGN_COVER_TO_PRACTISE_SET, 'Assign Cover To Practis Set'),\n    eventInfo(LogEvent.ASSIGN_COVER_TO_SCENARIO, 'Assign Cover To Scenario'),\n];\n\nconst eventInfosMap = eventInfos.reduce((result, info) => {\n    result[info.event] = info;\n    return result;\n}, {} as Record<LogEvent, LogEventInfo>);\n\nexport function events(includeAdminOnly?: true): LogEvent[] {\n    return eventInfos.filter(i => !!includeAdminOnly || !i.isAdminOnly).map(i => i.event);\n}\n\nexport function eventName(event: LogEvent): string {\n    return eventInfosMap[event]?.name || event;\n}\n\nexport function userName(\n    user: UserInterface | undefined,\n    withEmail: boolean = true\n): string {\n    const result = user ? `${user.firstName} ${user.lastName}` : '';\n    return withEmail ? `${result} ${userEmail(user)}` : result;\n}\n\nexport function userEmail(user: UserInterface | undefined): string {\n    return user ? `(${user.email})` : '';\n}\n\nexport function companyName(company: CompanyInterface | undefined): string {\n    return company?.name || '';\n}\n\nexport function companyAndUserNames(company: CompanyInterface | undefined, user: UserInterface | undefined, withEmail: boolean = true): string {\n    return `${companyName(company)} ${userName(user, withEmail)}`;\n}\n\nexport function atTime(date: any): string {\n    return `at ${formatTime(date, true)} ${formatDate(date)}`;\n}\n\nexport enum PlatformVersions {\n    IOS_VERSION = 'IOS_VERSION',\n    ANDROID_VERSION = 'ANDROID_VERSION',\n}\n\nconst platformVersionNames = {\n    [PlatformVersions.IOS_VERSION]: 'IOS version',\n    [PlatformVersions.ANDROID_VERSION]: 'Android version',\n};\n\nexport function platformVersionName(action: PlatformVersions): string {\n    return platformVersionNames[action] || '';\n}","import React, { FC } from 'react';\nimport { LogEvent } from '../models/LogEvent';\nimport { LogItem } from '../models/LogItem';\nimport {\n    atTime,\n    companyName,\n    userName,\n    userRoleTitle,\n    companyAndUserNames,\n    platformVersionName,\n} from '../tools';\nimport { Team } from '../../../constants/interfaces/Team';\nimport { TeamMembership } from '../../../constants/interfaces/TeamMembership';\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\nimport { UserInterface } from '../../../constants/interfaces/User';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\nimport { Submission } from '../../../constants/interfaces/Reviews';\nimport { Theme } from '../../../constants/interfaces/Theme';\n\nexport const Details: FC<{\n    event: LogItem;\n}> = ({ event: e }) => {\n    switch (e.event) {\n        case LogEvent.CREATE_COMPANY:\n        {\n            const c: CompanyInterface | undefined = e.data.payload;\n            //ex: Practis Admin Max Rogozhin (maxim@tula.co) created a Company - TulaCo at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} {userName(e.creator)}{' '}\n                    created a Company -{' '}\n                    {companyName(c)} {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_COMPANY:\n        {\n            const c: CompanyInterface | undefined = e.data.payload;\n            //ex: Practis Admin Max Rogozhin (maxim@tula.co) deleted a Company - TulaCo at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} {userName(e.creator)}{' '}\n                    deleted a Company -{' '}\n                    {companyName(c)} {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_COMPANY:\n        {\n            const c: CompanyInterface | undefined = e.data.payload;\n            //ex: Practis Admin Max Rogozhin (maxim@tula.co) updated a Company - TulaCo at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} {userName(e.creator)}{' '}\n                    updated a Company -{' '}\n                    {companyName(c)} {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_PRACTIS_ADMIN:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Practis Admin Max Rogozhin (maxim@tula.co) created a Practis Admin - Vano Khuroshvili (VKhuroshvili@tula.co) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} {userName(e.creator)}{' '}\n                    created a {userRoleTitle(user)} -{' '}\n                    {userName(user)} {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_PRACTIS_ADMIN:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Practis Admin Max Rogozhin (maxim@tula.co) deleted a Practis Admin - Vano Khuroshvili (VKhuroshvili@tula.co) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} {userName(e.creator)}{' '}\n                    deleted a {userRoleTitle(user)} -{' '}\n                    {userName(user)} {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_PRACTIS_ADMIN:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Practis Admin Max Rogozhin (maxim@tula.co) updated a Practis Admin - Vano Khuroshvili (VKhuroshvili@tula.co) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} {userName(e.creator)}{' '}\n                    updated a {userRoleTitle(user)} -{' '}\n                    {userName(user)} {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_SCENARIO:\n        {\n            const scenario: Scenario | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) created a Scenario - <Scenario name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Scenario - {scenario?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_SCENARIO:\n        {\n            const scenario: Scenario | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) deleted a Scenario - <Scenario name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Scenario - {scenario?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_SCENARIO:\n        {\n            const scenario: Scenario | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) updated a Scenario - <Scenario name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Scenario - {scenario?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_PRACTIS_SET:\n        {\n            const practisSet: PractisSets | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) created a Practis Set - <Practis Set name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Practis Set - {practisSet?.name || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_PRACTIS_SET:\n        {\n            const practisSet: PractisSets | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) deleted a Practis Set - <Practis Set name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Practis Set - {practisSet?.name || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_PRACTIS_SET:\n        {\n            const practisSet: PractisSets | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) updated a Practis Set - <Practis Set name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Practis Set - {practisSet?.name || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_CHALLENGE:\n        {\n            const challenge: Challenge | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) created a Challenge - <Challenge name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Challenge - {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_CHALLENGE:\n        {\n            const challenge: Challenge | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) updated a Challenge - <Challenge name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Challenge - {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_CHALLENGE:\n        {\n            const challenge: Challenge | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) deleted a Challenge - <Challenge name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Challenge - {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.GENERATE_CHALLENGE_FROM_SCENARIO:\n        {\n            const challenge: Challenge | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) generated a Challenge - <Challenge name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    generated a Challenge - {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.INVITE_USER:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) invited Vasya Pupkin (vpupkin@gmail.com) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    invited {userName(user)}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.RESEND_INVITATION:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) resent invitation to a Trainer - Vasya Pupkin (vpupkin@gmail.com) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    resent invitation to a {userRoleTitle(user)} - {userName(user)}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.REVOKE_INVITATION:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) revoked invitation of a Trainer - Vasya Pupkin (vpupkin@gmail.com) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    revoked invitation of a {userRoleTitle(user)} - {userName(user)}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_USER:\n        {\n            const user: UserInterface | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) deleted a Trainer - Vasya Pupkin (vpupkin@gmail.com) at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a {userRoleTitle(user)} - {userName(user)}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_STAGING:\n        {\n            const staging: { name: string } | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) created a Staging - <Staging name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Staging - {staging?.name || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_STAGING:\n        {\n            const staging: { name: string } | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) updated a Staging - <Staging name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Staging - {staging?.name || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_STAGING:\n        {\n            const staging: { name: string } | undefined = e.data.payload;\n            //ex: Company Admin from <Company Name> Alen Korbut (akorbut@tula.co) deleted a Staging - <Staging name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Staging - {staging?.name || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_SUBMISSION:\n        {\n            const practisSet: PractisSets | undefined = e.data.payload.practisSet;\n            const challenge: Challenge | undefined = e.data.payload.challenge;\n            //ex: Company Admin from Poetry Edgar Allan Poe (edgarallanpoe@mailinator.com) created a Submission for Practis Set: Poems by Edgar Allan Poe and Challenge: Eldorado at 7:20:18 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Submission for Practis Set: {practisSet?.name || ''} and\n                    Challenge: {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_SUBMISSION:\n        {\n            const practisSet: PractisSets | undefined = e.data.payload.practisSet;\n            const challenge: Challenge | undefined = e.data.payload.challenge;\n            //ex: Company Admin from Poetry Edgar Allan Poe (edgarallanpoe@mailinator.com) updated a Submission for Practis Set: Poems by Edgar Allan Poe and Challenge: Eldorado at 7:20:18 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Submission for Practis Set: {practisSet?.name || ''} and\n                    Challenge: {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_SUBMISSION:\n        {\n            const practisSet: PractisSets | undefined = e.data.payload.practisSet;\n            const challenge: Challenge | undefined = e.data.payload.challenge;\n            //ex: Company Admin from Poetry Edgar Allan Poe (edgarallanpoe@mailinator.com) deleted a Submission for Practis Set: Poems by Edgar Allan Poe and Challenge: Eldorado at 7:20:18 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Submission for Practis Set: {practisSet?.name || ''} and\n                    Challenge: {challenge?.title || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        // case LogEvent.REVIEW_SUBMISSION:\n        // {\n        //     //Not tracked yet on BE side \n        // }\n        case LogEvent.CREATE_SCORE:\n        {\n            const submission: Submission | undefined = e.data.payload;\n            //ex: Practis Admin from TestCo Anna Toloraia (atoloraia5@tula.co) created a review for a Submission with id: 21: at 5:22:46 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a review for a Submission with id: {submission?.id || ''}:{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_SCORE:\n        {\n            const submission: Submission | undefined = e.data.payload;\n            //ex: Practis Admin from TestCo Anna Toloraia (atoloraia5@tula.co) updated a review for a Submission with id: 21: at 5:22:46 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a review for a Submission with id: {submission?.id || ''}:{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_SCORE:\n        {\n            const submission: Submission | undefined = e.data.payload;\n            //ex: Practis Admin from TestCo Anna Toloraia (atoloraia5@tula.co) deleted a review for a Submission with id: 21: at 5:22:46 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a review for a Submission with id: {submission?.id || ''}:{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_SETTING:\n        {\n            const settings: any | undefined = e.data.payload;\n            //ex: Practis Admin from TestCo Anna Toloraia (atoloraia5@tula.co) updated IOS version at 5:22:46 pm Apr 1st, 2020\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated {platformVersionName(settings.key) || settings.key || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.CREATE_TEAM:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) created a Team - <Team name> at 15:00 12.09.2019\n            const t: Team | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Team - {t?.name}{' '}\n                    {atTime(t?.createdAt || e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.UPDATE_TEAM:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) updated a Team - <Team name> at 15:00 12.09.2019\n            const t: Team | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Team - {t?.name}{' '}\n                    {atTime(t?.createdAt || e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.DELETE_TEAM:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) deleted a Team - <Team name> at 15:00 12.09.2019\n            const t: Team | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Team - {t?.name}{' '}\n                    {atTime(t?.createdAt || e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.DUPLICATE_TEAM:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) duplicated a Team - <Team name> at 15:00 12.09.2019\n            const t: Team | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    duplicated a Team - {t?.name}{' '}\n                    {atTime(t?.createdAt || e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.USER_ADDED_INTO_TEAM:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) added a User with id: <User Id> into a Team with id: <Team Id> at 15:00 12.09.2019\n            const tm: TeamMembership | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    added a User with id: {tm?.userId} into a Team with id: {tm?.teamId}{' '}\n                    {atTime(tm?.createdAt || e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.USER_TEAM_LEAD_PROMOTION:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) promoted a User to Team Lead at 15:00 12.09.2019\n            //const tmIds: number[] | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    promoted a User to Team Lead{' '}\n                    {atTime(e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.USER_TEAM_LEAD_REVOKE:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) revoked Team Lead of a User at 15:00 12.09.2019\n            //const tmIds: number[] | undefined = e.data.payload;\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    revoked Team Lead of a User{' '}\n                    {atTime(e.createdAt)}\n                </>\n            ); \n        }\n        case LogEvent.CREATE_THEME:\n        {\n            const theme: Theme | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) created a Theme - <Theme name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    created a Theme - {theme?.title || ''}{' '}\n                    {atTime(theme?.createdAt || e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.UPDATE_THEME:\n        {\n            //const theme: Theme | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) updated a Theme - <Theme name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    updated a Theme{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.DELETE_THEME:\n        {\n            const theme: Theme | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) deleted a Theme - <Theme name> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    deleted a Theme - {theme?.title || ''}{' '}\n                    {atTime(theme?.createdAt || e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.ASSIGN_THEME_TO_PRACTISE_SET:\n        {\n            const assignment: { practisSetId: number; } | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) assigned a Theme to a Practis Set with id: <Practis Set Id> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    assigned a Theme to a Practis Set with id: {assignment?.practisSetId || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.ADD_COVER_INTO_THEME:\n        {\n            const assignment: { coverId: number; themeId: number } | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) added a Cover into a Theme with id: <Theme Id> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    added a Cover into a Theme with id: {assignment?.themeId || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.REMOVE_COVER:\n        {\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) removed a Cover at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    removed a Cover{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.ASSIGN_COVER_TO_PRACTISE_SET:\n        {\n            const assignment: { coverId: number; practisSetId: number } | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) assigned a Cover to a Practis Set with id: <Practis Set Id> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    assigned a Cover to a Practis Set with id: {assignment?.practisSetId || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n        case LogEvent.ASSIGN_COVER_TO_SCENARIO:\n        {\n            const assignment: { coverId: number; scenarioId: number; } | undefined = e.data.payload;\n            //ex: Trainer from <Company Name> Daniil Kurchanov (dkurchanov@tula.co) assigned a Cover to a Scenario with id: <Scenario Id> at 15:00 12.09.2019\n            return (\n                <>\n                    {userRoleTitle(e.creator)} from {companyAndUserNames(e.company, e.creator)}{' '}\n                    assigned a Cover to a Scenario with id: {assignment?.scenarioId || ''}{' '}\n                    {atTime(e.createdAt)}\n                </>\n            );\n        }\n    }\n    return <>{JSON.stringify(e.data.payload)}</>;\n};","import { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { LogItem } from '../models/LogItem';\n\nexport enum ACTIONS {\n    SEARCH_LOGS_START = 'ADMIN_SEARCH_LOGS_START',\n    SEARCH_LOGS_SUCCESS = 'ADMIN_SEARCH_LOGS_SUCCESS',\n    SEARCH_LOGS_FAILURE = 'ADMIN_SEARCH_LOGS_FAILURE',\n    SEARCH_LOGS_DISPOSE = 'ADMIN_SEARCH_LOGS_DISPOSE',\n}\n\nexport function searchLogsStart() {\n    return {\n        type: ACTIONS.SEARCH_LOGS_START as ACTIONS.SEARCH_LOGS_START,\n    };\n}\n\nexport function searchLogsSuccess(logs: PaginationResult<LogItem>) {\n    return {\n        type: ACTIONS.SEARCH_LOGS_SUCCESS as ACTIONS.SEARCH_LOGS_SUCCESS,\n        logs,\n    };\n}\n\nexport function searchLogsFailure(error: string) {\n    return {\n        type: ACTIONS.SEARCH_LOGS_FAILURE as ACTIONS.SEARCH_LOGS_FAILURE,\n        error,\n    };\n}\n\nexport function searchLogsDispose() {\n    return {\n        type: ACTIONS.SEARCH_LOGS_DISPOSE as ACTIONS.SEARCH_LOGS_DISPOSE,\n    };\n}\n","import { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { SearchParams } from '../../../constants/interfaces/filters';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useSearchLogsApi } from '../../../api';\nimport {\n    searchLogsFailure,\n    searchLogsStart,\n    searchLogsSuccess,\n} from './actions';\n\nexport const useSearchLogsService = () => {\n    const dispatch = useDispatch();\n    const searchLogsApi = useSearchLogsApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (p: SearchParams) => {\n            dispatch(searchLogsStart());\n            searchLogsApi(p)\n                .then(data => {\n                    dispatch(searchLogsSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchLogsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, searchLogsApi, showMessage]\n    );\n};\n","import { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { createSelectorContext } from '../../../tools/redux';\nimport { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { LogItem } from '../models/LogItem';\n\nexport interface LogsState {\n    data?: PaginationResult<LogItem>;\n    loading?: boolean;\n    error?: string;\n}\n\nexport const LogsStateSelectorContext = createSelectorContext<LogsState>();\n\nexport function useLogsState() {\n    return useSelector(useContext(LogsStateSelectorContext));\n}\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../Button';\n\ninterface Props {\n    className?: string;\n    onClick?(): void;\n}\n\nexport const FiltersApplyButton: FC<Props> = props => {\n    const { className, onClick } = props;\n    return (\n        <Root className={className}>\n            <Button width=\"122px\" action={onClick} dataTest=\"apply-button\">\n                Apply Filter\n            </Button>\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    margin-left: 12px;\n`;\n","import { forwardRef, useCallback } from 'react';\n\nimport FiltersIcon from '../../icons/FiltersIcon';\nimport { Tooltip } from '../Tooltip';\nimport {\n    FiltersDot,\n    FiltersDotContainer,\n    IconContainer,\n    IconHolder,\n    Root,\n} from './styles';\n\ninterface Props {\n    open: boolean;\n    disabled?: boolean;\n    filtersCount?: number;\n    toggleOpen(): void;\n    dataTest?: string;\n}\n\nexport const FiltersButton = forwardRef<HTMLButtonElement, Props>(\n    (props, ref) => {\n        const {\n            toggleOpen,\n            open,\n            disabled = false,\n            filtersCount = 0,\n            dataTest,\n        } = props;\n\n        const handleClick = useCallback(\n            () => !disabled && toggleOpen(),\n            [disabled, toggleOpen]\n        );\n\n        return (\n            <Root\n                ref={ref}\n                open={open}\n                disabled={disabled}\n                onClick={handleClick}\n                data-test={dataTest}\n            >\n                <Tooltip label=\"Filters\" preset=\"button-icon\" dataTest=\"filters-tooltip\">\n                    <IconContainer>\n                        <IconHolder disabled={disabled}>\n                            <FiltersIcon />\n                        </IconHolder>\n                        {filtersCount > 0 && (\n                            <FiltersDotContainer>\n                                <FiltersDot\n                                    data-test={\n                                        dataTest && `${dataTest}-counter`\n                                    }\n                                />\n                            </FiltersDotContainer>\n                        )}\n                    </IconContainer>\n                </Tooltip>\n            </Root>\n        );\n    }\n);\n","import React, { useCallback } from 'react';\nimport styled from 'styled-components';\nimport Checkbox from '../Checkbox';\n\ninterface Props<TValue = any> {\n    checked: boolean;\n    label: string;\n    value?: TValue;\n    partial?: boolean;\n    disabled?: boolean;\n    size?: number;\n    onChange?(value?: TValue): void;\n}\n\nexport const FiltersCheckbox = function <TValue = any>(props: Props<TValue>) {\n    const { checked, label, value, partial, disabled, size, onChange } = props;\n\n    const handleChange = useCallback(() => {\n        if (onChange) {\n            onChange(value);\n        }\n    }, [value, onChange]);\n\n    return (\n        <Root data-test=\"filters-items-checkbox-container\">\n            <Checkbox\n                checked={checked}\n                partial={partial}\n                disabled={disabled}\n                size={size}\n                handleChange={handleChange}\n                dataTest=\"filter-item-checkbox\"\n            />\n            <Label\n                disabled={disabled}\n                onClick={handleChange}\n                data-test={`filter-item-title`}\n            >\n                {label}\n            </Label>\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 10px 0;\n`;\n\ninterface LabelProps {\n    disabled?: boolean;\n}\n\nconst Label = styled.div<LabelProps>`\n    color: ${props => props.theme.Colors.black};\n    cursor: ${props => (props.disabled ? `default` : `pointer`)};\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 0 0 12px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n`;","import { FC } from 'react';\n\nimport { TableDivider } from '../table-wrapper/table-divider';\n\nexport const FiltersDivider: FC = TableDivider;\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\nimport { FiltersCheckbox } from './FiltersCheckbox';\nimport { FiltersDivider } from './FiltersDivider';\n\ninterface Props<TValue = any> {\n    items: FiltersCheckboxListItem<TValue>[];\n    size?: number;\n    divisible?: boolean;\n    onChange?(value?: TValue): void;\n}\n\nexport const FiltersCheckboxList = function <TValue = any>(props: Props<TValue>) {\n    const {\n        items,\n        size = 12,\n        divisible,\n        onChange,\n    } = props;\n\n    const topItems = useMemo(() => divisible ? items.filter(i => i.checked) : [], [divisible, items]);\n    const bottomItems = useMemo(() => divisible ? items.filter(i => !i.checked) : [], [divisible, items]);\n    const renderCheckbox = (item: FiltersCheckboxListItem<TValue>) => (\n        <FiltersCheckbox\n            key={String(item.value)}\n            checked={item.checked}\n            label={item.label}\n            value={item.value}\n            partial={item.partial}\n            disabled={item.disabled}\n            size={size}\n            onChange={onChange}\n        />\n    );\n\n    if (divisible) {\n        return (\n            <Root data-test=\"filter-items-container\">\n                <List data-test=\"filters-items-list-container\">\n                    {topItems.map(renderCheckbox)}\n                    {!!topItems.length && topItems.length < items.length && <FiltersDivider />}\n                    {bottomItems.map(renderCheckbox)}\n                </List>\n            </Root>\n        );\n    }\n\n    return (\n        <Root data-test=\"filter-items-container\">\n            <List data-test=\"filters-items-list-container\">\n                {items.map(renderCheckbox)}\n            </List>\n        </Root>\n    );\n};\n\nexport interface FiltersCheckboxListItem<TValue = any> {\n    checked: boolean;\n    partial?: boolean;\n    disabled?: boolean;\n    label: string;\n    value?: TValue;\n}\n\nconst Root = styled.div`\n    overflow: auto;\n    height: 100%;\n`;\n\nconst List = styled.span``; ","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../Button';\n\ninterface Props {\n    disabled?: boolean;\n    className?: string;\n    onClick?(): void;\n}\n\nexport const FiltersClearButton: FC<Props> = props => {\n    const { disabled, className, onClick } = props;\n    return (\n        <Root className={className}>\n            <Button\n                disabled={disabled}\n                width=\"122px\"\n                variant=\"inverse\"\n                action={onClick}\n                dataTest=\"clear-button\"\n            >\n                Clear\n            </Button>\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    margin-left: 12px;\n`;\n","import { FC } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Fieldset } from '../Fieldset';\n\ninterface Props {\n    title?: string;\n    width?: number;\n    minHeight?: number;\n    dataTest?: string;\n}\n\nexport const FiltersFieldSet: FC<Props> = props => {\n    const { title, width, minHeight, dataTest, children } = props;\n    return (\n        <Fieldset title={title} dataTest={dataTest}>\n            <Body\n                width={width}\n                minHeight={minHeight}\n                data-test={dataTest && `${dataTest}-body`}\n            >\n                <Content data-test={dataTest && `${dataTest}-content`}>\n                    {children}\n                </Content>\n            </Body>\n        </Fieldset>\n    );\n};\n\ninterface BodyProps {\n    width?: number;\n    minHeight?: number;\n}\n\nconst Body = styled.div<BodyProps>`\n    flex: 1;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n\n    ${props =>\n        !!props.width &&\n        css`\n            width: ${props.width}px;\n        `}\n\n    ${props =>\n        !!props.minHeight &&\n        css`\n            min-height: ${props.minHeight}px;\n        `}\n`;\n\nconst Content = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport EmptyBox from '../../icons/EmptyBox';\nimport { Loading } from '../LoadingCopmonent';\nimport NoSearchResult from '../../icons/NoSearchResult';\n\ninterface Props {\n    itemsName: string;\n    loading?: boolean;\n    empty?: boolean;\n}\n\nexport const FiltersNoItems: FC<Props> = props => {\n    const { itemsName, loading, empty } = props;\n\n    if (loading) {\n        return (\n            <Root>\n                <Loading />\n            </Root>\n        );\n    }\n\n    return (\n        <Root data-test=\"filters-no-item-container\">\n            <Column>\n                <IconWrapper data-test=\"no-search-result\">\n                    {empty ? <EmptyBox /> : <NoSearchResult />}\n                </IconWrapper>\n                <NoItemsTitle data-test='no-items-found'>\n                    {empty ? `No ${itemsName} yet` : `No ${itemsName} found`}\n                </NoItemsTitle>\n            </Column>\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst Column = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst IconWrapper = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoItemsTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nexport const FiltersPopupActions: FC = props => {\n    const { children } = props;\n    return (\n        <Root>\n            {children}\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    flex-shrink: 0;\n    margin-top: 16px;\n`;","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nexport const FiltersPopupBody: FC = props => {\n    const { children } = props;\n    return (\n        <Root>\n            {children}\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n","import React, { ReactNode } from 'react';\nimport { Popup, PopupProps, DismissProps } from '../Popup';\nimport { FiltersButton } from './FiltersButton';\n\ninterface Props {\n    disabled?: boolean;\n    filtersCount?: number;\n    children(props: PopupProps, dismissProps: DismissProps): ReactNode;\n    dataTest?: string;\n}\n\nexport const FiltersPopupButton = (props: Props) => {\n    const { disabled = false, filtersCount = 0, children, dataTest = 'filters-selector' } = props;\n\n    return (\n        <Popup<HTMLButtonElement>\n            content={children}\n            anchorOrigin={{\n                vertical: 'bottom',\n                horizontal: 'right',\n            }}\n            horizontalOffset={322}\n        >\n            {(ref, { toggleShown, shown }) => (\n                <FiltersButton\n                    ref={ref}\n                    open={shown}\n                    toggleOpen={toggleShown}\n                    filtersCount={filtersCount}\n                    disabled={disabled}\n                    dataTest={dataTest}\n                />\n            )}\n        </Popup>\n    );\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nexport const FiltersPopupFieldSets: FC = props => {\n    const { children } = props;\n    return (\n        <Root>\n            {children}\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n","import { FC } from 'react';\n\nimport styled from 'styled-components';\nimport { TableSearchInput } from '../table-wrapper/table-tools/table-search-input';\n\ninterface Props {\n    disabled?: boolean;\n    onChange?(value: string): void;\n}\n\nexport const FiltersSearchInput: FC<Props> = props => {\n    const { disabled, onChange } = props;\n    return (\n        <Root data-test=\"filters-search-input-container\">\n            <TableSearchInput\n                disabled={disabled}\n                onChange={onChange}\n                dataTest=\"filters-search-input\"\n            />\n        </Root>\n    );\n};\n\nconst Root = styled.div`\n    margin-bottom: 16px;\n`;","import { FC } from 'react';\nimport styled from 'styled-components';\n\nexport const FiltersSelectedItems: FC = props => {\n    const { children } = props;\n    return <Root>{children}</Root>;\n};\n\nconst Root = styled.div`\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 8px;\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { pluralize } from '../../../helpers/functions/pluralize';\n\ninterface Props {\n    selectedItemsCount: number;\n    itemName: string;\n}\n\nexport const FiltersSelectedItemsText: FC<Props> = props => {\n    const { selectedItemsCount, itemName } = props;\n    return (\n        <Root data-test=\"filters-selected-items-container\">\n            {selectedItemsCount > 0\n                ? `${pluralize(selectedItemsCount, itemName)} selected`\n                : `No ${itemName}s selected`}\n        </Root>\n    );\n};\n\nconst Root = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.steelGrey};\n`;","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\ninterface Props {\n    selectedItemsCount: number;\n}\n\nexport const FiltersSelectedText: FC<Props> = props => {\n    const { selectedItemsCount } = props;\n    return (\n        <Root data-test=\"selected-items-container\">\n            {selectedItemsCount} Selected\n        </Root>\n    );\n};\n\nconst Root = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n    margin-right: 12px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;","import React, { FC, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Variables } from '../../../theme/variables';\n\ninterface Props {\n    allItemsSelected?: boolean;\n    disabled?: boolean;\n    onToggleAllItems?(allItemsSelected?: boolean): void;\n}\n\nexport const FiltersToggleAllButton: FC<Props> = props => {\n    const {\n        allItemsSelected,\n        disabled,\n        onToggleAllItems,\n    } = props;\n\n    const clickHandler = useCallback(\n        () => {\n            if (!disabled && onToggleAllItems) {\n                onToggleAllItems(!!allItemsSelected);\n            }\n        },\n        [disabled, allItemsSelected, onToggleAllItems]\n    ); \n\n    return (\n        <Root\n            disabled={disabled}\n            colorsId={allItemsSelected ? 'unselect' : 'select'}\n            onClick={clickHandler}\n            data-test=\"filters-toggle-select-button\"\n        >\n            {allItemsSelected ? 'Unselect All' : 'Select All'}\n        </Root>\n    );\n};\n\ntype ColorsId = 'select' | 'unselect';\n\ntype ColorsInfo = {\n    color: string;\n    colorHover: string;\n    colorActive: string;\n};\n\nconst colorsInfos: Record<ColorsId, ColorsInfo> = {\n    select: {\n        color: Variables.Colors.darkSkyBlue,\n        colorHover: Variables.Colors.lightBlue,\n        colorActive: Variables.Colors.windowsBlue,\n    },\n    unselect: {\n        color: Variables.Colors.darkSkyBlue,\n        colorHover: Variables.Colors.lightBlue,\n        colorActive: Variables.Colors.windowsBlue,\n    },\n};\n\nconst Root = styled.span<{\n    colorsId: ColorsId;\n    disabled?: boolean;\n}>`\n    font-size: 11px;\n    font-weight: 500;\n    cursor: pointer;\n    user-select: none;\n\n    ${props =>\n        props.disabled\n            ? css`\n                  color: ${props.theme.Colors.cloudyBlue};\n                  pointer-events: none;\n              `\n            : css`\n                  color: ${colorsInfos[props.colorsId].color};\n              `}\n\n    &:hover {\n        color: ${props => colorsInfos[props.colorsId].colorHover};\n    }\n    &:active {\n        color: ${props => colorsInfos[props.colorsId].colorActive};\n    }\n    &:not(:last-of-type) {\n        margin-right: 8px;\n    }\n`;","import React, { FC, useCallback, useMemo, useState } from 'react';\nimport { eventName, events } from '../tools';\nimport { LogEvent } from '../models/LogEvent';\nimport {\n    FiltersCheckboxList,\n    FiltersCheckboxListItem,\n    FiltersNoItems,\n    FiltersSearchInput,\n    FiltersSelectedItems,\n    FiltersSelectedItemsText,\n    FiltersToggleAllButton,\n} from '../../../ui/components/Filters';\n\ninterface Props {\n    selectedEvents: LogEvent[];\n    onChangeSelectedEvents(selectedEvents: LogEvent[]): void;\n}\n\nexport const LogFiltersEvents: FC<Props> = props => {\n    const { selectedEvents, onChangeSelectedEvents } = props;\n    const [eventSearchPattern, setEventSearchPattern] = useState<string>('');\n\n    const checkboxListItems: FiltersCheckboxListItem<string>[] = useMemo(() => {\n        const pattern = eventSearchPattern.trim().toLowerCase();\n        const resultEvents = !!pattern\n            ? allEvents.filter(i => i.name.toLowerCase().indexOf(pattern) >= 0)\n            : allEvents;\n        return resultEvents.map(item => ({\n            checked: selectedEvents.includes(item.value),\n            label: item.name,\n            value: item.value,\n        }));\n    }, [selectedEvents, eventSearchPattern]);\n\n    const filteredEvents: LogEvent[] = useMemo(\n        () =>\n            allEvents\n                .filter(e => !!checkboxListItems.find(c => c.value === e.value))\n                .map(e => e.value),\n        [checkboxListItems]\n    );\n\n    const setSelectedEvents = useCallback(\n        (events: LogEvent[]) => onChangeSelectedEvents(events),\n        [onChangeSelectedEvents]\n    );\n\n    const handleChangeSearchEventsPattern = useCallback(\n        (searchPattern: string) => setEventSearchPattern(searchPattern),\n        [setEventSearchPattern]\n    );\n\n    const handleChangeSelectedEvent = useCallback(\n        (event: LogEvent) => {\n            setSelectedEvents(\n                selectedEvents.includes(event)\n                    ? selectedEvents.filter(r => r !== event)\n                    : [...selectedEvents, event]\n            );\n        },\n        [selectedEvents, setSelectedEvents]\n    );\n\n    const handleClickToggleAllEvents = useCallback(\n        allItemsSelected =>\n            setSelectedEvents(allItemsSelected ? [] : filteredEvents),\n        [filteredEvents, setSelectedEvents]\n    );\n\n    return (\n        <>\n            <FiltersSearchInput\n                onChange={handleChangeSearchEventsPattern}\n            />\n            <FiltersSelectedItems>\n                <FiltersSelectedItemsText\n                    itemName=\"Event\"\n                    selectedItemsCount={selectedEvents.length}\n                />\n                <FiltersToggleAllButton\n                    allItemsSelected={\n                        selectedEvents.length === filteredEvents.length\n                    }\n                    onToggleAllItems={handleClickToggleAllEvents}\n                />\n            </FiltersSelectedItems>\n            <FiltersCheckboxList<string>\n                items={checkboxListItems}\n                divisible={true}\n                onChange={handleChangeSelectedEvent}\n            />\n            {!checkboxListItems.length && <FiltersNoItems itemsName=\"Events\" />}\n        </>\n    );\n};\n\nconst allEvents = events().map(e => ({ name: eventName(e), value: e }));\n","import React, {\n    FC,\n    useCallback,\n    useMemo,\n} from 'react';\nimport {\n    ROLE_NAMES as Roles,\n} from '../../../../constants/enums';\nimport {\n    FiltersCheckboxList,\n    FiltersCheckboxListItem,\n    FiltersNoItems,\n} from '../../../../ui/components/Filters';\nimport { useLoggedInUserRolesHelper } from '../../tools';\nimport { useUserRolesService } from '../../../roles/store/services';\n\ninterface Props {\n    selectedRoles: number[];\n    onChangeSelectedRoles(selectedRoles: number[]): void;\n}\n\nexport const UserRoleFilters: FC<Props> = props => {\n    const { selectedRoles, onChangeSelectedRoles } = props;\n    const rolesHelper = useLoggedInUserRolesHelper();\n    const { loading, getRoleByName } = useUserRolesService();\n    \n    const allRoles = useMemo(\n        () => loading\n            ? [] \n            : [Roles.PRACTIS_ADMIN, Roles.COMPANY_ADMIN, Roles.USER].map(\n                roleName => {\n                    const role = getRoleByName(roleName);\n                    return {\n                        // temporary solution, possibly needs to be changed from backend\n                        name: role?.id === 4 ? \"Company Admin\" : role?.title,\n                        value: role?.id,\n                    };\n                }\n        ),\n        [loading, getRoleByName]\n    );\n\n    const roleCheckboxItems: FiltersCheckboxListItem<number>[] = useMemo(\n        () => allRoles\n            .filter(r => rolesHelper.canViewRole(r.name))\n            .map(item => ({\n                checked: selectedRoles.includes(item.value),\n                label: item.name,\n                value: item.value,\n            })),\n        [allRoles, selectedRoles, rolesHelper]\n    );\n\n    const setSelectedRoles = useCallback(\n        (roleIds: number[]) => onChangeSelectedRoles(roleIds),\n        [onChangeSelectedRoles]\n    );\n\n    const handleSelectedRoleChange = useCallback(\n        (roleId: number) => {\n            setSelectedRoles(\n                selectedRoles.includes(roleId)\n                    ? selectedRoles.filter(r => r !== roleId)\n                    : [...selectedRoles, roleId]\n            );\n        },\n        [selectedRoles, setSelectedRoles]\n    );\n\n    return (\n        <>\n            {(loading || allRoles.length === 0) && (\n                <FiltersNoItems\n                    itemsName=\"Roles\"\n                    loading={loading}\n                    empty={allRoles.length === 0}\n                />\n            )}\n            <FiltersCheckboxList<number>\n                items={roleCheckboxItems}\n                onChange={handleSelectedRoleChange}\n            />\n        </>\n    );\n};\n","import React, {\n    FC,\n    useCallback,\n    useState,\n} from 'react';\nimport { LogEvent } from '../models/LogEvent';\nimport {\n    FiltersApplyButton,\n    FiltersClearButton,\n    FiltersFieldSet,\n    FiltersPopupActions,\n    FiltersPopupBody,\n    FiltersPopupFieldSets,\n    FiltersSelectedText,\n} from '../../../ui/components/Filters';\nimport { LogFiltersEvents } from './LogFiltersEvents';\nimport { UserRoleFilters } from '../../users/components/Filters/UserRoleFilters';\n\ninterface Props {\n    roleIds: number[];\n    events: LogEvent[];\n    onApplyFilter(selectedRoles: number[], selectedEvents: LogEvent[]): void;\n}\n\nexport const LogFilters: FC<Props> = props => {\n    const { roleIds, events, onApplyFilter } = props;\n    const [selectedRoles, setSelectedRoles] = useState<number[]>(roleIds || []);\n    const [selectedEvents, setSelectedEvents] = useState<LogEvent[]>(events || []);\n    const totalFiltersSelected = selectedRoles.length + selectedEvents.length;\n\n    const handleClickClear = useCallback(\n        () => {\n            setSelectedRoles([]);\n            setSelectedEvents([]);\n        },\n        [setSelectedRoles, setSelectedEvents]\n    );\n\n    const handleClickApplyFilter = useCallback(\n        () => onApplyFilter(selectedRoles, selectedEvents),\n        [selectedRoles, selectedEvents, onApplyFilter]\n    );\n\n    return (\n        <FiltersPopupBody>\n            <FiltersPopupFieldSets>\n                <FiltersFieldSet title=\"Roles\" width={130}>\n                    <UserRoleFilters\n                        selectedRoles={selectedRoles}\n                        onChangeSelectedRoles={setSelectedRoles}\n                    />\n                </FiltersFieldSet>\n                <FiltersFieldSet title=\"Events\" width={208} minHeight={244}>\n                    <LogFiltersEvents\n                        selectedEvents={selectedEvents}\n                        onChangeSelectedEvents={setSelectedEvents}\n                    />\n                </FiltersFieldSet>\n            </FiltersPopupFieldSets>\n            <FiltersPopupActions>\n                <FiltersSelectedText selectedItemsCount={totalFiltersSelected} />\n                <FiltersClearButton disabled={!totalFiltersSelected} onClick={handleClickClear} />\n                <FiltersApplyButton onClick={handleClickApplyFilter} />\n            </FiltersPopupActions>\n        </FiltersPopupBody>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoLogs = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"100%\"\n                className={className}\n                height=\"100%\"\n                fill=\"currentColor\"\n                viewBox=\"0 0 48 48\"\n            >\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M3 48h24.75v-3H4.5c-.828 0-1.5-.67-1.5-1.502V31.5c0-.828.671-1.5 1.5-1.5h9v6h14.25v-3H16.5v-6H3L9 3h30l6 24H31.5v3H48v-3L42 0H6L0 27v18c0 1.657 1.343 3 3 3zm10.5-27h21c.829 0 1.5-.672 1.5-1.5 0-.829-.671-1.5-1.5-1.5h-21c-.829 0-1.5.671-1.5 1.5 0 .828.671 1.5 1.5 1.5zm18-9h-15c-.829 0-1.5-.671-1.5-1.502C15 9.671 15.672 9 16.5 9h15c.829 0 1.5.672 1.5 1.498 0 .83-.671 1.502-1.5 1.502z\"\n                    clipRule=\"evenodd\"\n                />\n                <path\n                    fill=\"currentColor\"\n                    d=\"M35.5 48L33 45.749l5.147-5.249L33 35.25 35.5 33l5 5.1 5-5.1 2.5 2.25-5.148 5.25L48 45.749 45.5 48l-5-5.1-5 5.1z\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default NoLogs;\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Payload = styled.div`\n    overflow: auto;\n    height: 400px;\n    color: ${props => props.theme.Colors.dark};\n    text-align: left;\n`;\n\nexport const StyledDetailsWrapper = styled.div`\n    position: relative;\n`;\n\nexport const StyledDetails = styled.div`\n    position: absolute;\n    top: 10px;\n    left: -146px;\n    z-index: 1000;\n    width: 312px;\n    background: ${props => props.theme.Colors.white};\n    border-radius: 8px;\n    padding: 16px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        paddingLeft: '18px !important',\n    },\n\n    tableToolsRootStyle: {\n        marginLeft: 16,\n    },\n}));\n","import { FC, useCallback, useEffect, useState } from 'react';\n\nimport { ActionButton, ActionItem } from '../../../ui/components/ActionButton';\nimport StackIcon from '../../../ui/icons/Stack';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../constants/interfaces/filters';\nimport { PaginationResult } from '../../../constants/interfaces/PaginationResult';\nimport { formatDate } from '../../../helpers/functions/date-convert';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { LogItem } from '../models/LogItem';\nimport { Details } from '../components/Details';\nimport { searchLogsDispose } from '../store/actions';\nimport { useSearchLogsService } from '../store/services';\nimport { useLogsState } from '../store/states';\nimport { eventName, userName, userRoleTitle } from '../tools';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { getCompanyState } from '../../../pages/CompanySettings/store/reducers';\nimport OutsideActionBox from '../../../ui/components/OutsideActionBox/OutsideActionBox';\nimport { CheckPermission } from '../../permissions';\nimport { NEW_PERMISSIONS } from '../../../constants/enums/permissions';\nimport { LoadingComponent } from '../../../ui/components/LoadingCopmonent';\nimport { CalendarValue } from '../../../ui/components/Calendar';\nimport { useSearchDebounced } from '../../../helpers/hooks/useSearch';\nimport { LogFilters } from '../components/LogFilters';\nimport { FiltersPopupButton } from '../../../ui/components/Filters';\nimport { LogEvent } from '../models/LogEvent';\nimport NoLogs from '../../../ui/icons/NoLogs';\nimport { useSession } from '../../common';\nimport { useHistory } from 'react-router-dom';\nimport { TableWrapper } from '../../../ui/components/table-wrapper';\nimport {\n    Payload,\n    StyledDetails,\n    StyledDetailsWrapper,\n    useStyles,\n} from './styles';\nimport { useOrderBy } from '../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useFilter } from '../../../ui/components/table-wrapper/table/TableDropdown';\nimport { useTableStateHelper } from '../../../ui/components/table-wrapper/helper';\nimport TableTitleOverflowText from '../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\nimport DialogWrapper from '../../../ui/components/DialogWrapper/DialogWrapper';\nimport { CompanyInterface } from '../../../constants/interfaces/Company';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\n\nexport const CompanyLogs: FC<{\n    logs?: PaginationResult<LogItem>;\n    company: CompanyInterface;\n    searchLogs(searchParams: SearchParams): void;\n    onUnmount(): void;\n    loading?: boolean;\n    session?: string;\n}> = ({ logs, company, searchLogs, onUnmount, loading, session }) => {\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [],\n        orderBy: { field: 'createdAt', asc: false },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const classes = useStyles();\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setOffset,\n        setFilter,\n        getFilterByValue,\n        setCustom,\n    } = useSearchParamsState(initialSearchParams);\n\n    const history = useHistory();\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const [showPreview, setShowPreview] = useState<any>(null);\n\n    useEffect(() => {\n        if (session) {\n            searchLogs(searchParams);\n        }\n    }, [session, searchLogs, searchParams]);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [pageIndex]);\n\n    useEffect(() => () => onUnmount(), [onUnmount]);\n\n    const orderBy = searchParams.orderBy;\n    const hcEvent = useOrderBy('event', orderBy, setOrderBy);\n    const hcCreatedAt = useOrderBy('createdAt', orderBy, setOrderBy);\n    const hcRole = useOrderBy('creator.role.title', orderBy, setOrderBy);\n    const hcCreator = useOrderBy('creator.firstName', orderBy, setOrderBy);\n\n    const events = (getFilterByValue('event') as LogEvent[]) || [];\n    const roleIds = (getFilterByValue('creator.roleId') as number[]) || [];\n\n    const handleChangeEvent = useFilter('event', setFilter);\n    const handleChangeRole = useFilter('creator.roleId', setFilter);\n\n    const handleChangeStartDate = useCallback(\n        (d?: Date | null) => {\n            setCustom('startDate', d);\n        },\n        [setCustom]\n    );\n\n    const handleChangeEndDate = useCallback(\n        (d?: Date | null) => setCustom('endDate', d),\n        [setCustom]\n    );\n\n    const handleChangeDate = useCallback(\n        (date: CalendarValue<true>) => {\n            handleChangeStartDate(date.start);\n            handleChangeEndDate(date.end);\n        },\n        [handleChangeStartDate, handleChangeEndDate]\n    );\n\n    const [payload, setPayload] = useState<any>();\n    const handleShowDetails = useCallback(\n        (event: LogItem) => setPayload(() => event.data && event.data.payload),\n        []\n    );\n    const handleCloseDetails = useCallback(\n        () => setPayload(() => undefined),\n        []\n    );\n    const { startDate, endDate } = searchParams;\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters:\n            (!!startDate && !!endDate ? 1 : 0) + roleIds.length + events.length,\n        itemsCount: logs?.items.length || 0,\n    });\n\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n\n    const refreshData = useCallback(() => {\n        searchLogs(searchParams);\n        setLastRefreshed(new Date());\n    }, [searchLogs, searchParams]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    return (\n        <MainWrapper\n            subTitle=\"Events Log\"\n            htmlPageTitle={`Events Log ${\n                company.name ? `- ${company.name}` : ''\n            } - Practis`}\n            dataTest=\"logs\"\n        >\n            {loading && <LoadingComponent />}\n            {!!payload && (\n                <DialogWrapper\n                    modalTitle=\"Event Details\"\n                    onCancel={handleCloseDetails}\n                    cancelButtonText=\"Close\"\n                    customization={{ width: 600, shouldCenterButton: true }}\n                >\n                    <Payload>{JSON.stringify(payload)}</Payload>\n                </DialogWrapper>\n            )}\n\n            <TableWrapper\n                tableStates={tableStates}\n                data={logs?.items}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'logs-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: logs?.totalCount ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            searchParams.filters?.length ||\n                            !!searchParams.startDate ||\n                            !!searchParams.endDate,\n                        dataTest: 'logs-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        dataTest: 'logs-search',\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <FiltersPopupButton\n                                disabled={tableStates.disableFilters}\n                                filtersCount={roleIds.length + events.length}\n                                dataTest=\"logs-filters\"\n                            >\n                                {({ hide }) => (\n                                    <LogFilters\n                                        roleIds={roleIds}\n                                        events={events}\n                                        onApplyFilter={(\n                                            selectedRoles,\n                                            selectedEvents\n                                        ) => {\n                                            handleChangeRole(selectedRoles);\n                                            handleChangeEvent(selectedEvents);\n                                            hide();\n                                        }}\n                                    />\n                                )}\n                            </FiltersPopupButton>\n                        ),\n                    },\n                    calendarFilterOptions: {\n                        calendarPopUpProps: {\n                            value: {\n                                start: startDate ? new Date(startDate) : null,\n                                end: endDate ? new Date(endDate) : null,\n                            },\n                            selectRange: true,\n                            onChange: handleChangeDate,\n                            restrictFuture: true,\n                            disabled:\n                                tableStates.showEmptyState &&\n                                !searchParams.startDate &&\n                                !searchParams.endDate,\n                            dataTest: 'logs-calendar',\n                        },\n                    },\n                    customization: {\n                        rootClassName: classes.tableToolsRootStyle,\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState: true,\n                    noEntriesOptions: {\n                        icon: StackIcon,\n                        text: 'No Logs Yet',\n                        dataTest: 'no-logs',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Events Log',\n                        dataTest: 'no-found-logs',\n                    },\n                    noFilterResultsOptions: {\n                        icon: NoLogs,\n                        noFilterText: 'No Events Log Found',\n                        dataTest: 'no-filtered-logs',\n                    },\n                }}\n                configurations={{\n                    columns: [\n                        {\n                            title: 'Events',\n                            width: 24,\n                            ...hcEvent,\n                            disabled: tableStates.disableSorting,\n                            className: classes.customTableCellStyle,\n                            dataTest: 'name-column',\n                        },\n                        {\n                            title: 'Creator',\n                            width: 17,\n                            ...hcCreator,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'creator-column',\n                        },\n                        {\n                            title: 'Role',\n                            width: 17,\n                            ...hcRole,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'role-column',\n                        },\n                        {\n                            title: 'Date Created',\n                            width: 17,\n                            ...hcCreatedAt,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'date-column',\n                        },\n                        {\n                            title: 'Details',\n                            width: 25,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'details-column',\n                        },\n                    ],\n\n                    rowConfig: {\n                        dataTest: 'log-item',\n                        cells: [\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (log: LogItem) =>\n                                    !log?.event,\n                                fieldProps: {\n                                    renderTitle: (log: LogItem) =>\n                                        eventName(log?.event),\n                                    dataTest: 'log-item-name',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (log: LogItem) =>\n                                    !log?.creator,\n                                fieldProps: {\n                                    renderTitle: (log: LogItem) =>\n                                        userName(log?.creator),\n                                    dataTest: 'log-item-creator',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (log: LogItem) =>\n                                    !log?.creator,\n                                fieldProps: {\n                                    renderTitle: (log: LogItem) =>\n                                        userRoleTitle(log?.creator),\n                                    dataTest: 'log-item-role',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (log: LogItem) =>\n                                    !log?.createdAt,\n                                fieldProps: {\n                                    renderTitle: (log: LogItem) =>\n                                        formatDate(log?.createdAt),\n                                    dataTest: 'log-item-date',\n                                },\n                            },\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                shouldShowEmptyCell: (log: LogItem) => !log?.id,\n                                getCustomFieldComponent: (log: LogItem) => (\n                                    <StyledDetailsWrapper\n                                        onMouseEnter={() => {\n                                            setShowPreview(log.id);\n                                        }}\n                                        onMouseLeave={() => {\n                                            setShowPreview(null);\n                                        }}\n                                        onMouseDown={() => {\n                                            setShowPreview(null);\n                                        }}\n                                    >\n                                        <TableTitleOverflowText dataTest=\"log-item-details-truncated\">\n                                            <Details event={log} />\n                                        </TableTitleOverflowText>\n                                        <OutsideActionBox\n                                            open={showPreview === log.id}\n                                            toggleOpen={setShowPreview}\n                                        >\n                                            <StyledDetails data-test=\"log-item-details\">\n                                                <Details event={log} />\n                                            </StyledDetails>\n                                        </OutsideActionBox>\n                                    </StyledDetailsWrapper>\n                                ),\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (log: LogItem) => (\n                                        <CheckPermission\n                                            permissions={[\n                                                NEW_PERMISSIONS.VIEW_LOG_DETAILS,\n                                            ]}\n                                        >\n                                            <LogActionButton\n                                                event={log}\n                                                onShowDetails={\n                                                    handleShowDetails\n                                                }\n                                            />\n                                        </CheckPermission>\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const CompanyLogsContainer: FC = () => {\n    const dispatch = useDispatch();\n    const logsState = useLogsState();\n    const company = useSelector(getCompanyState);\n    const session = useSession();\n    const searchLogs = useSearchLogsService();\n    const searchCompanyLogs = useCallback(\n        (searchParams: SearchParams) => {\n            if (company?.id) {\n                searchLogs(addCompanyFilter(searchParams, company.id));\n            }\n        },\n        [searchLogs, company?.id]\n    );\n    const searchCompanyLogsDebounced = useSearchDebounced(searchCompanyLogs);\n    const handleUnmount = useCallback(() => dispatch(searchLogsDispose()), [\n        dispatch,\n    ]);\n    return (\n        <CompanyLogs\n            logs={logsState.data}\n            company={company}\n            searchLogs={searchCompanyLogsDebounced}\n            onUnmount={handleUnmount}\n            loading={logsState.loading}\n            session={session}\n        />\n    );\n};\n\nexport default CompanyLogsContainer;\n\nfunction addCompanyFilter(\n    searchParams: SearchParams,\n    companyId: number\n): SearchParams {\n    return {\n        ...searchParams,\n        filters: [\n            { field: 'companyId', value: companyId },\n            ...(searchParams.filters || []),\n        ],\n    };\n}\n\nconst LogActionButton: FC<{\n    event: LogItem;\n    onShowDetails(event: LogItem): void;\n}> = ({ event, onShowDetails }) => {\n    const handleClick = useCallback(() => onShowDetails(event), [\n        event,\n        onShowDetails,\n    ]);\n    return (\n        <ActionButton dataTest=\"log-item-menu\">\n            <ActionItem onClick={handleClick} dataTest=\"log-details-action\">Details</ActionItem>\n        </ActionButton>\n    );\n};\n","import styled from 'styled-components';\n\nexport const Title = styled.div`\n    position: relative;\n    font-size: 20px;\n    font-weight: 700;\n    line-height: 28px;\n    color: var(--ps-white-1);\n    width: 100%;\n    text-align: center;\n`;\n\nexport const BackArrow = styled.img`\n    position: absolute;\n    top: 7px;\n    left: 0;\n    cursor: pointer;\n    width: 16px;\n    height: 14px;\n`;\n\nexport const Description = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    text-align: center;\n    padding-top: 4px;\n`;\n\nexport const MobileNumberContainer = styled.div`\n    padding-top: 12px;\n    width: 100%;\n`;\n\nexport const SecondaryText = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-grey-4);\n    padding-top: 4px;\n    padding-bottom: 4px;\n    width: 100%;\n`;\n\nexport const ErrorText = styled.div`\n    color: var(--ps-red-main);\n`;\n\nexport const ButtonContainer = styled.div`\n    padding-top: 20px;\n    width: 100%;\n`","import { useCallback, useState } from 'react';\nimport ROUTES from '../../../routes/routes';\nimport { useHistory } from 'react-router';\nimport { Button } from '../../../ui/components/Button';\nimport InputPhone from '../../../ui/components/input/PhoneInput/PhoneInput';\nimport BackArrowImage from '../../../assets/images/icons/back-arrow.svg';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport { useGetPhoneCodeApi } from '../../../api';\nimport {\n    NOT_FOUND_ERROR_MESSAGE,\n    TOO_MANY_REQUESTS_MESSAGE,\n} from './constants';\nimport {\n    Title,\n    BackArrow,\n    Description,\n    MobileNumberContainer,\n    SecondaryText,\n    ErrorText,\n    ButtonContainer,\n} from './styles';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nconst MobileNumberLogin = () => {\n    const history = useHistory();\n    const getPhoneCode = useGetPhoneCodeApi();\n    const [errorMessage, setErrorMessage] = useState<string | null>(null);\n    const [showLoginWithEmail, setShowLoginWithEmail] = useState(false);\n    const [mobileNumber, setMobileNumber] = useState<string>('');\n    const [isSending, setIsSending] = useState<boolean>(false);\n\n    useHtmlPageTitle('Log In With Mobile Number');\n\n    /**\n     * @description saves changed mobile number and clears error message\n     * @function handleMobileNumberChange\n     * @param { string } value\n     * @returns { void }\n     */\n    const handleMobileNumberChange = (value: string) => {\n        setMobileNumber(value);\n        setErrorMessage(null);\n    };\n\n    /**\n     * @description returns error message based on error code\n     * @function getErrorMessage\n     * @returns { string }\n     */\n    const getErrorMessage = useCallback((error: ErrorResult) => {\n        switch (error.code) {\n            case 404:\n                return NOT_FOUND_ERROR_MESSAGE;\n            case 429:\n                return TOO_MANY_REQUESTS_MESSAGE;\n            default:\n                return error.message;\n        }\n    }, []);\n\n    /**\n     * @description sends API request to ask for a verification code\n     * @function handleSendCode\n     * @returns { void }\n     */\n    const handleSendCode = useCallback(() => {\n        setIsSending(true);\n        getPhoneCode(mobileNumber)\n            .then((response: any) => {\n                setIsSending(false);\n                history.push(\n                    ROUTES.AUTH_PAGES.MOBILE_NUMBER_VERIFY.replace(\n                        ':phoneNumber',\n                        mobileNumber.toString()\n                    )\n                );\n            })\n            .catch((error: ErrorResult) => {\n                setShowLoginWithEmail(true);\n                setIsSending(false);\n                setErrorMessage(getErrorMessage(error));\n            });\n    }, [mobileNumber, history, getPhoneCode, getErrorMessage]);\n\n    /**\n     * @description redirects to login page\n     * @function redirectToLogin\n     * @returns { void }\n     */\n    const redirectToLogin = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    }, [history]);\n\n    return (\n        <LoginAuthWrapper contentWidth={343} heightToShowScroll={500}>\n            <Title>\n                <BackArrow src={BackArrowImage} onClick={redirectToLogin} />\n                Log In With Mobile Number\n            </Title>\n            <Description>\n                Enter the mobile number associated with your account. We will\n                send you a text message with a verification code. Carrier fees\n                may apply.\n            </Description>\n            <MobileNumberContainer>\n                <InputPhone\n                    value={mobileNumber}\n                    onChange={handleMobileNumberChange}\n                    height=\"56px\"\n                    fontSize=\"15px\"\n                    autoFocus={true}\n                    className=\"grey-border-on-focus\"\n                    label=\"\"\n                    hasManualError={!!errorMessage}\n                />\n            </MobileNumberContainer>\n            <SecondaryText>\n                {!!errorMessage ? (\n                    <ErrorText>{errorMessage}</ErrorText>\n                ) : (\n                    'If you have not added your mobile number to your account yet, please log in with email first.'\n                )}\n            </SecondaryText>\n            <ButtonContainer>\n                <Button\n                    height=\"56px\"\n                    width=\"100%\"\n                    buttonWidth=\"100%\"\n                    fontSize={15}\n                    disabled={!mobileNumber || mobileNumber.length < 3}\n                    loading={isSending}\n                    type=\"button\"\n                    action={handleSendCode}\n                >\n                    Send Code\n                </Button>\n            </ButtonContainer>\n            {showLoginWithEmail && (\n                <ButtonContainer>\n                    <Button\n                        height=\"56px\"\n                        width=\"100%\"\n                        buttonWidth=\"100%\"\n                        fontSize={15}\n                        type=\"button\"\n                        action={redirectToLogin}\n                        variant=\"inverse\"\n                    >\n                        Log In With Email\n                    </Button>\n                </ButtonContainer>\n            )}\n        </LoginAuthWrapper>\n    );\n};\n\nexport default MobileNumberLogin;\n","export const NOT_FOUND_ERROR_MESSAGE = 'We couldn\\'t find that number. If you haven\\'t verified this number with Practis yet, try logging in with your email address.';\nexport const TOO_MANY_REQUESTS_MESSAGE = 'You just did that. Try in a few?';","import { createRef, useCallback, useEffect, useMemo, useState } from 'react';\nimport styled, { keyframes } from 'styled-components';\n\nimport useWindowDimensions from '../../../helpers/hooks/useWindowDimensions';\nimport { Variables } from '../../../theme/variables';\nimport OutsideActionBox from '../OutsideActionBox/OutsideActionBox';\n\nexport const Container = styled.div<{ itemsCount: number }>`\n    display: flex;\n    position: relative;\n    justify-content: space-between;\n    width: 100%;\n`;\n\nexport const Input = styled.input<{ isMobile: boolean; activeIndex: number }>`\n    position: absolute;\n    top: 0;\n    left: ${props =>\n        `calc(${props.activeIndex} * 2.5rem + 1rem * ${props.activeIndex})`};\n    opacity: 0;\n    width: ${props => (props.isMobile ? '48px' : '64px')};\n    height: ${props => (props.isMobile ? '48px' : '64px')};\n`;\n\nexport const Item = styled.div<{\n    isMobile: boolean;\n    hasBorder: boolean;\n    backgroundColor?: string;\n    fontColor?: string;\n}>`\n    width: ${props => (props.isMobile ? '48px' : '64px')};\n    height: ${props => (props.isMobile ? '48px' : '64px')};\n    padding: 0;\n    border-radius: 4px;\n    font-size: ${props => (props.isMobile ? '15px' : '17px')};\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    line-height: normal;\n    text-align: center;\n    border: 0;\n    margin: ${props => (props.isMobile ? '0 6px' : '0 8px')};\n    color: ${props =>\n        props.fontColor ? props.fontColor : props.theme.Colors.white};\n    background-color: ${props =>\n        props.backgroundColor\n            ? props.backgroundColor\n            : props.theme.Colors.darkTwo};\n    ${props =>\n        !!props.hasBorder &&\n        `box-shadow: inset 0 0 0 1px ${props.theme.Colors.cloudyBlue};`};\n    cursor: text;\n`;\n\nfunction blinkingEffect() {\n    return keyframes`\n        50% {\n          opacity: 0;\n        }\n  `;\n}\n\nexport const StyledCursorText = styled.span`\n    animation: ${blinkingEffect} 1s linear infinite;\n`;\n\nconst KEY_CODE = {\n    BACKSPACE: 8,\n    ARROW_LEFT: 37,\n    ARROW_RIGHT: 39,\n    DELETE: 46,\n};\n\ntype Props = {\n    length?: number;\n    onChange: (data: string) => any;\n    placeholder?: string;\n    value?: string;\n    backgroundColor?: string;\n    fontColor?: string;\n};\n\nconst VerificationCodeInput = ({\n    length = 5,\n    onChange,\n    placeholder = '',\n    value: pValue,\n    backgroundColor,\n    fontColor,\n}: Props) => {\n    const emptyValue = new Array(length).fill(placeholder);\n\n    const [activeIndex, setActiveIndex] = useState<number>(0);\n    const [value, setValue] = useState<string[]>(\n        pValue ? pValue.split('') : emptyValue\n    );\n\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.smaller;\n\n    const codeInputRef = createRef<HTMLInputElement>();\n    const itemsRef = useMemo(\n        () =>\n            new Array(length)\n                .fill(null)\n                .map(() => createRef<HTMLDivElement>()),\n        [length]\n    );\n\n    const isCodeRegex = new RegExp(`^[0-9]{${length}}$`);\n\n\n    \n\n    const focusOrBlurItem = useCallback(\n        (index: number, action: any = null) => {\n            const currentItem: any = itemsRef ? itemsRef[index].current : null;\n            action && currentItem && currentItem[action]();\n            return currentItem;\n        },\n        [itemsRef]\n    );\n\n    const focusItem = (index: number): void => {\n        focusOrBlurItem(index, 'focus');\n    };\n    const blurItem = (index: number): void => {\n        focusOrBlurItem(index, 'blur');\n    };\n\n    const onItemFocus = (index: number) => () => {\n        setActiveIndex(index);\n        if (codeInputRef.current) codeInputRef.current.focus();\n    };\n\n    const onInputKeyUp = ({ key, keyCode }: React.KeyboardEvent) => {\n        const newValue = [...value];\n        const nextIndex = activeIndex + 1;\n        const prevIndex = activeIndex - 1;\n\n        const codeInput = codeInputRef.current;\n\n        const isLast = nextIndex === length;\n        const isDeleting =\n            keyCode === KEY_CODE.DELETE || keyCode === KEY_CODE.BACKSPACE;\n\n        // keep items focus in sync\n        onItemFocus(activeIndex);\n\n        // on delete, replace the current value\n        // and focus on the previous item\n        if (isDeleting) {\n            if (\n                (activeIndex > 0 &&\n                    activeIndex !== length - 1 &&\n                    newValue[activeIndex] === placeholder) ||\n                (activeIndex === length - 1 &&\n                    newValue[activeIndex] === placeholder)\n            ) {\n                setActiveIndex(prevIndex);\n                newValue[prevIndex] = placeholder;\n                focusItem(prevIndex);\n            }\n            newValue[activeIndex] = placeholder;\n            setValue(newValue);\n\n            return;\n        }\n\n        // if the key pressed is not a number\n        // don't do anything\n        if (Number.isNaN(+key)) return;\n\n        // reset the current value\n        // and set the new one\n        if (codeInput) codeInput.value = '';\n        newValue[activeIndex] = key;\n        setValue(newValue);\n\n        if (!isLast) {\n            setActiveIndex(nextIndex);\n            focusItem(nextIndex);\n            return;\n        }\n    };\n\n    // handle mobile autocompletion\n    const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n        const { value: changeValue } = e.target;\n        const isCode = isCodeRegex.test(changeValue);\n\n        if (!isCode) return;\n\n        setValue(changeValue.split(''));\n        blurItem(activeIndex);\n    };\n\n    const onInputBlur = () => {\n        if (activeIndex === -1) return;\n\n        blurItem(activeIndex);\n        // setActiveIndex(-1);\n    };\n\n    useEffect(() => {\n        if (activeIndex === 0) {\n            focusOrBlurItem(0, 'focus');\n        }\n    }, [activeIndex, focusOrBlurItem]);\n\n    // handle pasting\n    useEffect(() => {\n        const codeInput = codeInputRef.current;\n        if (!codeInput) return;\n\n        const onPaste = (e: ClipboardEvent) => {\n            e.preventDefault();\n\n            const pastedString = e.clipboardData\n                ? e.clipboardData.getData('text')\n                : '';\n            if (!pastedString) return;\n\n            const isNumber = !Number.isNaN(+pastedString);\n            if (isNumber) setValue(pastedString.split(''));\n        };\n\n        codeInput.addEventListener('paste', onPaste);\n        return () => codeInput.removeEventListener('paste', onPaste);\n    }, [codeInputRef]);\n\n    useEffect(() => {\n        onChange(value.join(''));\n    }, [value, onChange]);\n\n    useEffect(() => {\n        if (typeof pValue !== 'string') return;\n\n        // avoid infinite loop\n        if (pValue === '' && value.join('') === emptyValue.join('')) return;\n\n        // keep internal and external states in sync\n        if (pValue !== value.join('')) setValue(pValue.split(''));\n    }, [pValue, emptyValue, value]);\n\n    return (\n        <>\n            <OutsideActionBox open={true} toggleOpen={() => setActiveIndex(-1)}>\n                <Container\n                    className=\"ReactInputVerificationCode__container\"\n                    // needed for styling\n                    itemsCount={length}\n                >\n                    <Input\n                        ref={codeInputRef}\n                        autoComplete={isMobile ? 'one-time-code' : 'off'}\n                        type=\"text\"\n                        inputMode=\"decimal\"\n                        id=\"one-time-code\"\n                        // use onKeyUp rather than onChange for a better control\n                        // onChange is still needed to handle the autocompletion\n                        // when receiving a code by SMS\n                        onChange={onInputChange}\n                        onKeyUp={onInputKeyUp}\n                        onBlur={onInputBlur}\n                        isMobile={isMobile}\n                        activeIndex={activeIndex}\n                        data-test=\"verification-code-input\"\n                    />\n\n                    {itemsRef.map((ref, i) => (\n                        <Item\n                            key={i}\n                            ref={ref}\n                            role=\"button\"\n                            tabIndex={0}\n                            isMobile={isMobile}\n                            hasBorder={!!value[i]}\n                            onFocus={onItemFocus(i)}\n                            backgroundColor={backgroundColor}\n                            fontColor={fontColor}\n                            className={'ReactInputVerificationCode__item' + (activeIndex === i ? ' focused' : '')}\n                        >\n                            <span data-test={`verification-code-digit-${i}`}>{value[i]}</span>\n                            {activeIndex === i && (\n                                <StyledCursorText>|</StyledCursorText>\n                            )}\n                        </Item>\n                    ))}\n                </Container>\n            </OutsideActionBox>\n        </>\n    );\n};\n\nexport default VerificationCodeInput;\n","import styled from 'styled-components';\n\nexport const Title = styled.div`\n    position: relative;\n    font-size: 20px;\n    font-weight: 700;\n    line-height: 28px;\n    color: var(--ps-white-1);\n    width: 100%;\n    text-align: center;\n`;\n\nexport const BackArrow = styled.img`\n    position: absolute;\n    top: 7px;\n    left: 0;\n    cursor: pointer;\n    width: 16px;\n    height: 14px;\n`;\n\nexport const Description = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    text-align: center;\n    padding-top: 4px;\n`;\n\nexport const MobileNumber = styled.div`\n    font-size: 20px;\n    font-weight: 600;\n    line-height: 28px;\n    color: var(--ps-blue-main);\n    padding-top: 8px;\n`;\n\nexport const VerificationCodeContainer = styled.div`\n    padding-top: 20px;\n    min-height: 116px;\n    box-sizing: border-box;\n\n    .ReactInputVerificationCode__item {\n        width: 62px;\n        height: 62px;\n        margin: 0 4px;\n        border: 1px solid var(--ps-graphite-2);\n        box-sizing: border-box;\n        box-shadow: none!important;\n\n        &.focused {\n            border-color: var(--ps-grey-1);\n        }\n\n        span {\n            font-size: 20px;\n        }\n    }\n\n    &.has-error {\n        .ReactInputVerificationCode__item {\n            border-color: var(--ps-red-main);\n        }\n    }\n\n\n`;\n\nexport const VerificationError = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-red-main);\n    padding-top: 4px;\n    padding-left: 4px;\n    padding-bottom: 4px;\n`\n\nexport const ButtonContainer = styled.div`\n    width: 100%;\n`\n\nexport const FooterText = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-grey-2);\n    padding-top: 12px;\n`\n\nexport const SentLabel = styled.span`\n    color: var(--ps-green-main);\n`\n\nexport const CountdownTimer = styled.span`\n    color: #535f6a;\n`","import VerificationCodeInput from '../../../../../ui/components/VerificationCodeInput/VerificationCodeInput';\nimport { Button } from '../../../../../ui/components/Button';\nimport { LinkText } from '../../../../../ui/components/LinkText/link-text';\nimport BackArrowImage from '../../../../../assets/images/icons/back-arrow.svg';\nimport { CheckVerificationCodeViewProps } from './types';\nimport {\n    Title,\n    Description,\n    MobileNumber,\n    BackArrow,\n    VerificationCodeContainer,\n    ButtonContainer,\n    FooterText,\n    SentLabel,\n    CountdownTimer,\n    VerificationError\n} from './styles';\n\nfunction CheckVerificationCodeView({\n    mobileNumber,\n    isVerifying,\n    verificationError,\n    resendStatus,\n    remainingTime,\n    isCodeValid,\n    showSent,\n    showCountDown,\n    onCodeChange,\n    onBack,\n    onVerify,\n    onResend\n}: CheckVerificationCodeViewProps) {\n    return <>\n        <Title>\n            <BackArrow src={BackArrowImage} onClick={onBack} />\n            <span data-test=\"verify-mobile-number\">Verify Mobile Number</span>\n        </Title>\n        <Description data-test=\"instructions-text\">Enter the 5-digit code we sent to:</Description>\n        <MobileNumber data-test=\"mobile-number\">{mobileNumber}</MobileNumber>\n        <VerificationCodeContainer className={!!verificationError ? 'has-error' : undefined}>\n            <VerificationCodeInput\n                onChange={onCodeChange}\n            />\n            {!!verificationError && (<VerificationError data-test=\"verification-error\">{verificationError}</VerificationError>)}\n        </VerificationCodeContainer>\n        <ButtonContainer>\n            <Button\n                height='56px'\n                width='100%'\n                buttonWidth='100%'\n                fontSize={15}\n                loading={isVerifying}\n                disabled={!isCodeValid}\n                action={onVerify}\n                dataTest=\"verify-button\"\n            >\n                Verify\n            </Button>\n        </ButtonContainer>\n        <FooterText>\n            <span data-test=\"didnt-receive-code-text\">Didn't receive the code?</span> {showSent ? (\n                    <SentLabel data-test=\"sent-text\">Sent!</SentLabel>\n                ) : showCountDown ? (\n                    <CountdownTimer data-test=\"time-to-resend\">\n                        Resend in{' '}\n                        {`0:${\n                            remainingTime < 10 ? '0' : ''\n                        }${remainingTime}`}\n                    </CountdownTimer>\n                ) : (\n                    <LinkText\n                        onClick={onResend}\n                        disabled={resendStatus === 'inProgress'}\n                        dataTest=\"resend-button\"\n                    >\n                        Resend\n                    </LinkText>\n                )\n            }\n        </FooterText>\n    </>\n}\n\nexport default CheckVerificationCodeView;","import { useState, useCallback, useRef, useMemo, useEffect } from 'react';\n\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { CheckVerificationCodeProps, MobileNumberResendCodeStatus } from './types';\nimport {\n    INVALID_SECURITY_CODE,\n    EXPIRED_SECURITY_CODE,\n    CODE_TIMEOUT,\n} from './constants';\nimport VerifyMobileNumberView from './view';\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\n\nfunction CheckVerificationCodeController({\n    mobileNumber,\n    onBack,\n    onVerify,\n    onVerifySuccess,\n    onResend,\n}: CheckVerificationCodeProps) {\n    const [code, setCode] = useState<string>('');\n    const [remainingTime, setRemainingTime] = useState<number>(CODE_TIMEOUT);\n    const remainingTimeInterval: any = useRef();\n    const [isVerifying, setIsVerifying] = useState<boolean>(false);\n    const [verificationError, setVerificationError] = useState<\n        string | undefined\n    >();\n    const [resendStatus, setResendStatus] =\n        useState<MobileNumberResendCodeStatus>('none');\n    const showMessage = useShowMessage();\n\n    /**\n     * @function setRemainingTimeInterval\n     * @description sets remaining time interval\n     * @returns { void }\n     */\n    const setRemainingTimeInterval = () => {\n        setRemainingTime(CODE_TIMEOUT);\n        remainingTimeInterval.current = setInterval(\n            () => setRemainingTime(prevState => prevState - 1),\n            1000\n        );\n    };\n\n    /**\n     * @function handleCodeChange \n     * @description sets code to the state and clears error message\n     * @param { string } newCode\n     * @returns { void }\n     */\n    const handleCodeChange = (newCode: string) => {\n        if (newCode !== code) {\n            setCode(newCode);\n            setVerificationError(undefined);\n        }\n    };\n\n    /**\n     * @function handleVerify\n     * @description calls API to verify entered code,\n     * runs success callback or shows a proper message in case of error\n     * @returns { void }\n     */\n    const handleVerify = useCallback(() => {\n        setIsVerifying(true);\n        setVerificationError(undefined);\n        onVerify(code)\n            .then((response?: unknown) => {\n                setIsVerifying(false);\n                setVerificationError(undefined);\n                onVerifySuccess(response);\n            })\n            .catch((error: ErrorResult) => {\n                switch(error.errorCode) {\n                    case 404:\n                    case 472:\n                    case 500:\n                        setVerificationError(INVALID_SECURITY_CODE);\n                        break;\n                    case 432:\n                        setVerificationError(EXPIRED_SECURITY_CODE);\n                        break;\n                    default:\n                        error?.message && setVerificationError(error.message);\n                        break;\n                }\n                setIsVerifying(false);\n            });\n    }, [code, onVerify, onVerifySuccess]);\n\n    /**\n     * @function handleResend\n     * @description calls API to resend a verification code\n     * and shows a proper message in case of error\n     * @returns { void }\n     */\n    const handleResend = useCallback(() => {\n        setResendStatus('inProgress');\n        onResend()\n            .then(() => {\n                setResendStatus('success');\n            })\n            .catch((error: any) => {\n                setResendStatus('none');\n                showMessage(error.message, 'error');\n            });\n    }, [onResend, showMessage]);\n\n    const isCodeValid = useMemo(() => code.length === 5, [code]);\n    const showSent = useMemo(\n        () =>\n            remainingTime <= CODE_TIMEOUT &&\n            remainingTime >= CODE_TIMEOUT - 2 &&\n            resendStatus === 'success',\n        [remainingTime, resendStatus]\n    );\n    const showCountDown = useMemo(\n        () =>\n            remainingTime > 0 &&\n            remainingTime <=\n                CODE_TIMEOUT - (resendStatus === 'success' ? 3 : 0),\n        [remainingTime, resendStatus]\n    );\n\n    useEffect(() => {\n        if (resendStatus === 'inProgress') {\n            clearInterval(remainingTimeInterval.current);\n        } else {\n            setRemainingTimeInterval();\n            return () => clearInterval(remainingTimeInterval.current);\n        }\n    }, [resendStatus]);\n\n    useEffect(() => {\n        if (remainingTime < 0) {\n            clearInterval(remainingTimeInterval.current);\n        }\n    }, [remainingTime]);\n\n    return (\n        <VerifyMobileNumberView\n            mobileNumber={mobileNumber}\n            isVerifying={isVerifying}\n            verificationError={verificationError}\n            resendStatus={resendStatus}\n            remainingTime={remainingTime}\n            isCodeValid={isCodeValid}\n            showSent={showSent}\n            showCountDown={showCountDown}\n            onCodeChange={handleCodeChange}\n            onBack={onBack}\n            onVerify={handleVerify}\n            onResend={handleResend}\n        />\n    );\n}\n\n\nexport default CheckVerificationCodeController;","import CheckVerificationCode from './controller';\n\nexport default CheckVerificationCode;","export const CODE_TIMEOUT: number = 60;\nexport const INVALID_SECURITY_CODE: string = 'Invalid security code.';\nexport const EXPIRED_SECURITY_CODE: string = 'Security code expired.';\n","import { useCallback } from 'react';\n\nimport { useHistory } from '../../../tools/router';\nimport { useParams } from 'react-router';\nimport ROUTES from '../../../routes/routes';\nimport { useLoginByPhoneCode } from '../store/services';\nimport { UrlBuilder, UrlBuilderContext } from '../../../tools/url/UrlBuilder';\nimport {\n    redirectAfterLogin,\n    setAuthToken,\n} from '../../../helpers/functions/auth-helpers';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport { useGetPhoneCodeApi } from '../../../api';\nimport CheckVerificationCode from '../AddMobileNumber/components/CheckVerificationCode';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nfunction VerifyMobileNumberController() {\n    const params: { phoneNumber?: any } = useParams();\n    const phoneNumber = params.phoneNumber ?? '';\n    const history = useHistory();\n    const loginByPhoneCode = useLoginByPhoneCode();\n    const getPhoneCode = useGetPhoneCodeApi();\n\n    useHtmlPageTitle('Verify Mobile Number');\n\n    /**\n     * @function handleVerify\n     * @description calls API to verify entered code\n     * @param { string } code\n     * @returns { Promise }\n     */\n    const handleVerify = useCallback(\n        (code: string) => {\n            return loginByPhoneCode({ phone: phoneNumber, code });\n        },\n        [phoneNumber, loginByPhoneCode]\n    );\n\n    /**\n     * @function handleVerifySuccess\n     * @description calls API to verify entered code\n     * @param { UrlBuilder } urlBuilder\n     * @param { { user: UserV2, token: string } } response\n     * @returns { void }\n     */\n    const handleVerifySuccess = useCallback(\n        (urlBuilder: UrlBuilder, response: { user: UserV2; token: string }) => {\n            setAuthToken(response.user, response.token);\n            redirectAfterLogin(\n                history,\n                urlBuilder,\n                response.user,\n                response.token\n            );\n        },\n        [history]\n    );\n\n    /**\n     * @function handleResend\n     * @description calls API to resend a verification code\n     * @returns { Promise }\n     */\n    const handleResend = useCallback(() => {\n        return getPhoneCode(phoneNumber);\n    }, [getPhoneCode, phoneNumber]);\n\n    /**\n     * @function redirectToMobileNumberLogin\n     * @description redirects to mobile number login\n     * @returns { void }\n     */\n    const redirectToMobileNumberLogin = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.MOBILE_NUMBER_LOGIN);\n    }, [history]);\n\n    return (\n        <UrlBuilderContext.Consumer>\n            {urlBuilder => (\n                <LoginAuthWrapper contentWidth={343} heightToShowScroll={500}>\n                    <CheckVerificationCode\n                        mobileNumber={phoneNumber}\n                        onBack={redirectToMobileNumberLogin}\n                        onVerify={handleVerify}\n                        onVerifySuccess={response =>\n                            handleVerifySuccess(\n                                urlBuilder,\n                                response as { user: UserV2; token: string }\n                            )\n                        }\n                        onResend={handleResend}\n                    />\n                </LoginAuthWrapper>\n            )}\n        </UrlBuilderContext.Consumer>\n    );\n}\n\nexport default VerifyMobileNumberController;\n","import VerifyMobileNumber from './controller';\n\nexport default VerifyMobileNumber;","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { ScriptLine } from '../../../constants/interfaces/ScriptLine';\n\nexport interface TelepromterState {\n    scenario: Scenario;\n    generatedLines: Partial<ScriptLine>[];\n    videoBlob?: string;\n    loading?: boolean;\n    error?: string;\n}\n\nexport type TelepromterStateSelector = (state: any) => TelepromterState;\n\nexport const TelepromterStateSelectorContext = React.createContext<\n    TelepromterStateSelector\n>(() => {\n    throw new Error('Not implemented');\n});\n\nexport function useTelepromterState(): TelepromterState {\n    return useSelector(useContext(TelepromterStateSelectorContext));\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const CompletedIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 72 72\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g>\n                    <clipPath id=\"cp0\">\n                        <path\n                            transform=\"matrix(1,0,0,-1,0,72)\"\n                            d=\"M 71.34928 54.7223 L 39.92813 23.47684 C 39.88086 23.41609 39.90112 23.33396 39.84709 23.27883 C 39.39687 22.83105 38.80595 22.63529 38.21728 22.64992 C 37.61736 22.62854 37.01856 22.81643 36.56046 23.2732 C 36.49405 23.33733 36.51881 23.43746 36.46141 23.50722 L 23.17079 36.72455 C 22.30073 37.5886 22.30073 38.99269 23.17079 39.86124 C 24.04085 40.72755 25.45343 40.72755 26.32461 39.86124 L 38.2004 28.04913 L 68.18758 57.86687 C 69.06102 58.73542 70.47697 58.73542 71.35041 57.86687 C 72.22272 56.99944 72.22272 55.58972 71.34928 54.7223 Z M 35.99318 67.50197 C 18.59539 67.50197 4.490987 53.39809 4.490987 36 C 4.490987 18.60079 18.59539 4.500281 35.99318 4.500281 C 53.39096 4.500281 67.49536 18.60079 67.49536 36 C 67.49536 36.68067 67.33666 37.31633 67.29501 37.98462 L 71.44383 42.01688 C 71.77362 40.05475 71.98522 38.0555 71.98522 36 C 71.98522 16.11551 55.8717 0 35.99205 0 C 16.11465 0 0 16.11551 0 36 C 0 55.88449 16.11352 72 35.99205 72 C 45.11472 72 53.41798 68.57979 59.76276 62.98369 L 56.45587 59.76936 C 50.93949 64.52391 43.84621 67.50197 35.99318 67.50197 Z \"\n                        />\n                    </clipPath>\n                    <g clipPath=\"url(#cp0)\">\n                        <clipPath id=\"cp1\">\n                            <path\n                                transform=\"matrix(1,0,0,-1,0,72)\"\n                                d=\"M -152 -636 L 223 -636 L 223 176 L -152 176 Z \"\n                            />\n                        </clipPath>\n                        <g clipPath=\"url(#cp1)\">\n                            <path\n                                transform=\"matrix(1,0,0,-1,0,72)\"\n                                d=\"M -5 77 L 77.0045 77 L 77.0045 -5 L -5 -5 Z \"\n                                fill=\"currentColor\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default CompletedIcon;\n","import { ScriptLine } from '../../../constants/interfaces/ScriptLine';\n\nexport enum ACTIONS {\n    FETCH_TELEPROMTER_SCENARIO_START = 'FETCH_TELEPROMTER_SCENARIO_START',\n    FETCH_TELEPROMTER_SCENARIO_SUCCESS = 'FETCH_TELEPROMTER_SCENARIO_SUCCESS',\n    FETCH_TELEPROMTER_SCENARIO_FAILURE = 'FETCH_TELEPROMTER_SCENARIO_FAILURE',\n\n    ADD_GENERATED_SCRIPT_LINE = 'ADD_GENERATED_SCRIPT_LINE',\n    SET_RECORDED_VIDEO = 'SET_RECORDED_VIDEO',\n    RESET_TELEPROMTER = 'RESET_TELEPROMTER',\n}\n\nexport function fetchTelepromterScenarioStart() {\n    return {\n        type: ACTIONS.FETCH_TELEPROMTER_SCENARIO_START as ACTIONS.FETCH_TELEPROMTER_SCENARIO_START,\n    };\n}\n\nexport function fetchTelepromterScenarioSuccess(data: any) {\n    return {\n        type: ACTIONS.FETCH_TELEPROMTER_SCENARIO_SUCCESS as ACTIONS.FETCH_TELEPROMTER_SCENARIO_SUCCESS,\n        data,\n    };\n}\n\nexport function fetchTelepromterScenarioFailure(error: any) {\n    return {\n        type: ACTIONS.FETCH_TELEPROMTER_SCENARIO_FAILURE as ACTIONS.FETCH_TELEPROMTER_SCENARIO_FAILURE,\n        error,\n    };\n}\n\nexport function addGeneratedScriptLineAction(scriptLine: Partial<ScriptLine>) {\n    return {\n        type: ACTIONS.ADD_GENERATED_SCRIPT_LINE as ACTIONS.ADD_GENERATED_SCRIPT_LINE,\n        scriptLine,\n    };\n}\n\nexport function setRecordedVideoAction(videoBlob: string) {\n    return {\n        type: ACTIONS.SET_RECORDED_VIDEO as ACTIONS.SET_RECORDED_VIDEO,\n        videoBlob,\n    };\n}\n\nexport function resetTelepromterAction() {\n    return {\n        type: ACTIONS.RESET_TELEPROMTER as ACTIONS.RESET_TELEPROMTER,\n    };\n}\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../../../../ui/components/Button';\nimport ROUTES from '../../../../routes/routes';\nimport { useTelepromterState } from '../../store/state';\nimport { useHistory } from '../../../../tools/router';\nimport CompletedIcon from '../../../../ui/icons/Completed';\nimport Close from '../../../../ui/icons/Close';\n\nconst Container = styled.div`\n    background: ${props => props.theme.Colors.darkThree};\n    height: 100%;\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    padding: 72px 32px 0 32px;\n    box-sizing: border-box;\n    position: relative;\n`;\n\nconst ExitIcon = styled.div`\n    height: 14px;\n    width: 14px;\n    color: ${props => props.theme.Colors.white};\n    position: absolute;\n    top: 40px;\n    right: 24px;\n    cursor: pointer;\n    z-index: 1;\n    user-select: none;\n    &:hover {\n        opacity: 0.7;\n    }\n    &:active {\n        opacity: 0.6;\n    }\n`;\n\nconst IconContainer = styled.div`\n    height: 72px;\n    width: 72px;\n    color: ${props => props.theme.Colors.lightMint};\n    margin-bottom: 32px;\n    align-self: center;\n`;\n\nconst Title = styled.div`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.lightMint};\n    margin-bottom: 4px;\n`;\n\nconst Text = styled.div`\n    font-size: 17px;\n    color: ${props => props.theme.Colors.white};\n    margin-bottom: 32px;\n`;\n\nconst Content = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    padding-top: 32px;\n`;\n\nconst Actions = styled.div`\n    height: 180px;\n    margin-bottom: 32px;\n    display: flex;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst Completed: FC = () => {\n    const scenario = useTelepromterState().scenario;\n    const history = useHistory();\n\n    const redirectToScenario = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    const redirectToPlayback = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.PLAYBACK.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    const redirectToTraining = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.TRAINING.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    return (\n        <Container>\n            <ExitIcon onClick={redirectToScenario}>\n                <Close />\n            </ExitIcon>\n            <Content>\n                <IconContainer>\n                    <CompletedIcon />\n                </IconContainer>\n                <Title>Success!</Title>\n                <Text>Scenario Complete</Text>\n            </Content>\n            <Actions>\n                <ButtonWrapper>\n                    <Button\n                        label=\"Playback\"\n                        width=\"152px\"\n                        height=\"48px\"\n                        color={'green'}\n                        action={redirectToPlayback}\n                        variant={'inverse'}\n                    />\n                </ButtonWrapper>\n                <ButtonWrapper>\n                    <Button\n                        label=\"Practis Again\"\n                        width=\"152px\"\n                        height=\"48px\"\n                        color={'green'}\n                        action={redirectToTraining}\n                    />\n                </ButtonWrapper>\n            </Actions>\n        </Container>\n    );\n};\n\nconst PreviewContainer = () => {\n    return <Completed />;\n};\n\nexport default PreviewContainer;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ disabled: boolean }>`\n    background: ${props =>\n        props.disabled\n            ? props.theme.Colors.whiteThree\n            : props.theme.Colors.white};\n    width: 100%;\n    padding: 32px;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.skyBlue};\n    font-size: 17px;\n    font-weight: bold;\n    margin-bottom: 8px;\n    padding-left: 8px;\n`;\n\nconst Text = styled.div<{ disabled: boolean }>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.steelGrey\n            : props.theme.Colors.black};\n    font-size: 17px;\n    padding-left: 8px;\n`;\n\nconst RepLine: FC<{ text: string; disabled: boolean }> = ({\n    text,\n    disabled,\n}) => {\n    return (\n        <Container disabled={disabled}>\n            <Title>You</Title>\n            <Text disabled={disabled}>{text}</Text>\n        </Container>\n    );\n};\n\nexport default RepLine;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ disabled: boolean }>`\n    background: ${props =>\n        props.disabled\n            ? props.theme.Colors.whiteThree\n            : props.theme.Colors.white};\n    width: 100%;\n    padding: 32px;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 17px;\n    font-weight: bold;\n    margin-bottom: 8px;\n    padding-left: 8px;\n`;\n\nconst Text = styled.div<{ disabled: boolean }>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.steelGrey\n            : props.theme.Colors.black};\n    font-size: 17px;\n    padding-left: 8px;\n`;\n\nconst CustomerLine: FC<{\n    text: string;\n    disabled: boolean;\n}> = ({ text, disabled }) => {\n    return (\n        <Container disabled={disabled}>\n            <Title>Customer</Title>\n            <Text disabled={disabled}>{text}</Text>\n        </Container>\n    );\n};\n\nexport default CustomerLine;\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { VideoPlayer } from '../../../../ui/components/VideoPlayer';\nimport RepLine from './RepLine';\nimport CustomerLine from './CustomerLine';\nimport { useTelepromterState } from '../../store/state';\nimport { Button } from '../../../../ui/components/Button';\nimport { useHistory } from '../../../../tools/router';\nimport ROUTES from '../../../../routes/routes';\nimport {\n    ScriptLine,\n    ScriptLineSpeaker,\n} from '../../../../constants/interfaces/ScriptLine';\nimport { Loading } from '../../../../ui/components/LoadingCopmonent';\nimport Close from '../../../../ui/icons/Close';\n\nconst Container = styled.div`\n    background: ${props => props.theme.Colors.darkThree};\n    height: 100%;\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n    position: relative;\n`;\n\nconst ExitIcon = styled.div`\n    height: 14px;\n    width: 14px;\n    color: ${props => props.theme.Colors.white};\n    position: absolute;\n    top: 40px;\n    right: 24px;\n    cursor: pointer;\n    z-index: 1;\n    user-select: none;\n    &:hover {\n        opacity: 0.7;\n    }\n    &:active {\n        opacity: 0.6;\n    }\n`;\n\nconst LoadingContainer = styled.div`\n    flex: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nconst VideoContainer = styled.div`\n    height: 376px;\n    width: 100%;\n    flex-shrink: 0;\n`;\n\nconst StyledVideoPlayer = styled(VideoPlayer)`\n    height: 100%;\n`;\n\nconst LineContainer = styled.div`\n    flex: 1;\n    width: 100%;\n    background: ${props => props.theme.Colors.whiteThree};\n`;\n\nconst ButtonContainer = styled.div`\n    position: absolute;\n    bottom: 68px;\n    width: 100%;\n    display: flex;\n    justify-content: center;\n`;\n\nconst ErrorContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n`;\n\nconst ErrorText = styled.div`\n    color: ${props => props.theme.Colors.paleRed};\n    font-size: 14px;\n    align-items: center;\n    margin-bottom: 16px;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst Playback: FC = () => {\n    const telepromterState = useTelepromterState();\n    const scenarios = telepromterState.scenario;\n    const generatedLines = telepromterState.generatedLines;\n    const playbackVideo = telepromterState.videoBlob;\n    const history = useHistory();\n    const [duration, setDuration] = useState(0);\n    const [playing, setPlaying] = useState(false);\n\n    const getVideoDuration = (value: number) => {\n        setDuration(value);\n    };\n\n    const getVideoPlaying = (value: boolean) => {\n        setPlaying(value);\n    };\n\n    const redirectToScenario = useCallback(() => {\n        if (scenarios.id) {\n            history.push(\n                ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE.replace(\n                    ':scenarioId',\n                    scenarios.id.toString()\n                )\n            );\n        }\n    }, [history, scenarios.id]);\n\n    const redirectToTraining = useCallback(() => {\n        if (scenarios.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.TRAINING.replace(\n                    ':scenarioId',\n                    scenarios.id.toString()\n                )\n            );\n        }\n    }, [history, scenarios.id]);\n\n    const redirectToCompleted = useCallback(() => {\n        if (scenarios.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.COMPLETED.replace(\n                    ':scenarioId',\n                    scenarios.id.toString()\n                )\n            );\n        }\n    }, [history, scenarios.id]);\n\n    const mapScriptLines = useCallback((scriptLines: Partial<ScriptLine>[]) => {\n        let prevLineDuration = 0;\n        return scriptLines.map(line => {\n            const minDurationValue = prevLineDuration;\n            const maxDurationValue = prevLineDuration + line.duration!;\n            prevLineDuration = maxDurationValue;\n\n            return {\n                id: line.id,\n                text: line.text,\n                speaker: line.speaker,\n                audioUrl: line.audioUrl,\n                min: minDurationValue,\n                max: maxDurationValue,\n            };\n        });\n    }, []);\n\n    const [localScriptLines, setLocalScriptLines] = useState(\n        mapScriptLines(generatedLines)\n    );\n\n    useEffect(() => {\n        setLocalScriptLines(mapScriptLines(generatedLines));\n    }, [generatedLines, mapScriptLines]);\n\n    const currentScriptLine = localScriptLines[0];\n\n    useEffect(() => {\n        setLocalScriptLines(\n            mapScriptLines(generatedLines).filter(\n                (line: any) => line && line.max >= duration\n            )\n        );\n    }, [setLocalScriptLines, duration, mapScriptLines, generatedLines]);\n\n    if (!playbackVideo) {\n        return (\n            <Container>\n                <ExitIcon onClick={redirectToScenario}>\n                    <Close />\n                </ExitIcon>\n                <ErrorContainer>\n                    <ErrorText>No playback video found.</ErrorText>\n                    <ButtonWrapper>\n                        <Button\n                            label=\"Go Practis\"\n                            width=\"152px\"\n                            height=\"48px\"\n                            action={redirectToTraining}\n                        />\n                    </ButtonWrapper>\n                </ErrorContainer>\n            </Container>\n        );\n    }\n\n    if (telepromterState.loading) {\n        return (\n            <Container>\n                <ExitIcon onClick={redirectToCompleted}>\n                    <Close />\n                </ExitIcon>\n                <LoadingContainer>\n                    <Loading />\n                </LoadingContainer>\n            </Container>\n        );\n    }\n\n    return (\n        <Container>\n            <ExitIcon onClick={redirectToCompleted}>\n                <Close />\n            </ExitIcon>\n            <VideoContainer>\n                <StyledVideoPlayer\n                    url={playbackVideo}\n                    getDuration={getVideoDuration}\n                    getPlaying={getVideoPlaying}\n                    autoPlay={true}\n                    muteVideo={\n                        !currentScriptLine ||\n                        currentScriptLine.speaker === ScriptLineSpeaker.CUSTOMER\n                    }\n                />\n            </VideoContainer>\n            {currentScriptLine && playing && (\n                <audio\n                    src={currentScriptLine.audioUrl}\n                    muted={currentScriptLine.speaker === ScriptLineSpeaker.REP}\n                    autoPlay={true}\n                />\n            )}\n            <LineContainer>\n                {currentScriptLine &&\n                    localScriptLines.map(scriptLine => {\n                        if (scriptLine.speaker === ScriptLineSpeaker.REP) {\n                            return (\n                                <RepLine\n                                    key={scriptLine.id}\n                                    text={scriptLine.text!}\n                                    disabled={\n                                        scriptLine.id !== currentScriptLine.id\n                                    }\n                                />\n                            );\n                        } else {\n                            return (\n                                <CustomerLine\n                                    key={scriptLine.id}\n                                    text={scriptLine.text!}\n                                    disabled={\n                                        scriptLine.id !== currentScriptLine.id\n                                    }\n                                />\n                            );\n                        }\n                    })}\n            </LineContainer>\n            <ButtonContainer>\n                <Button\n                    label={'Close Playback'}\n                    width={'168px'}\n                    height={'48px'}\n                    action={redirectToCompleted}\n                />\n            </ButtonContainer>\n        </Container>\n    );\n};\n\nexport default Playback;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ disabled: boolean }>`\n    background: ${props =>\n        props.disabled\n            ? props.theme.Colors.whiteThree\n            : props.theme.Colors.white};\n    width: 100%;\n    padding: 32px;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.paleRed};\n    font-size: 17px;\n    font-weight: bold;\n    margin-bottom: 8px;\n    padding-left: 8px;\n`;\n\nconst Text = styled.div<{ disabled: boolean }>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.steelGrey\n            : props.theme.Colors.black};\n    font-size: 17px;\n    padding-left: 8px;\n`;\n\nconst RepLine: FC<{ text: string; disabled: boolean }> = ({\n    text,\n    disabled,\n}) => {\n    return (\n        <Container disabled={disabled}>\n            <Title>You</Title>\n            <Text disabled={disabled}>{text}</Text>\n        </Container>\n    );\n};\n\nexport default RepLine;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ disabled: boolean }>`\n    background: ${props =>\n        props.disabled\n            ? props.theme.Colors.whiteThree\n            : props.theme.Colors.white};\n    width: 100%;\n    padding: 32px;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n`;\n\nconst Title = styled.div`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 17px;\n    font-weight: bold;\n    margin-bottom: 8px;\n    padding-left: 8px;\n`;\n\nconst Text = styled.div<{ disabled: boolean }>`\n    color: ${props =>\n        props.disabled\n            ? props.theme.Colors.steelGrey\n            : props.theme.Colors.black};\n    font-size: 17px;\n    padding-left: 8px;\n`;\n\nconst CustomerLine: FC<{\n    text: string;\n    disabled: boolean;\n}> = ({ text, disabled }) => {\n    return (\n        <Container disabled={disabled}>\n            <Title>Customer</Title>\n            <Text disabled={disabled}>{text}</Text>\n        </Container>\n    );\n};\n\nexport default CustomerLine;\n","import React, { FC } from 'react';\nimport styled, { keyframes } from 'styled-components';\n\nconst fill = keyframes`\n  from {\n    width: 0;\n  }\n\n  to {\n    width: 375px;\n  }\n`;\n\nconst Container = styled.div<{ duration: number; color: string }>`\n    height: 48px;\n    width: 375px;\n    background: ${props => props.theme.Colors.whiteTwo};\n    position: relative;\n    &::before {\n        content: '';\n        height: 100%;\n        background: ${props => props.color};\n        animation: ${fill} ${props => props.duration}s linear;\n        animation-fill-mode: forwards;\n        position: absolute;\n        left: 0;\n        top: 0;\n    }\n`;\n\nconst EmptyContainer = styled.div<{ color: string }>`\n    height: 48px;\n    width: 375px;\n    background: ${props => props.theme.Colors.whiteTwo};\n    position: relative;\n    &::before {\n        content: '';\n        height: 100%;\n        background: ${props => props.color};\n        position: absolute;\n        left: 0;\n        top: 0;\n    }\n`;\n\nconst ScriptLineDuration: FC<{\n    duration: number;\n    color: string;\n    started: boolean;\n}> = ({ duration, color, started }) => {\n    if (!started) {\n        return <EmptyContainer color={color} />;\n    }\n    return <Container duration={duration} color={color} />;\n};\n\nexport default ScriptLineDuration;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Next = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 14 12\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g enableBackground=\"new\">\n                    <clipPath id=\"cp0\">\n                        <path\n                            transform=\"matrix(1,0,0,-1,0,12)\"\n                            d=\"M 13.68551 5.622092 L 8.396375 1.150653 C 8.181871 .9487689 7.834833 .9487689 7.62033 1.150653 C 7.405826 1.352288 7.405826 1.678351 7.62033 1.879736 L 12.48445 5.99213 L 7.603031 10.11976 C 7.388528 10.3209 7.388528 10.64746 7.603031 10.8486 C 7.817535 11.05048 8.164572 11.05048 8.379076 10.8486 L 13.66821 6.377159 C 13.67486 6.370663 13.67194 6.360668 13.67806 6.354172 C 13.68019 6.352423 13.68338 6.353173 13.68524 6.351674 C 13.89975 6.150289 13.89975 5.823476 13.68551 5.622092 Z M 7.306026 5.622092 L .953955 .1512259 C .7394516 -.05040862 .3921475 -.05040862 .177644 .1512259 C -.03659334 .3523606 -.03659334 .6791734 .177644 .880558 L 6.112684 5.992379 L .1608776 11.11894 C -.05362587 11.32058 -.05362587 11.64714 .1608776 11.84877 C .375115 12.05041 .722419 12.05041 .9369225 11.84877 L 7.288994 6.377659 C 7.295647 6.371162 7.292986 6.361168 7.299107 6.354672 C 7.30097 6.352923 7.304429 6.353672 7.306026 6.352173 C 7.520264 6.150289 7.520264 5.823476 7.306026 5.622092 Z \"\n                        />\n                    </clipPath>\n                    <g clipPath=\"url(#cp0)\">\n                        <clipPath id=\"cp1\">\n                            <path\n                                transform=\"matrix(1,0,0,-1,0,12)\"\n                                d=\"M -233 -86 L 142 -86 L 142 726 L -233 726 Z \"\n                            />\n                        </clipPath>\n                        <g clipPath=\"url(#cp1)\">\n                            <path\n                                transform=\"matrix(1,0,0,-1,0,12)\"\n                                d=\"M -5 17 L 18.84615 17 L 18.84615 -5 L -5 -5 Z \"\n                                fill=\"currentColor\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Next;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport Next from '../../../ui/icons/Next';\n\nconst Label = styled.div`\n    width: 104px;\n    height: 48px;\n    font-size: 13px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: ${props => props.theme.Colors.white};\n    user-select: none;\n`;\n\nconst IconSection = styled.div`\n    width: 48px;\n    height: 48px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: ${props => props.theme.Colors.fadedRedTwoMobile};\n`;\n\nconst StyledButton = styled.div`\n    height: 48px;\n    display: inline-flex;\n    align-items: center;\n    background: ${props => props.theme.Colors.fadedRedMobile};\n    border-radius: 4px;\n    overflow: hidden;\n    cursor: pointer;\n    &:hover ${IconSection} {\n        background: ${props => props.theme.Colors.fadedRedMobile};\n    }\n    &:active ${Label} {\n        background: ${props => props.theme.Colors.fadedRed};\n    }\n`;\n\nconst IconWrapper = styled.div`\n    width: 14px;\n    height: 12px;\n    display: flex;\n    color: ${props => props.theme.Colors.white};\n`;\n\nconst Button: FC<{ onClick(): void }> = ({ onClick }) => {\n    return (\n        <StyledButton onClick={onClick}>\n            <Label>Next</Label>\n            <IconSection>\n                <IconWrapper>\n                    <Next />\n                </IconWrapper>\n            </IconSection>\n        </StyledButton>\n    );\n};\n\nexport default Button;\n","import React, { FC, useEffect } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { rgba } from 'polished';\n\nconst left = keyframes`\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(180deg);\n  }\n`;\n\nconst right = keyframes`\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(180deg);\n  }\n`;\n\nconst Container = styled.div`\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    top: 0;\n    background: ${props => rgba(props.theme.Colors.black, 0.5)};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    z-index: 1;\n`;\n\nconst Circle = styled.div`\n    height: 160px;\n    width: 160px;\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nconst Hold = styled.div`\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    clip: rect(0px, 160px, 160px, 80px);\n    border-radius: 100%;\n    background-color: ${props => props.theme.Colors.whiteTwo};\n`;\n\nconst Fill = styled.div`\n    background-color: ${props => props.theme.Colors.fadedRedTwoMobile};\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    border-radius: 100%;\n    clip: rect(0px, 80px, 160px, 0px);\n`;\n\nconst Left = styled(Hold)`\n    && ${Fill} {\n        z-index: 1;\n        animation: ${left} 0.5s linear both;\n    }\n`;\n\nconst Right = styled(Hold)`\n    z-index: 3;\n    transform: rotate(180deg);\n    && ${Fill} {\n        z-index: 3;\n        animation: ${right} 0.5s linear both;\n        animation-delay: 0.5s;\n    }\n`;\n\nconst InnerCircle = styled.div`\n    height: 128px;\n    width: 128px;\n    border-radius: 100%;\n    background: ${props => props.theme.Colors.white};\n    font-size: 56px;\n    font-weight: bold;\n    color: ${props => props.theme.Colors.fadedRedTwoMobile};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    z-index: 5;\n`;\n\nconst Countdown: FC<{\n    countdown: number;\n    setCountdown(countdown: (prevCountdown: number) => number): any;\n}> = ({ countdown, setCountdown }) => {\n    useEffect(() => {\n        const timer = setInterval(() => {\n            setCountdown((prevCountdown: number) => {\n                return prevCountdown - 1;\n            });\n        }, 1000);\n\n        return () => {\n            clearInterval(timer);\n        };\n    }, [setCountdown]);\n\n    return (\n        <Container>\n            <Circle key={countdown}>\n                <Left>\n                    <Fill />\n                </Left>\n                <Right>\n                    <Fill />\n                </Right>\n                <InnerCircle>{countdown}</InnerCircle>\n            </Circle>\n        </Container>\n    );\n};\n\nexport default Countdown;\n","import { useDispatch } from 'react-redux';\nimport { useGetScenarioApi } from '../../../api';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useCallback } from 'react';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    addGeneratedScriptLineAction,\n    fetchTelepromterScenarioFailure,\n    fetchTelepromterScenarioStart,\n    fetchTelepromterScenarioSuccess,\n    resetTelepromterAction,\n    setRecordedVideoAction,\n} from './actions';\nimport { ScriptLine } from '../../../constants/interfaces/ScriptLine';\n\nexport const useGetTelepromterScenarioService = () => {\n    const dispatch = useDispatch();\n    const getScenarioApi = useGetScenarioApi();\n    const showMessage = useShowMessage();\n    return useCallback(\n        (scenarioId: number | string) => {\n            dispatch(fetchTelepromterScenarioStart());\n            getScenarioApi(scenarioId)\n                .then(data => {\n                    dispatch(fetchTelepromterScenarioSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(fetchTelepromterScenarioFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, getScenarioApi, showMessage]\n    );\n};\n\nexport const useAddGeneratedScriptLineService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (scriptLine: Partial<ScriptLine>) => {\n            dispatch(addGeneratedScriptLineAction(scriptLine));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSetRecordedVideoService = () => {\n    const dispatch = useDispatch();\n    return useCallback(\n        (videoBlob: string) => {\n            dispatch(setRecordedVideoAction(videoBlob));\n        },\n        [dispatch]\n    );\n};\n\nexport const useResetTelepromterService = () => {\n    const dispatch = useDispatch();\n    return useCallback(() => {\n        dispatch(resetTelepromterAction());\n    }, [dispatch]);\n};\n","import { Action } from 'redux';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { AiLogItemInterface } from '../../../constants/interfaces/AiItem';\n\nexport enum ACTIONS {\n    SEARCH_AI_LOGS_START = 'ADMIN_SEARCH_AI_START',\n    SEARCH_AI_LOGS_SUCCESS = 'ADMIN_SEARCH_AI_SUCCESS',\n    SEARCH_AI_LOGS_FAILURE = 'ADMIN_SEARCH_AI_FAILURE',\n    SEARCH_AI_LOGS_DISPOSE = 'ADMIN_SEARCH_AI_DISPOSE',\n    UPDATE_AI_LOGS_FLAG_START = 'UPDATE_AI_LOGS_FLAG_START',\n    UPDATE_AI_LOGS_FLAG_FAILURE = 'UPDATE_FLAG_AI_LOGS_FAILURE',\n    ADD_AI_LOGS_FLAG_SUCCESS = 'ADD_AI_LOGS_FLAG_SUCCESS',\n    DELETE_AI_LOGS_FLAG_SUCCESS = 'DELETE_AI_LOGS_FLAG_SUCCESS',\n}\n\nexport type SearchAiLogsStartAction = Action<ACTIONS.SEARCH_AI_LOGS_START>;\nexport const searchAiLogsStart = (): SearchAiLogsStartAction => ({\n    type: ACTIONS.SEARCH_AI_LOGS_START,\n});\n\nexport type SearchAiLogsSuccessAction = Action<\n    ACTIONS.SEARCH_AI_LOGS_SUCCESS\n> & {\n    aiLogs: ListResult<AiLogItemInterface>;\n};\nexport const searchAiLogsSuccess = (\n    aiLogs: ListResult<AiLogItemInterface>\n): SearchAiLogsSuccessAction => ({\n    type: ACTIONS.SEARCH_AI_LOGS_SUCCESS,\n    aiLogs,\n});\n\nexport type SearchAiLogsFailureAction = Action<\n    ACTIONS.SEARCH_AI_LOGS_FAILURE\n> & { error: string };\nexport const searchAiLogsFailure = (\n    error: string\n): SearchAiLogsFailureAction => ({\n    type: ACTIONS.SEARCH_AI_LOGS_FAILURE,\n    error,\n});\n\nexport type UpdateAiLogsFlagFailureAction = Action<\n    ACTIONS.UPDATE_AI_LOGS_FLAG_FAILURE\n> & { error: string };\n\nexport const updateAiLogsFlagFailure = (\n    error: string\n): UpdateAiLogsFlagFailureAction => ({\n    type: ACTIONS.UPDATE_AI_LOGS_FLAG_FAILURE,\n    error,\n});\n\nexport type SearchAiLogsDisposeAction = Action<ACTIONS.SEARCH_AI_LOGS_DISPOSE>;\nexport const searchAiLogsDispose = (): SearchAiLogsDisposeAction => ({\n    type: ACTIONS.SEARCH_AI_LOGS_DISPOSE,\n});\n\nexport type UpdateAiLogsFlagStartAction = Action<\n    ACTIONS.UPDATE_AI_LOGS_FLAG_START\n> & {\n    submissionId: number;\n};\nexport const updateAiLogsFlagStart = (\n    submissionId: number,\n): UpdateAiLogsFlagStartAction => ({\n    type: ACTIONS.UPDATE_AI_LOGS_FLAG_START,\n    submissionId,\n});\n\nexport type AddAiLogsFlagSuccessAction = Action<\n    ACTIONS.ADD_AI_LOGS_FLAG_SUCCESS\n> & {\n    submissionId: number;\n    flagId: number;\n};\nexport const addAiLogsFlagSuccess = (\n    submissionId: number,\n    flagId: number\n): AddAiLogsFlagSuccessAction => ({\n    type: ACTIONS.ADD_AI_LOGS_FLAG_SUCCESS,\n    submissionId,\n    flagId,\n});\n\nexport type DeleteAiLogsFlagSuccessAction = Action<\n    ACTIONS.DELETE_AI_LOGS_FLAG_SUCCESS\n> & {\n    submissionId: number\n};\nexport const deleteAiLogsFlagSuccess = (\n    submissionId: number\n): DeleteAiLogsFlagSuccessAction => ({\n    type: ACTIONS.DELETE_AI_LOGS_FLAG_SUCCESS,\n    submissionId,\n});\n\nexport type AiLogsActions =\n    | SearchAiLogsStartAction\n    | SearchAiLogsSuccessAction\n    | SearchAiLogsFailureAction\n    | SearchAiLogsDisposeAction\n    | UpdateAiLogsFlagStartAction\n    | AddAiLogsFlagSuccessAction\n    | DeleteAiLogsFlagSuccessAction\n    | UpdateAiLogsFlagFailureAction;\n","import React, {\n    useCallback,\n    useEffect,\n    useMemo,\n    useRef,\n    useState,\n} from 'react';\nimport styled from 'styled-components';\nimport { useTelepromterState } from '../../store/state';\nimport RepLine from './RepLine';\nimport CustomerLine from './CustomerLine';\nimport RecordRTC from 'recordrtc';\nimport { ScriptLineSpeaker } from '../../../../constants/interfaces/ScriptLine';\nimport ScriptLineDuration from './ScriptLineDuration';\nimport { Variables } from '../../../../theme/variables';\nimport { Loading } from '../../../../ui/components/LoadingCopmonent';\nimport Button from '../../Components/Button';\nimport Countdown from '../../Components/Countdown';\nimport {\n    useAddGeneratedScriptLineService,\n    useResetTelepromterService,\n    useSetRecordedVideoService,\n} from '../../store/services';\nimport { useHistory } from '../../../../tools/router';\nimport ROUTES from '../../../../routes/routes';\nimport Close from '../../../../ui/icons/Close';\n\nconst Container = styled.div`\n    position: relative;\n    height: 100%;\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    background: ${props => props.theme.Colors.darkThree};\n`;\n\nconst ExitIcon = styled.div`\n    height: 14px;\n    width: 14px;\n    color: ${props => props.theme.Colors.black};\n    position: absolute;\n    top: 74px;\n    right: 24px;\n    cursor: pointer;\n    z-index: 1;\n    user-select: none;\n    &:hover {\n        opacity: 0.7;\n    }\n    &:active {\n        opacity: 0.6;\n    }\n`;\n\nconst Hidden = styled.div`\n    visibility: hidden;\n`;\n\nconst ScriptLineContainer = styled.div`\n    flex: 1;\n    width: 100%;\n    background: ${props => props.theme.Colors.white};\n    overflow: auto;\n`;\n\nconst VideoContainer = styled.div`\n    height: 376px;\n    width: 100%;\n    position: relative;\n`;\n\nconst GoNextButton = styled.div`\n    position: absolute;\n    height: 184px;\n    width: 100%;\n    bottom: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nconst StyledVideo = styled.video`\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n`;\n\nconst Training = () => {\n    const video = useRef<any>(null);\n    let recorder: any = useRef<any>(null);\n    const history = useHistory();\n    const resetTelepromter = useResetTelepromterService();\n\n    const useCaptureCamera = () =>\n        useCallback((callback: any) => {\n            return navigator.mediaDevices\n                .getUserMedia({\n                    audio: true,\n                    video: {\n                        height: 375,\n\n                        width: 380,\n                    },\n                })\n                .then(function(camera) {\n                    return callback(camera);\n                })\n                .catch(err => console.log(err));\n        }, []);\n\n    const captureCamera = useCaptureCamera();\n    const addGeneratedScriptLine = useAddGeneratedScriptLineService();\n    const setRecordedVideo = useSetRecordedVideoService();\n\n    const useInitializeCamera = () =>\n        useCallback(() => {\n            return captureCamera(function(camera: any) {\n                if (!video.current || recorder.current) return;\n                video.current.muted = true;\n                video.current.volume = 0;\n                video.current.srcObject = camera;\n                recorder.current = new RecordRTC(camera, {\n                    type: 'video',\n                });\n            });\n        }, []);\n\n    const initializeCamera = useInitializeCamera();\n\n    useEffect(() => {\n        if (video.current) {\n            initializeCamera().then();\n        }\n    }, [initializeCamera]);\n\n    const startRecord = useCallback(() => {\n        return captureCamera(function(camera: any) {\n            recorder.current.startRecording();\n            recorder.current.camera = camera;\n        });\n    }, [captureCamera]);\n\n    const stopRecordingCallback = useCallback(() => {\n        setRecordedVideo(URL.createObjectURL(recorder.current.getBlob()));\n        recorder.current.camera.getTracks().forEach(function (track: any) {\n            track.stop();\n        });\n        recorder.current.destroy();\n        recorder.current = null;\n    }, [setRecordedVideo]);\n\n    const useStopRecordService = () =>\n        useCallback(() => {\n            if (recorder && recorder.current) {\n                recorder.current.stopRecording(stopRecordingCallback);\n            }\n            if (video.current) {\n                video.current.srcObject\n                    .getTracks()\n                    .forEach(function(track: any) {\n                        track.stop();\n                    });\n            }\n        }, []);\n\n    useEffect(() => {\n        return () => {\n            if (recorder.current) {\n                recorder.current.stopRecording();\n                recorder.current.camera\n                    .getTracks()\n                    .forEach(function(track: any) {\n                        track.stop();\n                    });\n\n                recorder.current.destroy();\n                recorder.current = null;\n            }\n\n            if (video.current) {\n                // eslint-disable-next-line react-hooks/exhaustive-deps\n                video.current.srcObject\n                    .getTracks()\n                    .forEach(function(track: any) {\n                        track.stop();\n                    });\n            }\n        };\n    }, []);\n\n    const stopRecord = useStopRecordService();\n    const renderVideo = useMemo(() => {\n        return <StyledVideo ref={video} autoPlay={true} playsInline={true} />;\n    }, [video]);\n\n    const [countdown, setCountdown] = useState(3);\n    const [startTraining, setStartTraining] = useState(false);\n\n    const telepromterState = useTelepromterState();\n    const scenario = telepromterState.scenario;\n\n    const [tempScriptLines, setTempScriptLines] = useState(\n        scenario.script.lines\n    );\n\n    useEffect(() => {\n        setTempScriptLines(scenario.script.lines);\n    }, [scenario.script.lines]);\n\n    const currentScriptLine = tempScriptLines[0];\n\n    // Start training / recording\n    useEffect(() => {\n        if (countdown === 0) {\n            resetTelepromter();\n            setStartTraining(true);\n            startRecord().then();\n        }\n    }, [countdown, setStartTraining, startRecord, resetTelepromter]);\n\n    const [repLineDuration, setRepLineDuration] = useState(0);\n\n    useEffect(() => {\n        if (\n            !currentScriptLine ||\n            (currentScriptLine &&\n                currentScriptLine.speaker !== ScriptLineSpeaker.REP)\n        ) {\n            return;\n        }\n        const timer = setInterval(() => {\n            setRepLineDuration(prevState => prevState + 0.1);\n        }, 100);\n        return () => {\n            clearInterval(timer);\n        };\n    }, [setRepLineDuration, currentScriptLine]);\n\n    const redirectToExit = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.EXIT.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    const redirectToCompleted = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.COMPLETED.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    const handleGoNext = useCallback(() => {\n        if (currentScriptLine.speaker === ScriptLineSpeaker.CUSTOMER) {\n            addGeneratedScriptLine({\n                id: currentScriptLine.id,\n                text: currentScriptLine.text,\n                duration: currentScriptLine.duration,\n                audioUrl: currentScriptLine.audioUrl,\n                position: currentScriptLine.position,\n                speaker: currentScriptLine.speaker,\n            });\n            setRepLineDuration(0);\n        } else {\n            addGeneratedScriptLine({\n                id: currentScriptLine.id,\n                text: currentScriptLine.text,\n                duration: parseFloat(repLineDuration.toFixed(2)),\n                audioUrl: currentScriptLine.audioUrl,\n                position: currentScriptLine.position,\n                speaker: currentScriptLine.speaker,\n            });\n            setRepLineDuration(0);\n        }\n        if (\n            currentScriptLine.id ===\n            tempScriptLines[tempScriptLines.length - 1].id\n        ) {\n            stopRecord();\n            const timeout = setTimeout(() => {\n                redirectToCompleted();\n            }, 300);\n\n            return () => {\n                clearInterval(timeout);\n            };\n        }\n        setTempScriptLines(prevLines => {\n            const prevScriptLines = [...prevLines];\n            prevScriptLines.shift();\n            return prevScriptLines;\n        });\n    }, [\n        addGeneratedScriptLine,\n        currentScriptLine,\n        stopRecord,\n        tempScriptLines,\n        setRepLineDuration,\n        repLineDuration,\n        redirectToCompleted,\n    ]);\n\n    useEffect(() => {\n        if (!currentScriptLine || !startTraining) return;\n        let lineTimer = 0;\n\n        const lineDurationTimer = setInterval(() => {\n            lineTimer += 0.3;\n            if (\n                lineTimer >= currentScriptLine.duration &&\n                currentScriptLine.speaker === ScriptLineSpeaker.CUSTOMER\n            ) {\n                handleGoNext();\n                lineTimer = 0;\n            }\n        }, 300);\n\n        return () => {\n            clearInterval(lineDurationTimer);\n        };\n    }, [currentScriptLine, tempScriptLines, startTraining, handleGoNext]);\n\n    if (telepromterState.loading || !currentScriptLine) {\n        return (\n            <Container>\n                <Loading />\n                <Hidden>{renderVideo}</Hidden>\n            </Container>\n        );\n    }\n\n    return (\n        <Container>\n            <ExitIcon onClick={redirectToExit}>\n                <Close />\n            </ExitIcon>\n            {countdown > 0 && (\n                <Countdown countdown={countdown} setCountdown={setCountdown} />\n            )}\n            <ScriptLineDuration\n                key={currentScriptLine.id}\n                duration={currentScriptLine.duration}\n                color={\n                    currentScriptLine.speaker === ScriptLineSpeaker.CUSTOMER\n                        ? Variables.Colors.cloudyBlue\n                        : Variables.Colors.paleRed\n                }\n                started={startTraining}\n            />\n            {startTraining && (\n                <audio\n                    src={currentScriptLine.audioUrl}\n                    muted={currentScriptLine.speaker === ScriptLineSpeaker.REP}\n                    autoPlay={true}\n                />\n            )}\n            <ScriptLineContainer>\n                {tempScriptLines.map(line => {\n                    if (line.speaker === ScriptLineSpeaker.CUSTOMER) {\n                        return (\n                            <CustomerLine\n                                key={line.id}\n                                text={line.text}\n                                disabled={\n                                    line.id !== currentScriptLine.id ||\n                                    !startTraining\n                                }\n                            />\n                        );\n                    } else {\n                        return (\n                            <RepLine\n                                key={line.id}\n                                text={line.text}\n                                disabled={\n                                    line.id !== currentScriptLine.id ||\n                                    !startTraining\n                                }\n                            />\n                        );\n                    }\n                })}\n            </ScriptLineContainer>\n            <VideoContainer>\n                {renderVideo}\n                {currentScriptLine.speaker === ScriptLineSpeaker.REP && (\n                    <GoNextButton>\n                        <Button onClick={handleGoNext} />\n                    </GoNextButton>\n                )}\n            </VideoContainer>\n        </Container>\n    );\n};\n\nexport default Training;\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../../../../ui/components/Button';\nimport ROUTES from '../../../../routes/routes';\nimport { useTelepromterState } from '../../store/state';\nimport { useHistory } from '../../../../tools/router';\n\nconst Container = styled.div`\n    background: ${props => props.theme.Colors.darkThree};\n    height: 100%;\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    padding: 72px 32px 0 32px;\n    box-sizing: border-box;\n`;\n\nconst Text = styled.div`\n    font-size: 17px;\n    color: ${props => props.theme.Colors.white};\n    margin-bottom: 32px;\n`;\n\nconst Content = styled.div`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n`;\n\nconst Actions = styled.div`\n    height: 180px;\n    margin-bottom: 32px;\n    display: flex;\n    align-items: center;\n    flex-direction: column;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst Exit: FC = () => {\n    const scenario = useTelepromterState().scenario;\n    const history = useHistory();\n\n    const redirectToScenario = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    const redirectToTraining = useCallback(() => {\n        if (scenario.id) {\n            history.push(\n                ROUTES.TELEPROMTER_PAGES.TRAINING.replace(\n                    ':scenarioId',\n                    scenario.id.toString()\n                )\n            );\n        }\n    }, [history, scenario.id]);\n\n    return (\n        <Container>\n            <Content>\n                <Text>Are you sure you want to exit?</Text>\n                <Actions>\n                    <ButtonWrapper>\n                        <Button\n                            label=\"Go Back to Scenario\"\n                            width=\"152px\"\n                            height=\"48px\"\n                            action={redirectToTraining}\n                        />\n                    </ButtonWrapper>\n                    <ButtonWrapper>\n                        <Button\n                            label=\"Yes Exit\"\n                            width=\"152px\"\n                            height=\"48px\"\n                            action={redirectToScenario}\n                            variant={'inverse'}\n                        />\n                    </ButtonWrapper>\n                </Actions>\n            </Content>\n        </Container>\n    );\n};\n\nexport default Exit;\n","import React, { FC, useEffect } from 'react';\nimport { Redirect, Switch } from 'react-router-dom';\nimport ROUTES from '../../../routes/routes';\nimport PrivateRoute from '../../../routes/PrivateRouter';\nimport Completed from './Completed/Completed';\nimport Playback from './Playback/Playback';\nimport Training from './Training/Training';\nimport styled from 'styled-components';\nimport { useGetTelepromterScenarioService } from '../store/services';\nimport { useParams } from 'react-router-dom';\nimport Exit from './Exit/Exit';\n\nconst Container = styled.div`\n    height: 100vh;\n    width: 100%;\n    display: flex;\n    background: ${props => props.theme.Colors.darkTwo};\n    justify-content: center;\n    overflow: auto;\n`;\n\nconst PhoneEmulator = styled.div`\n    height: 810px;\n    width: 375px;\n    border-radius: 8px;\n    margin: 48px 0;\n    overflow: hidden;\n`;\n\nconst Telepromter: FC = () => {\n    const getScenario = useGetTelepromterScenarioService();\n    const params = useParams<{ scenarioId?: string }>();\n    useEffect(() => {\n        if (params.scenarioId) {\n            getScenario(params.scenarioId);\n        }\n    }, [getScenario, params.scenarioId]);\n\n    return (\n        <Container>\n            <PhoneEmulator>\n                <Switch>\n                    <Redirect\n                        from={ROUTES.TELEPROMTER}\n                        exact\n                        to={ROUTES.TELEPROMTER_PAGES.TRAINING}\n                    />\n                    <PrivateRoute\n                        path={ROUTES.TELEPROMTER_PAGES.COMPLETED}\n                        component={Completed}\n                    />\n                    <PrivateRoute\n                        path={ROUTES.TELEPROMTER_PAGES.PLAYBACK}\n                        component={Playback}\n                    />\n                    <PrivateRoute\n                        path={ROUTES.TELEPROMTER_PAGES.TRAINING}\n                        component={Training}\n                    />\n                    <PrivateRoute\n                        path={ROUTES.TELEPROMTER_PAGES.EXIT}\n                        component={Exit}\n                    />\n                </Switch>\n            </PhoneEmulator>\n        </Container>\n    );\n};\n\nexport default Telepromter;\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { handleToggleSelectedItems } from '../../../../../../pages/ActionPages/NewUser/tools';\n\nimport { DraftUser } from '../../../../../../constants/interfaces/Draft';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../pages/UserProfile/store/reducers';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { TableDivider } from '../../../../../../ui/components/table-wrapper/table-divider';\n\nconst StyledCreatedByList = styled.div`\n    overflow: auto;\n    height: 100%;\n`;\n\nconst TopSideList = styled.span``;\n\nconst GeneralList = styled.span``;\n\nconst CreatedByItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 10px 0;\n`;\n\nconst CreatedByItem = styled.div<{ disabled?: boolean }>`\n    color: ${props => props.theme.Colors.black};\n    cursor: pointer;\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 12px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n`;\nconst YouWrapper = styled.span`\n    font-size: 13px;\n    color: ${({ theme }) => theme.Colors.steelGrey};\n`;\nexport const CreatedByFiltersList: FC<{\n    users?: Partial<DraftUser>[];\n    selectedUsers: number[];\n    disabled?: boolean;\n    setUserFilters?: (userId: number[]) => void;\n}> = ({ users, selectedUsers, setUserFilters }) => {\n    const isChecked = useCallback(\n        (setId?: number) => {\n            return !!selectedUsers && !!setId && selectedUsers.includes(setId);\n        },\n        [selectedUsers]\n    );\n\n    const profile = useSelector(getProfileState);\n\n    const isPartiallyChecked = useCallback(\n        (userId?: number) => {\n            return (\n                !!selectedUsers &&\n                !!userId &&\n                selectedUsers.includes(-Number(userId))\n            );\n        },\n        [selectedUsers]\n    );\n\n    const changeHandler = (userId?: number) => {\n        if (userId && setUserFilters) {\n            setUserFilters(handleToggleSelectedItems(selectedUsers, userId));\n        }\n    };\n\n    if (!users || (users && users.length === 0)) return null;\n\n    const topListCreatedBy = users.filter(\n        user => user.id && selectedUsers.includes(user.id)\n    );\n\n    const bottomListCreatedBy = users.filter(\n        user => user.id && !selectedUsers.includes(user.id)\n    );\n\n    return (\n        <StyledCreatedByList>\n            {topListCreatedBy.length > 0 && (\n                <TopSideList>\n                    {topListCreatedBy.map(user => {\n                        return (\n                            <CreatedByItemWrapper key={user.id}>\n                                <Checkbox\n                                    size={12}\n                                    checked={\n                                        isChecked(user.id) ||\n                                        isPartiallyChecked(user.id)\n                                    }\n                                    partial={isPartiallyChecked(user.id)}\n                                    handleChange={() => changeHandler(user.id)}\n                                    dataTest=\"selected-creators-item-checkbox\"\n                                />\n                                <CreatedByItem\n                                    onClick={() => changeHandler(user.id)}\n                                    data-test=\"selected-creators-item-text\"\n                                >\n                                    {user.firstName} {user.lastName}{' '}\n                                    {user.id === profile?.id && (\n                                        <YouWrapper>(you)</YouWrapper>\n                                    )}\n                                </CreatedByItem>\n                            </CreatedByItemWrapper>\n                        );\n                    })}\n                    {topListCreatedBy.length < users.length && <TableDivider width=\"98%\" />}\n                </TopSideList>\n            )}\n            <GeneralList>\n                {bottomListCreatedBy.map(user => {\n                    return (\n                        <CreatedByItemWrapper key={user.id}>\n                            <Checkbox\n                                size={12}\n                                checked={\n                                    isChecked(user.id) ||\n                                    isPartiallyChecked(user.id)\n                                }\n                                partial={isPartiallyChecked(user.id)}\n                                handleChange={() => changeHandler(user.id)}\n                                dataTest=\"creators-item-checkbox\"\n                            />\n                            <CreatedByItem\n                                onClick={() => changeHandler(user.id)}\n                                data-test=\"creators-item-text\"\n                            >\n                                {user.firstName} {user.lastName}{' '}\n                                {user.id === profile?.id && (\n                                    <YouWrapper>(you)</YouWrapper>\n                                )}\n                            </CreatedByItem>\n                        </CreatedByItemWrapper>\n                    );\n                })}\n            </GeneralList>\n        </StyledCreatedByList>\n    );\n};\n","import { DraftUser } from '../../../../../constants/interfaces/Draft';\n\nexport const filterUsers = (term: string) => (\n    users: Partial<DraftUser>[]\n): Partial<DraftUser>[] => {\n    if (!term) {\n        return users;\n    }\n\n    return users.filter(\n        item =>\n            (item &&\n                item.firstName &&\n                item.firstName.toLowerCase().indexOf(term.toLowerCase()) !==\n                    -1) ||\n            (item &&\n                item.lastName &&\n                item.lastName.toLowerCase().indexOf(term.toLowerCase()) !==\n                    -1) ||\n            (item?.firstName && item.lastName &&\n                `${item.firstName} ${item.lastName}`.trim().toLowerCase().indexOf(term.toLowerCase().trim()) !== -1)\n    );\n};\n","import { FC, useCallback, useEffect, useMemo } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Variables } from '../../../../../../theme/variables';\r\nimport { useSearchCreatedByUsersService } from '../../../../store/services';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../../../constants/interfaces/filters';\r\nimport { useDraftsState } from '../../../../store/states';\r\nimport { CreatedByFiltersList } from './CreatedByFiltersList';\r\nimport { compose } from 'redux';\r\nimport { sortLabels } from '../../../../../labels/tools';\r\nimport { DraftUser } from '../../../../../../constants/interfaces/Draft';\r\nimport { filterUsers } from '../tools';\r\nimport { EmptyState } from '../../../../../../ui/components/EmptyStates';\r\nimport NoSearchResult from '../../../../../../ui/icons/NoSearchResult';\r\nimport {Loading} from \"../../../../../../ui/components/LoadingCopmonent/Loading\";\r\nimport { TableSearchInput } from '../../../../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\nconst Container = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst ContainerBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst EmptyTextWrapper = styled.span`\r\n    font-size: 13px;\r\n`;\r\n\r\nconst EmptyStateWrapper = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    height: 100%;\r\n`;\r\n\r\ntype Action = 'clear' | 'select';\r\n\r\nconst actionConfig: Record<\r\n    Action,\r\n    {\r\n        color: string;\r\n        colorHover: string;\r\n        colorActive: string;\r\n    }\r\n> = {\r\n    clear: {\r\n        color: Variables.Colors.darkSkyBlue,\r\n        colorHover: Variables.Colors.lightBlue,\r\n        colorActive: Variables.Colors.windowsBlue,\r\n    },\r\n    select: {\r\n        color: Variables.Colors.darkSkyBlue,\r\n        colorHover: Variables.Colors.lightBlue,\r\n        colorActive: Variables.Colors.windowsBlue,\r\n    },\r\n};\r\n\r\nconst initialSearchParams: Partial<SearchParams> = {\r\n    searchTerm: '',\r\n};\r\n\r\nconst CreatedByFilters: FC<{\r\n    selectedUsers: number[];\r\n    selectCreatedByUsers: (userIds: number[]) => void;\r\n}> = ({ selectedUsers, selectCreatedByUsers }) => {\r\n    const fetchUsers = useSearchCreatedByUsersService();\r\n    const draftsState = useDraftsState();\r\n    const createdByUsers = useMemo(() => draftsState.createdByUsers || [], [\r\n        draftsState,\r\n    ]);\r\n\r\n    const { searchParams, setSearchTerm } = useSearchParamsState(\r\n        initialSearchParams as SearchParams\r\n    );\r\n\r\n    useEffect(() => {\r\n        fetchUsers({\r\n            searchTerm: '',\r\n        } as SearchParams);\r\n    }, [fetchUsers]);\r\n\r\n    const getProcessedUsers = useCallback(() => {\r\n        if (createdByUsers) {\r\n            return compose<Partial<DraftUser>[]>(\r\n                filterUsers(searchParams.searchTerm),\r\n                sortLabels\r\n            )(createdByUsers);\r\n        } else {\r\n            return [];\r\n        }\r\n    }, [searchParams.searchTerm, createdByUsers]);\r\n\r\n    const selectAllHandler = () => {\r\n        selectCreatedByUsers(getProcessedUsers().map(user => user.id));\r\n    };\r\n\r\n    const clearHandler = () => {\r\n        selectCreatedByUsers([]);\r\n    };\r\n\r\n    const showEmptyState = !getProcessedUsers().length;\r\n    const selectedUsersCount = selectedUsers.length;\r\n\r\n    const isAllSelected = useMemo(\r\n        () => createdByUsers.length === selectedUsersCount,\r\n        [createdByUsers.length, selectedUsersCount]\r\n    ); \r\n\r\n    return (\r\n        <Container>\r\n            <ContainerBody>\r\n                <SearchWrapper>\r\n                    <TableSearchInput\r\n                        onChange={setSearchTerm}\r\n                        disabled={createdByUsers.length < 1}\r\n                        dataTest=\"creators-search\"\r\n                    />\r\n                </SearchWrapper>\r\n                <SelectActions>\r\n                    <div>\r\n                        <SelectedCaption data-test=\"creators-selected-text\">\r\n                            {selectedUsersCount > 0\r\n                                ? `${selectedUsersCount} ${\r\n                                      selectedUsersCount > 1\r\n                                          ? ' Users selected'\r\n                                          : ' User selected'\r\n                                  }`\r\n                                : 'No Users selected'}\r\n                        </SelectedCaption>\r\n                    </div>\r\n                    <div>\r\n                        {isAllSelected ? (\r\n                            <PlainAction\r\n                                disabled={\r\n                                    selectedUsers.length === 0 || showEmptyState\r\n                                }\r\n                                color={actionConfig.clear.color}\r\n                                colorActive={actionConfig.clear.colorActive}\r\n                                colorHover={actionConfig.clear.colorHover}\r\n                                onClick={clearHandler}\r\n                                data-test=\"creators-unselect-all\"\r\n                            >\r\n                                Unselect All\r\n                            </PlainAction>\r\n                        ) : (\r\n                            <PlainAction\r\n                                disabled={showEmptyState}\r\n                                color={actionConfig.select.color}\r\n                                colorActive={actionConfig.select.colorActive}\r\n                                colorHover={actionConfig.select.colorHover}\r\n                                onClick={selectAllHandler}\r\n                                data-test=\"creators-select-all\"\r\n                            >\r\n                                Select All\r\n                            </PlainAction>\r\n                        )}\r\n                    </div>\r\n                </SelectActions>\r\n                {showEmptyState ? (\r\n                    draftsState.loadingCreatedBy ? (\r\n                        <Loading />\r\n                    ) : (\r\n                        <EmptyStateWrapper>\r\n                            <EmptyState icon={NoSearchResult} dataTest=\"no-creators\">\r\n                                <EmptyTextWrapper>\r\n                                    No Users Found\r\n                                </EmptyTextWrapper>\r\n                            </EmptyState>\r\n                        </EmptyStateWrapper>\r\n                    )\r\n                ) : (\r\n                    <CreatedByFiltersList\r\n                        users={getProcessedUsers()}\r\n                        selectedUsers={selectedUsers}\r\n                        disabled={false}\r\n                        setUserFilters={selectCreatedByUsers}\r\n                    />\r\n                )}\r\n            </ContainerBody>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default CreatedByFilters;\r\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { handleToggleSelectedItems } from '../../../../../../pages/ActionPages/NewUser/tools';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { DraftUser } from '../../../../../../constants/interfaces/Draft';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../pages/UserProfile/store/reducers';\nimport { TableDivider } from '../../../../../../ui/components/table-wrapper/table-divider';\n\nconst StyledCreatedByList = styled.div`\n    overflow: auto;\n    height: 100%;\n`;\n\nconst TopSideList = styled.span``;\n\nconst GeneralList = styled.span``;\n\nconst CreatedByItemWrapper = styled.div`\n    display: flex;\n    align-items: center;\n    margin: 10px 0;\n`;\n\nconst CreatedByItem = styled.div<{ disabled?: boolean }>`\n    color: ${props => props.theme.Colors.black};\n    cursor: pointer;\n    border-radius: 8px;\n    font-weight: 500;\n    font-size: 13px;\n    padding: 0 12px;\n    align-items: center;\n    background: ${props => props.theme.Colors.white};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    display: inline-block;\n    ${props => props.disabled && 'pointer-events: none'}\n    &:active {\n        opacity: 0.7;\n    }\n`;\nconst YouWrapper = styled.span`\n    font-size: 13px;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\nexport const EditedByFiltersList: FC<{\n    users?: Partial<DraftUser>[];\n    selectedUsers: number[];\n    disabled?: boolean;\n    setUserFilters?: (userId: number[]) => void;\n}> = ({ users, selectedUsers, setUserFilters }) => {\n    const isChecked = useCallback(\n        (setId?: number) => {\n            return !!selectedUsers && !!setId && selectedUsers.includes(setId);\n        },\n        [selectedUsers]\n    );\n\n    const profile = useSelector(getProfileState);\n    \n    const isPartiallyChecked = useCallback(\n        (userId?: number) => {\n            return (\n                !!selectedUsers &&\n                !!userId &&\n                selectedUsers.includes(-Number(userId))\n            );\n        },\n        [selectedUsers]\n    );\n\n    const changeHandler = (userId?: number) => {\n        if (userId && setUserFilters) {\n            setUserFilters(handleToggleSelectedItems(selectedUsers, userId));\n        }\n    };\n\n    if (!users || (users && users.length === 0)) return null;\n\n    const topListCreatedBy = users.filter(\n        user => user.id && selectedUsers.includes(user.id)\n    );\n\n    const bottomListCreatedBy = users.filter(\n        user => user.id && !selectedUsers.includes(user.id)\n    );\n\n    return (\n        <StyledCreatedByList>\n            {topListCreatedBy.length > 0 && (\n                <TopSideList>\n                    {topListCreatedBy.map(user => {\n                        return (\n                            <CreatedByItemWrapper key={user.id}>\n                                <Checkbox\n                                    size={12}\n                                    checked={\n                                        isChecked(user.id) ||\n                                        isPartiallyChecked(user.id)\n                                    }\n                                    partial={isPartiallyChecked(user.id)}\n                                    handleChange={() => changeHandler(user.id)}\n                                    dataTest=\"selected-editors-item-checkbox\"\n                                />\n                                <CreatedByItem\n                                    onClick={() => changeHandler(user.id)}\n                                    data-test=\"selected-editors-item-text\"\n                                >\n                                    {user.firstName} {user.lastName} {user.id === profile?.id && <YouWrapper>(you)</YouWrapper>}\n                                </CreatedByItem>\n                            </CreatedByItemWrapper>\n                        );\n                    })}\n                    {topListCreatedBy.length < users.length && <TableDivider width=\"98%\" />}\n                </TopSideList>\n            )}\n            <GeneralList>\n                {bottomListCreatedBy.map(user => {\n                    return (\n                        <CreatedByItemWrapper key={user.id}>\n                            <Checkbox\n                                size={12}\n                                checked={\n                                    isChecked(user.id) ||\n                                    isPartiallyChecked(user.id)\n                                }\n                                partial={isPartiallyChecked(user.id)}\n                                handleChange={() => changeHandler(user.id)}\n                                dataTest=\"editors-item-checkbox\"\n                            />\n                            <CreatedByItem\n                                onClick={() => changeHandler(user.id)}\n                                data-test=\"editors-item-text\"\n                            >\n                                {user.firstName} {user.lastName} {user.id === profile?.id && <YouWrapper>(you)</YouWrapper>}\n                            </CreatedByItem>\n                        </CreatedByItemWrapper>\n                    );\n                })}\n            </GeneralList>\n        </StyledCreatedByList>\n    );\n};\n","import { FC, useCallback, useEffect, useMemo } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\nimport { Variables } from '../../../../../../theme/variables';\r\nimport { useSearchEditedByUsersService } from '../../../../store/services';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../../../constants/interfaces/filters';\r\nimport { useDraftsState } from '../../../../store/states';\r\nimport { EditedByFiltersList } from './EditedByFiltersList';\r\nimport { compose } from 'redux';\r\nimport { sortLabels } from '../../../../../labels/tools';\r\nimport { DraftUser } from '../../../../../../constants/interfaces/Draft';\r\nimport { filterUsers } from '../tools';\r\nimport { EmptyState } from '../../../../../../ui/components/EmptyStates';\r\nimport NoSearchResult from '../../../../../../ui/icons/NoSearchResult';\r\nimport { Loading } from '../../../../../../ui/components/LoadingCopmonent/Loading';\r\nimport User from '../../../../../../ui/icons/User';\r\nimport { TableSearchInput } from '../../../../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\nconst Container = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst ContainerBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst EmptyTextWrapper = styled.span`\r\n    font-size: 13px;\r\n`;\r\n\r\nconst EmptyStateWrapper = styled.div`\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    height: 100%;\r\n`;\r\n\r\ntype Action = 'clear' | 'select';\r\n\r\nconst actionConfig: Record<\r\n    Action,\r\n    {\r\n        color: string;\r\n        colorHover: string;\r\n        colorActive: string;\r\n    }\r\n> = {\r\n    clear: {\r\n        color: Variables.Colors.darkSkyBlue,\r\n        colorHover: Variables.Colors.lightBlue,\r\n        colorActive: Variables.Colors.windowsBlue,\r\n    },\r\n    select: {\r\n        color: Variables.Colors.darkSkyBlue,\r\n        colorHover: Variables.Colors.lightBlue,\r\n        colorActive: Variables.Colors.windowsBlue,\r\n    },\r\n};\r\n\r\nconst initialSearchParams: Partial<SearchParams> = {\r\n    searchTerm: '',\r\n};\r\n\r\nconst EditedByFilters: FC<{\r\n    selectedUsers: number[];\r\n    selectEditedByUsers: (userIds: number[]) => void;\r\n}> = ({ selectedUsers, selectEditedByUsers }) => {\r\n    const fetchUsers = useSearchEditedByUsersService();\r\n    const draftsState = useDraftsState();\r\n    const editedByUsers = useMemo(() => draftsState.editedByUsers || [], [\r\n        draftsState,\r\n    ]);\r\n\r\n    const { searchParams, setSearchTerm } = useSearchParamsState(\r\n        initialSearchParams as SearchParams\r\n    );\r\n\r\n    useEffect(() => {\r\n        fetchUsers({\r\n            searchTerm: '',\r\n        } as SearchParams);\r\n    }, [fetchUsers]);\r\n\r\n    const getProcessedUsers = useCallback(() => {\r\n        if (editedByUsers) {\r\n            return compose<Partial<DraftUser>[]>(\r\n                filterUsers(searchParams.searchTerm),\r\n                sortLabels\r\n            )(editedByUsers);\r\n        } else {\r\n            return [];\r\n        }\r\n    }, [searchParams.searchTerm, editedByUsers]);\r\n\r\n    const selectAllHandler = () => {\r\n        selectEditedByUsers(getProcessedUsers().map(user => user.id));\r\n    };\r\n\r\n    const clearHandler = () => {\r\n        selectEditedByUsers([]);\r\n    };\r\n\r\n    const showEmptyState = !getProcessedUsers().length;\r\n    const selectedUsersCount = selectedUsers.length;\r\n\r\n    const isAllSelected = useMemo(\r\n        () => editedByUsers.length === selectedUsersCount,\r\n        [editedByUsers, selectedUsersCount]\r\n    );\r\n\r\n    return (\r\n        <Container>\r\n            <ContainerBody>\r\n                <SearchWrapper>\r\n                    <TableSearchInput\r\n                        onChange={setSearchTerm}\r\n                        disabled={editedByUsers.length < 1}\r\n                        dataTest=\"editors-search\"\r\n                    />\r\n                </SearchWrapper>\r\n                <SelectActions>\r\n                    <div>\r\n                        <SelectedCaption data-test=\"editors-selected-text\">\r\n                            {selectedUsersCount > 0\r\n                                ? `${selectedUsersCount} ${\r\n                                      selectedUsersCount > 1\r\n                                          ? ' Users selected'\r\n                                          : ' User selected'\r\n                                  }`\r\n                                : 'No Users selected'}\r\n                        </SelectedCaption>\r\n                    </div>\r\n                    <div>\r\n                        {isAllSelected ? (\r\n                            <PlainAction\r\n                                disabled={\r\n                                    selectedUsers.length === 0 || showEmptyState\r\n                                }\r\n                                color={actionConfig.clear.color}\r\n                                colorActive={actionConfig.clear.colorActive}\r\n                                colorHover={actionConfig.clear.colorHover}\r\n                                onClick={clearHandler}\r\n                                data-test=\"editors-unselect-all\"\r\n                            >\r\n                                Unselect All\r\n                            </PlainAction>\r\n                        ) : (\r\n                            <PlainAction\r\n                                disabled={showEmptyState}\r\n                                color={actionConfig.select.color}\r\n                                colorActive={actionConfig.select.colorActive}\r\n                                colorHover={actionConfig.select.colorHover}\r\n                                onClick={selectAllHandler}\r\n                                data-test=\"editors-select-all\"\r\n                            >\r\n                                Select All\r\n                            </PlainAction>\r\n                        )}\r\n                    </div>\r\n                </SelectActions>\r\n                {showEmptyState ? (\r\n                    draftsState.loadingEditedBy ? (\r\n                        <Loading />\r\n                    ) : searchParams.searchTerm ? (\r\n                        <EmptyStateWrapper>\r\n                            <EmptyState icon={NoSearchResult} dataTest=\"no-editors-found\">\r\n                                <EmptyTextWrapper>\r\n                                    No Users Found\r\n                                </EmptyTextWrapper>\r\n                            </EmptyState>\r\n                        </EmptyStateWrapper>\r\n                    ) : (\r\n                        <EmptyStateWrapper>\r\n                            <EmptyState icon={User} dataTest=\"no-editors\">\r\n                                <EmptyTextWrapper>\r\n                                    No Users Yet\r\n                                </EmptyTextWrapper>\r\n                            </EmptyState>\r\n                        </EmptyStateWrapper>\r\n                    )\r\n                ) : (\r\n                    <EditedByFiltersList\r\n                        users={getProcessedUsers()}\r\n                        selectedUsers={selectedUsers}\r\n                        disabled={false}\r\n                        setUserFilters={selectEditedByUsers}\r\n                    />\r\n                )}\r\n            </ContainerBody>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default EditedByFilters;\r\n","import React, { FC, useCallback, useEffect } from 'react';\nimport { Variables } from '../../../../../theme/variables';\nimport styled from 'styled-components';\nimport { Button } from '../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../ui/components/Fieldset';\nimport CreatedByFilters from './CreatedByFilters/CreatedByFilters';\nimport EditedByFilters from './EditedByFilters/EditedByFilters';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nconst SectionContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const DraftsFilter: FC<{\n    createdBySelectedUsers: number[];\n    createdBySavedUsers: number[];\n    selectCreatedByUsers: (userIds: number[]) => void;\n    saveCreatedByUsers: (userIds: number[]) => void;\n    editedBySelectedUsers: number[];\n    editedBySavedUsers: number[];\n    selectEditedByUsers: (userIds: number[]) => void;\n    saveEditedByUsers: (userIds: number[]) => void;\n    onSuccessApply: () => void;\n}> = ({\n    createdBySelectedUsers,\n    createdBySavedUsers,\n    selectCreatedByUsers,\n    saveCreatedByUsers,\n    editedBySavedUsers,\n    editedBySelectedUsers,\n    selectEditedByUsers,\n    saveEditedByUsers,\n    onSuccessApply,\n}) => {\n    useEffect(() => {\n        selectCreatedByUsers(createdBySavedUsers);\n        selectEditedByUsers(editedBySavedUsers);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    const onApplyHandler = useCallback(() => {\n        saveCreatedByUsers(createdBySelectedUsers);\n        saveEditedByUsers(editedBySelectedUsers);\n        onSuccessApply();\n    }, [\n        createdBySelectedUsers,\n        editedBySelectedUsers,\n        onSuccessApply,\n        saveCreatedByUsers,\n        saveEditedByUsers,\n    ]);\n\n    const onClearHandler = useCallback(() => {\n        selectCreatedByUsers([]);\n        selectEditedByUsers([]);\n    }, [selectCreatedByUsers, selectEditedByUsers]);\n\n    const selectedFiltersCount =\n        createdBySelectedUsers.length + editedBySelectedUsers.length;\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Created by'} dataTest=\"creators-section-title\">\n                    <SectionContainer>\n                        <CreatedByFilters\n                            selectedUsers={createdBySelectedUsers}\n                            selectCreatedByUsers={selectCreatedByUsers}\n                        />\n                    </SectionContainer>\n                </Fieldset>\n                <Fieldset title={'Edited by'} dataTest=\"editors-section-title\">\n                    <SectionContainer>\n                        <EditedByFilters\n                            selectedUsers={editedBySelectedUsers}\n                            selectEditedByUsers={selectEditedByUsers}\n                        />\n                    </SectionContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {selectedFiltersCount} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        width={'122px'}\n                        variant={'inverse'}\n                        action={() => onClearHandler()}\n                        disabled={selectedFiltersCount < 1}\n                        customDisabledColor={Variables.Colors.cloudyBlue}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={() => onApplyHandler()}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoDrafts = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg \n                xmlns=\"http://www.w3.org/2000/svg\" \n                width=\"100%\" \n                height=\"100%\" \n                fill=\"none\" \n                viewBox=\"0 0 48 48\"\n                className={className}\n                ref={ref}\n                >\n                <rect width=\"34\" height=\"3\" x=\"7\" y=\"7\" fill=\"currentColor\" rx=\"1.5\"/>\n                <rect width=\"25\" height=\"3\" x=\"11\" y=\"1\" fill=\"currentColor\" rx=\"1.5\"/>\n                <path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M43 13c1.105 0 2 .895 2 2v30c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V15c0-1.105.895-2 2-2h38zm-1 3H6v3.565L23.032 30.35 42 19.491V16zm0 6.948L22.954 33.85 6 23.116V44h36V22.948z\" clipRule=\"evenodd\"/>\n            </svg>        \n        );\n    }\n);\n\nexport default NoDrafts;\n","import { Reducer } from 'redux';\nimport { SocketProgressStateInterface } from './states';\nimport { ACTIONS, SocketProgressShow, SocketProgressHide } from './actions';\nimport { AppState } from '../../../store/reducers';\n\nconst initialState: SocketProgressStateInterface = {\n    show: false,\n};\n\nexport const getSocketState = (state: AppState) => state.socketProgress.show;\n\nexport type Action =\n    | ReturnType<typeof SocketProgressShow>\n    | ReturnType<typeof SocketProgressHide>;\n\nexport const SocketProgressReducer: Reducer<\n    SocketProgressStateInterface,\n    Action\n> = (state = initialState, action: Action): SocketProgressStateInterface => {\n    switch (action.type) {\n        case ACTIONS.SOCKET_PROGRESS_SHOW:\n            return {\n                show: true,\n            };\n        case ACTIONS.SOCKET_PROGRESS_HIDE: {\n            return {\n                show: false,\n            };\n        }\n        default:\n            return state;\n    }\n};","import { makeStyles } from '@material-ui/core';\n\nexport const useStyles = makeStyles(theme => ({\n    customTableColumnStyle: {\n        minWidth: 120,\n    },\n\n    avatarTableCellCustomStyle: {\n        padding: 0,\n    },\n}));\n\n","import { FC, useCallback, useEffect, useState } from 'react';\nimport { History } from 'history';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\n\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../ui/components/ActionButton';\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../constants/interfaces/filters';\nimport { PaginationResult } from '../../../../constants/interfaces/PaginationResult';\nimport { UserProfile } from '../../../../constants/interfaces/User';\nimport {\n    useDeleteStagingService,\n    useSearchDraftsService,\n    useUpdateAllSelectedDraftStateService,\n    useUpdateSelectedDraftStateService,\n} from '../../store/services';\nimport { useDraftsState, useUpdatedDraftsState } from '../../store/states';\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\nimport UsersPageNavigationContainer from '../../components/UsersPageNavigation';\nimport { clearSelectedItemIfNotLoaded } from '../../../labels/tools';\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\nimport { Draft, DraftUser } from '../../../../constants/interfaces/Draft';\nimport { formatDate } from '../../../../helpers/functions/date-convert';\nimport { CheckPermission } from '../../../permissions';\nimport ROUTES from '../../../../routes/routes';\nimport { usePermissionsState } from '../../../permissions/store/state';\nimport { useDraftEditState } from '../../../../pages/ActionPages/NewUser/store/states';\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\nimport { Popup } from '../../../../ui/components/Popup';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport { DraftsFilter } from '../../components/Filters/DraftsFilter/DraftsFilter';\n\nimport NoDrafts from '../../../../ui/icons/NoDrafts';\nimport { isAdminRole, isTeamLeader } from '../../../../constants/enums';\nimport { useSessionEffect } from '../../../common';\nimport { normalizeSP } from '../../../../helpers/functions/searchparams-normalize';\nimport { getSocketState } from '../../../socketProgress(api1)/store/reducer';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport { isEmpty } from 'lodash';\nimport { useStyles } from './styles';\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useFilter } from '../../../../ui/components/table-wrapper/table/TableDropdown';\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\nimport { CompanyUserStatsText } from '../../../../ui/components/CompanyUserStatsText';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\n\nconst CREATOR_FIELD = 'creatorId';\nconst EDITOR_FIELD = 'lastEditedById';\n\nconst Drafts: FC<{\n    history: History<any>;\n    draftEditUpdated?: Partial<DraftUser>;\n    searchDrafts: (sp: SearchParams) => void;\n    onDeleteDraft: (\n        draftIds: number[],\n        search?: SearchParams,\n        selectAll?: boolean,\n        successCallback?: () => void\n    ) => void;\n    profile?: UserProfile;\n    drafts?: PaginationResult<Draft>;\n    selectedDrafts?: number[];\n    updatedDrafts?: Draft;\n    updateAllSelectedDrafts(\n        userIds: number[],\n        checked: boolean,\n        partial?: boolean\n    ): void;\n    updateSelectedDraft(draftId: number): void;\n    loading?: boolean;\n}> = ({\n    drafts,\n    draftEditUpdated,\n    searchDrafts,\n    onDeleteDraft,\n    profile,\n    updatedDrafts,\n    selectedDrafts,\n    updateAllSelectedDrafts,\n    updateSelectedDraft,\n    loading,\n    history,\n}) => {\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n\n    const [createdBySelectedUsers, setCreatedBySelectedUsers] = useState<\n        number[]\n    >([]);\n    const [createdBySavedUsers, setCreatedBySavedUsers] = useState<number[]>(\n        []\n    );\n    const [editedBySelectedUsers, setEditedBySelectedUsers] = useState<\n        number[]\n    >([]);\n    const [editedBySavedUsers, setEditedBySavedUsers] = useState<number[]>([]);\n\n    const canAccessPage = useHandleAccessPage();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [],\n        orderBy: { field: 'lastEditedBy.firstName', asc: false },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setOffset,\n        setFilter,\n        refreshSearchParams,\n    } = useSearchParamsState(initialSearchParams);\n\n    const classes = useStyles();\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const isCheckboxPartiallySelected =\n        drafts &&\n        drafts.items &&\n        selectedDrafts &&\n        selectedDrafts.length < drafts.items.length;\n\n    const refreshData = useCallback(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchDrafts(searchParams);\n        setLastRefreshed(new Date());\n        setIsSelectAll(false);\n\n        updateAllSelectedDrafts([], true, isCheckboxPartiallySelected);\n    }, [\n        initialOffset,\n        isCheckboxPartiallySelected,\n        searchDrafts,\n        searchParams,\n        updateAllSelectedDrafts,\n    ]);\n\n    const socketLoaderState = useSelector(getSocketState);\n\n    const handleItemEdit = useCallback(\n        (draftId: any) => {\n            history.push(\n                ROUTES.ACTION_ITEMS.NEW_USER.replace(\n                    ':draftId',\n                    draftId.toString()\n                )\n            );\n        },\n        [history]\n    );\n\n    const updateAllUsersCheck = useCallback(\n        (checked: boolean) => {\n            const draftIds =\n                (drafts &&\n                    drafts.items.map((draft: Draft) => Number(draft.id))) ||\n                [];\n            updateAllSelectedDrafts(\n                draftIds,\n                checked,\n                isCheckboxPartiallySelected\n            );\n        },\n        [drafts, isCheckboxPartiallySelected, updateAllSelectedDrafts]\n    );\n\n    const handleDraftCheck = (e: any, draft: Draft) => {\n        e.stopPropagation();\n        if (!!draft.id) {\n            updateSelectedDraft(draft.id);\n        }\n    };\n\n    const isOptionsDisabled =\n        !selectedDrafts || (selectedDrafts && !selectedDrafts.length);\n\n    const orderBy = searchParams.orderBy;\n    const srtName = useOrderBy('name', orderBy, setOrderBy);\n    const srtUsersCount = useOrderBy('usersCount', orderBy, setOrderBy);\n    const srtCreatedBy = useOrderBy('creator.firstName', orderBy, setOrderBy);\n    const srtCreatedAt = useOrderBy('createdAt', orderBy, setOrderBy);\n    const srtLastEditedBy = useOrderBy(\n        'lastEditedBy.firstName',\n        orderBy,\n        setOrderBy\n    );\n    const srtUpdatedAt = useOrderBy('updatedAt', orderBy, setOrderBy);\n\n    const handleCreatorIdChangeEvent = useFilter(CREATOR_FIELD, setFilter);\n    const handleEditorIdChangeEvent = useFilter(EDITOR_FIELD, setFilter);\n\n    const selectCreatedByUsers = (userIds: number[]) => {\n        setCreatedBySelectedUsers(userIds);\n    };\n    const saveCreatedByUsers = (userIds: number[]) => {\n        setCreatedBySavedUsers(userIds);\n    };\n\n    const selectEditedByUsers = (userIds: number[]) => {\n        setEditedBySelectedUsers(userIds);\n    };\n    const saveEditedByUsers = (userIds: number[]) => {\n        setEditedBySavedUsers(userIds);\n    };\n\n    const permissions = usePermissionsState();\n    const handleViewStaging = (draftId: any) => {\n        if (!draftId || !permissions.includes(NEW_PERMISSIONS.UPDATE_STAGING))\n            return;\n\n        handleItemEdit && handleItemEdit(draftId);\n    };\n\n    const isListEmpty = !drafts || (drafts && !drafts.items.length);\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: searchParams.filters?.length,\n        itemsCount: drafts?.items.length || 0,\n    });\n\n    /**\n     * @function onConfirmDeleteDrafts\n     * @param { number[] } draftIds\n     * @returns { void }\n     */\n    const onConfirmDeleteDrafts = (draftIds: number[]): void => {\n        const selectAllState = draftIds.length === 1 ? false : isSelectAll;\n\n        onDeleteDraft(\n            draftIds,\n            isSelectAll\n                ? normalizeSP(searchParams, drafts?.totalCount)\n                : searchParams,\n            selectAllState\n        );\n    };\n\n    /**\n     * @function handleDeleteDrafts\n     * @returns { void }\n     */\n    const handleDeleteDrafts = (draftIds: number[]): void => {\n        showConfirmationModalDialog({\n            modalTitle: 'Warning',\n            description:\n                'This action cannot be undone. You will erase this draft and all the saved information.',\n            cancelButtonText: 'Go Back',\n            confirmButtonText: 'Proceed',\n            dialogType: 'DANGER',\n            onConfirm: () => onConfirmDeleteDrafts(draftIds),\n        });\n    };\n\n    useSessionEffect(() => {\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchDrafts(searchParams);\n    }, [searchDrafts, searchParams]);\n\n    useEffect(() => {\n        if (updatedDrafts || draftEditUpdated?.id) {\n            refreshSearchParams();\n        }\n    }, [updatedDrafts, draftEditUpdated?.id, refreshSearchParams]);\n\n    useEffect(() => {\n        const filteredUsers = drafts\n            ? drafts.items.map(draft => Number(draft.id))\n            : [];\n        const usersToClear = clearSelectedItemIfNotLoaded(\n            selectedDrafts,\n            filteredUsers\n        );\n        if (usersToClear && usersToClear.length > 0) {\n            updateAllSelectedDrafts(usersToClear, false);\n        }\n    }, [selectedDrafts, drafts, updateAllSelectedDrafts]);\n\n    useEffect(() => {\n        handleCreatorIdChangeEvent(createdBySavedUsers);\n        handleEditorIdChangeEvent(editedBySavedUsers);\n    }, [\n        createdBySavedUsers,\n        editedBySavedUsers,\n        handleCreatorIdChangeEvent,\n        handleEditorIdChangeEvent,\n    ]);\n\n    useEffect(() => {\n        return () => {\n            selectCreatedByUsers([]);\n            selectEditedByUsers([]);\n            updateAllSelectedDrafts([], true, isCheckboxPartiallySelected);\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        updateAllSelectedDrafts([], true, isCheckboxPartiallySelected);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [updateAllSelectedDrafts]);\n\n    useEffect(() => {\n        if (\n            selectedDrafts?.length &&\n            selectedDrafts.length === drafts?.totalCount\n        ) {\n            setIsSelectAll(true);\n        }\n    }, [drafts?.totalCount, selectedDrafts]);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n    }, [initialOffset, pageIndex, setOffset]);\n\n    useEffect(() => {\n        canAccessPage([NEW_PERMISSIONS.LIST_USER]);\n    }, [canAccessPage]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    /**\n     * @function onCheckMasterCheckbox\n     * @param { any } event\n     * @returns { void }\n     */\n    const onCheckMasterCheckbox = (event: any) => {\n        setIsSelectAll(false);\n        updateAllUsersCheck(event.target.checked);\n    };\n\n    /**\n     * @function checkIsRowChecked\n     * @param { Draft } draft\n     * @returns { boolean }\n     */\n    const checkIsRowChecked = (draft: Draft): boolean =>\n        !!selectedDrafts && !!draft.id && selectedDrafts.includes(draft.id);\n\n    /**\n     * @function onRowCheckHandler\n     * @param event\n     * @param { Draft } row\n     * @returns { void }\n     */\n    const onRowCheckHandler = (event: any, draft: Draft) => {\n        setIsSelectAll(false);\n        handleDraftCheck(event, draft);\n    };\n\n    return (\n        <MainWrapper\n            subTitle=\"Users\"\n            subHeader={profile?.companyId &&\n                <CompanyUserStatsText\n                    companyId={profile.companyId}\n                    showSettingsButton={isAdminRole(profile?.role?.name)}\n                />\n            }\n            tabs={<UsersPageNavigationContainer />}\n            htmlPageTitle=\"Users - Practis\"\n            dataTest=\"users\"\n        >\n            {loading && !isSelectAll && !socketLoaderState && (\n                <LoadingComponent />\n            )}\n            <TableWrapper\n                tableStates={tableStates}\n                data={drafts?.items}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: refreshData,\n                    dataTest: 'users-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: drafts?.totalCount ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            searchParams.filters?.length,\n                        dataTest: 'users-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                    },\n                    isSelectedItemOptionsVisible:\n                        !isEmpty(selectedDrafts) && !isEmpty(drafts),\n                    selectedItemOptions: {\n                        isSelectAll: isSelectAll,\n                        selectedLength: selectedDrafts?.length,\n                        totalCount: drafts?.totalCount,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onClearSelection: () => {\n                            updateAllSelectedDrafts(\n                                [],\n                                true,\n                                isCheckboxPartiallySelected\n                            );\n                            setIsSelectAll(false);\n                        },\n                        onSelectAll: () => {\n                            const draftIds =\n                                (drafts &&\n                                    drafts.items.map((draft: Draft) =>\n                                        Number(draft.id)\n                                    )) ||\n                                [];\n                            updateAllSelectedDrafts(\n                                draftIds,\n                                true,\n                                isCheckboxPartiallySelected\n                            );\n                            setIsSelectAll(true);\n                        },\n                        bulkActionsConfig: {\n                            disabled: isOptionsDisabled,\n                            removeItemTitle: 'Delete Drafts',\n                            removeItemPermissions: [\n                                NEW_PERMISSIONS.DELETE_STAGING,\n                            ],\n                            onRemoveItemsSubmit: () => {\n                                selectedDrafts &&\n                                    handleDeleteDrafts(selectedDrafts);\n                            },\n                            isSelectAll: isSelectAll,\n                            totalCount: drafts?.totalCount,\n                        },\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <DraftsFilter\n                                        createdBySelectedUsers={\n                                            createdBySelectedUsers\n                                        }\n                                        createdBySavedUsers={\n                                            createdBySavedUsers\n                                        }\n                                        selectCreatedByUsers={\n                                            selectCreatedByUsers\n                                        }\n                                        saveCreatedByUsers={saveCreatedByUsers}\n                                        editedBySelectedUsers={\n                                            editedBySelectedUsers\n                                        }\n                                        editedBySavedUsers={editedBySavedUsers}\n                                        selectEditedByUsers={\n                                            selectEditedByUsers\n                                        }\n                                        saveEditedByUsers={saveEditedByUsers}\n                                        onSuccessApply={() => {\n                                            hide();\n                                        }}\n                                    />\n                                )}\n                                anchorOrigin={{\n                                    vertical: 'bottom',\n                                    horizontal: 'right',\n                                }}\n                                horizontalOffset={256}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={\n                                            createdBySavedUsers.length +\n                                            editedBySavedUsers.length\n                                        }\n                                        disabled={\n                                            tableStates.disableFilters ||\n                                            isTeamLeader(profile?.role?.name)\n                                        }\n                                        dataTest=\"users-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState:\n                        !loading && drafts?.items?.length === 0,\n                    noEntriesOptions: {\n                        icon: NoDrafts,\n                        text: 'No Drafts Yet',\n                        dataTest: 'no-results',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Drafts',\n                        dataTest: 'no-found-results',\n                    },\n                    noFilterResultsOptions: {\n                        dataTest: 'no-filtered-results',\n                    },\n                }}\n                configurations={{\n                    masterCheckBoxConfig: {\n                        checked: !!selectedDrafts && !!selectedDrafts.length,\n                        disabled:\n                            !drafts || (drafts && drafts.items.length < 1),\n                        partial: isCheckboxPartiallySelected || !isSelectAll,\n                        handleCheck: onCheckMasterCheckbox,\n                        dataTest: 'master-checkbox',\n                    },\n                    columns: [\n                        {\n                            title: 'Drafts',\n                            width: 20,\n                            ...(isListEmpty ? null : srtName),\n                            disabled: isListEmpty,\n                            className: classes.customTableColumnStyle,\n                            dataTest: 'name-column',\n                        },\n                        {\n                            title: 'Users',\n                            width: 16,\n                            ...(isListEmpty ? null : srtUsersCount),\n                            disabled: isListEmpty,\n                            dataTest: 'users-count-column',\n                        },\n                        {\n                            title: 'Created by',\n                            width: 16,\n                            ...(isListEmpty ? null : srtCreatedBy),\n                            disabled: isListEmpty,\n                            dataTest: 'creator-column',\n                        },\n                        {\n                            title: 'Created on',\n                            width: 16,\n                            ...(isListEmpty ? null : srtCreatedAt),\n                            disabled: isListEmpty,\n                            dataTest: 'creation-date-column',\n                        },\n                        {\n                            title: 'Edited by',\n                            width: 15,\n                            ...(isListEmpty ? null : srtLastEditedBy),\n                            disabled: isListEmpty,\n                            dataTest: 'editor-column',\n                        },\n                        {\n                            title: 'Edited on',\n                            width: 15,\n                            ...(isListEmpty ? null : srtUpdatedAt),\n                            disabled: isListEmpty,\n                            dataTest: 'edit-date-column',\n                        },\n                        {\n                            width: 2,\n                        },\n                    ],\n                    rowConfig: {\n                        onRowClick: (draft: Draft) =>\n                            handleViewStaging(draft.id),\n                        onRowCheckHandler: onRowCheckHandler,\n                        isRowChecked: checkIsRowChecked,\n                        dataTest: 'draft-item',\n                        cells: [\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (draft: Draft) =>\n                                        `${draft.name}`,\n                                    isOverFlowText: true,\n                                    getTextFieldProps: (draft: Draft) => ({\n                                        isCurrent:\n                                            profile?.id === draft?.id ?? false,\n                                    }),\n                                    dataTest: 'draft-name',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (draft: Draft) =>\n                                        draft?.usersCount?.toString(),\n                                    dataTest: 'users-count',\n                                },\n                            },\n                            {\n                                fieldType: 'AVATAR_FIELD',\n                                shouldShowEmptyCell: (draft: Draft) =>\n                                    !draft?.creator,\n                                fieldProps: {\n                                    hasMargin: (draft: Draft) =>\n                                        !!draft.creator,\n                                    isMinimized: true,\n                                    renderTitle: (draft: Draft) =>\n                                        `${draft?.creator?.firstName} ${draft?.creator?.lastName}`,\n                                    getAvatarProps: (draft: Draft) => ({\n                                        profile: draft?.creator,\n                                    }),\n                                    dataTest: 'creator',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (draft: Draft) =>\n                                        formatDate(draft?.createdAt),\n                                    dataTest: 'creation-date',\n                                },\n                            },\n                            {\n                                fieldType: 'AVATAR_FIELD',\n                                shouldShowEmptyCell: (draft: Draft) =>\n                                    !draft?.lastEditedBy,\n                                fieldProps: {\n                                    hasMargin: (draft: Draft) =>\n                                        !!draft.lastEditedBy,\n                                    isMinimized: true,\n                                    renderTitle: (draft: Draft) =>\n                                        `${draft?.lastEditedBy?.firstName} ${draft?.lastEditedBy?.lastName}`,\n                                    getAvatarProps: (draft: Draft) => ({\n                                        profile: draft?.lastEditedBy,\n                                    }),\n                                    dataTest: 'editor',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                fieldProps: {\n                                    renderTitle: (draft: Draft) =>\n                                        formatDate(draft?.updatedAt),\n                                    dataTest: 'update-date',\n                                },\n                            },\n                            {\n                                fieldType: 'LIST_ACTIONS',\n                                fieldProps: {\n                                    getListActionsComponent: (draft: Draft) => (\n                                        <ActionButton\n                                            customWidth={168}\n                                            isHidden={!!selectedDrafts?.length}\n                                            dataTest=\"list-item-menu\"\n                                        >\n                                            <CheckPermission\n                                                permissions={[\n                                                    NEW_PERMISSIONS.UPDATE_STAGING,\n                                                ]}\n                                            >\n                                                <ActionItem\n                                                    onClick={() =>\n                                                        handleItemEdit(draft.id)\n                                                    }\n                                                    dataTest=\"edit-action\"\n                                                >\n                                                    Edit\n                                                </ActionItem>\n                                            </CheckPermission>\n                                            <CheckPermission\n                                                permissions={[\n                                                    NEW_PERMISSIONS.DELETE_STAGING,\n                                                ]}\n                                            >\n                                                <ActionItem\n                                                    destructive={true}\n                                                    onClick={e => {\n                                                        e.stopPropagation();\n                                                        handleDeleteDrafts([\n                                                            draft.id!,\n                                                        ]);\n                                                    }}\n                                                    dataTest=\"delete-draft-action\"\n                                                >\n                                                    Delete Draft\n                                                </ActionItem>\n                                            </CheckPermission>\n                                        </ActionButton>\n                                    ),\n                                },\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nexport const DraftsContainer: FC = () => {\n    const state = useDraftsState();\n    const updatedDraftsState = useUpdatedDraftsState();\n    const history = useHistory();\n    const searchDrafts = useSearchDraftsService();\n    const profile = useSelector(getProfileState);\n    const searchDraftsDebounced = useSearchDebounced(searchDrafts);\n    const updateAllSelectedDrafts = useUpdateAllSelectedDraftStateService();\n    const updateSelectedDraft = useUpdateSelectedDraftStateService();\n    const deleteDraft = useDeleteStagingService();\n    const draftEditUpdated = useDraftEditState().updateData;\n\n    return (\n        <Drafts\n            history={history}\n            draftEditUpdated={draftEditUpdated}\n            searchDrafts={searchDraftsDebounced}\n            onDeleteDraft={deleteDraft}\n            profile={profile}\n            drafts={state.data}\n            selectedDrafts={state.selectedDrafts}\n            loading={state.loading}\n            updatedDrafts={updatedDraftsState.data}\n            updateAllSelectedDrafts={updateAllSelectedDrafts}\n            updateSelectedDraft={updateSelectedDraft}\n        />\n    );\n};\n\n\nexport default DraftsContainer;","import { useContext } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { AiLogItemInterface } from '../../../constants/interfaces/AiItem';\nimport { createSelectorContext } from '../../../tools/redux';\n\nexport type AiLogsState = {\n    data?: ListResult<AiLogItemInterface>;\n    loading: boolean;\n    loadingFlag: boolean;\n    error: string | null;\n};\n\nexport const AiLogsStateSelectorContext = createSelectorContext<AiLogsState>();\n\nexport function useAiLogsState() {\n    return useSelector(useContext(AiLogsStateSelectorContext));\n}\n","import { UserInfo } from './UserInfo';\n\nexport interface AiLogItemInterface {\n    id: number;\n    dateCreated: string;\n    user: UserInfo;\n    accuracy: number;\n    scenarioName: string;\n    scenarioStatus: string;\n    mediaUrl: string;\n    submissionAccuracyMode: string;\n    flagCompanyId?: number;\n    flagAdminId?: number;\n    company: {\n        id: number;\n        name: string;\n        imageUrl: string;\n    };\n    difference: RecognizedRep[];\n    repNumber: number;\n    minRepsCount: number;\n}\n\nexport interface RecognizedRep {\n    lineId: number;\n    original: string;\n    recognized: string;\n}\n\nexport enum AiLogItemStatus {\n    ACTIVE = 'ACTIVE',\n    DELETED = 'DELETED',\n    ARCHIVED = 'ARCHIVED',\n}\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SearchParams } from '../../../constants/interfaces/filters';\nimport {\n    searchAiLogsFailure,\n    searchAiLogsStart,\n    searchAiLogsSuccess,\n    updateAiLogsFlagStart,\n    updateAiLogsFlagFailure,\n    addAiLogsFlagSuccess,\n    deleteAiLogsFlagSuccess,\n} from './actions';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport {\n    useSearchAiLogsApi,\n    useAddSubmissionFlag,\n    useDeleteSubmissionFlag\n} from '../../../api';\nimport { SubmissionFlag, SUBMISSION_FLAG_TYPE } from '../../../constants/interfaces/Reviews';\nimport { searchLogsDispose } from '../../logs/store/actions';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { AiLogsParams } from '../../../api/assessment-logs/types';\nimport { getSearchSortingValue } from '../../../helpers/functions/search-params-helpers';\nimport { AiLogItemInterface } from '../../../constants/interfaces/AiItem';\nimport { isTeamLeader } from '../../../constants/enums';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\n\nexport const useSearchAiLogsService = () => {\n    const dispatch = useDispatch();\n    const searchAiLogsApi = useSearchAiLogsApi();\n    const showMessage = useShowMessage();\n    const profile = useSelector(getProfileState);\n\n    return useCallback(\n        (searchParams: SearchParams, userTeamIds: number[], companyId?: number) => {\n            if (!profile?.companyId)\n                return;\n            dispatch(searchAiLogsStart());\n            const teamIds = (searchParams.teamIds ?? []).length > 0\n                ? searchParams.teamIds\n                : (isTeamLeader(profile.role?.name)\n                    ? userTeamIds\n                    : undefined);\n            const requestParams: AiLogsParams = {\n                limit: searchParams.limit ?? 20,\n                offset: searchParams.offset ?? 0,\n                order: getSearchSortingValue(searchParams.orderBy, ''),\n                queryUser: searchParams.searchTerm,\n                companies: (companyId ?? profile.companyId).toString(),\n                teams: teamIds?.join(','),\n                dateStart: searchParams.startDate\n                    ? new Date(searchParams.startDate).toISOString()\n                    : undefined,\n                dateEnd: searchParams.endDate\n                    ? new Date(searchParams.endDate).toISOString()\n                    : undefined\n            };\n            searchAiLogsApi(requestParams)\n                .then(data => {\n                    dispatch(searchAiLogsSuccess(data));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(searchAiLogsFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, showMessage, searchAiLogsApi, profile]\n    );\n};\n\nexport const useAiLogsUnmountService = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(searchLogsDispose());\n    }, [dispatch]);\n};\n\n/**\n * @function useToggleAiLogsFlagService\n * @returns { CallableFunction }\n */\nexport const useToggleAiLogsFlagService = () => {\n    const dispatch = useDispatch();\n    const addSubmissionFlag = useAddSubmissionFlag();\n    const deleteSubmissionFlag = useDeleteSubmissionFlag();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callback\n     * @param { AiLogItemInterface } record\n     * @param { Promise }\n     */\n    return useCallback((record: AiLogItemInterface) => {\n        dispatch(updateAiLogsFlagStart(record.id));\n        if (record.flagCompanyId) {\n            deleteSubmissionFlag(record.id, record.flagCompanyId)\n                .then(() => {\n                    dispatch(deleteAiLogsFlagSuccess(record.id));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateAiLogsFlagFailure(error.message));\n                    showMessage(error.message, 'success');\n                });\n        } else {\n            addSubmissionFlag(record.id, SUBMISSION_FLAG_TYPE.COMPANY)\n                .then((data: SubmissionFlag) => {\n                    dispatch(addAiLogsFlagSuccess(record.id, data.id));\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateAiLogsFlagFailure(error.message));\n                    showMessage(error.message, 'success');\n                });\n        }\n    },\n        [dispatch, addSubmissionFlag, deleteSubmissionFlag, showMessage]\n    );\n};","import React, {\n    FC,\n    useCallback,\n    useState,\n} from 'react';\nimport {\n    FiltersApplyButton,\n    FiltersClearButton,\n    FiltersFieldSet,\n    FiltersPopupActions,\n    FiltersPopupBody,\n    FiltersPopupFieldSets,\n} from '../../../ui/components/Filters';\nimport { PortableTeamsWithStore2 } from '../../portableTeams';\n\ninterface Props {\n    teamIds: number[];\n    onApplyFilter(selectedTeams: number[]): void;\n}\n\nexport const AiAssessmentFilters: FC<Props> = props => {\n    const { teamIds, onApplyFilter } = props;\n    const [selectedTeams, setSelectedTeams] = useState<number[]>(teamIds || []);\n    const totalFiltersSelected = selectedTeams.length;\n\n    const handleClickClear = useCallback(\n        () => setSelectedTeams([]),\n        [setSelectedTeams]\n    );\n\n    const handleClickApplyFilter = useCallback(\n        () => onApplyFilter(selectedTeams),\n        [selectedTeams, onApplyFilter]\n    );\n\n    return (\n        <FiltersPopupBody>\n            <FiltersPopupFieldSets>\n                <FiltersFieldSet title=\"Teams\" width={264} minHeight={244} dataTest=\"teams-section\">\n                    <PortableTeamsWithStore2\n                        selectedTeams={selectedTeams}\n                        onChangeSelectedTeams={setSelectedTeams}\n                    />\n                </FiltersFieldSet>\n            </FiltersPopupFieldSets>\n            <FiltersPopupActions>\n                <FiltersClearButton disabled={!totalFiltersSelected} onClick={handleClickClear} />\n                <FiltersApplyButton onClick={handleClickApplyFilter} />\n            </FiltersPopupActions>\n        </FiltersPopupBody>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ExclamationCircle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 16 16\"\n                version=\"1.1\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n            >\n                <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n                    <g\n                        transform=\"translate(-686.000000, -405.000000)\"\n                        fill=\"currentColor\"\n                        fillRule=\"nonzero\"\n                    >\n                        <g transform=\"translate(686.000000, 405.000000)\">\n                            <path\n                                d=\"M8,0 C12.418278,0 16,3.581722 16,8 C16,12.418278 12.418278,16 8,16 C3.581722,16 0,12.418278 0,8 C0,3.581722 3.581722,0 8,0 Z M8,1 C4.13400675,1 1,4.13400675 1,8 C1,11.8659932 4.13400675,15 8,15 C11.8659932,15 15,11.8659932 15,8 C15,4.13400675 11.8659932,1 8,1 Z\"\n                                id=\"Oval\"\n                            />\n                            <polygon\n                                id=\"Rectangle\"\n                                transform=\"translate(8.000000, 6.410256) rotate(-270.000000) translate(-8.000000, -6.410256) \"\n                                points=\"10.6666667 5.74358974 10.6666667 7.07692308 5.33333333 7.07692308 5.33333333 5.74358974\"\n                            />\n                            <polygon\n                                id=\"Rectangle\"\n                                transform=\"translate(8.000000, 11.076923) scale(-1, 1) rotate(270.000000) translate(-8.000000, -11.076923) \"\n                                points=\"8.66666667 10.4102564 8.66666667 11.7435897 7.33333333 11.7435897 7.33333333 10.4102564\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default ExclamationCircle;\n","import { makeStyles } from '@material-ui/core';\nimport styled, { css } from 'styled-components';\n\nimport { AiLogItemStatus } from '../../../constants/interfaces/AiItem';\nimport ExclamationCircleIcon from '../../../ui/icons/ExclamationCircle';\n\nexport const Actions = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nexport const ScenarioWrapper = styled.div<{ status: AiLogItemStatus }>`\n    display: flex;\n    align-items: center;\n    ${({ status, theme }) =>\n        status === AiLogItemStatus.DELETED &&\n        css`\n            color: ${theme.Colors.cloudyBlue};\n        `}\n    padding-right: 8px;\n`;\n\nexport const StyledExclamationCircleIcon = styled(ExclamationCircleIcon)`\n    margin-left: 4px;\n    width: 16px;\n    flex-shrink: 0;\n\n    color: ${({ theme }) => theme.Colors.cloudyBlue};\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        paddingLeft: '18px !important',\n    },\n}));\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const AssessmentLogsBig = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"49\"\n                height=\"48\"\n                viewBox=\"0 0 49 48\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#zftislkp8a)\">\n                    <path d=\"M45.9 19.12c.39 1.66.6 3.38.6 5.15 0 12.43-10.07 22.5-22.5 22.5S1.5 36.7 1.5 24.28c0-12.42 10.07-22.5 22.5-22.5 1.38 0 2.72.13 4.03.37l-2.7 2.7c-.44-.03-.88-.07-1.33-.07-10.75 0-19.5 8.74-19.5 19.5s8.75 19.5 19.5 19.5 19.5-8.75 19.5-19.5c0-.87-.08-1.72-.19-2.56l2.59-2.59v-.01zm-10.7 4.94-3.15-1.58c.13.58.2 1.17.2 1.79 0 4.55-3.7 8.25-8.25 8.25s-8.25-3.7-8.25-8.25 3.7-8.25 8.25-8.25c.39 0 .76.04 1.13.09l.17-.17-1.45-2.91c-6.14.08-11.1 5.08-11.1 11.24S17.79 35.52 24 35.52s11.25-5.04 11.25-11.25v-.19c-.01 0-.03-.01-.04-.02h-.01zm11.42-9.9-6.66 6.66a2.945 2.945 0 0 1-3.41.56l-5.42-2.71-7 6.94c-.29.29-.68.44-1.06.44s-.77-.15-1.06-.44a1.49 1.49 0 0 1 0-2.12l2.11-2.11 4.17-4.13h-.03l.71-.72-2.73-5.47c-.57-1.14-.35-2.51.55-3.42L33.44.98c.76-.76 1.84-1.11 2.9-.94 1.06.17 1.98.85 2.46 1.81l1.67 3.33.98-.97a1.5 1.5 0 0 1 2.11 2.13l-.92.91 3.11 1.55c.96.48 1.63 1.4 1.81 2.46.17 1.06-.18 2.14-.94 2.9zm-15.44.13 6.99-6.99-2.06-4.12a.362.362 0 0 0-.25-.19h-.06c-.07 0-.16.02-.24.1L28.9 9.75l2.29 4.53-.01.01zm13.41-2.55a.32.32 0 0 0-.19-.25l-4.02-2.01-7.02 6.96 4.49 2.24 6.64-6.64c.1-.1.11-.22.1-.3z\" fill=\"#B1C0CB\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"zftislkp8a\">\n                        <path fill=\"#fff\" transform=\"translate(1.5)\" d=\"M0 0h46.1v46.78H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default AssessmentLogsBig;\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Flag = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#w14giu5aca)\">\n                    <path\n                        fill-rule=\"evenodd\"\n                        clip-rule=\"evenodd\"\n                        d=\"M5.814 0a3.31 3.31 0 0 0-1.172.25L1.607 1.375 1.52 1.13A.785.785 0 0 0 1.221.75.753.753 0 0 0 .76.623a.807.807 0 0 0-.263 0 .776.776 0 0 0-.432.423.817.817 0 0 0-.012.614l5.012 13.831c.054.149.15.277.276.368.127.091.277.14.431.14a.792.792 0 0 0 .263-.051.745.745 0 0 0 .445-.418.785.785 0 0 0 0-.62L4.538 9.516l1.276-.478a3.533 3.533 0 0 1 1.172-.208c.667.01 1.315.228 1.86.623.57.403 1.247.62 1.94.622.4 0 .797-.074 1.172-.218L16 8.332 13.17.477l-2.02.768a3.307 3.307 0 0 1-1.173.218 3.32 3.32 0 0 1-2.02-.716A3.368 3.368 0 0 0 5.813 0z\"\n                        fill=\"currentColor\"\n                    />\n                </g>\n                <defs>\n                    <clipPath id=\"w14giu5aca\">\n                        <path\n                            fill=\"#fff\"\n                            d=\"M0 0h16v16H0z\"\n                        />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default Flag;\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const FlagActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#vumtoqjqra)\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.814 0a3.31 3.31 0 0 0-1.172.25L1.607 1.375 1.52 1.13A.785.785 0 0 0 1.221.75.753.753 0 0 0 .76.623a.807.807 0 0 0-.263 0 .776.776 0 0 0-.432.423.817.817 0 0 0-.012.614l5.012 13.831c.054.149.15.277.276.368.127.091.277.14.431.14a.792.792 0 0 0 .263-.051.745.745 0 0 0 .445-.418.785.785 0 0 0 0-.62L4.538 9.516l1.276-.478a3.533 3.533 0 0 1 1.172-.208c.667.01 1.315.228 1.86.623.57.403 1.247.62 1.94.622.4 0 .797-.074 1.172-.218L16 8.332 13.17.477l-2.02.768a3.307 3.307 0 0 1-1.173.218 3.32 3.32 0 0 1-2.02-.716A3.368 3.368 0 0 0 5.813 0z\" fill=\"currentColor\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"vumtoqjqra\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n        \nexport default FlagActive;\n        ","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const FlagInactive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M6.996 1.982a1.928 1.928 0 0 0-1.182-.425c-.21.014-.415.067-.607.155L2.176 2.843l1.88 5.188 1.182-.446a4.782 4.782 0 0 1 2.319-.27c.783.103 1.53.398 2.178.861.316.222.689.34 1.07.343.222 0 .441-.042.648-.125l2.607-.985-1.779-4.94-.616.24a4.777 4.777 0 0 1-4.669-.727zM4.642.249A3.31 3.31 0 0 1 5.814 0a3.368 3.368 0 0 1 2.142.747 3.32 3.32 0 0 0 2.021.716c.4 0 .797-.075 1.172-.218l2.022-.768L16 8.332l-4.042 1.525a3.306 3.306 0 0 1-1.172.218 3.384 3.384 0 0 1-1.94-.622 3.257 3.257 0 0 0-1.86-.623c-.4.002-.795.073-1.172.208l-1.276.478 1.943 5.394a.785.785 0 0 1-.18.877.745.745 0 0 1-.265.161.792.792 0 0 1-.263.052.745.745 0 0 1-.43-.14.776.776 0 0 1-.277-.369L.054 1.661A.818.818 0 0 1 .24.79.776.776 0 0 1 .498.622a.807.807 0 0 1 .263 0 .753.753 0 0 1 .46.127c.136.091.24.225.298.381l.088.245L4.642.249z\"\n                    fill=\"currentColor\"\n                />\n            </svg>\n        );\n    }\n);\n        \nexport default FlagInactive;\n","import styled from 'styled-components';\nimport FlagActive from '../../../../ui/icons/FlagActive';\nimport FlagInactive from '../../../../ui/icons/FlagInactive';\n\nexport const FlagHandle = styled.a`\n    cursor: pointer;\n    display: flex;\n`;\n\nexport const FlagActiveIcon = styled(FlagActive)`\n    color: var(--ps-red-main);\n\n    &:hover {\n        color: #DF1F1F;\n    }\n`;\n\nexport const FlagInactiveIcon = styled(FlagInactive)`\n    color: var(--ps-grey-2);\n\n    &:hover {\n        color: #DF1F1F;\n    }\n`;","import { FlagToggleViewProps } from './types';\nimport { FlagHandle, FlagActiveIcon, FlagInactiveIcon } from './styles';\n\nfunction FlagToggleView ({\n    checked,\n    onChange,\n    dataTest\n}: FlagToggleViewProps) {\n    return <FlagHandle\n        onClick={onChange}\n        data-test={dataTest}\n    >\n        {\n            checked\n                ? <FlagActiveIcon />\n                : <FlagInactiveIcon />\n        }\n    </FlagHandle>\n}\n\nexport default FlagToggleView;","import FlagToggleView from './view';\n\nexport default FlagToggleView;","import { useState, FC, useEffect, useCallback } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getCompanyState } from '../../../pages/CompanySettings/store/reducers';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../constants/interfaces/filters';\nimport { useAiLogsState } from '../store/states';\nimport {\n    useAiLogsUnmountService,\n    useSearchAiLogsService,\n    useToggleAiLogsFlagService,\n} from '../store/services';\n\nimport { countAppliedFiltersCount } from '../../teams/pages/ListOfTeams/tools';\nimport { AiAssessmentFilters } from '../components/AiAssessmentFilters';\nimport { usePreviousData } from '../../../helpers/hooks/usePreviousData';\nimport { useHistory } from 'react-router-dom';\nimport { TableWrapper } from '../../../ui/components/table-wrapper';\nimport {\n    Actions,\n    ScenarioWrapper,\n    StyledExclamationCircleIcon,\n    useStyles,\n} from './styles';\nimport {\n    AiLogItemInterface,\n    AiLogItemStatus,\n} from '../../../constants/interfaces/AiItem';\n\nimport { TrainingMode, trainingModeName } from '../../../constants/enums';\nimport dayjs from 'dayjs';\nimport { useOrderBy } from '../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { LoadingComponent } from '../../../ui/components/LoadingCopmonent';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { useTableStateHelper } from '../../../ui/components/table-wrapper/helper';\nimport { FiltersPopupButton } from '../../../ui/components/Filters';\nimport { Tooltip } from '../../../ui/components/Tooltip';\nimport {\n    useCalendarFilterOptions,\n    useHeaderOptions,\n    useEmptyStateOptions\n} from './hooks';\nimport FlagIcon from '../../../ui/icons/Flag';\nimport FlagToggle from '../components/FlagToggle';\nimport { isEqual } from 'lodash';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { usePortableTeamsState } from '../../portableTeams/store/states';\nimport { TeamBasic } from '../../../constants/interfaces/TeamBasic';\n\nconst qs = require('query-string');\n\nconst ITEMS_PER_PAGE = 20;\n\nconst CompanyAiAssessment: FC<{\n    companyId?: number;\n    companyName?: string;\n    aiLogs?: ListResult<AiLogItemInterface>;\n    loading?: boolean;\n    portableTeams?: TeamBasic[];\n    searchHandler: (\n        p: SearchParams,\n        userTeamIds: number[],\n        companyId?: number\n    ) => void;\n    unMount: () => void;\n    toggleFlag: (record: AiLogItemInterface) => void;\n}> = ({\n    companyId,\n    companyName,\n    loading,\n    aiLogs,\n    portableTeams,\n    searchHandler,\n    unMount,\n    toggleFlag,\n}) => {\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [isFirstLoad, setIsFirstLoad] = useState(true);\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setOffset,\n        setCustom,\n        setTeamIDs,\n    } = useSearchParamsState({\n        searchTerm: '',\n        filters: [],\n        orderBy: { field: 'date', asc: false },\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    });\n\n    const history = useHistory();\n    const classes = useStyles();\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page);\n    const initialOffset = pageIndex\n        ? pageIndex === 1\n            ? 0\n            : (pageIndex - 1) * ITEMS_PER_PAGE\n        : 0;\n\n    const prevSearchParams = usePreviousData(searchParams);\n    const prevCompanyId = usePreviousData(companyId);\n\n    /**\n     * @function doSearch\n     * @returns { void }\n     */\n    const doSearch = useCallback(() => {\n        const userTeamIds = portableTeams!.map(team => team.id!);\n        searchParams.offset = initialOffset;\n        searchHandler(searchParams, userTeamIds, companyId);\n    }, [searchHandler, searchParams, portableTeams, companyId, initialOffset]);\n\n    useEffect(() => {\n        if (\n            !isFirstLoad &&\n            (!isEqual(prevSearchParams, searchParams) ||\n                companyId !== prevCompanyId)\n        ) {\n            doSearch();\n        }\n    }, [\n        doSearch,\n        searchParams,\n        prevSearchParams,\n        companyId,\n        prevCompanyId,\n        isFirstLoad,\n    ]);\n\n    // make a first data load once user teams are ready\n    useEffect(() => {\n        if (isFirstLoad && portableTeams?.length) {\n            setIsFirstLoad(false);\n            doSearch();\n        }\n    }, [isFirstLoad, portableTeams, doSearch]);\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    useEffect(() => () => unMount(), []);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [pageIndex]);\n\n    const { startDate, endDate, orderBy, teamIds = [] } = searchParams;\n    const handleRefresh = useCallback(() => {\n        doSearch();\n        setLastRefreshed(new Date());\n    }, [doSearch]);\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: teamIds.length,\n        itemsCount: aiLogs?.items.length || 0,\n        startDate,\n        endDate,\n    });\n\n    const headerOptions = {\n        ...useHeaderOptions(searchParams, setOrderBy),\n        flag: useOrderBy('flag_company', orderBy, setOrderBy),\n    };\n    const calendarFilterOptions = useCalendarFilterOptions(\n        searchParams,\n        tableStates.showEmptyState,\n        setCustom,\n        'assessment-calendar'\n    );\n    const emptyStateOptions = useEmptyStateOptions(\n        !loading && aiLogs?.items?.length === 0\n    );\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = (limit: number, offset: number): void => {\n        setOffset(offset);\n    };\n\n    return (\n        <MainWrapper\n            subTitle=\"Training Log\"\n            htmlPageTitle={`Training Log ${\n                companyName ? `- ${companyName}` : ''\n            } - Practis`}\n            dataTest=\"assessment\"\n        >\n            {loading && <LoadingComponent />}\n            <TableWrapper\n                tableStates={tableStates}\n                data={aiLogs?.items}\n                tableRefreshConfigurations={{\n                    lastRefreshed: lastRefreshed,\n                    refreshData: handleRefresh,\n                    dataTest: 'assessment-timestamp',\n                }}\n                tableToolsOptions={{\n                    pagingOptions: {\n                        totalCount: aiLogs?.count ?? 0,\n                        itemsPerPage: ITEMS_PER_PAGE,\n                        onPageChange: handlePageChange,\n                        searchOrFiltersApplied:\n                            searchParams.searchTerm.length ||\n                            countAppliedFiltersCount(searchParams),\n                        dataTest: 'assessment-paging',\n                    },\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        dataTest: 'assessment-search',\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <FiltersPopupButton\n                                disabled={tableStates.disableFilters}\n                                filtersCount={teamIds.length}\n                                dataTest=\"assessment-filters\"\n                            >\n                                {({ hide }) => (\n                                    <AiAssessmentFilters\n                                        teamIds={teamIds}\n                                        onApplyFilter={selectedTeams => {\n                                            setTeamIDs(selectedTeams);\n                                            hide();\n                                        }}\n                                    />\n                                )}\n                            </FiltersPopupButton>\n                        ),\n                    },\n                    calendarFilterOptions,\n                }}\n                tableEmptyStateConfigurations={emptyStateOptions}\n                configurations={{\n                    columns: [\n                        {\n                            title: '#',\n                            width: 10,\n                            ...headerOptions.id,\n                            disabled: tableStates.disableSorting,\n                            className: classes.customTableCellStyle,\n                            dataTest: 'id-column',\n                        },\n                        {\n                            title: 'Users',\n                            width: 15,\n                            ...headerOptions.user,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'users-column',\n                        },\n                        {\n                            title: 'Scenario',\n                            width: 20,\n                            ...headerOptions.scenario,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'scenario-column',\n                        },\n                        {\n                            title: 'Rep',\n                            width: 10,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'rep-column',\n                        },\n                        {\n                            title: 'Date',\n                            width: 13.8,\n                            ...headerOptions.date,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'date-column',\n                        },\n                        {\n                            title: 'Mode',\n                            width: 10,\n                            ...headerOptions.mode,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'mode-column',\n                        },\n                        {\n                            title: 'Accuracy',\n                            width: 10,\n                            ...headerOptions.accuracy,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'accuracy-column',\n                        },\n                        {\n                            children: <FlagIcon />,\n                            width: 5,\n                            ...headerOptions.flag,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'flag-column',\n                        },\n                    ],\n                    rowConfig: {\n                        dataTest: 'assessment-item',\n                        cells: [\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record?.id,\n                                fieldProps: {\n                                    renderTitle: (record: AiLogItemInterface) =>\n                                        record?.id?.toString(),\n                                    dataTest: 'assessment-item-id',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record.user,\n                                fieldProps: {\n                                    renderTitle: (record: AiLogItemInterface) =>\n                                        `${record.user.firstName} ${record.user.lastName}`,\n                                    dataTest: 'assessment-item-user',\n                                },\n                            },\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record.scenarioName,\n                                getCustomFieldComponent: (\n                                    record: AiLogItemInterface\n                                ) => (\n                                    <ScenarioWrapper\n                                        status={\n                                            record.scenarioStatus as AiLogItemStatus\n                                        }\n                                    >\n                                        <div data-test=\"assessment-item-scenario\">\n                                            {record.scenarioName}\n                                        </div>\n                                        {record.scenarioStatus ===\n                                            AiLogItemStatus.DELETED && (\n                                            <Tooltip\n                                                label=\"Scenario has been deleted\"\n                                                position=\"center-right--bottom\"\n                                            >\n                                                <span data-test=\"assessment-item-scenario-icon\">\n                                                    <StyledExclamationCircleIcon />\n                                                </span>\n                                            </Tooltip>\n                                        )}\n                                    </ScenarioWrapper>\n                                ),\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record.repNumber\n                                        && (record.submissionAccuracyMode as TrainingMode) !== TrainingMode.TEST_YOURSELF,\n                                fieldProps: {\n                                    renderTitle: (record: AiLogItemInterface) =>\n                                        record.repNumber\n                                            ? `${record.repNumber} of ${record.minRepsCount}`\n                                            : 'N/A',\n                                    dataTest: 'assessment-item-rep',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record.dateCreated,\n                                fieldProps: {\n                                    renderTitle: (record: AiLogItemInterface) =>\n                                        dayjs(record.dateCreated).format(\n                                            'MM/DD/YY h:mm A'\n                                        ),\n                                    dataTest: 'assessment-item-date',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record.submissionAccuracyMode,\n                                fieldProps: {\n                                    renderTitle: (record: AiLogItemInterface) =>\n                                        trainingModeName(\n                                            record.submissionAccuracyMode as TrainingMode\n                                        ),\n                                    dataTest: 'assessment-item-mode',\n                                },\n                            },\n                            {\n                                fieldType: 'TEXT_FIELD',\n                                shouldShowEmptyCell: (\n                                    record: AiLogItemInterface\n                                ) => !record.accuracy,\n                                fieldProps: {\n                                    renderTitle: (record: AiLogItemInterface) =>\n                                        `${Math.floor(record.accuracy * 100)}%`,\n                                    dataTest: 'assessment-item-accuracy',\n                                },\n                            },\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                getCustomFieldComponent: (\n                                    record: AiLogItemInterface\n                                ) => (\n                                    <Actions>\n                                        <FlagToggle\n                                            checked={!!record.flagCompanyId}\n                                            onChange={() => toggleFlag(record)}\n                                            dataTest=\"assessment-item-flag\"\n                                        />\n                                    </Actions>\n                                ),\n                            },\n                        ],\n                    },\n                }}\n            />\n        </MainWrapper>\n    );\n};\n\nconst CompanyAiAssessmentContainer: FC = () => {\n    const searchAiLogs = useSearchAiLogsService();\n    const unMount = useAiLogsUnmountService();\n    const toggleAiLogsFlag = useToggleAiLogsFlagService();\n\n    const company = useSelector(getCompanyState);\n    const aiLogsState = useAiLogsState();\n    const portableTeams = usePortableTeamsState();\n\n    return (\n        <CompanyAiAssessment\n            aiLogs={aiLogsState.data}\n            companyId={company?.id}\n            companyName={company.name}\n            loading={aiLogsState.loading || aiLogsState.loadingFlag}\n            portableTeams={portableTeams.data?.items}\n            searchHandler={searchAiLogs}\n            unMount={unMount}\n            toggleFlag={toggleAiLogsFlag}\n        />\n    );\n};\n\nexport default CompanyAiAssessmentContainer;\n","import { useCallback, useMemo } from 'react';\nimport { SearchParams } from '../../../constants/interfaces/filters';\nimport { CalendarValue } from '../../../ui/components/Calendar';\nimport { CalendarFilterOptions } from '../../../ui/components/table-wrapper/table-tools/types';\nimport { useOrderBy } from '../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport AssessmentLogsBig from '../../../ui/icons/AssessmentLogsBig';\n\n/**\n * @function useCalendarFilterOptions\n * @param { SearchParams } searchParams\n * @param { boolean } isEmptyState\n * @param { (name: keyof SearchParams, value: any) => void } setCustom\n * @returns { CalendarFilterOptions }\n */\nexport const useCalendarFilterOptions = (\n    searchParams: SearchParams,\n    isEmptyState: boolean,\n    setCustom: (name: keyof SearchParams, value: any) => void,\n    dataTest?: string,\n): CalendarFilterOptions => {\n    const { startDate, endDate } = searchParams;\n    const handleChangeStartDate = useCallback(\n        (d?: Date | null) => setCustom('startDate', d),\n        [setCustom]\n    );\n    const handleChangeEndDate = useCallback(\n        (d?: Date | null) => setCustom('endDate', d),\n        [setCustom]\n    );\n    const handleChangeDate = useCallback(\n        (date: CalendarValue<true>) => {\n            handleChangeStartDate(date.start);\n            handleChangeEndDate(date.end);\n        },\n        [handleChangeStartDate, handleChangeEndDate]\n    );\n\n    return {\n        calendarPopUpProps: {\n            value: {\n                start: startDate ? new Date(startDate) : null,\n                end: endDate ? new Date(endDate) : null,\n            },\n            selectRange: true,\n            onChange: handleChangeDate,\n            restrictFuture: true,\n            disabled:\n                isEmptyState &&\n                !startDate &&\n                !endDate,\n            dataTest,\n        }\n    };\n};\n\n/**\n * @function useHeaderOptions\n * @param { SearchParams } searchParams\n * @param { (field: string) => void } setOrderBy\n * @returns { object }\n */\nexport const useHeaderOptions = (\n    searchParams: SearchParams,\n    setOrderBy: (field: string) => void\n) => {\n    const { orderBy } = searchParams;\n    return {\n        id: useOrderBy('id', orderBy, setOrderBy),\n        user: useOrderBy('user', orderBy, setOrderBy),\n        scenario: useOrderBy('scenario', orderBy, setOrderBy),\n        date: useOrderBy('date', orderBy, setOrderBy),\n        mode: useOrderBy('mode', orderBy, setOrderBy),\n        accuracy: useOrderBy('accuracy', orderBy, setOrderBy)\n    };\n}\n\n/**\n * @function useEmptyStateOptions\n * @param { boolean } isEmptyState\n * @returns { object }\n */\nexport const useEmptyStateOptions = (isEmptyState: boolean) => {\n    return useMemo(() => {\n        return {\n            shouldShowEmptyState: isEmptyState,\n            noEntriesOptions: {\n                icon: AssessmentLogsBig,\n                text: 'No Training Log Yet',\n                dataTest: 'no-ai-assessment'\n            },\n            noSearchResultsOptions: {\n                entityName: 'Training Log',\n                dataTest: 'no-found-ai-assessment'\n            }\n        }\n    }, [isEmptyState]);\n};\n","import React, { FC, useCallback } from 'react';\r\nimport styled from 'styled-components';\r\nimport Checkbox from '../../../ui/components/Checkbox';\r\nimport { TeamLeader } from '../../../constants/interfaces/TeamLeader';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\r\nimport { TableDivider } from '../../../ui/components/table-wrapper/table-divider';\r\n\r\nconst StyledTeamsList = styled.div`\r\n    overflow: auto;\r\n    height: 100%;\r\n`;\r\n\r\nconst TopSideList = styled.span``;\r\n\r\nconst GeneralList = styled.span``;\r\n\r\nconst TeamsItemWrapper = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    margin: 10px 0;\r\n`;\r\n\r\nconst TeamsItem = styled.div<{ disabled?: boolean }>`\r\n    color: ${props => props.theme.Colors.black};\r\n    cursor: pointer;\r\n    border-radius: 8px;\r\n    font-weight: 500;\r\n    font-size: 13px;\r\n    padding: 0 12px;\r\n    align-items: center;\r\n    background: ${props => props.theme.Colors.white};\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    display: inline-block;\r\n    ${props => props.disabled && 'pointer-events: none'}\r\n    &:active {\r\n        opacity: 0.7;\r\n    }\r\n`;\r\n\r\nconst StyledAdditionalInfo = styled.span`\r\n    font-size: 13px;\r\n    font-weight: 600;\r\n    font-stretch: normal;\r\n    font-style: normal;\r\n    line-height: normal;\r\n    letter-spacing: normal;\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n    margin-left: 3px;\r\n`;\r\n\r\nexport const PortableTeamLeadersList: FC<{\r\n    teamLeaders?: TeamLeader[];\r\n    selectedTeams: number[];\r\n    setTeamFilters?: (leaderId: number) => void;\r\n}> = ({ teamLeaders, selectedTeams, setTeamFilters }) => {\r\n    const profile = useSelector(getProfileState);\r\n    const isChecked = useCallback(\r\n        (setId?: number) => {\r\n            return !!selectedTeams && !!setId && selectedTeams.includes(setId);\r\n        },\r\n        [selectedTeams]\r\n    );\r\n\r\n    const isPartiallyChecked = useCallback(\r\n        (teamId?: number) => {\r\n            return (\r\n                !!selectedTeams &&\r\n                !!teamId &&\r\n                selectedTeams.includes(-Number(teamId))\r\n            );\r\n        },\r\n        [selectedTeams]\r\n    );\r\n\r\n    const changeHandler = (teamId?: number) => {\r\n        if (teamId && setTeamFilters) {\r\n            setTeamFilters(teamId);\r\n        }\r\n    };\r\n\r\n    const topListTeamLeaders = teamLeaders\r\n        ? teamLeaders.filter(\r\n              team =>\r\n                  team.isDefault || (team.id && selectedTeams.includes(team.id))\r\n          )\r\n        : [];\r\n\r\n    const bottomListTeamLeaders = teamLeaders\r\n        ? teamLeaders.filter(\r\n              team =>\r\n                  !team.isDefault && team.id && !selectedTeams.includes(team.id)\r\n          )\r\n        : [];\r\n\r\n    return (\r\n        <StyledTeamsList>\r\n            {topListTeamLeaders.length > 0 && (\r\n                <TopSideList>\r\n                    {topListTeamLeaders.map(leader => {\r\n                        return (\r\n                            <TeamsItemWrapper key={leader.id}>\r\n                                <Checkbox\r\n                                    size={12}\r\n                                    checked={\r\n                                        isChecked(leader.id) ||\r\n                                        isPartiallyChecked(leader.id)\r\n                                    }\r\n                                    partial={isPartiallyChecked(leader.id)}\r\n                                    handleChange={() =>\r\n                                        changeHandler(leader.id)\r\n                                    }\r\n                                />\r\n                                <TeamsItem\r\n                                    onClick={() => changeHandler(leader.id)}\r\n                                >\r\n                                    {`${leader.firstName} ${leader.lastName}`}\r\n                                </TeamsItem>\r\n                            </TeamsItemWrapper>\r\n                        );\r\n                    })}\r\n                    {topListTeamLeaders.length <\r\n                        (teamLeaders ? teamLeaders.length : 0) && (\r\n                        <TableDivider width=\"98%\" />\r\n                    )}\r\n                </TopSideList>\r\n            )}\r\n            <GeneralList>\r\n                {bottomListTeamLeaders.map(leader => {\r\n                    return (\r\n                        <TeamsItemWrapper key={leader.id}>\r\n                            <Checkbox\r\n                                size={12}\r\n                                checked={\r\n                                    isChecked(leader.id) ||\r\n                                    isPartiallyChecked(leader.id)\r\n                                }\r\n                                partial={isPartiallyChecked(leader.id)}\r\n                                handleChange={() => changeHandler(leader.id)}\r\n                            />\r\n                            <TeamsItem onClick={() => changeHandler(leader.id)}>\r\n                                {`${leader.firstName} ${leader.lastName}`}\r\n                                {profile && profile.id === leader.id && (\r\n                                    <StyledAdditionalInfo>\r\n                                        (You)\r\n                                    </StyledAdditionalInfo>\r\n                                )}\r\n                            </TeamsItem>\r\n                        </TeamsItemWrapper>\r\n                    );\r\n                })}\r\n            </GeneralList>\r\n        </StyledTeamsList>\r\n    );\r\n};\r\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const LeaderCrown = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                height=\"100%\"\n                viewBox=\"0 0 38 32\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <g>\n                                <g>\n                                    <g>\n                                        <path\n                                            d=\"M33.085 25.415V32h-28.2v-6.585h28.2zm-2.431 2.372H7.315v1.84h23.339v-1.84zM19 0c2.194 0 3.973 1.735 3.973 3.876 0 .966-.363 1.85-.962 2.529l3.988 6.02 4.057-1.989c.053-2.096 1.81-3.779 3.971-3.779 2.194 0 3.973 1.736 3.973 3.876 0 1.975-1.514 3.606-3.472 3.846l-1.59 9.153H5.062l-1.591-9.153C1.514 14.139 0 12.509 0 10.533c0-2.14 1.779-3.876 3.973-3.876s3.972 1.736 3.972 3.876l-.006-.098 3.97 1.945 3.974-6.101c-.536-.66-.856-1.495-.856-2.403C15.027 1.736 16.806 0 19 0zm-1.1 7.602l-5.118 7.861-5.546-2.718c-.353.494-.82.904-1.365 1.194l1.281 7.22h23.696l1.287-7.217c-.547-.29-1.017-.701-1.37-1.197L25.14 15.5l-5.207-7.857c-.3.07-.612.108-.934.108-.381 0-.75-.052-1.1-.15zm16.127 1.427c-.85 0-1.541.674-1.541 1.504s.69 1.504 1.541 1.504c.852 0 1.542-.673 1.542-1.504 0-.83-.69-1.504-1.542-1.504zm-30.054 0c-.852 0-1.542.674-1.542 1.504s.69 1.504 1.542 1.504c.85 0 1.541-.673 1.541-1.504 0-.83-.69-1.504-1.541-1.504zM19 2.372c-.851 0-1.541.673-1.541 1.504 0 .83.69 1.504 1.541 1.504s1.541-.673 1.541-1.504c0-.83-.69-1.504-1.541-1.504z\"\n                                            transform=\"translate(-816 -380) translate(0 184) translate(700 32) translate(49 164) translate(67)\"\n                                        />\n                                    </g>\n                                </g>\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default LeaderCrown;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport NoSearchResult from '../../../ui/icons/NoSearchResult';\nimport LeaderCrown from '../../../ui/icons/LeaderCrown';\nimport { Loading } from '../../../ui/components/LoadingCopmonent';\n\nconst StyledEmptyLabels = styled.div`\n    flex-direction: column;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100px;\n`;\n\nconst StyledEmptyLabelsContent = styled.div`\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst IconWrapper = styled.div`\n    width: 32px;\n    height: 32px;\n    color: ${props => props.theme.Colors.cloudyBlue};\n    margin-bottom: 8px;\n`;\n\nconst NoTeamsTitle = styled.div`\n    font-family: ${props => props.theme.Fonts.manrope};\n    font-size: 11px;\n    font-weight: bold;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    text-align: center;\n    color: ${props => props.theme.Colors.cloudyBlue};\n`;\n\nconst EmptyTeamLeaders: FC<{ loading?: boolean; isEmpty?: boolean }> = ({\n    loading,\n    isEmpty,\n}) => {\n    if (loading) {\n        return (\n            <StyledEmptyLabels>\n                <Loading />\n            </StyledEmptyLabels>\n        );\n    }\n\n    return (\n        <StyledEmptyLabels>\n            <StyledEmptyLabelsContent>\n                <IconWrapper>\n                    {isEmpty ? <LeaderCrown /> : <NoSearchResult />}\n                </IconWrapper>\n                <NoTeamsTitle>\n                    {isEmpty ? 'No Team Leaders yet' : 'No Team Leaders found'}\n                </NoTeamsTitle>\n            </StyledEmptyLabelsContent>\n        </StyledEmptyLabels>\n    );\n};\n\nexport default EmptyTeamLeaders;\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { PortableTeamLeadersList } from './PortableTeamLeadersList';\r\nimport { Button } from '../../../ui/components/Button';\r\nimport { Variables } from '../../../theme/variables';\r\nimport { filterTeamLeaders } from '../tools';\r\nimport EmptyTeamLeaders from './EmptyTeamLeaders';\r\nimport { TeamLeader } from '../../../constants/interfaces/TeamLeader';\r\nimport { TableSearchInput } from '../../../ui/components/table-wrapper/table-tools/table-search-input';\r\n\r\n//region Types\r\ntype Action = 'clear' | 'select';\r\n\r\nexport type PortableTeamsProps = {\r\n    teamLeaders?: TeamLeader[];\r\n    selectedList: number[];\r\n    onSave?: () => void;\r\n    onSelectAll: (labelIds: number[]) => void;\r\n    onSetSelected?: (leaderId: number) => void;\r\n    resetSelected: () => void;\r\n    filtersTitle?: string;\r\n    loading?: boolean;\r\n    showSelectActions?: boolean;\r\n    showSearch?: boolean;\r\n    showSave?: boolean;\r\n    fetchOnMount?: boolean;\r\n};\r\n//endregion\r\n\r\n//region Styles\r\nconst StyledCreateTeams = styled.div`\r\n    flex: 1;\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst CreateTeamsBody = styled.div`\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n`;\r\n\r\nconst FiltersHeader = styled.div`\r\n    padding: 0 16px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    height: 24px;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst FiltersSavePanel = styled.div`\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n`;\r\n\r\nconst SelectActions = styled.div`\r\n    font-size: 11px;\r\n    font-weight: 500;\r\n\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n\r\n    margin-bottom: 8px;\r\n`;\r\n\r\nconst PlainAction = styled.span<{\r\n    disabled?: boolean;\r\n    color: string;\r\n    colorHover: string;\r\n    colorActive: string;\r\n}>`\r\n    cursor: pointer;\r\n    user-select: none;\r\n\r\n    ${props =>\r\n        props.disabled\r\n            ? css`\r\n                  color: ${props.theme.Colors.cloudyBlue};\r\n                  pointer-events: none;\r\n              `\r\n            : css`\r\n                  color: ${props.color};\r\n              `}\r\n\r\n    &:hover {\r\n        color: ${({ colorHover }) => colorHover};\r\n    }\r\n    &:active {\r\n        color: ${({ colorActive }) => colorActive};\r\n    }\r\n    &:not(:last-of-type) {\r\n        margin-right: 8px;\r\n    }\r\n`;\r\n\r\nconst SelectedCaption = styled.span`\r\n    color: ${props => props.theme.Colors.steelGrey};\r\n`;\r\n\r\nconst FilterTitle = styled.p`\r\n    margin: 0;\r\n    font-size: 13px;\r\n    color: ${props => props.theme.Colors.black};\r\n    font-weight: 600;\r\n`;\r\n\r\nconst SearchWrapper = styled.div`\r\n    margin-bottom: 16px;\r\n`;\r\n//endregion\r\n\r\nconst PortableTeamLeaders: FC<PortableTeamsProps> = ({\r\n    teamLeaders,\r\n    selectedList,\r\n    loading,\r\n    onSave,\r\n    onSelectAll,\r\n    onSetSelected,\r\n    resetSelected,\r\n    filtersTitle,\r\n    showSelectActions,\r\n    showSearch,\r\n    showSave = true,\r\n}) => {\r\n    const actionConfig: Record<\r\n        Action,\r\n        {\r\n            color: string;\r\n            colorHover: string;\r\n            colorActive: string;\r\n        }\r\n    > = {\r\n        clear: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n        select: {\r\n            color: Variables.Colors.darkSkyBlue,\r\n            colorHover: Variables.Colors.lightBlue,\r\n            colorActive: Variables.Colors.windowsBlue,\r\n        },\r\n    };\r\n\r\n    const [searchTerm, setSearchTerm] = useState('');\r\n    const searchHandler = (value: string) => setSearchTerm(value);\r\n    const [processedSelectedList, setProcessedSelectedList] = useState<\r\n        number[]\r\n    >([]);\r\n\r\n    const clearHandler = useCallback(() => {\r\n        onSelectAll([]);\r\n    }, [onSelectAll]);\r\n\r\n    const processedTeamLeaders = useMemo((): TeamLeader[] => {\r\n        if (teamLeaders) {\r\n            const result = filterTeamLeaders(searchTerm, teamLeaders);\r\n            if (result.length > 0) {\r\n                const processedDataIds = result.map(item => item.id!);\r\n                setProcessedSelectedList(\r\n                    selectedList.filter(item => processedDataIds.includes(item))\r\n                );\r\n            }\r\n\r\n            return result;\r\n        } else {\r\n            return [];\r\n        }\r\n    }, [searchTerm, teamLeaders, selectedList]);\r\n\r\n    const isAllSelected = useMemo(\r\n        () => selectedList.length === teamLeaders?.length,\r\n        [selectedList.length, teamLeaders]\r\n    );\r\n\r\n    const toggleAllHandler = useCallback(() => {\r\n        if (isAllSelected) {\r\n            onSelectAll([]);\r\n        } else if (onSelectAll) {\r\n            onSelectAll(\r\n                processedTeamLeaders\r\n                    ? processedTeamLeaders.map(leader => leader.id)\r\n                    : []\r\n            );\r\n        }\r\n    }, [isAllSelected, onSelectAll, processedTeamLeaders]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            resetSelected();\r\n        };\r\n    }, [resetSelected]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            !!searchTerm &&\r\n            processedSelectedList.length !== selectedList.length\r\n        ) {\r\n            toggleAllHandler();\r\n        }\r\n    }, [searchTerm, toggleAllHandler, processedSelectedList, selectedList, processedTeamLeaders]);\r\n\r\n    const showNoItems = !teamLeaders?.length;\r\n    const showEmptyState = !processedTeamLeaders.length || loading;\r\n    const selectedTeamLeadersLength = processedSelectedList.filter(id => id > 0)\r\n        .length;\r\n\r\n    return (\r\n        <StyledCreateTeams>\r\n            <CreateTeamsBody>\r\n                {filtersTitle && (\r\n                    <FiltersHeader>\r\n                        <FilterTitle>{filtersTitle}</FilterTitle>\r\n                    </FiltersHeader>\r\n                )}\r\n                {showSearch && (\r\n                    <SearchWrapper>\r\n                        <TableSearchInput\r\n                            onChange={searchHandler}\r\n                            disabled={showNoItems}\r\n                        />\r\n                    </SearchWrapper>\r\n                )}\r\n                {showSelectActions && !showNoItems && (\r\n                    <SelectActions>\r\n                        <div>\r\n                            <SelectedCaption>\r\n                                {selectedTeamLeadersLength > 0\r\n                                    ? `${selectedTeamLeadersLength} ${\r\n                                          selectedTeamLeadersLength > 1\r\n                                              ? ' Team Leaders selected'\r\n                                              : ' Team Leader selected'\r\n                                      }`\r\n                                    : 'No Team Leaders selected'}\r\n                            </SelectedCaption>\r\n                        </div>\r\n                        <div>\r\n                            {isAllSelected ? (\r\n                                <PlainAction\r\n                                    disabled={\r\n                                        processedSelectedList.length === 0 ||\r\n                                        showEmptyState\r\n                                    }\r\n                                    color={actionConfig.clear.color}\r\n                                    colorActive={actionConfig.clear.colorActive}\r\n                                    colorHover={actionConfig.clear.colorHover}\r\n                                    onClick={clearHandler}\r\n                                >\r\n                                    Unselect All\r\n                                </PlainAction>\r\n                            ) : (\r\n                                <PlainAction\r\n                                    disabled={showEmptyState}\r\n                                    color={actionConfig.select.color}\r\n                                    colorActive={\r\n                                        actionConfig.select.colorActive\r\n                                    }\r\n                                    colorHover={actionConfig.select.colorHover}\r\n                                    onClick={toggleAllHandler}\r\n                                >\r\n                                    Select All\r\n                                </PlainAction>\r\n                            )}\r\n                        </div>\r\n                    </SelectActions>\r\n                )}\r\n                {showEmptyState ? (\r\n                    <EmptyTeamLeaders\r\n                        loading={loading}\r\n                        isEmpty={!teamLeaders?.length}\r\n                    />\r\n                ) : (\r\n                    <>\r\n                        <PortableTeamLeadersList\r\n                            teamLeaders={processedTeamLeaders}\r\n                            selectedTeams={processedSelectedList}\r\n                            setTeamFilters={onSetSelected}\r\n                        />\r\n                        {onSave && showSave && (\r\n                            <FiltersSavePanel>\r\n                                <Button\r\n                                    type={'button'}\r\n                                    label={'Save'}\r\n                                    action={() => onSave()}\r\n                                    height={'48px'}\r\n                                    width={'160px'}\r\n                                />\r\n                            </FiltersSavePanel>\r\n                        )}\r\n                    </>\r\n                )}\r\n            </CreateTeamsBody>\r\n        </StyledCreateTeams>\r\n    );\r\n};\r\n\r\nexport { PortableTeamLeaders };\r\n","import { TeamLeader } from '../../constants/interfaces/TeamLeader';\n\nexport const filterTeamLeaders = (\n    term: string,\n    teamLeaders: TeamLeader[]\n): TeamLeader[] => {\n    if (!term) {\n        return teamLeaders;\n    }\n\n    return teamLeaders.filter(\n        leader =>\n            leader.firstName.toLowerCase().includes(term.toLowerCase()) ||\n            leader.lastName.toLowerCase().includes(term.toLowerCase()) ||\n            `${leader.firstName} ${leader.lastName}`.trim().toLowerCase().includes(term.toLowerCase().trim())\n    );\n};\n","import React, { FC, useCallback, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../ui/components/Fieldset';\nimport { PortableLabelsWithStore } from '../../../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { PortableTeamsWithStore } from '../../../../../portableTeams';\nimport { useDeselectAllTeams, useSaveTeams } from '../../../../../portableTeams/store/hors/withTeams/services';\nimport { useTeamsState } from '../../../../../portableTeams/store/hors/withTeams/states';\nimport { useTeamsState as useMyTeamsState } from '../../../../store/states';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport { PortableTeamLeaders } from '../../../../../portableTeamLeaders';\nimport {\n    useResetTeamLeadersSelection,\n    useSaveTeamLeaderSelection,\n    useSelectMultipleTeamLeadersService,\n    useSelectTeamLeaderService,\n    useDeselectAllTeamLeadersSelection\n} from '../../../../store/services';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 464px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    min-height: 254px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 254px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst TeamLeadersContainer = styled.div`\n    width: 224px;\n    min-height: 254px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nexport const MyTeamsFilters: FC<{\n    preSelectedLabels: number[];\n    onLabelsChange: (ids: number[]) => void;\n    onTeamsChange: (ids: number[]) => void;\n    onTeamLeadersChange: (ids: number[]) => void;\n    onSuccessApply: () => void;\n}> = ({\n    preSelectedLabels,\n    onLabelsChange,\n    onTeamsChange,\n    onTeamLeadersChange,\n    onSuccessApply,\n}) => {\n    const teams = useTeamsState();\n    const labels = useLabelsState();\n    const selectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const saveTeams = useSaveTeams();\n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(preSelectedLabels);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        preSelectedLabels,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    //Team Leaders state logic\n    const teamLeaders = useMyTeamsState().teamLeaders;\n\n    const onSelectTeamLeader = useSelectTeamLeaderService();\n    const onSelectAllTeamLeaders = useSelectMultipleTeamLeadersService();\n    const saveTeamLeaders = useSaveTeamLeaderSelection();\n    const resetTeamLeaders = useResetTeamLeadersSelection();\n\n    const deselectTeams = useDeselectAllTeams();\n    const deselectLabels = useDeselectAllLabels();\n    const deselectTeamLeaders = useDeselectAllTeamLeadersSelection();\n\n    const onApplyHandler = useCallback(() => {\n        onLabelsChange(labels.selected);\n        onTeamsChange(teams.selected);\n        onTeamLeadersChange(teamLeaders.selected);\n        saveLabels();\n        saveTeams();\n        saveTeamLeaders();\n        onSuccessApply();\n    }, [\n        onLabelsChange,\n        labels.selected,\n        onTeamsChange,\n        teams.selected,\n        onTeamLeadersChange,\n        teamLeaders.selected,\n        saveLabels,\n        saveTeams,\n        saveTeamLeaders,\n        onSuccessApply,\n    ]);\n\n    const onClearHandler = useCallback(() => {\n        deselectLabels();\n        deselectTeamLeaders();\n        deselectTeams();\n    }, [deselectLabels, deselectTeams, deselectTeamLeaders])\n\n    const totalFiltersSelected =\n        teams.selected.length +\n        labels.selected.filter(id => id > 0).length +\n        teamLeaders.selected.length;\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Teams'}>\n                    <TeamsContainer>\n                        <PortableTeamsWithStore\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Team Leaders'}>\n                    <TeamLeadersContainer>\n                        <PortableTeamLeaders\n                            teamLeaders={teamLeaders.data?.items}\n                            selectedList={teamLeaders.selected}\n                            onSetSelected={onSelectTeamLeader}\n                            onSelectAll={onSelectAllTeamLeaders}\n                            resetSelected={resetTeamLeaders}\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamLeadersContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption>\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button disabled={!totalFiltersSelected} variant='inverse' width={'122px'} action={() => onClearHandler()}>\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button width={'122px'} action={() => onApplyHandler()}>\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoTeams = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 48 48\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.2%\"\n                            x=\"-14.3%\"\n                            y=\"-1.2%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                fill=\"#212121\"\n                                d=\"M45.602 35.997H45.6h.002zm-.002 3.001h.002-.002z\"\n                                transform=\"translate(-821 -541) translate(821 541)\"\n                            />\n                            <path\n                                fill=\"#B1C0CB\"\n                                d=\"M17.648 0C26.936 0 29 5.828 29 13.016c0 5.537-2.695 11.415-7.05 13.841.767.193 2.979.755 5.264 1.408l.686.198c2.515.734 4.953 1.543 5.49 2.055 1.955 1.867 2.734 14.677.778 17.482l-16.44-.004L1.139 48c-1.971-2.805-1.172-15.615.8-17.482 1.095-1.04 9.508-3.155 11.463-3.636-4.386-2.409-7.105-8.306-7.105-13.866C6.296 5.828 8.361 0 17.648 0zm0 2.4C10.22 2.4 8.95 7.15 8.95 13.007c0 4.877 2.412 10.266 6.369 11.952v4.447h-1.274C9.18 30.46 5.08 31.928 3.774 32.59c-.832.97-1.365 10.463-.848 12.407l14.803-.004 14.659.004c.514-1.944-.003-11.429-.822-12.405-1.312-.651-5.35-2.122-10.156-3.186h-1.555v-4.45c.927-.397 1.77-.996 2.516-1.745.78-.782 1.455-1.728 2.012-2.774 1.182-2.22 1.834-4.894 1.834-7.43 0-5.858-1.141-10.607-8.569-10.607zM46.021 37.717c1.956 1.868 2.735 7.475.78 10.279l-10.045-.001c.288-.836.503-1.86.65-3l7.452.002c.513-1.944-.003-4.23-.823-5.206-.905-.45-3.445-1.29-6.512-2.117-.074-.95-.182-1.885-.32-2.775 3.415.86 8.085 2.118 8.818 2.818zm-7.136-27.402c2.12 2.388 1.882 5.937 1.882 9.9 0 4.245-1.545 8.689-4.228 11.626-.306-1.046-.674-1.922-1.098-2.543 1.843-2.45 2.888-5.882 2.888-9.091 0-5.713-.255-10.371-7.155-10.6-.096-.841-.23-1.643-.405-2.403 3.892.09 6.46 1.246 8.116 3.111z\"\n                                transform=\"translate(-821 -541) translate(821 541)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoTeams;\n","import React, { FC, useRef, useState } from 'react';\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../../../ui/components/ActionButton';\nimport { CheckPermission } from '../../../../../permissions';\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\nimport { PopupComponent } from '../../../../../../ui/components/Popup';\nimport { Team } from '../../../../../../constants/interfaces/Team';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport {\n    calculateAssignedLabels,\n    calculateRemovedLabels,\n    useCalculatePreSelectedLabelsForSingleItem,\n} from '../../../../../labels/tools';\nimport { AssignLabels } from '../../../../../portableLabels/templates/AssignLabels';\nimport { usePortableLabelsState } from '../../../../../portableLabels/store/states';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\n\nconst ListActions: FC<{\n    team: Team;\n    handleViewTeam: (id?: number) => void;\n    handleManageTeam: (id?: number, isDefault?: boolean) => void;\n    onDuplicateTeam: (team: Team) => void;\n    handleDeleteTeam: (teamIds: number) => void;\n    assignLabelsToTeams: (\n        addedLabelIds: number[],\n        deletedLabelIds: number[],\n    ) => void;\n    isHidden?: boolean;\n}> = ({\n    team,\n    handleViewTeam,\n    handleManageTeam,\n    handleDeleteTeam,\n    onDuplicateTeam,\n    assignLabelsToTeams,\n    isHidden,\n}) => {\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const calculatePreSelectedLabels = useCalculatePreSelectedLabelsForSingleItem();\n   \n    const handleSetPreselectedLabels = () => {\n        const selectedLabelIds = team.labels || [];\n        const preAssignedLabels = calculatePreSelectedLabels(\n            selectedLabelIds,\n            labelsList.data\n        );\n        setSelectLabels(preAssignedLabels);\n        saveLabels();\n    };\n\n    const handleSaveSelectedLabels = (labelIDs: number[]) => {\n        const addedLabelIds = calculateAssignedLabels(labelIDs, labels.saved);\n        const deletedLabelIds = calculateRemovedLabels(labelIDs, labels.saved);\n\n        assignLabelsToTeams(addedLabelIds, deletedLabelIds);\n    };\n\n    const [assignSingleLabelOpen, setAssignSingleLabelOpen] = useState<\n        null | number | undefined\n    >(null);\n\n    const triggerRef = useRef(null);\n\n    return (\n        <span>\n            <div ref={triggerRef}>\n                <ActionButton customWidth={224} isHidden={isHidden} dataTest=\"teams-item-menu\">\n                    <CheckPermission permissions={[NEW_PERMISSIONS.VIEW_TEAM]}>\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                handleViewTeam(team.id);\n                            }}\n                            dataTest=\"view-team-action\"\n                        >\n                            View Team\n                        </ActionItem>\n                    </CheckPermission>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.UPDATE_TEAM]}\n                    >\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                handleManageTeam(team.id, team.isDefault);\n                            }}\n                            dataTest=\"manage-team-action\"\n                        >\n                            Manage Team\n                        </ActionItem>\n                    </CheckPermission>\n                    {!team.isDefault && (\n                        <>\n                            <CheckPermission\n                                permissions={[\n                                    NEW_PERMISSIONS.ASSIGN_TEAM_LABEL,\n                                ]}\n                            >\n                                <ActionItem\n                                    onClick={e => {\n                                        e.stopPropagation();\n                                        setAssignSingleLabelOpen(team.id);\n                                        handleSetPreselectedLabels();\n                                    }}\n                                    dataTest=\"assign-labels-team-action\"\n                                >\n                                    Assign Labels\n                                </ActionItem>\n                            </CheckPermission>\n                            <CheckPermission\n                                permissions={[NEW_PERMISSIONS.DUPLICATE_TEAM]}\n                            >\n                                <ActionItem\n                                    onClick={e => {\n                                        onDuplicateTeam(team);\n                                    }}\n                                    dataTest=\"duplicate-team-action\"\n                                >\n                                    Duplicate\n                                </ActionItem>\n                            </CheckPermission>\n                            <CheckPermission\n                                permissions={[NEW_PERMISSIONS.DELETE_TEAM]}\n                            >\n                                <ActionItem\n                                    destructive={true}\n                                    onClick={e => {\n                                        e.stopPropagation();\n                                        handleDeleteTeam(team.id!);\n                                    }}\n                                    dataTest=\"delete-team-action\"\n                                >\n                                    Delete\n                                </ActionItem>\n                            </CheckPermission>\n                        </>\n                    )}\n                </ActionButton>\n            </div>\n            <PopupComponent\n                triggerRef={triggerRef}\n                open={assignSingleLabelOpen === team.id}\n                onDismiss={() => {\n                    setAssignSingleLabelOpen(null);\n                }}\n            >\n                <AssignLabels\n                    onLabelsChange={handleSaveSelectedLabels}\n                    onSuccessApply={() => {\n                        setAssignSingleLabelOpen(null);\n                    }}\n                    withBorder={true}\n                />\n            </PopupComponent>\n        </span>\n    );\n};\n\nexport default ListActions;\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\n\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\n\nexport const Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 4px;\n    display: inline-flex;\n`;\n\nexport const FlexWrapper = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nexport const WrapperTableCell = styled.div`\n    width: 70%;\n    margin: 0 auto;\n\n    td {\n        padding: 0;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n\n        span {\n            width: 71px !important;\n        }\n    }\n\n    td:first-child {\n        span {\n            width: 66px !important;\n        }\n    }\n\n    @media (max-width: 1441px) {\n        td:first-child {\n            padding-left: 8px !important;\n        }\n    }\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    customTableCellStyle: {\n        padding: '0px !important',\n    },\n    multiTableCellStyle: {\n        padding: '10px 0 0 22px !important',\n    },\n    labelsCellStyle: {\n        justifyContent: 'flex-end !important'\n    }\n}));\n","import { History } from 'history';\r\nimport React, { FC, useCallback, useEffect, useState } from 'react';\r\nimport { isEmpty as lodashIsEmpty } from 'lodash';\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router';\r\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport { isTeamLeader } from '../../../../constants/enums';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../constants/interfaces/filters';\r\nimport {\r\n    PaginationResult,\r\n    ListResult\r\n} from '../../../../constants/interfaces/PaginationResult';\r\nimport { Team, TeamV2 } from '../../../../constants/interfaces/Team';\r\nimport {\r\n    useDeleteLabelFromTeamService,\r\n    useDeselectAllTeamLeadersSelection,\r\n    useSaveTeamLeaderSelection,\r\n    useSearchTeamsLeadersService,\r\n    useSearchTeamsService,\r\n    useUpdateAllSelectedTeamsStateService,\r\n    useUpdateSelectedTeamStateService,\r\n} from '../../store/services';\r\nimport {\r\n    TeamLeadersState,\r\n    useTeamEditState,\r\n    useTeamsState,\r\n    useUpdateTeamsState,\r\n} from '../../store/states';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport {\r\n    UpdatedLabelsState,\r\n    useLabelsState,\r\n    useUpdatedLabelsState,\r\n} from '../../../labels/store/states';\r\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\r\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\r\nimport {\r\n    useAssignLabelsToTeamsApi,\r\n    useDeleteLabelsFromTeamsApi,\r\n} from '../../../../api';\r\nimport { clearSelectedItemIfNotLoaded } from '../../../labels/tools';\r\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\r\nimport {\r\n    useSaveUserFiltersService,\r\n    useSetAssignLabelsActionService,\r\n} from '../../../labels/store/services';\r\nimport { findAllChildIds } from '../../../../helpers/functions/tree-helpers';\r\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\r\nimport { usePermissionsState } from '../../../permissions/store/state';\r\nimport { useHandleAccessPage } from '../../../../helpers/hooks/usePagePermissions';\r\nimport {\r\n    UserProfile,\r\n    LeaderDataType,\r\n} from '../../../../constants/interfaces/User';\r\nimport { pushModal } from '../../../../tools/router';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { MyTeamsFilters } from './components/Filters/MyTeamsFilters';\r\nimport { WithLabelsContext } from '../../../portableLabels';\r\nimport { WithTeamsContext } from '../../../portableTeams';\r\nimport { countAppliedFiltersCount } from './tools';\r\nimport NoTrainingsFiltering from '../../../../ui/icons/NoTrainingsFiltering';\r\nimport NoTeams from '../../../../ui/icons/NoTeams';\r\nimport { useTeamsState as usePortableTeamsState } from '../../../portableTeams/store/hors/withTeams/states';\r\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\r\nimport ListActions from './components/ListActions/ListActions';\r\nimport { useSessionEffect } from '../../../common';\r\nimport {\r\n    useDeselectAllTeams,\r\n    useSaveTeams,\r\n} from '../../../portableTeams/store/hors/withTeams/services';\r\nimport { useSearchTeamsService as useSearchTeamsPortableService } from '../../../portableTeams/store/hors/withTeams/services';\r\nimport { getSecondarySearchState } from '../../../searchState/store/reducer';\r\nimport { SEARCH_STATE } from '../../../searchState/constants';\r\nimport { isEmpty } from '../../../../helpers/functions/object-helpers';\r\nimport { SecondarySearchStateInterface } from '../../../searchState/store/states';\r\nimport { Avatar, FlexWrapper, useStyles } from './styles';\r\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\r\nimport TableTitleOverflowText from '../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\r\nimport { Label } from '../../../../constants/interfaces/Label';\r\nimport {\r\n    useDuplicateTeamBulActionService,\r\n    useUpdateTeamsBulkActionService,\r\n    useDeleteTeamsService,\r\n} from '../../services/TeamBulkActionsService';\r\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\r\nimport { useDeleteTeamsService as useSingleDeleteTeamService } from '../../../../features/teams/store/services';\r\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\r\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\r\nimport {\r\n    onListenEvent,\r\n    onRemoveEvent,\r\n} from '../../../../helpers/functions/Events';\r\nimport {\r\n    EventNameList,\r\n    REFRESH_TEAMS_LIST,\r\n} from '../../../../helpers/functions/Events/types';\r\nimport { useUpdateLabelsBulkActionService } from '../../../../services/GeneralBulkActionServices';\r\nimport { UPDATE_TEAM_ACTION } from '../../services/TeamBulkActionsService/constants';\r\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\r\nimport { TeamsLearnersNavigation } from '../../components/TeamsPageNavigation';\r\n\r\nconst qs = require('query-string');\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst ListOfTeams: FC<{\r\n    history: History<any>;\r\n    searchTeams: (sp: SearchParams) => void;\r\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\r\n    deleteLabelFromTeam: (\r\n        data: { teamId: number; labelId: number }[],\r\n        teamId: number\r\n    ) => void;\r\n    setAssignLabelsAction(labels: number[]): void;\r\n    profile?: UserProfile;\r\n    company?: CompanyInterface;\r\n    teams?: ListResult<Team>;\r\n    teamLeaders?: TeamLeadersState;\r\n    updatedState?: Partial<TeamV2>;\r\n    selectedTeams?: number[];\r\n    updatedTeam?: Team;\r\n    loading?: boolean;\r\n    selectedLabels?: number[];\r\n    updateAllSelectedTeams(\r\n        teamIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    updateSelectedTeam(teamId: number): void;\r\n    updatedLabels?: UpdatedLabelsState;\r\n    clearAllSelected?: () => void;\r\n    searchState: SecondarySearchStateInterface;\r\n    allLabels?: PaginationResult<Label>;\r\n}> = ({\r\n    teams,\r\n    teamLeaders,\r\n    updatedState,\r\n    history,\r\n    searchTeams,\r\n    saveGlobalLabelFilters,\r\n    profile,\r\n    company,\r\n    updatedTeam,\r\n    selectedLabels,\r\n    selectedTeams,\r\n    deleteLabelFromTeam,\r\n    updateAllSelectedTeams,\r\n    updateSelectedTeam,\r\n    updatedLabels,\r\n    loading,\r\n    searchState,\r\n    allLabels,\r\n}) => {\r\n    const classes = useStyles();\r\n    const showMessage = useShowMessage();\r\n    const teamMembers = usePortableTeamsState();\r\n    const fetchTeamLeaders = useSearchTeamsLeadersService();\r\n    const searchTeamsForFilters = useSearchTeamsPortableService();\r\n    const deselectTeamLeaders = useDeselectAllTeamLeadersSelection();\r\n    const saveTeamLeaders = useSaveTeamLeaderSelection();\r\n    const deselectTeams = useDeselectAllTeams();\r\n    const saveTeams = useSaveTeams();\r\n    const canAccessPage = useHandleAccessPage();\r\n    const singleTeamDelete = useSingleDeleteTeamService();\r\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\r\n\r\n    const location = history.location;\r\n    const pageIndex = parseInt(qs.parse(location.search).page);\r\n    const initialOffset = pageIndex\r\n        ? pageIndex === 1\r\n            ? 0\r\n            : (pageIndex - 1) * ITEMS_PER_PAGE\r\n        : 0;\r\n\r\n    const permissions = usePermissionsState();\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        filters: [],\r\n        teamIds: teamMembers.saved,\r\n        teamLeadIds: teamLeaders ? teamLeaders.saved : [],\r\n        labelIDs: selectedLabels,\r\n        orderBy: null,\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n    };\r\n\r\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\r\n    const [isSelectAll, setIsSelectAll] = useState<any>(false);\r\n\r\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\r\n        null\r\n    );\r\n\r\n    const usableParams: SearchParams =\r\n        !isEmpty(searchState) &&\r\n        !!searchState?.params &&\r\n        searchState.key === SEARCH_STATE.TEAMS.name\r\n            ? searchState.params\r\n            : initialSearchParams;\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setLabelIDs,\r\n        setOffset,\r\n        setCustom,\r\n        refreshSearchParams,\r\n    } = useSearchParamsState(usableParams);\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: countAppliedFiltersCount(searchParams),\r\n        itemsCount: teams?.items.length || 0,\r\n    });\r\n\r\n    const ifSearchParamsChanged = useIfChanged(searchParams);\r\n    const ifCompanyChanged = useIfChanged(company);\r\n    const ifTeamsUpdateChanged = useIfChanged(updatedState);\r\n\r\n    const teamsWithoutDefault = teams\r\n        ? teams.items.filter((item: Team) => !item.isDefault)\r\n        : [];\r\n\r\n    const isCheckboxPartiallySelected =\r\n        selectedTeams && selectedTeams.length < teamsWithoutDefault.length;\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const hcTeams = useOrderBy('name', orderBy, setOrderBy);\r\n    const hcMembers = useOrderBy('members', orderBy, setOrderBy);\r\n    const hcPractisSets = useOrderBy('pset', orderBy, setOrderBy);\r\n\r\n    const clearAllTeamsCheck = useCallback(() => {\r\n        updateAllSelectedTeams([], false, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n    }, [isCheckboxPartiallySelected, updateAllSelectedTeams]);\r\n\r\n    const refreshData = useCallback(() => {\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchTeams(searchParams);\r\n        setLastRefreshed(new Date());\r\n        clearAllTeamsCheck();\r\n        setIsSelectAll(false);\r\n    }, [searchParams, initialOffset, searchTeams, clearAllTeamsCheck]);\r\n\r\n    const updateAllTeamsCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const teamIds =\r\n                (teams &&\r\n                    teams.items\r\n                        .filter((item: Team) => !item.isDefault)\r\n                        .map((team: Team) => Number(team.id))) ||\r\n                [];\r\n            updateAllSelectedTeams(\r\n                teamIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [teams, isCheckboxPartiallySelected, updateAllSelectedTeams]\r\n    );\r\n\r\n    /**\r\n     * @function handleTeamCheck\r\n     * @param { React.ChangeEvent }  event\r\n     * @param { Team } team\r\n     */\r\n    const handleTeamCheck = (event: React.ChangeEvent, team: Team) => {\r\n        event.stopPropagation();\r\n        if (!!team.id) {\r\n            updateSelectedTeam(team.id);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @function handleAssignedLabelDelete\r\n     * @param { number } labelId\r\n     * @param { number } teamId\r\n     * @returns { void }\r\n     */\r\n    const handleAssignedLabelDelete = (labelId: number, teamId?: number) => {\r\n        if (!!labelId && !!teamId) {\r\n            const team = teams && teams.items.find(item => item.id === teamId);\r\n            const labels = getTeamLabels(team?.labels || []);\r\n            const teamRemovedLabels = [];\r\n\r\n            if (!!team && labels) {\r\n                const label = labels.find(label => label.id === labelId);\r\n                if (!!label) {\r\n                    const children: any[] = [];\r\n                    findAllChildIds(labels, label.id, children);\r\n\r\n                    if (!!children && !!children.length) {\r\n                        children.forEach(item => {\r\n                            teamRemovedLabels.push({\r\n                                teamId: teamId,\r\n                                labelId: item.id,\r\n                            });\r\n                        });\r\n                    }\r\n\r\n                    teamRemovedLabels.push({ teamId: teamId, labelId });\r\n                }\r\n            }\r\n            deleteLabelFromTeam(teamRemovedLabels, teamId);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @function isOptionsDisabled\r\n     * @returns { boolean }\r\n     */\r\n    const isOptionsDisabled =\r\n        !selectedTeams || (selectedTeams && !selectedTeams.length);\r\n\r\n    /**\r\n     * @function handleToggleLabels\r\n     * @param { number } itemId\r\n     * @returns { void }\r\n     */\r\n    const handleToggleLabels = (itemId?: number) => {\r\n        if (!itemId) return;\r\n        if (labelsOpen === itemId) {\r\n            setLabelsOpen(null);\r\n        } else {\r\n            setLabelsOpen(itemId);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @function handleManageTeam\r\n     * @param { number } teamId\r\n     * @param { boolean } isDefault\r\n     * @returns { void }\r\n     */\r\n    const handleManageTeam = (teamId?: number, isDefaultTeam?: boolean) => {\r\n        if (!teamId) return;\r\n        pushModal(\r\n            history,\r\n            ROUTES.TEAMS_PAGES.MANAGE_TEAM.replace(\r\n                ':teamId',\r\n                teamId.toString()\r\n            ),\r\n            { isDefaultTeam }\r\n        );\r\n    };\r\n\r\n    /**\r\n     * @function getTeamLeaderPicture\r\n     * @param { LeaderDataType[] } leaders\r\n     * @returns { string | JSX.Element[] }\r\n     */\r\n    const getTeamLeaderPicture = useCallback(\r\n        (leaders: LeaderDataType[], pictureCount: number) => {\r\n            let result = leaders.slice(0, pictureCount).map(leader => {\r\n                const profile = {\r\n                    ...leader,\r\n                    ...leader.user,\r\n                    picture: leader.user.imageUrl,\r\n                };\r\n\r\n                return <Avatar profile={profile} size=\"sm\" />;\r\n            });\r\n\r\n            return result;\r\n        },\r\n        []\r\n    );\r\n\r\n    /**\r\n     * @function isNewlyAssigned\r\n     * @param { LeaderDataType[] } leaders\r\n     * @returns { boolean }\r\n     */\r\n    const isNewlyAssigned = useCallback(\r\n        (leaders?: LeaderDataType[]) => {\r\n            if (!leaders || (leaders && !leaders.length)) return false;\r\n\r\n            const leader = leaders.find(\r\n                item => Number(item.id) === Number(profile?.id)\r\n            );\r\n\r\n            return (\r\n                leader && isTeamLeader(profile?.role?.name) && !leader.isViewed\r\n            );\r\n        },\r\n        [profile]\r\n    );\r\n\r\n    /**\r\n     * @function handleViewTeam\r\n     * @param {number} id\r\n     * @returns {void}\r\n     */\r\n    const handleViewTeam = (id?: number) => {\r\n        if (!id) return;\r\n\r\n        if (permissions.includes(NEW_PERMISSIONS.VIEW_TEAM)) {\r\n            history.push(\r\n                ROUTES.TEAMS_PAGES.TRAINING.replace(':teamId', id.toString()),\r\n                {\r\n                    useGoBack: true,\r\n                }\r\n            );\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @function isListEmpty\r\n     * @returns { boolean }\r\n     */\r\n    const isListEmpty = !teams || (teams && !teams.items.length);\r\n\r\n    /**\r\n     * @function labelChangeHandler\r\n     * @param { number[]} ids\r\n     * @returns { void }\r\n     */\r\n    const labelChangeHandler = (ids: number[]) => {\r\n        saveGlobalLabelFilters(ids);\r\n    };\r\n\r\n    /**\r\n     * @function teamsChangeHandler\r\n     * @param { number[] } ids\r\n     * @returns { void }\r\n     */\r\n    const teamsChangeHandler = (ids: number[]) => {\r\n        setCustom('teamIds', ids);\r\n    };\r\n\r\n    /**\r\n     * @function teamsLeadersChangeHandler\r\n     * @param { number[] } ids\r\n     * @returns { void }\r\n     */\r\n    const teamsLeadersChangeHandler = (ids: number[]) => {\r\n        setCustom('teamLeadIds', ids);\r\n    };\r\n\r\n    /**\r\n     * @function hasAllMembers\r\n     * @return { boolean }\r\n     */\r\n    const hasAllMembers = teams && teams?.items?.some(item => item.isDefault);\r\n\r\n    useSessionEffect(() => {\r\n        fetchTeamLeaders();\r\n    }, [fetchTeamLeaders, updatedTeam, ifTeamsUpdateChanged]);\r\n\r\n    useEffect(() => {\r\n        if (ifSearchParamsChanged || ifCompanyChanged || ifTeamsUpdateChanged) {\r\n            searchParams.limit = ITEMS_PER_PAGE;\r\n            searchParams.offset = initialOffset;\r\n            searchTeams(searchParams);\r\n        }\r\n    }, [\r\n        searchTeams,\r\n        searchParams,\r\n        ifCompanyChanged,\r\n        ifSearchParamsChanged,\r\n        ifTeamsUpdateChanged,\r\n        initialOffset,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        if (updatedTeam) refreshSearchParams();\r\n    }, [updatedTeam, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        if (pageIndex > 1) {\r\n            setTimeout(() => {\r\n                setOffset(initialOffset);\r\n            }, 200);\r\n        } else if (pageIndex === 1) {\r\n            setTimeout(() => {\r\n                setOffset(0);\r\n            }, 100);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [pageIndex]);\r\n\r\n    useEffect(() => {\r\n        selectedLabels && setLabelIDs(selectedLabels);\r\n    }, [selectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (updatedLabels && updatedLabels.updateType === 'delete')\r\n            refreshSearchParams();\r\n    }, [updatedLabels, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        const filteredTeams = teams\r\n            ? teams.items.map(team => Number(team.id))\r\n            : [];\r\n        const teamsToClear = clearSelectedItemIfNotLoaded(\r\n            selectedTeams,\r\n            filteredTeams\r\n        );\r\n        if (teamsToClear && teamsToClear.length > 0) {\r\n            updateAllSelectedTeams(teamsToClear, false);\r\n        }\r\n    }, [selectedTeams, teams, updateAllSelectedTeams]);\r\n\r\n    const deleteTeamsServiceOptions = {\r\n        parameters: {\r\n            searchParams: {\r\n                ...searchParams,\r\n                limit: ITEMS_PER_PAGE,\r\n                offset:\r\n                    (isSelectAll ? teams?.count : selectedTeams?.length) ?? 0,\r\n            },\r\n            selectedItemIds: !isSelectAll ? selectedTeams : undefined,\r\n            itemsCount:\r\n                (!isSelectAll ? selectedTeams?.length : teams?.count) ?? 0,\r\n        },\r\n        fieldName: !isSelectAll ? 'selectedItemIds' : 'searchParams.offset',\r\n    };\r\n\r\n    const deleteTeams = useDeleteTeamsService();\r\n\r\n    /**\r\n     * @function onDeleteTeamsSuccessCallback\r\n     * @returns { void }\r\n     */\r\n    const onDeleteTeamsSuccessCallback = useCallback(() => {\r\n        Promise.resolve().then(() => {\r\n            setIsSelectAll(false);\r\n            refreshData();\r\n            setTimeout(searchTeamsForFilters, 500);\r\n            showMessage('Teams have been deleted.', 'success');\r\n        });\r\n    }, [refreshData, searchTeamsForFilters, showMessage]);\r\n\r\n    const {\r\n        handleStartBulkActionService:\r\n            handleStartDeleteMembersFromTeamBulkAction,\r\n    } = useUpdateTeamsBulkActionService(\r\n        {\r\n            actionName: UPDATE_TEAM_ACTION,\r\n            actionFunction: deleteTeams,\r\n            actionFunctionOptions: deleteTeamsServiceOptions,\r\n        },\r\n        'Removing Teams',\r\n        onDeleteTeamsSuccessCallback\r\n    );\r\n\r\n    /**\r\n     * @function handleRemoveSingleTeam\r\n     * @param { number | undefined } singleTeamId\r\n     * @returns { void }\r\n     */\r\n    const handleRemoveSingleTeam = useCallback(\r\n        (singleTeamId?: number) => {\r\n            const deletedTeamId =\r\n                singleTeamId ||\r\n                (selectedTeams?.length === 1 && selectedTeams[0]);\r\n\r\n            deletedTeamId && singleTeamDelete(deletedTeamId);\r\n        },\r\n        [selectedTeams, singleTeamDelete]\r\n    );\r\n\r\n    /**\r\n     * @function handleConfirmDeleteDialog\r\n     * @param { number | undefined } singleTeamId\r\n     * @returns { void }\r\n     */\r\n    const handleConfirmDeleteDialog = useCallback(\r\n        (singleTeamId?: number) => {\r\n            if (isSelectAll || (selectedTeams && selectedTeams.length > 1)) {\r\n                handleStartDeleteMembersFromTeamBulkAction();\r\n            } else {\r\n                handleRemoveSingleTeam(singleTeamId);\r\n            }\r\n        },\r\n        [\r\n            handleRemoveSingleTeam,\r\n            handleStartDeleteMembersFromTeamBulkAction,\r\n            isSelectAll,\r\n            selectedTeams,\r\n        ]\r\n    );\r\n\r\n    /**\r\n     * @function handleOpenDeleteTeamConfirmDialog\r\n     * @param { number | undefined } teamId\r\n     * @returns { void }\r\n     */\r\n    const handleOpenDeleteTeamConfirmDialog = useCallback(\r\n        (teamId?: number): void => {\r\n            showConfirmationModalDialog({\r\n                modalTitle: 'Warning',\r\n                description:\r\n                    'You will delete the selected team(s) from the system. This action cannot be undone. Are you sure?',\r\n                cancelButtonText: 'Go Back',\r\n                confirmButtonText: 'Proceed',\r\n                dialogType: 'DANGER',\r\n                onConfirm: () => handleConfirmDeleteDialog(teamId),\r\n            });\r\n        },\r\n        [handleConfirmDeleteDialog, showConfirmationModalDialog]\r\n    );\r\n\r\n    /**\r\n     * @function handleRemoveSelectedTeams\r\n     * @returns { void }\r\n     */\r\n    const handleRemoveSelectedTeams = useCallback(() => {\r\n        // all the teams are selected\r\n        // and bulk action has it's own confirmation.\r\n        if (isSelectAll) {\r\n            handleStartDeleteMembersFromTeamBulkAction();\r\n        } else {\r\n            handleOpenDeleteTeamConfirmDialog();\r\n        }\r\n    }, [\r\n        handleOpenDeleteTeamConfirmDialog,\r\n        handleStartDeleteMembersFromTeamBulkAction,\r\n        isSelectAll,\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        return () =>\r\n            updateAllSelectedTeams([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        updateAllSelectedTeams([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [teams]);\r\n\r\n    useEffect(() => {\r\n        if (!searchState.key) {\r\n            setCustom('teamIds', teamMembers.saved);\r\n        }\r\n\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [teamMembers.saved, setCustom]);\r\n\r\n    useEffect(() => {\r\n        if (teamLeaders?.saved && !searchState.key) {\r\n            setCustom('teamLeadIds', teamLeaders.saved);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [teamLeaders, setCustom]);\r\n\r\n    useEffect(() => {\r\n        canAccessPage([NEW_PERMISSIONS.LIST_TEAM]);\r\n    }, [canAccessPage]);\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            deselectTeamLeaders();\r\n            saveTeamLeaders();\r\n            deselectTeams();\r\n            saveTeams();\r\n        };\r\n    }, [deselectTeamLeaders, saveTeamLeaders, deselectTeams, saveTeams]);\r\n\r\n    /**\r\n     * @function handlePageChange\r\n     * @param { number } limit\r\n     * @param { number } offset\r\n     * @returns { void }\r\n     */\r\n    const handlePageChange = (offset: number) => {\r\n        setOffset(offset);\r\n    };\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        clearAllTeamsCheck();\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        updateAllTeamsCheck(true);\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        const TotalCountForChecking = hasAllMembers\r\n            ? ITEMS_PER_PAGE\r\n            : ITEMS_PER_PAGE - 1;\r\n        const count = teams?.count || 0;\r\n        if (count < TotalCountForChecking) {\r\n            setIsSelectAll(true);\r\n        } else {\r\n            setIsSelectAll(false);\r\n        }\r\n\r\n        updateAllTeamsCheck(event.target.checked);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked = !!selectedTeams && !!selectedTeams.length;\r\n\r\n    const isMasterCheckBoxDisabled =\r\n        !teams ||\r\n        (teams && teams.items.length < 1) ||\r\n        (teams && teams.count === (hasAllMembers ? 1 : 0));\r\n\r\n    /**\r\n     * @function onRowClick\r\n     * @param { Team } team\r\n     * @returns { void }\r\n     */\r\n    const onRowClick = (team: Team) => {\r\n        handleViewTeam(team.id);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { Team } team\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (team: Team): boolean =>\r\n        !!selectedTeams && !!team.id && selectedTeams.includes(team.id);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { Team } team\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, team: Team) => {\r\n        handleTeamCheck(event, team);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsLabelTagsOpen\r\n     * @param { Team } team\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsLabelTagsOpen = (team: Team): boolean => {\r\n        return labelsOpen === team?.['id'];\r\n    };\r\n\r\n    /**\r\n     * @function onDeleteLabelHandler\r\n     * @param { number } labelId\r\n     * @param { Team } team\r\n     * @returns { void }\r\n     */\r\n    const onDeleteLabelHandler = (labelId: number, team: Team): void => {\r\n        handleAssignedLabelDelete(labelId, team.id);\r\n    };\r\n\r\n    const getTeamLabels = (labelIds: number[]) => {\r\n        return (\r\n            allLabels?.items?.filter(label => labelIds.includes(label.id)) || []\r\n        );\r\n    };\r\n\r\n    const assignLabelsToTeam = useAssignLabelsToTeamsApi();\r\n    const deleteLabelsFromTeam = useDeleteLabelsFromTeamsApi();\r\n\r\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\r\n        assignLabelsToTeam,\r\n        deleteLabelsFromTeam,\r\n        refreshData\r\n    );\r\n\r\n    /**\r\n     * @function handleUpdateTeamLabels\r\n     * @param { number[] } addedLabelIds\r\n     * @param { number[] } deletedLabelIds\r\n     * @param { number } teamId\r\n     * @returns { void }\r\n     */\r\n    const handleUpdateTeamLabels = (\r\n        addedLabelIds: number[],\r\n        deletedLabelIds: number[],\r\n        teamId: number\r\n    ): void => {\r\n        updateLabelsBulkActionService(\r\n            {\r\n                entityName: 'team',\r\n                entityId: teamId,\r\n            },\r\n            addedLabelIds,\r\n            deletedLabelIds\r\n        );\r\n    };\r\n\r\n    const duplicateTeamBulkActionService = useDuplicateTeamBulActionService(\r\n        refreshData,\r\n        refreshData\r\n    );\r\n\r\n    /**\r\n     * @function handleDuplicateTeam\r\n     * @param { Team } team\r\n     * @returns { void }\r\n     */\r\n    const handleDuplicateTeam = (team: Team) => {\r\n        if (team) {\r\n            duplicateTeamBulkActionService(team);\r\n        }\r\n    };\r\n\r\n    // Listen to ManageTeam Screen Refresh dispatch\r\n    useEffect(() => {\r\n        onListenEvent(EventNameList[REFRESH_TEAMS_LIST], () => {\r\n            refreshData();\r\n            fetchTeamLeaders();\r\n        });\r\n\r\n        return () => {\r\n            onRemoveEvent(EventNameList[REFRESH_TEAMS_LIST], () => {\r\n                refreshData();\r\n                fetchTeamLeaders();\r\n            });\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n        <MainWrapper\r\n            subTitle=\"Teams\"\r\n            hideDivider={!!selectedTeams?.length}\r\n            tabs={<TeamsLearnersNavigation />}\r\n            htmlPageTitle='Teams - Practis'\r\n            dataTest=\"teams\"\r\n        >\r\n            {loading && !isSelectAll && <LoadingComponent />}\r\n            <TableWrapper\r\n                tableStates={tableStates}\r\n                data={teams?.items}\r\n                selectedLabels={selectedLabels}\r\n                cornered={selectedLabels && !!selectedLabels.length}\r\n                shouldHideTableDivider={!!selectedTeams?.length}\r\n                tableRefreshConfigurations={{\r\n                    lastRefreshed: lastRefreshed,\r\n                    refreshData: refreshData,\r\n                    dataTest: 'teams-timestamp',\r\n                }}\r\n                tableToolsOptions={{\r\n                    pagingOptions: {\r\n                        totalCount: teams?.count ?? 0,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onPageChange: handlePageChange,\r\n                        searchOrFiltersApplied:\r\n                            searchParams.searchTerm.length ||\r\n                            countAppliedFiltersCount(searchParams),\r\n                        dataTest: 'teams-paging',\r\n                    },\r\n                    searchInputOptions: {\r\n                        initialValue: searchParams.searchTerm,\r\n                        onSearchChange: setSearchTerm,\r\n                        isSearchInputDisabled:\r\n                            countAppliedFiltersCount(searchParams) > 0 &&\r\n                            isListEmpty &&\r\n                            searchParams.searchTerm.length === 0,\r\n                    },\r\n                    isSelectedItemOptionsVisible:\r\n                        !lodashIsEmpty(selectedTeams) && !lodashIsEmpty(teams),\r\n                    selectedItemOptions: {\r\n                        isSelectAll: isSelectAll,\r\n                        selectedLength: selectedTeams?.length,\r\n                        totalCount: teams?.count,\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        onClearSelection: onClearSelection,\r\n                        onSelectAll: onSelectAll,\r\n                        bulkActionsConfig: {\r\n                            disabled:\r\n                                isOptionsDisabled ||\r\n                                !permissions.includes(\r\n                                    NEW_PERMISSIONS.DELETE_TEAM\r\n                                ),\r\n                            disabledLabel: \"Bulk actions can't be applied\",\r\n                            removeItemPermissions: [\r\n                                NEW_PERMISSIONS.DELETE_TEAM,\r\n                            ],\r\n                            removeItemTitle: 'Delete Teams',\r\n                            onRemoveItemsSubmit: () =>\r\n                                selectedTeams && handleRemoveSelectedTeams(),\r\n                            isSelectAll: isSelectAll,\r\n                            totalCount: teams?.count,\r\n                        },\r\n                    },\r\n                    filterOptions: {\r\n                        filterComponent: (\r\n                            <Popup<HTMLButtonElement>\r\n                                content={({ hide }) => (\r\n                                    <MyTeamsFilters\r\n                                        preSelectedLabels={selectedLabels || []}\r\n                                        onLabelsChange={labelChangeHandler}\r\n                                        onTeamsChange={teamsChangeHandler}\r\n                                        onTeamLeadersChange={\r\n                                            teamsLeadersChangeHandler\r\n                                        }\r\n                                        onSuccessApply={() => hide()}\r\n                                    />\r\n                                )}\r\n                                horizontalOffset={256}\r\n                            >\r\n                                {(ref, { toggleShown, shown }) => (\r\n                                    <FilterByHandler\r\n                                        ref={ref}\r\n                                        open={shown}\r\n                                        toggleOpen={toggleShown}\r\n                                        filtersCount={countAppliedFiltersCount(\r\n                                            searchParams\r\n                                        )}\r\n                                        disabled={\r\n                                            (searchParams.searchTerm.length >\r\n                                                0 ||\r\n                                                countAppliedFiltersCount(\r\n                                                    searchParams\r\n                                                ) === 0) &&\r\n                                            isListEmpty\r\n                                        }\r\n                                        dataTest=\"teams-filters\"\r\n                                    />\r\n                                )}\r\n                            </Popup>\r\n                        ),\r\n                    },\r\n                }}\r\n                tableEmptyStateConfigurations={{\r\n                    shouldShowEmptyState:\r\n                        !loading && teams?.items?.length === 0,\r\n                    noEntriesOptions: {\r\n                        icon: NoTeams,\r\n                        text: 'No Trainings Yet',\r\n                        dataTest: 'no-teams',\r\n                    },\r\n                    noSearchResultsOptions: {\r\n                        entityName: 'Teams',\r\n                        dataTest: 'no-found-teams',\r\n                    },\r\n                    noFilterResultsOptions: {\r\n                        icon: NoTrainingsFiltering,\r\n                        width: '160px',\r\n                        dataTest: 'no-filtered-teams',\r\n                    },\r\n                }}\r\n                configurations={{\r\n                    masterCheckBoxConfig: {\r\n                        checked: isMasterCheckBoxChecked,\r\n                        disabled: isMasterCheckBoxDisabled,\r\n                        partial:\r\n                            isCheckboxPartiallySelected ||\r\n                            ((teams?.count ?? 0) > ITEMS_PER_PAGE &&\r\n                                !isSelectAll),\r\n                        handleCheck: onCheckMasterCheckbox,\r\n                        dataTest: 'teams-master-checkbox',\r\n                    },\r\n                    columns: [\r\n                        {\r\n                            title: 'Teams',\r\n                            width: 23,\r\n                            ...(isListEmpty ? null : hcTeams),\r\n                            disabled: isListEmpty,\r\n                            className: classes.customTableCellStyle,\r\n                            dataTest: 'teams-name-column',\r\n                        },\r\n                        {\r\n                            title: 'Members',\r\n                            width: 12,\r\n                            ...(isListEmpty ? null : hcMembers),\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'teams-members-column',\r\n                        },\r\n                        {\r\n                            title: 'Practis Sets',\r\n                            width: 12,\r\n                            ...(isListEmpty ? null : hcPractisSets),\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'teams-practis-sets-column',\r\n                        },\r\n                        {\r\n                            title: 'Team Leaders',\r\n                            width: 22,\r\n                            disabled: isListEmpty,\r\n                            dataTest: 'teams-team-leaders-column',\r\n                        },\r\n                        {\r\n                            width: 9,\r\n                        },\r\n                        {\r\n                            width: 3,\r\n                        },\r\n                    ],\r\n\r\n                    rowConfig: {\r\n                        onRowClick: onRowClick,\r\n                        onRowCheckHandler: onRowCheckHandler,\r\n                        isRowChecked: checkIsRowChecked,\r\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\r\n                        getLabelTagsProps: (team: Team) => ({\r\n                            selectedLabels: team?.labels,\r\n                            deletePermissions: [\r\n                                NEW_PERMISSIONS.REMOVE_USER_LABEL,\r\n                            ],\r\n                            onDeleteLabel: (labelId: number) =>\r\n                                onDeleteLabelHandler(labelId, team),\r\n                        }),\r\n                        getClassName: (team: Team) =>\r\n                            team.isDefault ? 'is-default' : '',\r\n                        shouldShowAllMembers: (team: Team) =>\r\n                            team?.isDefault ?? false,\r\n                        getDataTest: (team: Team) =>\r\n                            team.isDefault ? 'all-members-item' : 'teams-item',\r\n\r\n                        cells: [\r\n                            {\r\n                                fieldType: 'CUSTOM_FIELD',\r\n                                getCustomFieldComponent: (team: Team) => (\r\n                                    <TableTitleOverflowText\r\n                                        isNew={isNewlyAssigned(team.leaders)}\r\n                                        dataTest=\"teams-item-name\"\r\n                                    >\r\n                                        {team.name !== null ? team.name : ''}\r\n                                    </TableTitleOverflowText>\r\n                                ),\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (team: Team) =>\r\n                                    !team?.countMembers ||\r\n                                    team?.countMembers === 0,\r\n                                fieldProps: {\r\n                                    renderTitle: (team: Team) =>\r\n                                        team.countMembers !== null &&\r\n                                        team.countMembers !== 0 &&\r\n                                        team.countMembers,\r\n                                    dataTest: 'teams-item-members',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'TEXT_FIELD',\r\n                                shouldShowEmptyCell: (team: Team) =>\r\n                                    !team?.countPractisSets ||\r\n                                    team?.countPractisSets === 0,\r\n                                fieldProps: {\r\n                                    renderTitle: (team: Team) =>\r\n                                        team.countPractisSets !== null &&\r\n                                        team.countPractisSets !== 0 &&\r\n                                        team.countPractisSets,\r\n                                    dataTest: 'teams-item-practis-sets',\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'CUSTOM_FIELD',\r\n                                shouldShowEmptyCell: (team: Team) =>\r\n                                    !team?.leaders || team.leaders.length === 0,\r\n                                getCustomFieldComponent: (team: Team) => {\r\n                                    const leaders: LeaderDataType[] =\r\n                                        team.leaders!;\r\n                                    const pictureCount: number = 3;\r\n                                    return (\r\n                                        <FlexWrapper data-test=\"teams-item-team-leaders\">\r\n                                            {getTeamLeaderPicture(\r\n                                                leaders,\r\n                                                pictureCount\r\n                                            )}{' '}\r\n                                            {leaders.length > pictureCount\r\n                                                ? ` +${\r\n                                                      leaders.length -\r\n                                                      pictureCount\r\n                                                  }`\r\n                                                : ''}\r\n                                        </FlexWrapper>\r\n                                    );\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LABEL_TAGS',\r\n                                fieldProps: {\r\n                                    getLabelTagsProps: (team: Team) => ({\r\n                                        open: labelsOpen === team.id,\r\n                                        toggleOpen: () =>\r\n                                            handleToggleLabels(team.id),\r\n                                        selectedLabels: team.labels,\r\n                                        isLabelLess: team.isDefault,\r\n                                        dataTest: 'teams-item-labels',\r\n                                    }),\r\n                                    className: classes.labelsCellStyle,\r\n                                },\r\n                            },\r\n                            {\r\n                                fieldType: 'LIST_ACTIONS',\r\n                                fieldProps: {\r\n                                    getListActionsComponent: (team: Team) => (\r\n                                        <WithLabelsContext.Provider\r\n                                            value={{\r\n                                                reducerName: 'teams',\r\n                                                scope: 'assignLabels',\r\n                                            }}\r\n                                        >\r\n                                            <ListActions\r\n                                                team={team}\r\n                                                handleViewTeam={handleViewTeam}\r\n                                                handleManageTeam={\r\n                                                    handleManageTeam\r\n                                                }\r\n                                                handleDeleteTeam={\r\n                                                    handleOpenDeleteTeamConfirmDialog\r\n                                                }\r\n                                                onDuplicateTeam={\r\n                                                    handleDuplicateTeam\r\n                                                }\r\n                                                assignLabelsToTeams={(\r\n                                                    addedLabelIds,\r\n                                                    deletedlabelIds\r\n                                                ) =>\r\n                                                    handleUpdateTeamLabels(\r\n                                                        addedLabelIds,\r\n                                                        deletedlabelIds,\r\n                                                        team?.id ?? 0\r\n                                                    )\r\n                                                }\r\n                                                isHidden={\r\n                                                    !!selectedTeams?.length\r\n                                                }\r\n                                            />\r\n                                        </WithLabelsContext.Provider>\r\n                                    ),\r\n                                },\r\n                            },\r\n                        ],\r\n                    },\r\n                }}\r\n            />\r\n        </MainWrapper>\r\n    );\r\n};\r\n\r\nexport const ListOfTeamsContainer: FC = () => {\r\n    const state = useTeamsState();\r\n    const updatedState = useTeamEditState().updatedTeam;\r\n    const updatedTeamsState = useUpdateTeamsState();\r\n    const history = useHistory();\r\n    const searchTeams = useSearchTeamsService(true);\r\n    const profile = useSelector(getProfileState);\r\n    const company = useSelector(getCompanyState);\r\n    const searchTeamsDebounced = useSearchDebounced(searchTeams);\r\n    const portableLabels = usePortableLabelsState();\r\n    const labels = useLabelsState();\r\n    const deleteLabelFromTeam = useDeleteLabelFromTeamService();\r\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\r\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\r\n    const updateAllSelectedTeams = useUpdateAllSelectedTeamsStateService();\r\n    const updateSelectedTeam = useUpdateSelectedTeamStateService();\r\n    const updatedLabels = useUpdatedLabelsState();\r\n    const teamSearchState = useSelector(getSecondarySearchState);\r\n\r\n    return (\r\n        <WithLabelsContext.Provider\r\n            value={{\r\n                reducerName: 'teams',\r\n            }}\r\n        >\r\n            <WithTeamsContext.Provider\r\n                value={{\r\n                    reducerName: 'teams',\r\n                }}\r\n            >\r\n                <ListOfTeams\r\n                    history={history}\r\n                    searchTeams={searchTeamsDebounced}\r\n                    profile={profile}\r\n                    teams={state.myTeams}\r\n                    teamLeaders={state.teamLeaders}\r\n                    updatedState={updatedState}\r\n                    company={company}\r\n                    selectedTeams={state.selectedMyTeamsItems}\r\n                    loading={state.loading}\r\n                    updatedTeam={updatedTeamsState.data}\r\n                    selectedLabels={labels.selected}\r\n                    setAssignLabelsAction={setAssignLabelsAction}\r\n                    updatedLabels={updatedLabels}\r\n                    saveGlobalLabelFilters={saveGlobalLabelFilters}\r\n                    deleteLabelFromTeam={deleteLabelFromTeam}\r\n                    updateAllSelectedTeams={updateAllSelectedTeams}\r\n                    updateSelectedTeam={updateSelectedTeam}\r\n                    searchState={teamSearchState}\r\n                    allLabels={portableLabels.data}\r\n                />\r\n            </WithTeamsContext.Provider>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n\r\nexport default ListOfTeamsContainer;","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const OverdueLearnersNoResult = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\n                <g clip-path=\"url(#nwn28ygtwa)\">\n                    <g clip-path=\"url(#2v0qqq962b)\" fill=\"#B1C0CB\">\n                        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6 20v25h9.042v3H7.5c-1.193 0-2.656-.156-3.5-1-.844-.844-1-2.306-1-3.5v-33c0-1.193.156-2.656 1-3.5.844-.844 2.307-1 3.5-1h4.418L12 2c.008-.594.08-1.08.5-1.5l.14-.143c.286-.294.34-.35.86-.357.53.006.87.363.978.477L14.5.5c.444.444.464.83.49 1.311.002.062.006.124.01.189l.042 4H33.02l.481-4a2.192 2.192 0 0 0-.1-.6c-.09-.334-.17-.63.1-.9l.14-.143c.286-.294.34-.35.86-.357.494.005.57.08.846.351L35.5.5c.26.246.181.546.094.876-.053.199-.108.409-.094.624l.225 4H40.5c1.173 0 2.66.182 3.5 1 .84.818.969 2.207 1 3.38V15h-3V9H6v8h18v3H6z\"/>\n                        <path d=\"M32.342 31.647c-1.394-2.842-1.245-5.775-.39-8.11.429-1.169 1.024-2.155 1.654-2.876.047-.053.093-.105.14-.155 1.023 3.935 3.783 6.726 5.647 8.612l.271.274c2.19 2.225 3.836 3.947 3.836 7.307 0 5.638-4.735 9.801-10.501 9.801-5.768 0-10.5-4.142-10.499-9.801 0-1.608.502-3.094 1.285-4.166.923 1.573 2.151 2.691 3.355 3.396.827.485 1.68.796 2.457.906.387.054.8.065 1.2-.008.39-.07.88-.242 1.274-.645 1.17-1.193 1.03-2.985.27-4.535z\" stroke=\"#B1C0CB\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                        <path d=\"M12 0h3v6h-3z\"/>\n                        <path d=\"M12 1.5a1.5 1.5 0 0 1 3 0V6h-3V1.5zM33 0h3v6h-3z\"/>\n                    </g>\n                </g>\n                <defs>\n                    <clipPath id=\"nwn28ygtwa\">\n                        <path fill=\"#fff\" d=\"M0 0h48v48H0z\"/>\n                    </clipPath>\n                    <clipPath id=\"2v0qqq962b\">\n                        <path fill=\"#fff\" d=\"M0 0h48v48H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>);\n    }\n);\n\nexport default OverdueLearnersNoResult;","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    background-color: inherit;\n`;\n\nexport const Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n    background-color: inherit;\n`;\n\nexport const LabelsContainer = styled.div`\n    width: 208px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const TeamsContainer = styled.div`\n    width: 264px;\n    min-height: 244px;\n    height: 100%;\n    overflow: auto;\n    background-color: inherit;\n`;\n\nexport const Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nexport const SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: var(--ps-grey-1);\n`;\n\nexport const ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;","import { FC, useCallback, useEffect } from 'react';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../ui/components/Fieldset';\nimport { PortableLabelsWithStore } from '../../../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { PortableTeamsWithStore } from '../../../../../portableTeams';\nimport { useDeselectAllTeams, useSaveTeams } from '../../../../../portableTeams/store/hors/withTeams/services';\nimport { useTeamsState } from '../../../../../portableTeams/store/hors/withTeams/states';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport { Container, TeamsContainer, Wrapper, LabelsContainer, Actions, SummaryCaption, ButtonWrapper } from './styles';\n\nexport const OverdueLearnersFilter: FC<{\n    preSelectedLabels: number[];\n    onLabelsChange: (ids: number[]) => void;\n    onTeamsChange: (ids: number[]) => void;\n    onSuccessApply: () => void;\n}> = ({\n    preSelectedLabels,\n    onLabelsChange,\n    onTeamsChange,\n    onSuccessApply\n}) => {\n    const teams = useTeamsState();\n    const labels = useLabelsState();\n    const selectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const saveTeams = useSaveTeams();\n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(preSelectedLabels);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        preSelectedLabels,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    const onApplyHandler = useCallback(() => {\n        onLabelsChange(labels.selected);\n        onTeamsChange(teams.selected);\n        saveLabels();\n        saveTeams();\n        onSuccessApply();\n    }, [\n        onLabelsChange,\n        labels.selected,\n        onTeamsChange,\n        teams.selected,\n        saveLabels,\n        saveTeams,\n        onSuccessApply,\n    ]);\n\n    const totalFiltersSelected =\n        teams.selected.length +\n        labels.selected.filter((id: any) => id > 0).length;\n\n    const deselectLabels = useDeselectAllLabels();\n    const deselectTeams = useDeselectAllTeams();\n\n    const onClearHandler = () => {\n        deselectLabels();\n        deselectTeams();\n    }\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Teams'} dataTest=\"teams-section-title\">\n                    <TeamsContainer>\n                        <PortableTeamsWithStore\n                            showSave={false}\n                            fetchOnMount={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </TeamsContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant='inverse'\n                        width={'122px'}\n                        action={onClearHandler}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={onApplyHandler}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const ITEMS_PER_PAGE = 20;\n\nexport const initialSearchParams: SearchParams = {\n    searchTerm: '',\n    orderBy: null,\n    limit: ITEMS_PER_PAGE,\n    offset: 0,\n    numberOfPages: 0,\n    labelIDs: []\n};\n\nexport const OverdueNudgeMessagePrefix = 'You have overdue Practis sets.\\n\\n';","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const countAppliedFiltersCount = (searchParams: SearchParams) => {\n    let total = 0;\n\n    if (searchParams && searchParams.teamIds && searchParams.teamIds.length) {\n        total = total + searchParams.teamIds.length;\n    }\n\n    if (searchParams && searchParams.labelIDs && searchParams.labelIDs.length) {\n        total = total + searchParams.labelIDs.filter(id => id > 0).length;\n    }\n\n    return total;\n};\n","import React, { FC } from 'react';\n\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../../../ui/components/ActionButton';\nimport { CheckPermission } from '../../../../../permissions';\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\nimport { UserV2 } from '../../../../../../constants/interfaces/User';\n\nexport const OverdueLearnersListActions: FC<{\n    user: UserV2;\n    handleViewProfile: (user: UserV2) => void;\n    setShowNudgeDialogMemberId: (userId: number) => void;\n    isHidden?: boolean;\n}> = ({\n    user,\n    handleViewProfile,\n    setShowNudgeDialogMemberId,\n    isHidden,\n}) => {\n    return (\n        <span>\n            <div>\n                <ActionButton customWidth={200} isHidden={isHidden} dataTest=\"list-item-menu\">\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.VIEW_USER_PERFORMANCE]}\n                    >\n                        <ActionItem onClick={() => handleViewProfile(user)} dataTest=\"view-profile-action\">\n                            View Profile\n                        </ActionItem>\n                    </CheckPermission>\n                    <CheckPermission permissions={[NEW_PERMISSIONS.SEND_NUDGE]}>\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                setShowNudgeDialogMemberId(user.id);\n                            }}\n                            dataTest=\"nudge-user-action\"\n                        >\n                            Nudge User\n                        </ActionItem>\n                    </CheckPermission>\n                </ActionButton>\n            </div>\n        </span>\n    );\n};\n\n\n\n","import { Popup } from '../../../../ui/components/Popup';\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\nimport OverdueLearnersNoResult from '../../../../ui/icons/OverdueLearnersNoResult';\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { useBuildUserName } from '../../../users/tools/hooks';\nimport { TeamsLearnersNavigation } from '../../components/TeamsPageNavigation';\nimport { useStyles } from '../Training/styles';\nimport { OverdueLearnersFilter } from './components/filters/OverdueLearnersFilter';\nimport { ITEMS_PER_PAGE } from './constants';\nimport { OverdueLearnersViewProps } from './types';\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\nimport { countAppliedFiltersCount } from './tools';\nimport { NEW_PERMISSIONS } from '../../../users/tools';\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\nimport { NudgeUser } from '../../../../ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser';\nimport { OverdueLearnersListActions } from './components/listActions/OverdueListActions';\nimport { isEmpty as lodashIsEmpty } from 'lodash';\nimport { TeamBasic } from '../../../../constants/interfaces/TeamBasic';\nimport { UserV2 } from '../../../../constants/interfaces/User';\nimport { EmptyCellDash } from '../../../../ui/components/table-wrapper/table/EmptyCellDash';\n\nfunction OverdueLearnersView({\n        profile,\n        users,\n        searchParams,\n        loading,\n        tableStates,\n        lastRefreshed,\n        selectedLabels,\n        showNudgeDialogMemberId,\n        selectedUsers,\n        sorting,\n        isSelectAll,\n        teamsData,\n        labelsOpen,\n        handleToggleLabels,\n        checkIsLabelTagsOpen,\n        refreshData,\n        handlePageChange,\n        handleSearchChange,\n        handleViewProfile,\n        onLabelsFilterChange,\n        onTeamsFilterChange,\n        onDeleteLabelHandler,\n        onNudgeSingleUser,\n        setShowNudgeDialogMemberId,\n        updateIsSelectAll,\n        updateSelectedUsers,\n        selectAllHandler,\n        onSelectUser,\n        handleNudgeMultipleUsers,\n}: OverdueLearnersViewProps) {\n\n    const classes = useStyles();\n    const buildUserName = useBuildUserName();\n\n    const isTableHeadersDisabled =\n        !users || (users && !users.items.length);\n\n    return (\n        <MainWrapper\n                tabs={<TeamsLearnersNavigation />}\n                htmlPageTitle={`Overdue Learners`}\n                dataTest=\"overdue-learners\"\n                subTitle={'Teams'}\n            >\n                {!!showNudgeDialogMemberId && (\n                    <DialogWrapper\n                        customization={{\n                            width: 480,\n                            padding: '49px 32px 32px 32px',\n                        }}\n                    >\n                        <NudgeUser\n                            fromUser={\n                                !!profile\n                                    ? `${profile.firstName} ${profile.lastName}`\n                                    : ''\n                            }\n                            onSend={onNudgeSingleUser}\n                            onClose={() => setShowNudgeDialogMemberId(null)}\n                        />\n                    </DialogWrapper>\n                )}\n                <TableWrapper\n                    tableStates={{...tableStates}}\n                    data={users?.items || []}\n                    selectedLabels={selectedLabels}\n                    cornered={selectedLabels && !!selectedLabels.length}\n                    tableRefreshConfigurations={{\n                        lastRefreshed: lastRefreshed,\n                        refreshData: refreshData,\n                        dataTest: 'overdue-learners-timestamp',\n                    }}\n                    tableToolsOptions={{\n                        pagingOptions: {\n                            totalCount: users?.count,\n                            itemsPerPage: ITEMS_PER_PAGE,\n                            onPageChange: handlePageChange,\n                            searchOrFiltersApplied: false,\n                            dataTest: 'overdue-learners-paging',\n                        },\n                        searchInputOptions: {\n                            initialValue: searchParams.searchTerm,\n                            isSearchInputDisabled: tableStates.disableSearch,\n                            onSearchChange: handleSearchChange,\n                            placeholder: \"\",\n                            dataTest: 'overdue-learners-search',\n                        },\n                        isSelectedItemOptionsVisible:\n                            !lodashIsEmpty(selectedUsers) &&\n                            !lodashIsEmpty(users),\n                        selectedItemOptions: {\n                            isSelectAll: isSelectAll,\n                            selectedLength: selectedUsers?.length,\n                            totalCount: users?.count,\n                            itemsPerPage: ITEMS_PER_PAGE,\n                            onClearSelection: () => {\n                                updateIsSelectAll(false);\n                                updateSelectedUsers([]);\n                            },\n                            onSelectAll: () => {\n                                updateSelectedUsers(users ? users.items.map(item => item.id) : []);\n                                updateIsSelectAll(true);\n                            },\n                            bulkActionsConfig: {\n                                disabled: selectedUsers.length === 0,\n                                showNudgeWarning: false,\n                                onNudgeSendButtonClicked:\n                                    handleNudgeMultipleUsers,   \n                                sendNudgePermissions: [\n                                    NEW_PERMISSIONS.SEND_NUDGE,\n                                ],\n                                isSelectAll: isSelectAll,\n                                totalCount: users?.count,\n                                selectedItems: selectedUsers,\n                            },\n                        },\n                        filterOptions: {\n                            filterComponent: (\n                                <Popup<HTMLButtonElement>\n                                    content={({ hide }) => (\n                                        <OverdueLearnersFilter\n                                            preSelectedLabels={selectedLabels || []}\n                                            onTeamsChange={onTeamsFilterChange}\n                                            onLabelsChange={onLabelsFilterChange}\n                                            onSuccessApply={() => hide()}\n                                        />\n                                    )}\n                                    anchorOrigin={{\n                                        vertical: 'bottom',\n                                        horizontal: 'right',\n                                    }}\n                                    horizontalOffset={256}\n                                >\n                                    {(ref, { toggleShown, shown }) => (\n                                        <FilterByHandler\n                                            ref={ref}\n                                            open={shown}\n                                            toggleOpen={toggleShown}\n                                            filtersCount={countAppliedFiltersCount(\n                                                searchParams\n                                            )}\n                                            disabled={\n                                                countAppliedFiltersCount(\n                                                    searchParams\n                                                ) === 0 &&\n                                                tableStates.disableFilters\n                                            }\n                                            dataTest=\"overdue-learners-filters\"\n                                        />\n                                    )}\n                                </Popup>\n                            ),\n                        },\n                    }}\n                    tableEmptyStateConfigurations={{\n                        shouldShowEmptyState:\n                            !loading && users?.items?.length === 0,\n                        noEntriesOptions: {\n                            icon: OverdueLearnersNoResult,\n                            text: 'No one is behind',\n                            dataTest: 'no-results',\n                        },\n                        noSearchResultsOptions: {\n                            entityName: 'Learners',\n                            dataTest: 'no-found-users',\n                        },\n                        noFilterResultsOptions: {\n                            dataTest: 'no-filtered-users',\n                        },\n                    }}\n                    configurations={{\n                        masterCheckBoxConfig: {\n                            checked: !!selectedUsers.length,\n                            disabled: !users?.items.length,\n                            partial:\n                                (selectedUsers && users && selectedUsers.length < users.items.length) || !isSelectAll,\n                            handleCheck: selectAllHandler,\n                            dataTest: \"members-master-checkbox\"\n                        },\n                        columns: [\n                            {\n                                title: 'Name',\n                                width: 35,\n                                disabled: tableStates.disableSorting,\n                                ...(isTableHeadersDisabled\n                                    ? null\n                                    : sorting.hcUserName),\n                                dataTest: 'name-column',\n                            },\n                            {\n                                title: 'Teams',\n                                width: 35,\n                                ...(isTableHeadersDisabled\n                                    ? null\n                                    : sorting.hcTeamName),\n                                disabled: tableStates.disableSorting,\n                                dataTest: 'teams-column',\n                            },\n                            {\n                                width: 1,\n                            },\n                            {\n                                width: 1,\n                            },\n                        ],\n                        rowConfig: {\n                            onRowClick: handleViewProfile,\n                            isLabelTagsOpen: checkIsLabelTagsOpen,\n                            onRowCheckHandler: (event: any, user: UserV2) => onSelectUser(user.id, event?.target?.checked),\n                            isRowChecked: (user) => (selectedUsers.includes(user.id) || isSelectAll),\n                            getLabelTagsProps: (user: UserV2) => ({\n                                selectedLabels: user.labels,\n                                deletePermissions: [\n                                    NEW_PERMISSIONS.REMOVE_USER_LABEL,\n                                ],\n    \n                                onDeleteLabel: (labelId: number) =>\n                                    onDeleteLabelHandler(labelId, user),\n                            }),\n                            cells: [\n                                {\n                                    fieldType: 'AVATAR_FIELD',\n                                    cellClassName: classes.customTableCellStyle,\n                                    fieldProps: {\n                                        renderTitle: (user: UserV2) =>\n                                            buildUserName(user),\n                                        getAvatarProps: (user: UserV2) => ({\n                                            customProfile: {\n                                                firstName: user.firstName,\n                                                lastName: user.lastName,\n                                                picture: user.imageUrl,\n                                                status: user.status,\n                                            },\n                                            size: 'sm',\n                                        }),\n                                        dataTest: 'overdue-users-user-item',\n                                    },\n                                },\n                                {\n                                    fieldType: 'TEXT_FIELD',\n                                    shouldShowEmptyCell: (user: UserV2) =>\n                                        !user.teams,\n                                    fieldProps: {\n                                        renderTitle: (user: UserV2) => {\n                                            const existingTeams = user.teams?.reduce((teams: string[], teamId: number) => {\n                                                const team = teamsData.items.find((team: TeamBasic) => team.id === teamId)\n                                                return team ? [...teams, team.name] : teams\n                                            }, []);\n\n                                           return existingTeams?.length ? existingTeams.join(', ') : <EmptyCellDash />;\n                                        },\n                                        dataTest: 'overdue-users-teams-item',\n                                    },\n                                },\n                                {\n                                    fieldType: 'LABEL_TAGS',\n                                    fieldProps: {\n                                        getLabelTagsProps: (user: UserV2) => {\n                                            return {\n                                                open: labelsOpen === user?.id,\n                                                toggleOpen: () =>\n                                                    handleToggleLabels(user?.id),\n                                                selectedLabels: user.labels,\n                                                dataTest: 'overdue-learners-labels',\n                                            };\n                                        },\n                                    },\n                                },\n                                {\n                                    fieldType: 'LIST_ACTIONS',\n                                    fieldProps: {\n                                        getListActionsComponent: (user: UserV2) => (\n                                            <OverdueLearnersListActions\n                                                user={user}\n                                                handleViewProfile={\n                                                    handleViewProfile\n                                                }\n                                                setShowNudgeDialogMemberId={\n                                                    setShowNudgeDialogMemberId\n                                                }\n                                                isHidden={!!selectedUsers?.length}\n                                            />\n                                        ),\n                                    },\n                                },\n                            ],\n                        },\n                    }}\n            />\n        </MainWrapper>\n    );\n}\n\nexport default OverdueLearnersView;","import { ListResult } from \"../../../../../constants/interfaces/PaginationResult\";\nimport { UserV2 } from \"../../../../../constants/interfaces/User\";\n\nexport enum ACTIONS {\n    GET_OVERDUE_LEARNERS_START = 'GET_OVERDUE_LEARNERS_START',\n    GET_OVERDUE_LEARNERS_SUCCESS = 'GET_OVERDUE_LEARNERS_SUCCESS',\n    GET_OVERDUE_LEARNERS_FAILURE = 'GET_OVERDUE_LEARNERS_FAILURE',\n}\n\nexport function getOverdueLearnersStart() {\n    return {\n        type: ACTIONS.GET_OVERDUE_LEARNERS_START as ACTIONS.GET_OVERDUE_LEARNERS_START,\n    };\n}\n\nexport function getOverdueLearnersSuccess(data: ListResult<UserV2>) {\n    return {\n        type: ACTIONS.GET_OVERDUE_LEARNERS_SUCCESS as ACTIONS.GET_OVERDUE_LEARNERS_SUCCESS,\n        data\n    };\n}\n\nexport function getOverdueLearnersFailure(error: string) {\n    return {\n        type: ACTIONS.GET_OVERDUE_LEARNERS_FAILURE as ACTIONS.GET_OVERDUE_LEARNERS_FAILURE,\n        error\n    };\n}","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ListResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { UserV2 } from '../../../../../constants/interfaces/User';\n\nexport interface OverdueLearnersState {\n    data?: ListResult<UserV2>;\n    isLoading: boolean;\n    error?: string;\n}\n\nexport type OverdueLearnersStateSelector = (state: any) => OverdueLearnersState;\n\nexport const OverdueLearnersStateSelectorContext = React.createContext<OverdueLearnersStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useOverdueLearnersState(): OverdueLearnersState {\n    return useSelector(useContext(OverdueLearnersStateSelectorContext));\n}\n","import { useDispatch } from 'react-redux'\nimport { useCallback } from 'react';\nimport { useGetOverdueLearners } from '../../../../../api';\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ListResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { getOverdueLearnersStart, getOverdueLearnersFailure, getOverdueLearnersSuccess } from './actions';\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\nimport { SearchParams } from '../../../../../constants/interfaces/filters';\nimport { getSearchSortingValue } from '../../../../../helpers/functions/search-params-helpers';\nimport { UserV2 } from '../../../../../constants/interfaces/User';\n\n/**\n * @function useGetOverdueLearnersService\n * @returns { CallableFunction }\n */\nexport const useGetOverdueLearnersService = () => {\n    const dispatch = useDispatch();\n    const getOverdueLearnersApi = useGetOverdueLearners();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback((searchParams: SearchParams) => {\n        const sp = {\n            teams: searchParams.teamIds?.join(','),\n            labels: searchParams.labelIDs?.join(','),\n            limit: searchParams.limit ?? 20,\n            offset: searchParams.offset,\n            query: searchParams.searchTerm,\n            sort: getSearchSortingValue(searchParams.orderBy, 'user_name', true),\n            companies: searchParams.companyId\n        }\n        dispatch(getOverdueLearnersStart());\n        return getOverdueLearnersApi(sp)\n            .then((data: ListResult<UserV2>) => {\n                dispatch(getOverdueLearnersSuccess(data));\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(getOverdueLearnersFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, getOverdueLearnersApi, showMessage]);\n}\n","import { ChangeEventHandler, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useHistory } from \"../../../../tools/router\";\nimport OverdueLearnersView from \"./view\";\nimport { useOverdueLearnersState } from './store/states';\nimport { useGetOverdueLearnersService } from \"./store/services\";\nimport { ITEMS_PER_PAGE } from \"../../../submissions/pages/ChallengeSubmissions\";\nimport { SearchParams, useSearchParamsState } from \"../../../../constants/interfaces/filters\";\nimport { initialSearchParams, OverdueNudgeMessagePrefix } from \"./constants\";\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\nimport { UserV2 } from \"../../../../constants/interfaces/User\";\nimport ROUTES from '../../../../routes/routes';\nimport { WithLabelsContext } from \"../../../portableLabels\";\nimport { WithTeamsContext } from \"../../../portableTeams\";\nimport { useLabelsState } from \"../../../labels/store/states\";\nimport { useSaveUserFiltersService } from \"../../../labels/store/services\";\nimport { countAppliedFiltersCount } from \"./tools\";\nimport { useDeleteUserLabelService, useNudgeTraineesService } from \"../../../users/store/services\";\nimport { getProfileState } from \"../../../../pages/UserProfile/store/reducers\";\nimport { NudgeData } from \"../../../../api/alert/types\";\nimport { useSessionEffect } from \"../../../common\";\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { usePortableTeamsState } from \"../../../portableTeams/store/states\";\nimport { useNudgeUsersBulkActionService } from '../../../../services/GeneralBulkActionServices';\n\nconst qs = require('query-string');\n\nfunction OverdueLearnersController () {\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n    const [showNudgeDialogMemberId, setShowNudgeDialogMemberId] =\n        useState<number | null>(null);\n    const [selectedUsers, setSelectedUsers] = useState<number[]>([]);\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\n\n    const history = useHistory();\n    const { data: users, isLoading: loading } = useOverdueLearnersState();\n    const profile = useSelector(getProfileState);\n\n    const searchOverdueLearners = useGetOverdueLearnersService();\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\n    const deleteUserLabel = useDeleteUserLabelService();\n    const nudgeTrainees = useNudgeTraineesService();\n    const portableTeams = usePortableTeamsState();\n\n    const onNudgeSingleUserSuccessCallback = () => {\n        setShowNudgeDialogMemberId(null);\n    };\n\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page) || 1;\n\n    const initialOffset = (pageIndex - 1) * ITEMS_PER_PAGE;\n    const usableParams: SearchParams = initialSearchParams;\n\n    const { searchParams, setSearchTerm, setOffset, setLabelIDs, setOrderBy, setCustom} =\n        useSearchParamsState(usableParams);\n\n    const orderBy = searchParams.orderBy;\n    const hcUserName = useOrderBy<UserV2>(\n        'user_name',\n        orderBy,\n        setOrderBy\n    );\n    const hcTeamName = useOrderBy<UserV2>(\n        'team_name',\n        orderBy,\n        setOrderBy\n    );\n\n    const handleTableStates = useTableStateHelper();\n    const { selected: selectedLabels } = useLabelsState();\n\n    useEffect(() => {\n        selectedLabels && setLabelIDs(selectedLabels);\n    }, [selectedLabels, setLabelIDs]);\n\n    useEffect(() => {\n        if (pageIndex > 1) {\n            setTimeout(() => {\n                setOffset(initialOffset);\n            }, 200);\n        } else if (pageIndex === 1) {\n            setTimeout(() => {\n                setOffset(0);\n            }, 100);\n        }\n    }, [initialOffset, pageIndex, setOffset]);\n\n    useEffect(() => {\n        if (selectedUsers?.length === users?.count) {\n            setIsSelectAll(true);\n        }\n    }, [users?.count, selectedUsers]);\n\n    useEffect(() => {\n        Promise.resolve().then(() => {\n            setSelectedUsers([]);\n            setIsSelectAll(false);\n        });\n    }, [users]);\n\n    useEffect(() => {\n        return () => setSelectedUsers([]);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    /**\n     * @function handleToggleLabels\n     * @param { itemId } number\n     * @returns { void }\n     */\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { UserV2 } row\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (row: UserV2): boolean => {\n        return labelsOpen === row?.id;\n    };\n    \n    useSessionEffect(() => {\n        if (!profile?.companyId) return;\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        searchOverdueLearners({\n            ...searchParams,\n            companyId: profile?.companyId,\n            labelIDs: selectedLabels,\n        });\n    }, [searchOverdueLearners, searchParams, profile?.companyId]);\n\n      /**\n     * @function teamsChangeHandler\n     * @param { number[] } ids\n     * @returns { void }\n     */\n      const teamsChangeHandler = (ids: number[]) => {\n        setCustom('teamIds', ids);\n    };\n\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: countAppliedFiltersCount(searchParams),\n        itemsCount: users?.items?.length || 0,\n    });\n\n    /**\n     * @function refreshData\n     * @returns { void }\n     */\n    const refreshData = useCallback(() => {\n            searchParams.limit = ITEMS_PER_PAGE;\n            searchParams.offset = initialOffset;\n            searchOverdueLearners({...searchParams, companyId: profile?.companyId});\n            setLastRefreshed(new Date());\n            setSelectedUsers([]);\n            setIsSelectAll(false);\n    }, [initialOffset, searchParams, searchOverdueLearners, profile?.companyId]);\n\n    const nudgeUsersBulkActionService = useNudgeUsersBulkActionService(\n        'overdue',\n        {\n            companyId: profile?.companyId ?? 0,\n        },\n        searchParams,\n        users?.count ?? 0,\n        refreshData\n    );\n\n    const onNudgeMultipleUsersSuccessCallback = useCallback(() => {\n        setIsSelectAll(false);\n        setSelectedUsers([]);\n    }, [])\n\n    /**\n     * @function handleNudgeMultipleUsers\n     * @returns { void }\n     */\n    const handleNudgeMultipleUsers = useCallback(\n        (data: any) => {\n            const { text, name: senderName } = data;\n            \n            if (isSelectAll) {\n                nudgeUsersBulkActionService({ text: OverdueNudgeMessagePrefix + text, senderName });\n            } else {\n                if (selectedUsers) {\n                    const nudgeUsersDate = selectedUsers.map(\n                        user =>\n                            ({\n                                type: 'overdue',\n                                receiverId: user,\n                                enrollmentId: null,\n                                senderName,\n                                text: OverdueNudgeMessagePrefix + text,\n                            } as NudgeData)\n                    );\n\n                    nudgeTrainees(\n                        nudgeUsersDate,\n                        onNudgeMultipleUsersSuccessCallback\n                    );\n                }\n            }\n        },\n        [\n            isSelectAll,\n            nudgeUsersBulkActionService,\n            selectedUsers,\n            nudgeTrainees,\n            onNudgeMultipleUsersSuccessCallback,\n        ]\n    );\n\n\n    /**\n     * @function handleViewProfile\n     * @param { user } UserV2\n     * @returns { void }\n     */\n    const handleViewProfile = (user: UserV2) => {\n        history.push(\n            ROUTES.USER_PERFORMANCE.replace(\n                ':userId',\n                user.id.toString()\n            ),\n            { useGoBack: true }\n        );\n    };\n\n    /**\n     * @function deleteLabelHandler\n     * @param { number } labelId\n     * @param { UserV2 } user\n     * @returns { void }\n     */\n    const deleteLabelHandler = (labelId: number, user: UserV2): void => {\n        deleteUserLabel(user.id, labelId, refreshData);\n    };\n\n    /**\n     * @function selectAllHandler\n     * @param { e } ChangeEvent<HTMLInputElement>\n     * @returns { void }\n     */\n    const selectAllHandler: ChangeEventHandler<HTMLInputElement> = e => {\n        if (\n            users && users.count < ITEMS_PER_PAGE &&\n            e.target.checked === true\n        ) {\n            setIsSelectAll(true);\n        } else {\n            setIsSelectAll(false);\n        }\n\n        const isCheckboxPartiallySelected =\n        selectedUsers && users && selectedUsers.length < users.items.length;\n\n        if (e.target.checked || isCheckboxPartiallySelected) {\n            setSelectedUsers((users && users.items.map(item => item.id)) || []);\n        } else {\n            setSelectedUsers([]);\n        }\n    };\n\n    /**\n     * @function selectUserHandler\n     * @returns { void }\n     */\n    const selectUserHandler = useCallback(\n        (id: number, state: boolean) => {\n            if (state) {\n                setSelectedUsers(prevState => [...prevState, id]);\n            } else {\n                setSelectedUsers(prevState =>\n                    prevState.filter(item => item !== id)\n                );\n            }\n            setIsSelectAll(false);\n        },\n        [setSelectedUsers]\n    );\n\n    /**\n     * @function handleNudgeSingleUser\n     * @returns { void }\n     */\n    const handleNudgeSingleUser = useCallback(\n        (data: any) => {\n            const { text, name: senderName } = data;\n            if (showNudgeDialogMemberId) {\n                const nudgeUserDate: NudgeData = {\n                    type: 'overdue',\n                    enrollmentId: null,\n                    receiverId: showNudgeDialogMemberId,\n                    senderName,\n                    text: OverdueNudgeMessagePrefix + text,\n                };\n\n                nudgeTrainees(\n                    [nudgeUserDate],\n                    onNudgeSingleUserSuccessCallback\n                );\n            }\n        },\n        [showNudgeDialogMemberId, nudgeTrainees]\n    );\n\n    return (\n        <WithLabelsContext.Provider\n            value={{\n                reducerName: 'teams',\n            }}\n        >\n            <WithTeamsContext.Provider\n                value={{\n                    reducerName: 'teams',\n                }}\n            >\n            <OverdueLearnersView\n                profile={profile}\n                users={users}\n                tableStates={tableStates}\n                searchParams={searchParams}\n                loading={loading}\n                lastRefreshed={lastRefreshed}\n                refreshData={refreshData}\n                handlePageChange={setOffset}\n                handleSearchChange={setSearchTerm}\n                handleViewProfile={handleViewProfile}\n                selectedLabels={selectedLabels}\n                onLabelsFilterChange={saveGlobalLabelFilters}\n                onTeamsFilterChange={teamsChangeHandler}\n                onDeleteLabelHandler={deleteLabelHandler}\n                onNudgeSingleUser={handleNudgeSingleUser}\n                showNudgeDialogMemberId={showNudgeDialogMemberId}\n                setShowNudgeDialogMemberId={(id: number | null) => setShowNudgeDialogMemberId(id)}\n                selectedUsers={selectedUsers}\n                sorting={{hcTeamName, hcUserName}}\n                isSelectAll={isSelectAll}\n                updateIsSelectAll={setIsSelectAll}\n                updateSelectedUsers={setSelectedUsers}\n                selectAllHandler={selectAllHandler}\n                onSelectUser={selectUserHandler}\n                teamsData={portableTeams.data}\n                handleNudgeMultipleUsers={handleNudgeMultipleUsers}\n                handleToggleLabels={handleToggleLabels}\n                checkIsLabelTagsOpen={checkIsLabelTagsOpen}\n                labelsOpen={labelsOpen}\n            />\n         </WithTeamsContext.Provider>\n        </WithLabelsContext.Provider>\n    );\n}\n\nexport default OverdueLearnersController;","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const CheckCircle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    d=\"M11.78 6.28a.75.75 0 0 0-1.06-1.06L6.75 9.19 5.28 7.72a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.06 0l4.5-4.5z\"\n                    fill=\"#15CBA9\"\n                />\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm1.5 0a6.5 6.5 0 1 1 13 0 6.5 6.5 0 0 1-13 0z\"\n                    fill=\"#15CBA9\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default CheckCircle;\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Warning = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M4.47.22A.75.75 0 0 1 5 0h6a.75.75 0 0 1 .53.22l4.25 4.25c.141.14.22.331.22.53v6a.75.75 0 0 1-.22.53l-4.25 4.25A.75.75 0 0 1 11 16H5a.75.75 0 0 1-.53-.22L.22 11.53A.75.75 0 0 1 0 11V5a.75.75 0 0 1 .22-.53L4.47.22zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5H5.31zM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\"\n                    fill=\"#EC513D\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default Warning;\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Saving = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <g clip-path=\"url(#xvo0q78pwa)\">\n                    <path\n                        fill-rule=\"evenodd\"\n                        clip-rule=\"evenodd\"\n                        d=\"m14.357 3.143 1.216-1.216a.25.25 0 0 1 .427.177V5.75a.25.25 0 0 1-.25.25h-3.646a.25.25 0 0 1-.177-.427l1.358-1.358a6.5 6.5 0 1 0 1.18 4.458.75.75 0 0 1 1.493.154 8.001 8.001 0 1 1-1.6-5.684z\"\n                        fill=\"#6D7F8C\"\n                    />\n                </g>\n                <defs>\n                    <clipPath id=\"xvo0q78pwa\">\n                        <path\n                            fill=\"#fff\"\n                            transform=\"matrix(-1 0 0 1 16 0)\"\n                            d=\"M0 0h16v16H0z\"\n                        />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default Saving;\n","import styled from 'styled-components';\n\nexport const StatusText = styled.div`\n    font-size: 13px;\n    font-weight: 500;\n    color: var(--ps-grey-1);\n    margin-right: 16px;\n`;\n\nexport const LastUpdatedText = styled(StatusText)`\n    color: var(--ps-grey-2);\n    font-weight: 400;\n`\n\nexport const StatusIcon = styled.div`\n    margin-right: 4px;\n`","import CheckCircle from '../../../../../../ui/icons/CheckCircle';\nimport Warning from '../../../../../../ui/icons/Warning';\nimport Saving from '../../../../../../ui/icons/Saving';\nimport { formatDate } from '../../../../../../helpers/functions/date-convert';\nimport { TeamUpdateStatus } from '../../../../store/states';\nimport { UpdateStatusViewProps } from './types';\nimport {\n    StatusText,\n    LastUpdatedText,\n    StatusIcon\n} from './styles';\n\nfunction UpdateStatusView({\n    updateStatus,\n    lastUpdated\n}: UpdateStatusViewProps) {\n    switch(updateStatus) {\n        case TeamUpdateStatus.IN_PROGRESS:\n            return <>\n                <StatusIcon data-test=\"team-saving-changes-icon\"><Saving /></StatusIcon>\n                <StatusText data-test=\"team-saving-changes-text\">Saving Changes...</StatusText>\n            </>;\n        case TeamUpdateStatus.COMPLETED:\n            return <>\n                <StatusIcon data-test=\"team-changes-saved-icon\"><CheckCircle /></StatusIcon>\n                <StatusText data-test=\"team-changes-saved-text\">Changes Saved</StatusText>\n            </>;\n        case TeamUpdateStatus.ERROR:\n            return <>\n                <StatusIcon data-test=\"team-changes-not-saved-icon\"><Warning /></StatusIcon>\n                <StatusText data-test=\"team-changes-not-saved-text\">Changes weren't saved. Try it again.</StatusText>\n            </>;\n        default:\n            if (!lastUpdated)\n                return <></>;\n            return <LastUpdatedText data-test='team-timestamp'>\n                Last Updated {formatDate(lastUpdated)}\n            </LastUpdatedText>\n    }\n}\n\nexport default UpdateStatusView;","import UpdateStatusView from './view';\n\nexport default UpdateStatusView;","import { FC } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { TeamUpdateStatus } from '../../../../store/states';\nimport UpdateStatus from '../UpdateStatus';\n\nconst StyledHeader = styled.div`\n    display: flex;\n    align-items: center;\n    font-size: 24px;\n    font-weight: bold;\n    letter-spacing: 0.5px;\n    height: 95px;\n    color: ${props => props.theme.Colors.dark};\n    flex-shrink: 0;\n`;\n\nconst StyledHeaderTitle = styled.div`\n    flex: 1;\n    min-width: 150px;\n    font-size: 20px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: normal;\n    letter-spacing: normal;\n    margin-left: 8px;\n`;\n\nconst HeaderActions = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nconst Header: FC<{\n    handleCancel: () => void;\n    lastUpdated?: string;\n    updateStatus?: TeamUpdateStatus\n}> = ({\n    handleCancel,\n    lastUpdated,\n    updateStatus\n}) => {\n    return (\n        <StyledHeader>\n            <StyledHeaderTitle data-test='team-page-title'>\n                Manage Team\n            </StyledHeaderTitle>\n            <HeaderActions>\n                <UpdateStatus\n                    updateStatus={updateStatus}\n                    lastUpdated={lastUpdated}\n                ></UpdateStatus>\n                <Button\n                    label={'Close'}\n                    variant={'inverse'}\n                    width={'128px'}\n                    action={handleCancel}\n                    dataTest='team-cancel'\n                />\n            </HeaderActions>\n        </StyledHeader>\n    );\n};\n\nexport default Header;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ConfirmCheckMark = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    d=\"m.98 9.024 4.044 4.04L15.099 2.996\"\n                    stroke=\"currentColor\"\n                    stroke-width=\"1.3\"\n                    stroke-linecap=\"round\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default ConfirmCheckMark;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const CancelCross = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                className={className}\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path\n                    d=\"m1.953 2.02 12 11.988M13.953 2.02l-12 11.988\"\n                    stroke=\"currentColor\"\n                    stroke-width=\"1.3\"\n                    stroke-linecap=\"round\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default CancelCross;\n","import styled from 'styled-components';\nimport { makeStyles } from '@material-ui/styles';\nimport { Input } from '../../../../../../ui/components/input';\n\nexport const useStyles = makeStyles(theme => ({\n    disabledButton: {\n        cursor: 'default!important',\n        color: 'var(--ps-grey-2)!important'\n    }\n}));\n\nexport const StyledInput = styled(Input)`\n    padding: 12px 16px;\n    font-size: 13px;\n    font-weight: normal;\n    border: ${props => props.error ? 'none' : '1px solid var(--ps-grey-3)'};\n    border-radius: 4px;\n    &:focus {\n        border: ${props => props.error ? 'none' : '1px solid var(--ps-grey-2)'};\n    }\n`;\n\nexport const InputWrapper = styled.div`\n    flex: 1;\n    height: 100%;\n    border-radius: 4px;\n    margin-right: 8px;\n`;\n\nconst ActionButton = styled.div`\n    width: 40px;\n    height: 40px;\n    background: var(--ps-grey-3);\n    border-radius: 4px;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n`;\n\nexport const CancelButton = styled(ActionButton)`\n    margin-right: 8px;\n    color: var(--ps-red-main);\n`;\n\nexport const SaveButton = styled(ActionButton)`\n    margin-right: 32px;\n    color: var(--ps-green-main);\n`;\n","import ConfirmCheckMark from '../../../../../../ui/icons/ConfirmCheckMark';\nimport CancelCross from '../../../../../../ui/icons/CancelCross';\nimport { InputWithButtonsViewProps } from './types';\nimport {\n    useStyles,\n    StyledInput,\n    InputWrapper,\n    CancelButton,\n    SaveButton\n} from './styles';\n\nfunction InputWithButtonsView(props: InputWithButtonsViewProps) {\n    const {\n        height,\n        maxLength,\n        placeholder,\n        value,\n        hasError,\n        showButtons,\n        isDisabled,\n        isSaveDisabled,\n        dataTest,\n        onChange,\n        onKeyDown,\n        onFocus,\n        onCancel,\n        onSave\n    } = props;\n    const classes = useStyles();\n\n    return <>\n        <InputWrapper>\n            <StyledInput\n                height={height}\n                maxLength={maxLength}\n                placeholder={placeholder}\n                value={value}\n                error={hasError}\n                disabled={isDisabled}\n                dataTest={`${dataTest}-input`}\n                handleChange={onChange}\n                onKeyDown={onKeyDown}\n                onFocus={onFocus}\n            />\n        </InputWrapper>\n        {\n            showButtons && (\n                <>\n                    <CancelButton\n                        onClick={isDisabled ? undefined : onCancel}\n                        className={isDisabled ? classes.disabledButton : undefined}\n                        data-test={dataTest && `${dataTest}-cancel`}\n                    >\n                        <CancelCross />\n                    </CancelButton>\n                    <SaveButton\n                        onClick={isSaveDisabled ? undefined : onSave}\n                        className={isSaveDisabled ? classes.disabledButton : undefined}\n                        data-test={dataTest && `${dataTest}-save`}\n                    >\n                        <ConfirmCheckMark />\n                    </SaveButton>\n                </>\n            )\n        }\n    </>;\n}\n\nexport default InputWithButtonsView;","import { ChangeEvent, useEffect, useState } from 'react';\nimport {\n    enterPressed,\n    escPressed\n} from '../../../../../../helpers/functions/key-down-helpers';\nimport { InputWithButtonsProps } from './types';\nimport InputWithButtonsView from './view';\n\nfunction InputWithButtonsController({\n    height,\n    maxLength,\n    placeholder,\n    value,\n    dataTest,\n    onSave\n}: InputWithButtonsProps) {\n    const [tempValue, setTempValue] = useState(value);\n    const [showButtons, setShowButtons] = useState(false);\n    const [isDisabled, setIsDisabled] = useState(false);\n    const [hasError, setHasError] = useState(false);\n\n    /**\n    * @description handles input focus event\n    * @function handleFocus\n    * @returns { void }\n    */\n    const handleFocus = () => setShowButtons(true);\n\n    /**\n    * @description handles input value change\n    * @function handleValueChange\n    * @param { ChangeEvent<HTMLInputElement> } event\n    * @returns { void }\n    */\n    const handleValueChange = (event: ChangeEvent<HTMLInputElement>) => {\n        const newValue = event.target.value;\n        setTempValue(newValue);\n        setHasError(false);\n    }\n\n    /**\n    * @description checks if save action is disabled\n    * @function isSaveDisabled\n    * @returns { boolean }\n    */\n    const isSaveDisabled = () => !tempValue || isDisabled;\n\n    /**\n    * @description handles ENTER and ESC events on input key down\n    * @function handleKeyDown\n    * @param { KeyboardEvent } event\n    * @returns { void }\n    */\n    const handleKeyDown = (event: KeyboardEvent) => {\n        const target = event.currentTarget as HTMLInputElement;\n        if (enterPressed(event) && !isSaveDisabled()) {\n            handleSave();\n            target.blur();\n        } else if (escPressed(event) && !isDisabled) {\n            handleCancel();\n            target.blur();\n        }\n    };\n\n    /**\n    * @description handles cancel action\n    * @function handleCancel\n    * @returns { void }\n    */\n    const handleCancel = () => {\n        Promise.resolve().then(() => {\n            setShowButtons(false);\n            setTempValue(value);\n            setHasError(false);\n        });\n    }\n\n    /**\n    * @description handles save action\n    * @function handleSave\n    * @returns { void }\n    */\n    const handleSave = () => {\n        if (tempValue !== value) {\n            Promise.resolve().then(() => {\n                setIsDisabled(true);\n                setHasError(false);\n            });\n            onSave(tempValue!)\n                .then(() => {\n                    Promise.resolve().then(() => {\n                        setIsDisabled(false);\n                        setShowButtons(false);\n                    });\n                    })\n                .catch(() => {\n                    Promise.resolve().then(() => {\n                        setIsDisabled(false);\n                        setHasError(true);\n                    });\n                });\n        } else {\n            setShowButtons(false);\n        }\n    }\n\n    useEffect(() => {\n        setTempValue(value);\n    }, [value]);\n    \n    return <InputWithButtonsView\n        height={height}\n        maxLength={maxLength}\n        placeholder={placeholder}\n        value={tempValue}\n        hasError={hasError}\n        dataTest={dataTest}\n        showButtons={showButtons}\n        isDisabled={isDisabled}\n        isSaveDisabled={isSaveDisabled()}\n        onChange={handleValueChange}\n        onKeyDown={handleKeyDown}\n        onFocus={handleFocus}\n        onCancel={handleCancel}\n        onSave={handleSave}\n    />\n}\n\nexport default InputWithButtonsController;","import InputWithButtonsController from './controller';\n\nexport default InputWithButtonsController;","import { FC, useCallback, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { TeamV2 } from '../../../../../../constants/interfaces/Team';\nimport { WithLabelsContext } from '../../../../../portableLabels';\nimport { Popup } from '../../../../../../ui/components/Popup';\nimport {\n    useResetLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport {\n    useCalculatePreSelectedLabelsForSingleItem,\n    calculateAssignedLabels,\n    calculateRemovedLabels,\n} from '../../../../../labels/tools';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport UpArrow from '../../../../../../ui/icons/UpArrow';\nimport DownArrow from '../../../../../../ui/icons/DownArrow';\nimport { AssignLabels } from '../../../../../portableLabels/templates/AssignLabels';\nimport { usePortableLabelsState } from '../../../../../portableLabels/store/states';\nimport InputWithButtons from '../InputWithButtons';\nimport { useGetSingleTeamService } from '../../../../store/services';\nimport { useAssignLabelsToTeamsApi, useDeleteLabelsFromTeamsApi } from '../../../../../../api';\nimport { useUpdateLabelsBulkActionService } from '../../../../../../services/GeneralBulkActionServices';\nimport { updateSingleTeamFailure, updateSingleTeamStart, updateSingleTeamSuccess } from '../../../../store/actions';\n\nconst StyledActions = styled.div`\n    display: flex;\n    align-items: center;\n    height: 40px;\n    box-sizing: content-box;\n    margin: 16px 0;\n`;\n\nconst Tools = styled.div`\n    height: 100%;\n    width: 149px;\n`;\n\nconst AssignLabelsButton = styled.button<{\n    open: boolean;\n    selected: boolean;\n    disabled: boolean;\n}>`\n    position: relative;\n    height: 100%;\n    width: 100%;\n    color: ${({ theme, disabled }) =>\n        disabled ? theme.Colors.cloudyBlue : theme.Colors.steelGrey};\n    background: ${props => props.theme.Colors.whiteFive};\n    display: flex;\n    align-items: center;\n    padding-left: 16px;\n    cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n    border-radius: 4px;\n    box-sizing: border-box;\n    box-shadow: inset 0 0 0\n        ${({ open, selected }) => (open || selected ? 1 : 0)}px\n        ${({ theme }) => theme.Colors.cloudyBlue};\n    border: none;\n`;\n\nconst IconHolder = styled.div`\n    width: 8px;\n    height: 100%;\n    display: flex;\n    position: absolute;\n    right: 15px;\n    top: 0;\n    pointer-events: none;\n    align-items: center;\n    justify-content: center;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst StyledActionsTitle = styled.div`\n    font-size: 13px;\n`;\n\nconst Actions: FC<{\n    team?: TeamV2;\n    handleUpdateTeamName: (value: string) => Promise<void>;\n}> = ({ team, handleUpdateTeamName }) => {\n    const dispatch = useDispatch();\n\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n    const clearLabels = useResetLabels();\n    const getPreSelectedLabels = useCalculatePreSelectedLabelsForSingleItem();\n    const assignLabelsLocal = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const getSingleTeam = useGetSingleTeamService();\n    const assignLabelsToTeam = useAssignLabelsToTeamsApi();\n    const deleteLabelsFromTeam = useDeleteLabelsFromTeamsApi();\n\n    /**\n     * @function onSuccessUpdateLabelsCallback\n     * @returns { void }\n     */\n    const onSuccessUpdateLabelsCallback = useCallback(() => {\n        dispatch(updateSingleTeamSuccess());\n\n        if (team?.id) {\n            getSingleTeam(team.id);\n        }\n    }, [dispatch, getSingleTeam, team]);\n    \n\n    /**\n     * @function onFailedUpdateLabelsCallback\n     * @returns { void }\n     */\n    const onFailedUpdateLabelsCallback = useCallback(() => {\n        dispatch(updateSingleTeamFailure());\n    }, [dispatch]);\n    \n\n    /**\n     * @function onStartUpdateLabelsCallback\n     * @returns { void }\n     */\n    const onStartUpdateLabelsCallback = useCallback(() => {\n        dispatch(updateSingleTeamStart());\n    }, [dispatch]);\n\n    const updateLabelsBulkActionService = useUpdateLabelsBulkActionService(\n        assignLabelsToTeam,\n        deleteLabelsFromTeam,\n        onSuccessUpdateLabelsCallback,\n        onFailedUpdateLabelsCallback,\n        onStartUpdateLabelsCallback\n    );\n\n    /**\n     * @function handleApplyLabels\n     * @param { number[]} labelIds\n     * @returns { void }\n     */\n    const handleApplyLabels = (labelIds: number[]) => {\n        const deletedLabelIds = calculateRemovedLabels(labelIds, labels.saved);\n        const assignedLabelIds = calculateAssignedLabels(\n            labelIds,\n            labels.saved\n        );\n\n        updateLabelsBulkActionService(\n            {\n                entityName: 'team',\n                entityId: team?.id ?? 0,\n            },\n            assignedLabelIds,\n            deletedLabelIds\n        );\n    };\n\n    useEffect(() => {\n        return () => {\n            clearLabels();\n        };\n    }, [clearLabels]);\n\n    useEffect(() => {\n        if (team?.labels) {\n            const preSelectedLabels = getPreSelectedLabels(\n                team.labels,\n                labelsList.data\n            );\n\n            assignLabelsLocal(preSelectedLabels);\n            saveLabels();\n        } else {\n            assignLabelsLocal([]);\n        }\n    }, [\n        assignLabelsLocal,\n        getPreSelectedLabels,\n        labelsList.data,\n        saveLabels,\n        team,\n    ]);\n\n    return (\n        <StyledActions>\n            <InputWithButtons\n                height=\"40px\"\n                maxLength={50}\n                placeholder=\"Team Name\"\n                value={team ? team.name : ''}\n                dataTest=\"team-name\"\n                onSave={handleUpdateTeamName}\n            />\n            <Tools>\n                <Popup<HTMLButtonElement>\n                    content={({ hide }) => (\n                        <AssignLabels\n                            onLabelsChange={handleApplyLabels}\n                            onSuccessApply={() => hide()}\n                            withBorder={true}\n                        />\n                    )}\n                >\n                    {(ref, { toggleShown, shown }) => (\n                        <AssignLabelsButton\n                            ref={ref}\n                            onClick={toggleShown}\n                            open={shown}\n                            selected={labels.saved.length > 0}\n                            disabled={labelsList.data?.totalCount < 1}\n                            data-test=\"team-assign-labels\"\n                        >\n                            <StyledActionsTitle>\n                                <IconHolder>\n                                    {shown ? <UpArrow /> : <DownArrow />}\n                                </IconHolder>\n                                Assign Labels\n                            </StyledActionsTitle>\n                        </AssignLabelsButton>\n                    )}\n                </Popup>\n            </Tools>\n        </StyledActions>\n    );\n};\n\nconst ActionsContainer: FC<{\n    team?: TeamV2;\n    handleUpdateTeamName: (value: string) => Promise<void>;\n}> = ({ team, handleUpdateTeamName }) => {\n    return (\n        <WithLabelsContext.Provider\n            value={{\n                reducerName: 'teamEdit',\n                scope: 'assignTeamMembers',\n            }}\n        >\n            <Actions team={team} handleUpdateTeamName={handleUpdateTeamName} />\n        </WithLabelsContext.Provider>\n    );\n};\n\nexport default ActionsContainer;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const AddArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 9 10\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g stroke=\"currentColor\">\n                        <g>\n                            <path\n                                d=\"M0 4L8 4\"\n                                transform=\"translate(-904 -835) translate(904 836)\"\n                            />\n                            <path\n                                d=\"M2 6L6 2 10 6\"\n                                transform=\"translate(-904 -835) translate(904 836) rotate(90 6 4)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default AddArrow;\n","import React, { FC, useCallback, useState, ChangeEvent, } from 'react';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport styled from 'styled-components';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../ui/components/Fieldset';\nimport { PortableLabelsWithStore } from '../../../../../portableLabels';\nimport { useSaveLabels, useSelectLabels } from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { TeamMemberStatusEnum } from '../../../../../../constants/interfaces/TeamMember';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { Variables } from '../../../../../../theme/variables';\nimport { kebabCase } from 'lodash';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    height: 100%;\n\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nconst StatusContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 152px;\n    background-color: inherit;\n`;\n\nconst StatusItem = styled.div`\n    margin-bottom: 8px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nexport const AllUsersFilter: FC<{\n    onLabelsChange: (ids: number[]) => void;\n    onSuccessApply: () => void;\n    registrationStatus?: any;\n    currentLabelIds?: number[];\n    onRegistrationStatusChange?: (status: any) => void;\n}> = ({\n    onLabelsChange,\n    onSuccessApply,\n    onRegistrationStatusChange,\n    currentLabelIds,\n    registrationStatus,\n}) => {\n    const [labelIds, setLabelIds] = useState<number[]>(currentLabelIds ?? []);\n    const saveLabels = useSaveLabels();\n    const selectLabels = useSelectLabels();\n    const labels = useLabelsState();\n\n    const [registrationStatuses, setRegistrationStatuses] = useState<any>(\n        registrationStatus || []\n    );\n\n    const onLabelChangeHandler = useCallback(\n        (ids: number[]) => setLabelIds(ids),\n        [setLabelIds]\n    );\n\n    const onApplyHandler = useCallback(() => {\n        onLabelsChange(labelIds);\n        onRegistrationStatusChange?.(registrationStatuses);\n        saveLabels();\n        onSuccessApply();\n    }, [\n        onLabelsChange,\n        labelIds,\n        onRegistrationStatusChange,\n        registrationStatuses,\n        saveLabels,\n        onSuccessApply,\n    ]);\n\n    const onClearHandler = useCallback(() => {\n        selectLabels([]);\n        setLabelIds([]);\n        setRegistrationStatuses([]);\n    }, [selectLabels, setRegistrationStatuses]);\n\n    const regStatusesMap: Record<any, { title: string }> = {\n        [TeamMemberStatusEnum.PENDING]: { title: 'Pending' },\n        [TeamMemberStatusEnum.ACTIVE]: { title: 'Active' },\n    };\n\n    const onRegistrationStatusChangeHandler = useCallback(\n        (statusIn: TeamMemberStatusEnum, e: ChangeEvent<HTMLInputElement>) => {\n            if (e.target.checked) {\n                setRegistrationStatuses([...registrationStatuses, statusIn]);\n            } else {\n                setRegistrationStatuses(\n                    registrationStatuses.filter(\n                        (item: any) => item !== statusIn\n                    )\n                );\n            }\n        },\n        [setRegistrationStatuses, registrationStatuses]\n    );\n\n    const totalFiltersSelected =\n        labels.selected.filter(id => id > 0).length +\n        registrationStatuses?.length;\n\n    const clearDisabled =\n        !labels.selected.length && !registrationStatuses.length;\n\n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset title={'Registration Status'} dataTest=\"registration-status-section\">\n                    <StatusContainer>\n                        {(\n                            Object.keys(\n                                regStatusesMap\n                            ) as TeamMemberStatusEnum[]\n                        ).map(item => (\n                            <StatusItem data-test=\"registration-status-item-container\">\n                                <Checkbox\n                                    key={item}\n                                    checked={\n                                        registrationStatuses &&\n                                        registrationStatuses.includes(item)\n                                    }\n                                    handleChange={e =>\n                                        onRegistrationStatusChangeHandler(\n                                            item,\n                                            e\n                                        )\n                                    }\n                                    label={regStatusesMap[item].title}\n                                    border={Variables.Colors.steelGrey}\n                                    size={12}\n                                    fontColor={Variables.Colors.black}\n                                    dataTest={`${kebabCase(regStatusesMap[item].title)}-checkbox`}\n                                />\n                            </StatusItem>\n                        ))}\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            onSetSelected={onLabelChangeHandler}\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-selected-filters-text\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={clearDisabled}\n                        variant=\"inverse\"\n                        width={'122px'}\n                        action={onClearHandler}\n                        dataTest=\"clear-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={onApplyHandler}\n                    dataTest=\"apply-filter-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n\n","import React, {\n    FC,\n    useCallback,\n    useEffect,\n    useRef,\n    useState,\n    forwardRef,\n    useImperativeHandle,\n    useMemo,\n} from 'react';\nimport styled from 'styled-components';\nimport { isEmpty } from 'lodash';\n\nimport { useTeamEditState } from '../../../../store/states';\nimport {\n    useSearchTeamsAllUsersService,\n    useDeleteSingleTeamAllUsersLabelService,\n} from '../../../../store/services';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../../../constants/interfaces/filters';\nimport { useParams } from 'react-router';\nimport {\n    UserProfile,\n    UserV2,\n} from '../../../../../../constants/interfaces/User';\nimport { ListResult } from '../../../../../../constants/interfaces/PaginationResult';\nimport { formatDate } from '../../../../../../helpers/functions/date-convert';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport AddArrow from '../../../../../../ui/icons/AddArrow';\nimport { ScrollPagination } from '../../../../../../ui/components/ScrollPagination';\nimport AvatarPlaceholder from '../../../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../pages/UserProfile/store/reducers';\nimport { pluralize } from '../../../../../../helpers/functions/pluralize';\nimport { WithLabelsContext } from '../../../../../portableLabels';\nimport FilterByHandler from '../../../../../../ui/components/Filters/FilterByHandler';\nimport { Popup } from '../../../../../../ui/components/Popup';\nimport { AllUsersFilter } from '../../components/Filters/AllUsersFilters';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport { useHandleSelectLabels } from '../../../../../labels/tools';\nimport { Label } from '../../../../../../constants/interfaces/Label';\nimport { listToTree } from '../../../../../../helpers/functions/list-to-tree';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport User from '../../../../../../ui/icons/User';\nimport {\n    EmptyState,\n    NoFilterResults,\n    NoSearchResults,\n} from '../../../../../../ui/components/EmptyStates';\nimport { EmptyStateContainer } from '../../../../../../ui/components/EmptyStates/components/EmptyStateContainer';\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\nimport { useUpdateUsersState } from '../../../../../users/store/states';\nimport { useSearchDebounced } from '../../../../../../helpers/hooks/useSearch';\nimport { usePortableLabelsState } from '../../../../../portableLabels/store/states';\nimport AssignedLabelList from '../../../../../../ui/components/table-wrapper/table/TableLabelTags/AssignedLabelList';\nimport { TableHeaderCell } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell';\nimport { TableDivider } from '../../../../../../ui/components/table-wrapper/table-divider';\nimport { TableRefresh } from '../../../../../../ui/components/table-wrapper/table-refresh';\nimport { TableHeaderCellProps } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/type';\nimport { TableStateValues } from '../../../../../../ui/components/table-wrapper';\nimport { SelectAll } from '../../../../../../ui/components/table-wrapper/SelectAll';\nimport { TableSearchInput } from '../../../../../../ui/components/table-wrapper/table-tools/table-search-input';\nimport {\n    TableHead,\n    TableToolsRight,\n} from '../../../../../../ui/components/Table';\nimport { TableToolItem } from '../../../../../../ui/components/table-wrapper/table-tools/table-tool-item';\nimport { TableHeaderFilter } from '../../../../../../ui/components/table-wrapper/table-header-filter';\nimport { TableRow } from '../../../../../../ui/components/table-wrapper/table/table-row';\nimport { TableLabelTags } from '../../../../../../ui/components/table-wrapper/table/TableLabelTags';\nimport TableTitleOverflowText from '../../../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\nimport { EmptyCellDash } from '../../../../../../ui/components/table-wrapper/table/EmptyCellDash';\nimport { useOrderBy } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { useTableStateHelper } from '../../../../../../ui/components/table-wrapper/helper';\nimport {\n    useAssignMembersToTeamService,\n    useUpdateTeamMembersBulkActionService,\n} from '../../../../services/TeamBulkActionsService';\nimport { AllUsersContainerProps, AllUsersExternalInterface } from './types';\nimport { UPDATE_TEAM_ACTION } from '../../../../services/TeamBulkActionsService/constants';\nimport { useUserRolesState } from '../../../../../roles/store/states';\nimport { ROLE_NAMES } from '../../../../../../constants/enums';\n\nconst Container = styled.div`\n    padding: 15px 24px;\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 ${props => props.theme.Colors.blackTwo5};\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    flex-direction: column;\n    overflow: auto;\n`;\n\nconst Header = styled.div`\n    margin-bottom: 2px;\n`;\n\nconst Title = styled.div`\n    font-size: 15px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    height: 24px;\n    margin-bottom: 6px;\n`;\n\nconst Counter = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.steelGrey};\n    height: 16px;\n    text-align: right;\n`;\n\nconst TableTools = styled.div`\n    display: flex;\n    justify-content: stretch;\n    align-items: stretch;\n    padding: 8px 0;\n    padding-right: 16px;\n    position: relative;\n`;\n\nconst TableContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    flex: 1;\n    overflow: auto;\n`;\n\nconst Table = styled.table`\n    width: 100%;\n    border-collapse: separate;\n    border-spacing: 0;\n    padding-right: 16px;\n`;\n\nconst TableBody = styled.div<{ showHeight?: boolean }>`\n    display: flex;\n    flex-direction: column;\n    flex: ${props => (props.showHeight ? '1' : '0')};\n    min-height: ${props => (props.showHeight ? '100px' : '0')};\n    overflow: auto;\n`;\n\nconst StyledTablePagination = styled(ScrollPagination)`\n    width: 100%;\n`;\n\nconst ListCell = styled.div<{ flex?: number }>`\n    ${props => props.flex && `flex: ${props.flex};`}\n    display: flex;\n    align-items: center;\n    height: 48px;\n    font-size: 13px;\n`;\n\nconst ListRow = styled.div<{\n    selected?: boolean;\n    disabled?: boolean;\n}>`\n    display: flex;\n    border-radius: 4px;\n    background: ${props =>\n        props.selected ? props.theme.Colors.whiteFive : 'unset'};\n    ${ListCell} {\n        color: ${props =>\n            props.disabled\n                ? props.theme.Colors.cloudyBlue\n                : props.theme.Colors.black};\n    }\n    margin-right: 12px;\n    &:hover {\n        background: var(--ps-grey-3);\n    }\n`;\n\nconst TableCheckboxCell = styled(TableHeaderCell)`\n    padding: 4px 12px 4px 4px;\n`;\n\nconst ListCheckboxCell = styled.div`\n    height: 48px;\n    width: 20px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-right: 8px;\n`;\n\nconst ManageUsersSection = styled.div`\n    margin-top: 16px;\n    display: flex;\n    justify-content: flex-end;\n`;\n\nconst ManageUsersButton = styled.div<{ disabled?: boolean }>`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props =>\n        props.disabled\n            ? props => props.theme.Colors.cloudyBlue\n            : props => props.theme.Colors.skyBlueTwo};\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    display: flex;\n    user-select: none;\n    &:active {\n        opacity: ${props => (props.disabled ? '1' : '0.7')};\n    }\n`;\n\nconst AddArrowIcon = styled.div`\n    color: inherit;\n    height: 9px;\n    width: 9px;\n    margin-left: 8px;\n`;\n\nconst StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    width: 100%;\n`;\n\nconst AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n`;\n\nconst Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 8px;\n`;\n\nconst StyledAssignedLabelList = styled(AssignedLabelList)`\n    padding-left: 28px;\n`;\n\nconst SearchContainer = styled.div`\n    flex: 1;\n`;\n\nconst LabelsContainer = styled.div`\n    height: 40px;\n    width: 40px;\n    margin-left: 8px;\n`;\n\nconst LastTrainingAtCell = styled(ListCell)`\n    text-align: left;\n    width: 111px;\n`;\n\nconst FilteredByLabelsContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n`;\n\nconst ItemCount = styled.p`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 13px;\n    padding: 0;\n    margin: 0;\n`;\n\nconst AllUsers: FC<{\n    users?: ListResult<UserV2>;\n    profile?: UserProfile;\n    searchTerm?: string;\n    searchParams: SearchParams;\n    setSearchTerm: (searchTerm: string) => void;\n    orderByUserName: Partial<TableHeaderCellProps>;\n    orderByLastTrainingAt: Partial<TableHeaderCellProps>;\n    selectedUsers: number[];\n    isSelectAll: boolean;\n    onSelectUser: (id: number) => void;\n    onSelectAllLoadedUsers: (selected: boolean) => void;\n    onSelectAll: (selected: boolean) => void;\n    setOffset: (offset: number) => void;\n    labelIDs: number[];\n    setLabelIDs: (labelIds: number[]) => void;\n    totalCount: number;\n    labelsOpen?: number | null;\n    checkboxDisabled: boolean;\n    handleToggleLabels: (open: number) => void;\n    tableStates: TableStateValues;\n    registrationStatusHandler?: (status: string[]) => void;\n    deleteUserLabel: (userId: number, labelId: number) => void;\n    clearAllUsers: () => void;\n    onSuccessAddUsersBulkActionCallback: () => void;\n    lastRefreshed: Date;\n    refreshData: () => void;\n    roleIDs?: number[];\n    dataTest: string;\n}> = ({\n    users,\n    profile,\n    setSearchTerm,\n    searchParams,\n    orderByUserName,\n    orderByLastTrainingAt,\n    selectedUsers,\n    isSelectAll,\n    onSelectUser,\n    onSelectAllLoadedUsers,\n    onSelectAll,\n    setOffset,\n    labelIDs,\n    setLabelIDs,\n    totalCount,\n    labelsOpen,\n    checkboxDisabled,\n    handleToggleLabels,\n    tableStates,\n    deleteUserLabel,\n    registrationStatusHandler,\n    clearAllUsers,\n    onSuccessAddUsersBulkActionCallback,\n    lastRefreshed,\n    refreshData,\n    roleIDs,\n    dataTest,\n}) => {\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const labelsTree = listToTree(labelsList.data.items);\n    const handleSelectLabels = useHandleSelectLabels();\n    const ifLabelsChanged = useIfChanged(labelIDs);\n\n    const onRemoveLabel = (label: Label) => {\n        setLabelIDs(handleSelectLabels(label, labelIDs, labelsTree));\n    };\n    const [registrationFilters, setRegistrationFilters] = useState<string[]>(\n        []\n    );\n\n    const assignMembersToTeamService = useAssignMembersToTeamService();\n\n    const assignMembersToTeamServiceOptions = {\n        parameters: {\n            teamId: +(searchParams?.teamId ?? 0),\n            searchParams: {\n                ...searchParams,\n                roleIDs,\n                limit: ITEMS_PER_PAGE,\n                offset: (isSelectAll ? totalCount : selectedUsers?.length) ?? 0,\n            },\n            selectedItemIds: !isSelectAll ? selectedUsers : undefined,\n            itemsCount: selectedUsers?.length ?? 0,\n        },\n        fieldName: !isSelectAll ? 'selectedItemIds' : 'searchParams.offset',\n    };\n\n    /**\n     * @function addMembersToTeamSuccessCallback\n     * @returns { void }\n     */\n    const addMembersToTeamSuccessCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            clearAllUsers();\n            refreshData();\n            onSuccessAddUsersBulkActionCallback();\n        });\n    }, [clearAllUsers, onSuccessAddUsersBulkActionCallback, refreshData]);\n\n    const {\n        handleStartBulkActionService: handleStartAddMembersToTeamBulkAction,\n    } = useUpdateTeamMembersBulkActionService(\n        {\n            actionName: UPDATE_TEAM_ACTION,\n            actionFunction: assignMembersToTeamService,\n            actionFunctionOptions: assignMembersToTeamServiceOptions,\n        },\n        'Adding Users',\n        addMembersToTeamSuccessCallback\n    );\n\n    /**\n     * @function handleAddMembersToTeam\n     * @returns { void }\n     */\n    const handleAddMembersToTeam = useCallback(() => {\n        handleStartAddMembersToTeamBulkAction();\n    }, [handleStartAddMembersToTeamBulkAction]);\n\n    useEffect(() => {\n        return () => clearAllUsers();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        if (ifLabelsChanged) {\n            setSelectLabels(labelIDs);\n            saveLabels();\n        }\n    }, [labelIDs, ifLabelsChanged, setSelectLabels, saveLabels]);\n\n    //TODO: Refactor/remove from every page\n    const handleAssignedLabelDelete = (labelId: number, userId: number) => {\n        deleteUserLabel(userId, labelId);\n    };\n\n    const scrollableRef = useRef<HTMLDivElement>(null);\n\n    /**\n     * @function isUserSelected\n     * @param { UserV2 } user\n     * @returns { boolean }\n     */\n    const isUserSelected = (user: UserV2): boolean =>\n        selectedUsers.includes(user.id);\n\n    return (\n        <Container>\n            <Header>\n                <Title data-test={`${dataTest}-title`}>All Users</Title>\n                <Counter />\n            </Header>\n            <Header>\n                <TableRefresh\n                    lastRefreshed={lastRefreshed}\n                    refreshData={refreshData}\n                    dataTest={`${dataTest}-timestamp`}\n                    top={-20}\n                    fontSize={11}\n                />\n            </Header>\n            <TableDivider />\n            <TableTools>\n                {users && (\n                    <SelectAll\n                        style={{\n                            width: '100%',\n                            height: 60,\n                            marginTop: -10,\n                        }}\n                        isSelectAll={isSelectAll}\n                        selectedLength={selectedUsers.length}\n                        totalCount={totalCount}\n                        itemsPerPage={ITEMS_PER_PAGE}\n                        onClearSelecion={() => {\n                            clearAllUsers();\n                        }}\n                        onSelectAll={() => {\n                            onSelectAllLoadedUsers(true);\n                            onSelectAll(true);\n                        }}\n                        dataTest={dataTest}\n                    >\n                        <span></span>\n                    </SelectAll>\n                )}\n                <SearchContainer>\n                    <TableSearchInput\n                        onChange={setSearchTerm}\n                        disabled={tableStates.disableSearch}\n                    />\n                </SearchContainer>\n                <LabelsContainer>\n                    <Popup<HTMLButtonElement>\n                        content={({ hide }) => (\n                            <AllUsersFilter\n                                onLabelsChange={setLabelIDs}\n                                onSuccessApply={() => hide()}\n                                currentLabelIds={labelIDs}\n                                registrationStatus={registrationFilters}\n                                onRegistrationStatusChange={(\n                                    values: string[]\n                                ) => {\n                                    setRegistrationFilters(values);\n                                    registrationStatusHandler?.(values);\n                                }}\n                            />\n                        )}\n                    >\n                        {(ref, { toggleShown, shown }) => (\n                            <FilterByHandler\n                                ref={ref}\n                                open={shown}\n                                disabled={\n                                    tableStates.disableFilters ||\n                                    !labelsList.data.items.length\n                                }\n                                toggleOpen={toggleShown}\n                                filtersCount={\n                                    labelIDs.length + registrationFilters.length\n                                }\n                                dataTest={`${dataTest}-filters`}\n                            />\n                        )}\n                    </Popup>\n                </LabelsContainer>\n                <TableToolsRight>\n                    <TableToolItem>\n                        <ItemCount\n                            data-test={`${dataTest}-counter`}\n                        >{`${totalCount} ${\n                            totalCount === 1 ? 'Item' : 'Items'\n                        }`}</ItemCount>\n                    </TableToolItem>\n                </TableToolsRight>\n            </TableTools>\n            <TableDivider />\n            <TableContainer>\n                {labelIDs && (\n                    <FilteredByLabelsContainer>\n                        <TableHeaderFilter\n                            selectedLabels={labelIDs}\n                            onRemoveLabel={\n                                labels.saved.length > 0\n                                    ? onRemoveLabel\n                                    : undefined\n                            }\n                        />\n                    </FilteredByLabelsContainer>\n                )}\n                <Table>\n                    <TableHead>\n                        <TableRow>\n                            <TableCheckboxCell\n                                dataTest={`${dataTest}-column-checkbox`}\n                            >\n                                <Checkbox\n                                    checked={!!selectedUsers.length}\n                                    size={12}\n                                    partial={!isSelectAll}\n                                    handleChange={e => {\n                                        onSelectAllLoadedUsers(\n                                            e.target.checked\n                                        );\n                                        onSelectAll(false);\n                                    }}\n                                    disabled={checkboxDisabled}\n                                />\n                            </TableCheckboxCell>\n                            <TableHeaderCell\n                                {...orderByUserName}\n                                width={88}\n                                disabled={tableStates.disableSorting}\n                                dataTest={`${dataTest}-column-users`}\n                            >\n                                Users\n                            </TableHeaderCell>\n                            <TableHeaderCell\n                                {...orderByLastTrainingAt}\n                                disabled={tableStates.disableSorting}\n                                dataTest={`${dataTest}-column-last-training`}\n                            >\n                                Last Training\n                            </TableHeaderCell>\n                        </TableRow>\n                    </TableHead>\n                </Table>\n\n                <TableBody\n                    ref={scrollableRef}\n                    showHeight={!tableStates.showEmptyState}\n                >\n                    {!tableStates.showEmptyState && (\n                        <StyledTablePagination\n                            itemsPerPage={ITEMS_PER_PAGE}\n                            itemCount={users ? users.items.length : 0}\n                            totalCount={totalCount}\n                            onOffsetChange={setOffset}\n                            scrollableRef={scrollableRef}\n                        >\n                            {users?.items.map(user => {\n                                return (\n                                    <React.Fragment key={user.id}>\n                                        <ListRow\n                                            selected={isUserSelected(user)}\n                                            data-test={`${dataTest}-item`}\n                                        >\n                                            <ListCheckboxCell>\n                                                <Checkbox\n                                                    checked={isUserSelected(\n                                                        user\n                                                    )}\n                                                    size={12}\n                                                    handleChange={() => {\n                                                        onSelectUser(user.id);\n                                                    }}\n                                                    dataTest={`${dataTest}-item-checkbox`}\n                                                />\n                                            </ListCheckboxCell>\n                                            <ListCell flex={38}>\n                                                <StyledFirstTableContent>\n                                                    <TableLabelTags\n                                                        open={\n                                                            labelsOpen ===\n                                                            user.id\n                                                        }\n                                                        toggleOpen={() =>\n                                                            handleToggleLabels(\n                                                                user.id\n                                                            )\n                                                        }\n                                                        selectedLabels={\n                                                            user.labels\n                                                        }\n                                                        dataTest={`${dataTest}-item-labels`}\n                                                    />\n                                                    <AvatarTile>\n                                                        <Avatar\n                                                            profile={user}\n                                                            size=\"sm\"\n                                                            dataTest={`${dataTest}-item-avatar`}\n                                                        />\n                                                        <TableTitleOverflowText\n                                                            isCurrent={\n                                                                profile &&\n                                                                profile.id ===\n                                                                    user.id\n                                                            }\n                                                            dataTest={`${dataTest}-item-name`}\n                                                            minWidth=\"auto\"\n                                                        >\n                                                            {`${user.firstName} ${user.lastName}`}\n                                                        </TableTitleOverflowText>\n                                                    </AvatarTile>\n                                                </StyledFirstTableContent>\n                                            </ListCell>\n                                            <LastTrainingAtCell\n                                                data-test={`${dataTest}-item-last-training`}\n                                            >\n                                                {user.lastActivity ? (\n                                                    formatDate(\n                                                        user.lastActivity\n                                                    )\n                                                ) : (\n                                                    <EmptyCellDash />\n                                                )}\n                                            </LastTrainingAtCell>\n                                        </ListRow>\n                                        {labelsOpen === user.id && (\n                                            <StyledAssignedLabelList\n                                                selectedLabels={user.labels}\n                                                deletePermissions={[\n                                                    NEW_PERMISSIONS.REMOVE_USER_LABEL,\n                                                ]}\n                                                onDeleteLabel={(labelId: any) =>\n                                                    handleAssignedLabelDelete(\n                                                        labelId,\n                                                        user.id\n                                                    )\n                                                }\n                                            />\n                                        )}\n                                    </React.Fragment>\n                                );\n                            })}\n                        </StyledTablePagination>\n                    )}\n                </TableBody>\n                {tableStates.showEmptyState && (\n                    <EmptyStateContainer>\n                        {tableStates.showNoEntriesState && (\n                            <EmptyState\n                                icon={User}\n                                dataTest={`${dataTest}-no-entries`}\n                            >\n                                No Users Yet\n                            </EmptyState>\n                        )}\n                        {tableStates.showNoSearchResultsState && (\n                            <NoSearchResults\n                                entityName={'Users'}\n                                dataTest={`${dataTest}-no-search-results`}\n                            />\n                        )}\n                        {tableStates.showNoFilterResultsState && (\n                            <NoFilterResults\n                                dataTest={`${dataTest}-no-filter-results`}\n                            />\n                        )}\n                    </EmptyStateContainer>\n                )}\n            </TableContainer>\n            <TableDivider />\n            <ManageUsersSection>\n                <ManageUsersButton\n                    disabled={selectedUsers.length < 1}\n                    onClick={handleAddMembersToTeam}\n                    data-test=\"all-users-add-selected\"\n                >\n                    {selectedUsers.length > 0\n                        ? `Add ${pluralize(\n                              isSelectAll ? totalCount : selectedUsers.length,\n                              'Selected User'\n                          )}`\n                        : 'Add Selected Users'}\n                    <AddArrowIcon>\n                        <AddArrow />\n                    </AddArrowIcon>\n                </ManageUsersButton>\n            </ManageUsersSection>\n        </Container>\n    );\n};\n\nconst ITEMS_PER_PAGE = 20;\nconst NEW_TEAM_ID = 'new';\n\nconst AllUsersContainer = forwardRef(\n    ({ onSuccessAddUsersBulkActionCallback }: AllUsersContainerProps, ref) => {\n        const params: { teamId: string } = useParams();\n        const teamEditState = useTeamEditState();\n        const profile = useSelector(getProfileState);\n        const searchTeamAllUsers = useSearchTeamsAllUsersService();\n        const searchTeamAllUsersDebounced =\n            useSearchDebounced(searchTeamAllUsers);\n        const teamId = params.teamId;\n        const handleTableStates = useTableStateHelper();\n        const deleteUserLabel = useDeleteSingleTeamAllUsersLabelService(teamId);\n        const updatedUsersState = useUpdateUsersState();\n        const roles = useUserRolesState();\n\n        const roleIDs = useMemo(() => {\n            if (!roles.list?.length) return undefined;\n            return [\n                ROLE_NAMES.USER,\n                ROLE_NAMES.TEAM_LEADER,\n                ROLE_NAMES.COMPANY_ADMIN\n            ].map(roleName => roles.list.find(role => role.name === roleName)!.id);\n        }, [roles.list]);\n\n        const initialSearchParams: SearchParams = {\n            searchTerm: '',\n            teamId: teamId !== NEW_TEAM_ID ? teamId : undefined,\n            filters: [],\n            orderBy: { field: 'name', asc: true },\n            limit: ITEMS_PER_PAGE,\n            offset: 0,\n            totalCount: 0,\n            numberOfPages: 0,\n        };\n\n        const {\n            searchParams,\n            setSearchTerm,\n            setOrderBy,\n            setLabelIDs,\n            setOffset,\n            setCustom,\n        } = useSearchParamsState(initialSearchParams);\n\n        useEffect(() => {\n            if (!roleIDs) return;\n            searchTeamAllUsersDebounced({\n                ...searchParams,\n                roleIDs\n            });\n        }, [\n            searchParams,\n            searchTeamAllUsersDebounced,\n            teamId,\n            updatedUsersState.data,\n            roleIDs\n        ]);\n\n        const orderBy = searchParams.orderBy;\n        const orderByUserName = useOrderBy('name', orderBy, setOrderBy);\n        const orderByLastTrainingAt = useOrderBy(\n            'date_login',\n            orderBy,\n            setOrderBy\n        );\n\n        const [selectedUsers, setSelectedUsers] = useState<number[]>([]);\n        const [isSelectAll, setIsSelectAll] = useState(false);\n        const userItems = useMemo(\n            () => (teamEditState.allUsers ? teamEditState.allUsers.items : []),\n            [teamEditState.allUsers]\n        );\n        const totalCount = teamEditState.allUsers?.count ?? 0;\n        const checkboxDisabled = userItems.length < 1;\n        const isPartiallySelected = selectedUsers.length < userItems.length;\n\n        /**\n         * @function handleSelectUser\n         * @param { number } id\n         * @returns { void }\n         */\n        const handleSelectUser = (id: number) => {\n            const newSelectedUsers = selectedUsers.includes(id)\n                ? selectedUsers.filter(userId => userId !== id)\n                : selectedUsers.concat(id);\n            setSelectedUsers(newSelectedUsers);\n            setIsSelectAll(false);\n        };\n        /**\n         * @function handleSelectAllLoadedUsers\n         * @param { boolean } selected\n         * @returns { void }\n         */\n        const handleSelectAllLoadedUsers = (selected: boolean) => {\n            setSelectedUsers(\n                selected || isPartiallySelected\n                    ? userItems.map(item => item.id)\n                    : []\n            );\n        };\n        /**\n         * @function clearAllUsers\n         * @returns { void }\n         */\n        const clearAllUsers = () => {\n            setSelectedUsers([]);\n            setIsSelectAll(false);\n        };\n\n        useEffect(() => {\n            if (\n                !isSelectAll &&\n                selectedUsers.length === totalCount &&\n                totalCount > 0\n            ) {\n                setIsSelectAll(true);\n            }\n        }, [isSelectAll, totalCount, selectedUsers]);\n\n        useEffect(() => {\n            if (\n                isSelectAll &&\n                !isEmpty(selectedUsers) &&\n                selectedUsers.length < userItems.length\n            ) {\n                setSelectedUsers(userItems.map(item => item.id));\n            }\n        }, [isSelectAll, selectedUsers, userItems]);\n\n        const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n            null\n        );\n\n        const registrationStatusHandler = (values: string[]) => {\n            setCustom('filters', [\n                {\n                    field: 'status',\n                    value: values,\n                },\n            ]);\n        };\n\n        const handleToggleLabels = (itemId?: number) => {\n            if (!itemId) return;\n            if (labelsOpen === itemId) {\n                setLabelsOpen(null);\n            } else {\n                setLabelsOpen(itemId);\n            }\n        };\n\n        const [lastRefreshed, setLastRefreshed] = useState(new Date());\n        /**\n         * @description reloads data with the same search params and updates last refreshed date to the current date/time\n         * @function refreshData\n         * @returns { void }\n         */\n        const refreshData = useCallback(() => {\n            searchTeamAllUsersDebounced(\n                {\n                    ...searchParams,\n                    limit: ITEMS_PER_PAGE + searchParams.offset,\n                    offset: 0,\n                    roleIDs\n                },\n                true\n            );\n            setLastRefreshed(new Date());\n        }, [searchTeamAllUsersDebounced, searchParams, roleIDs]);\n        useImperativeHandle<any, AllUsersExternalInterface>(ref, () => ({\n            refreshData,\n        }));\n\n        const registrationsStatusLength: any = searchParams.filters?.length;\n\n        const tableStates = handleTableStates({\n            searchTerm: searchParams.searchTerm,\n            appliedFilters:\n                searchParams.labelIDs?.length + registrationsStatusLength,\n            itemsCount: totalCount,\n        });\n\n        return (\n            <WithLabelsContext.Provider\n                value={{\n                    reducerName: 'teamEdit',\n                    scope: 'allUsers',\n                }}\n            >\n                <AllUsers\n                    users={teamEditState.allUsers}\n                    profile={profile}\n                    searchTerm={searchParams.searchTerm}\n                    setSearchTerm={setSearchTerm}\n                    orderByUserName={orderByUserName}\n                    orderByLastTrainingAt={orderByLastTrainingAt}\n                    selectedUsers={selectedUsers}\n                    isSelectAll={isSelectAll}\n                    onSelectUser={handleSelectUser}\n                    onSelectAllLoadedUsers={handleSelectAllLoadedUsers}\n                    onSelectAll={setIsSelectAll}\n                    setOffset={setOffset}\n                    labelIDs={searchParams.labelIDs || []}\n                    setLabelIDs={setLabelIDs}\n                    totalCount={totalCount}\n                    labelsOpen={labelsOpen}\n                    checkboxDisabled={checkboxDisabled}\n                    handleToggleLabels={handleToggleLabels}\n                    tableStates={tableStates}\n                    deleteUserLabel={deleteUserLabel}\n                    searchParams={searchParams}\n                    registrationStatusHandler={registrationStatusHandler}\n                    clearAllUsers={clearAllUsers}\n                    onSuccessAddUsersBulkActionCallback={\n                        onSuccessAddUsersBulkActionCallback\n                    }\n                    lastRefreshed={lastRefreshed}\n                    refreshData={refreshData}\n                    roleIDs={roleIDs}\n                    dataTest=\"team-all-users\"\n                />\n            </WithLabelsContext.Provider>\n        );\n    }\n);\n\n\nexport default AllUsersContainer;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Crown = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 14 12\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <g>\n                                <path\n                                    d=\"M12.19 9.53V12H1.8V9.53h10.39zm-.897.89H2.695v.69h8.598v-.69zM7 0c.808 0 1.464.65 1.464 1.453 0 .363-.134.694-.355.949L9.58 4.66l1.494-.746c.02-.786.667-1.418 1.463-1.418.809 0 1.464.651 1.464 1.454 0 .74-.558 1.352-1.28 1.442l-.585 3.432H1.865L1.28 5.392C.558 5.302 0 4.691 0 3.95c0-.803.655-1.454 1.464-1.454.808 0 1.463.651 1.463 1.454l-.002-.037 1.463.73 1.464-2.288c-.198-.248-.316-.561-.316-.902C5.536.651 6.192 0 7 0zm-.405 2.85L4.71 5.8l-2.043-1.02c-.13.186-.302.34-.503.448l.472 2.708h8.73l.474-2.707c-.201-.109-.374-.263-.505-.449L9.263 5.813 7.344 2.867c-.11.026-.225.04-.344.04-.14 0-.276-.02-.405-.056zm5.941.536c-.313 0-.567.252-.567.564 0 .311.254.564.567.564.314 0 .568-.253.568-.564 0-.312-.254-.564-.568-.564zm-11.072 0c-.314 0-.568.252-.568.564 0 .311.254.564.568.564.313 0 .567-.253.567-.564 0-.312-.254-.564-.567-.564zM7 .89c-.314 0-.568.252-.568.563 0 .312.254.564.568.564.314 0 .568-.252.568-.564 0-.311-.254-.563-.568-.563z\"\n                                    transform=\"translate(-1214 -532) translate(985.875 526) translate(228.125 6)\"\n                                />\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Crown;\n","export const totalTeamMembersCountText = (\n    listCount: number,\n    unsavedListCount: number\n) => {\n    const totalCount = listCount + unsavedListCount;\n\n    if (totalCount < 1) {\n        return 'No Members';\n    } else if (totalCount === 1) {\n        return '1 Member';\n    } else {\n        return `${totalCount} Members`;\n    }\n};\n\n/**\n * @function handleGenerateTeamLeadersCountText\n * @param { number } leadersCount\n * @returns { string }\n */\nexport const handleGenerateTeamLeadersCountText = (\n    leadersCount: number\n): string => {\n    if (!leadersCount || leadersCount < 1) {\n        return 'No Team Leaders';\n    } else if (leadersCount === 1) {\n        return '1 Team Leader';\n    } else {\n        return `${leadersCount} Team Leaders`;\n    }\n};","import React, {\n    FC,\n    useCallback,\n    useEffect,\n    useRef,\n    useState,\n    forwardRef,\n    useImperativeHandle,\n    useMemo\n} from 'react';\nimport styled from 'styled-components';\nimport { isEmpty } from 'lodash';\nimport { useParams } from 'react-router';\nimport { useTeamEditState } from '../../../../store/states';\nimport {\n    useSearchSingleTeamMembersService,\n    useTogglePromoteTeamLeader,\n    useDeleteSingleTeamMemberLabelService,\n} from '../../../../store/services';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../../../constants/interfaces/PaginationResult';\nimport { UserProfile } from '../../../../../../constants/interfaces/User';\nimport { TeamMember } from '../../../../../../constants/interfaces/TeamMember';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { ScrollPagination } from '../../../../../../ui/components/ScrollPagination';\nimport SwitchToggle from '../../../../../../ui/components/SwitchToggle/SwitchToggle';\nimport Crown from '../../../../../../ui/icons/Crown';\nimport AvatarPlaceholder from '../../../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../pages/UserProfile/store/reducers';\nimport { handleGenerateTeamLeadersCountText } from '../../tools';\nimport { pluralize } from '../../../../../../helpers/functions/pluralize';\nimport { WithLabelsContext } from '../../../../../portableLabels';\nimport FilterByHandler from '../../../../../../ui/components/Filters/FilterByHandler';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { Popup } from '../../../../../../ui/components/Popup';\nimport { AllUsersFilter } from '../../components/Filters/AllUsersFilters';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\n\nimport { listToTree } from '../../../../../../helpers/functions/list-to-tree';\nimport { useHandleSelectLabels } from '../../../../../labels/tools';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport { Label } from '../../../../../../constants/interfaces/Label';\nimport { EmptyStateContainer } from '../../../../../../ui/components/EmptyStates/components/EmptyStateContainer';\nimport {\n    EmptyState,\n    NoFilterResults,\n    NoSearchResults,\n} from '../../../../../../ui/components/EmptyStates';\nimport User from '../../../../../../ui/icons/User';\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\nimport { useUpdateUsersState } from '../../../../../users/store/states';\nimport { useSearchDebounced } from '../../../../../../helpers/hooks/useSearch';\nimport { usePortableLabelsState } from '../../../../../portableLabels/store/states';\nimport { TableHeaderCell } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell';\nimport AssignedLabelList from '../../../../../../ui/components/table-wrapper/table/TableLabelTags/AssignedLabelList';\nimport { TableHeaderCellProps } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/type';\nimport { TableStateValues } from '../../../../../../ui/components/table-wrapper';\nimport { TableDivider } from '../../../../../../ui/components/table-wrapper/table-divider';\nimport { TableLabelTags } from '../../../../../../ui/components/table-wrapper/table/TableLabelTags';\nimport TableTitleOverflowText from '../../../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\nimport {\n    TableHead,\n    TableToolsRight,\n} from '../../../../../../ui/components/Table';\nimport { TableToolItem } from '../../../../../../ui/components/table-wrapper/table-tools/table-tool-item';\nimport { TableHeaderFilter } from '../../../../../../ui/components/table-wrapper/table-header-filter';\nimport { TableRow } from '../../../../../../ui/components/table-wrapper/table/table-row';\nimport { TableSearchInput } from '../../../../../../ui/components/table-wrapper/table-tools/table-search-input';\nimport { SelectAll } from '../../../../../../ui/components/table-wrapper/SelectAll';\nimport { useTableStateHelper } from '../../../../../../ui/components/table-wrapper/helper';\nimport { useOrderBy } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { TableRefresh } from '../../../../../../ui/components/table-wrapper/table-refresh';\nimport {\n    useDeleteMembersFromTeamService,\n    useUpdateTeamMembersBulkActionService,\n} from '../../../../services/TeamBulkActionsService';\nimport {\n    TeamMembersContainerProps,\n    TeamMembersExternalInterface,\n} from './types';\nimport { UPDATE_TEAM_ACTION } from '../../../../services/TeamBulkActionsService/constants';\n\nconst Container = styled.div`\n    padding: 14px 23px;\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 ${props => props.theme.Colors.blackTwo5};\n    border: solid 2px ${props => props.theme.Colors.darkSkyBlue};\n    display: flex;\n    flex-direction: column;\n    overflow: auto;\n`;\n\nconst Header = styled.div`\n    margin-bottom: 2px;\n`;\n\nconst Title = styled.div`\n    font-size: 15px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    height: 24px;\n    margin-bottom: 6px;\n`;\n\nconst Counter = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.steelGrey};\n    height: 16px;\n    text-align: left;\n`;\n\nconst TableTools = styled.div`\n    display: flex;\n    justify-content: stretch;\n    align-items: stretch;\n    padding: 8px 0;\n    padding-right: 16px;\n    position: relative;\n`;\n\nconst TableContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    flex: 1;\n    overflow: auto;\n`;\n\nconst Table = styled.table`\n    width: 100%;\n    border-collapse: separate;\n    border-spacing: 0;\n    padding-right: 16px;\n`;\n\nconst TableBody = styled.div<{ showHeight?: boolean }>`\n    display: flex;\n    flex-direction: column;\n    flex: ${props => (props.showHeight ? '1' : '0')};\n    min-height: ${props => (props.showHeight ? '100px' : '0')};\n    overflow: auto;\n`;\n\nconst StyledTablePagination = styled(ScrollPagination)`\n    width: 100%;\n`;\n\nconst ListCell = styled.div<{ flex?: number }>`\n    ${props => props.flex && `flex: ${props.flex};`}\n    display: flex;\n    align-items: center;\n    height: 48px;\n    font-size: 13px;\n`;\n\nconst TeamLeaderCell = styled(ListCell)`\n    text-align: left;\n    width: 110px;\n`;\n\nconst ListRow = styled.div<{\n    selected?: boolean;\n    disabled?: boolean;\n}>`\n    display: flex;\n    border-radius: 4px;\n    background: ${props =>\n        props.selected ? props.theme.Colors.whiteFive : 'unset'};\n    ${ListCell} {\n        color: ${props =>\n            props.disabled\n                ? props.theme.Colors.cloudyBlue\n                : props.theme.Colors.black};\n    }\n    margin-right: 12px;\n    &:hover {\n        background: var(--ps-grey-3);\n    }\n`;\n\nconst TableCheckboxCell = styled(TableHeaderCell)`\n    padding: 4px 12px 4px 4px;\n`;\n\nconst ListCheckboxCell = styled.div`\n    height: 48px;\n    width: 20px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-right: 8px;\n`;\n\nconst ManageUsersSection = styled.div`\n    margin-top: 16px;\n    display: flex;\n    justify-content: flex-end;\n`;\n\nconst ManageUsersButton = styled.div<{ disabled?: boolean }>`\n    font-size: 13px;\n    font-weight: 600;\n    color: ${props =>\n        props.disabled\n            ? props => props.theme.Colors.cloudyBlue\n            : props => props.theme.Colors.tomato};\n    cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n    user-select: none;\n    &:active {\n        opacity: ${props => (props.disabled ? '1' : '0.7')};\n    }\n`;\n\nconst TeamLeaderIcon = styled.div`\n    width: 14px;\n    height: 12px;\n    display: flex;\n    margin-left: 4px;\n    margin-right: 8px;\n    margin-top: -3px;\n    flex-shrink: 0;\n    color: ${props => props.theme.Colors.macaroniAndCheese};\n`;\n\nconst StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    width: 100%;\n`;\n\nconst AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n    max-width: 90%;\n`;\n\nconst Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 8px;\n`;\n\nconst StyledAssignedLabelList = styled(AssignedLabelList)`\n    padding-left: 28px;\n`;\n\nconst SearchContainer = styled.div`\n    flex: 1;\n`;\n\nconst LabelsContainer = styled.div`\n    height: 40px;\n    width: 40px;\n    margin-left: 8px;\n`;\n\nconst ToggleWrapper = styled.span``;\n\nconst FilteredByLabelsContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n`;\n\nconst ItemCount = styled.p`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 13px;\n    padding: 0;\n    margin: 0;\n`;\n\nconst TeamMembers: FC<{\n    users?: ListResult<TeamMember>;\n    teamId: string;\n    profile?: UserProfile;\n    searchTerm?: string;\n    setSearchTerm: (searchTerm: string) => void;\n    orderByUserName: Partial<TableHeaderCellProps>;\n    orderByTeamLeader: Partial<TableHeaderCellProps>;\n    selectedUsers: number[];\n    isSelectAll: boolean;\n    onSelectUser: (id: number) => void;\n    onSelectAllLoadedUsers: (selected: boolean) => void;\n    onSelectAll: (selected: boolean) => void;\n    handleTeamLeaderChange: (teamUserId: number, isTeamLead: boolean) => void;\n    setOffset: (offset: number) => void;\n    labelIDs: number[];\n    setLabelIDs: (labelIds: number[]) => void;\n    totalCount: number;\n    labelsOpen?: number | null;\n    checkboxDisabled: boolean;\n    handleToggleLabels: (open: number) => void;\n    tableStates: TableStateValues;\n    deleteMemberLabel: (userId: number, labelId: number) => void;\n    registrationStatusHandler: (status: string[]) => void;\n    searchParams: SearchParams;\n    clearAllUsers: () => void;\n    onSuccessRemoveUsersBulkActionCallback: () => void;\n    lastRefreshed: Date;\n    refreshData: () => void;\n    leadersCount?: number;\n    dataTest: string;\n}> = ({\n    users,\n    teamId,\n    profile,\n    setSearchTerm,\n    orderByUserName,\n    orderByTeamLeader,\n    selectedUsers,\n    isSelectAll,\n    onSelectUser,\n    onSelectAllLoadedUsers,\n    onSelectAll,\n    handleTeamLeaderChange,\n    setOffset,\n    labelIDs,\n    setLabelIDs,\n    totalCount,\n    labelsOpen,\n    checkboxDisabled,\n    handleToggleLabels,\n    tableStates,\n    deleteMemberLabel,\n    registrationStatusHandler,\n    searchParams,\n    clearAllUsers,\n    onSuccessRemoveUsersBulkActionCallback,\n    lastRefreshed,\n    refreshData,\n    leadersCount,\n    dataTest,\n}) => {\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const labelsTree = listToTree(labelsList.data.items);\n    const handleSelectLabels = useHandleSelectLabels();\n    const ifLabelsChanged = useIfChanged(labelIDs);\n\n    const onRemoveLabel = (label: Label) => {\n        setLabelIDs(handleSelectLabels(label, labelIDs, labelsTree));\n    };\n\n    useEffect(() => {\n        if (ifLabelsChanged) {\n            setSelectLabels(labelIDs);\n            saveLabels();\n        }\n    }, [labelIDs, ifLabelsChanged, setSelectLabels, saveLabels]);\n\n    useEffect(() => {\n        return () => clearAllUsers();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    //TODO: Refactor/remove from every page\n    const handleAssignedLabelDelete = (labelId: number, userId: number) => {\n        deleteMemberLabel(userId, labelId);\n    };\n\n    const scrollableRef = useRef<HTMLDivElement>(null);\n    const filterByRegistrationLength: any =\n        searchParams?.filterByRegistrationStatus?.length;\n\n    const deleteMembersFromTeamServiceOptions = {\n        parameters: {\n            teamId: +teamId,\n            searchParams: {\n                ...searchParams,\n                limit: ITEMS_PER_PAGE,\n                offset: isSelectAll ? totalCount : selectedUsers.length,\n            },\n            selectedItemIds: !isSelectAll ? selectedUsers : undefined,\n            itemsCount: selectedUsers?.length ?? 0,\n        },\n        fieldName: !isSelectAll ? 'selectedItemIds' : 'searchParams.offset',\n    };\n\n    const deleteMembersFromTeam = useDeleteMembersFromTeamService();\n\n    /**\n     * @function deleteMembersFromTeamSuccessCallback\n     * @returns { void }\n     */\n    const deleteMembersFromTeamSuccessCallback = useCallback(() => {\n        Promise.resolve().then(() => {\n            clearAllUsers();\n            refreshData();\n            onSuccessRemoveUsersBulkActionCallback();\n        });\n    }, [clearAllUsers, refreshData, onSuccessRemoveUsersBulkActionCallback]);\n\n    const {\n        handleStartBulkActionService:\n            handleStartDeleteMembersFromTeamBulkAction,\n    } = useUpdateTeamMembersBulkActionService(\n        {\n            actionName: UPDATE_TEAM_ACTION,\n            actionFunction: deleteMembersFromTeam,\n            actionFunctionOptions: deleteMembersFromTeamServiceOptions,\n        },\n        'Removing Users',\n        deleteMembersFromTeamSuccessCallback\n    );\n\n    /**\n     * @function handleRemoveSelectedUsers\n     * @returns { void }\n     */\n    const handleRemoveSelectedUsers = useCallback(() => {\n        handleStartDeleteMembersFromTeamBulkAction();\n    }, [handleStartDeleteMembersFromTeamBulkAction]);\n\n    return (\n        <Container>\n            <Header>\n                <Title data-test={`${dataTest}-title`}>Team Members</Title>\n                <Counter data-test={`${dataTest}-leaders-counter`}>\n                    {handleGenerateTeamLeadersCountText(leadersCount ?? 0)}\n                </Counter>\n            </Header>\n            <Header>\n                <TableRefresh\n                    lastRefreshed={lastRefreshed}\n                    refreshData={refreshData}\n                    dataTest={`${dataTest}-timestamp`}\n                    top={-20}\n                    fontSize={11}\n                />\n            </Header>\n\n            <TableDivider />\n\n            <TableTools>\n                <SelectAll\n                    style={{\n                        width: '100%',\n                        height: 60,\n                        marginTop: -10,\n                    }}\n                    isSelectAll={isSelectAll}\n                    selectedLength={selectedUsers.length}\n                    totalCount={totalCount}\n                    itemsPerPage={ITEMS_PER_PAGE}\n                    onClearSelecion={() => {\n                        clearAllUsers();\n                    }}\n                    onSelectAll={() => {\n                        onSelectAllLoadedUsers(true);\n                        onSelectAll(true);\n                    }}\n                    dataTest={dataTest}\n                >\n                    <span></span>\n                </SelectAll>\n                <SearchContainer>\n                    <TableSearchInput\n                        onChange={setSearchTerm}\n                        disabled={tableStates.disableSearch}\n                    />\n                </SearchContainer>\n                <LabelsContainer>\n                    <Popup<HTMLButtonElement>\n                        content={({ hide }) => (\n                            <AllUsersFilter\n                                onLabelsChange={setLabelIDs}\n                                onSuccessApply={() => hide()}\n                                currentLabelIds={labelIDs}\n                                registrationStatus={\n                                    searchParams.filterByRegistrationStatus ||\n                                    []\n                                }\n                                onRegistrationStatusChange={\n                                    registrationStatusHandler\n                                }\n                            />\n                        )}\n                    >\n                        {(ref, { toggleShown, shown }) => (\n                            <FilterByHandler\n                                ref={ref}\n                                open={shown}\n                                disabled={\n                                    tableStates.disableFilters ||\n                                    !labelsList.data.items.length\n                                }\n                                toggleOpen={toggleShown}\n                                filtersCount={\n                                    labelIDs.length + filterByRegistrationLength\n                                }\n                                dataTest={`${dataTest}-filters`}\n                            />\n                        )}\n                    </Popup>\n                </LabelsContainer>\n                <TableToolsRight>\n                    <TableToolItem>\n                        <ItemCount data-test={`${dataTest}-counter`}>\n                            {' '}\n                            {totalCount}{' '}\n                            {totalCount === 1 ? 'Item' : 'Items'}{' '}\n                        </ItemCount>\n                    </TableToolItem>\n                </TableToolsRight>\n            </TableTools>\n            <TableDivider />\n            <TableContainer>\n                {labelIDs && (\n                    <FilteredByLabelsContainer>\n                        <TableHeaderFilter\n                            selectedLabels={labelIDs}\n                            onRemoveLabel={\n                                labels.saved.length > 0\n                                    ? onRemoveLabel\n                                    : undefined\n                            }\n                        />\n                    </FilteredByLabelsContainer>\n                )}\n                <Table>\n                    <TableHead>\n                        <TableRow>\n                            <TableCheckboxCell\n                                dataTest={`${dataTest}-column-checkbox`}\n                            >\n                                <Checkbox\n                                    checked={!!selectedUsers.length}\n                                    size={12}\n                                    partial={!isSelectAll}\n                                    handleChange={e => {\n                                        onSelectAllLoadedUsers(e.target.checked);\n                                        onSelectAll(false);\n                                    }}\n                                    disabled={checkboxDisabled}\n                                />\n                            </TableCheckboxCell>\n                            <TableHeaderCell\n                                {...orderByUserName}\n                                width={97}\n                                disabled={tableStates.disableSorting}\n                                dataTest={`${dataTest}-column-users`}\n                            >\n                                Users\n                            </TableHeaderCell>\n                            <TableHeaderCell\n                                {...orderByTeamLeader}\n                                disabled={tableStates.disableSorting}\n                                dataTest={`${dataTest}-column-team-leader`}\n                            >\n                                Team Leader\n                            </TableHeaderCell>\n                        </TableRow>\n                    </TableHead>\n                </Table>\n\n                <TableBody\n                    ref={scrollableRef}\n                    showHeight={!tableStates.showEmptyState}\n                >\n                    {!tableStates.showEmptyState && (\n                        <StyledTablePagination\n                            itemsPerPage={ITEMS_PER_PAGE}\n                            itemCount={users ? users.items.length : 0}\n                            totalCount={totalCount}\n                            onOffsetChange={setOffset}\n                            scrollableRef={scrollableRef}\n                        >\n                            {users &&\n                                users.items.map(member => {\n                                    return (\n                                        <React.Fragment key={member.user.id}>\n                                            <ListRow\n                                                data-test={`${dataTest}-item`}\n                                            >\n                                                <ListCheckboxCell>\n                                                    <Checkbox\n                                                        checked={selectedUsers.includes(member.user.id)}\n                                                        size={12}\n                                                        handleChange={() => {\n                                                            onSelectUser(member.user.id);\n                                                        }}\n                                                        dataTest={`${dataTest}-item-checkbox`}\n                                                    />\n                                                </ListCheckboxCell>\n                                                <ListCell flex={50}>\n                                                    <StyledFirstTableContent>\n                                                        <TableLabelTags\n                                                            open={\n                                                                labelsOpen ===\n                                                                member.user.id\n                                                            }\n                                                            toggleOpen={() =>\n                                                                handleToggleLabels(\n                                                                    member.user\n                                                                        .id\n                                                                )\n                                                            }\n                                                            selectedLabels={\n                                                                member.labels\n                                                            }\n                                                            dataTest={`${dataTest}-item-labels`}\n                                                        />\n                                                        <AvatarTile>\n                                                            <Avatar\n                                                                customProfile={{\n                                                                    firstName:\n                                                                        member\n                                                                            .user\n                                                                            .firstName,\n                                                                    lastName:\n                                                                        member\n                                                                            .user\n                                                                            .lastName,\n                                                                    picture:\n                                                                        member\n                                                                            .user\n                                                                            .imageUrl,\n                                                                    status: member.userStatus,\n                                                                }}\n                                                                size=\"sm\"\n                                                                dataTest={`${dataTest}-item-avatar`}\n                                                            />\n                                                            <TableTitleOverflowText\n                                                                isCurrent={\n                                                                    profile &&\n                                                                    profile.id ===\n                                                                        member\n                                                                            .user\n                                                                            .id\n                                                                }\n                                                                renderIcon={\n                                                                    member.isTeamLead && (\n                                                                        <TeamLeaderIcon data-test={`${dataTest}-item-crown`}>\n                                                                            <Crown />\n                                                                        </TeamLeaderIcon>\n                                                                    )\n                                                                }\n                                                                dataTest={`${dataTest}-item-name`}\n                                                                minWidth=\"auto\"\n                                                            >\n                                                                {`${member.user.firstName} ${member.user.lastName}`}\n                                                            </TableTitleOverflowText>\n                                                        </AvatarTile>\n                                                    </StyledFirstTableContent>\n                                                </ListCell>\n                                                <TeamLeaderCell>\n                                                    <ToggleWrapper>\n                                                        <SwitchToggle\n                                                            index={\n                                                                member.user.id\n                                                            }\n                                                            checked={\n                                                                member.isTeamLead\n                                                            }\n                                                            onChange={e => {\n                                                                handleTeamLeaderChange(\n                                                                    member.id,\n                                                                    e.target\n                                                                        .checked\n                                                                );\n                                                            }}\n                                                            height={24}\n                                                            width={42}\n                                                            bulletRadius={16}\n                                                            dataTest={`${dataTest}-item-team-lead-toggle`}\n                                                        />\n                                                    </ToggleWrapper>\n                                                </TeamLeaderCell>\n                                            </ListRow>\n                                            {labelsOpen === member.user.id && (\n                                                <StyledAssignedLabelList\n                                                    selectedLabels={\n                                                        member.labels || []\n                                                    }\n                                                    deletePermissions={[\n                                                        NEW_PERMISSIONS.REMOVE_USER_LABEL,\n                                                    ]}\n                                                    onDeleteLabel={(\n                                                        labelId: any\n                                                    ) =>\n                                                        handleAssignedLabelDelete(\n                                                            labelId,\n                                                            member.user.id\n                                                        )\n                                                    }\n                                                />\n                                            )}{' '}\n                                        </React.Fragment>\n                                    );\n                                })}\n                        </StyledTablePagination>\n                    )}\n                </TableBody>\n\n                {tableStates.showEmptyState && (\n                    <EmptyStateContainer>\n                        {tableStates.showNoEntriesState && (\n                            <EmptyState\n                                icon={User}\n                                width={'224px'}\n                                dataTest={`${dataTest}-no-entries`}\n                            >\n                                Add Members\n                            </EmptyState>\n                        )}\n                        {tableStates.showNoSearchResultsState && (\n                            <NoSearchResults\n                                entityName={'Members'}\n                                dataTest={`${dataTest}-no-search-results`}\n                            />\n                        )}\n                        {tableStates.showNoFilterResultsState && (\n                            <NoFilterResults\n                                dataTest={`${dataTest}-no-filter-results`}\n                            />\n                        )}\n                    </EmptyStateContainer>\n                )}\n            </TableContainer>\n            <TableDivider />\n            <ManageUsersSection>\n                <ManageUsersButton\n                    disabled={selectedUsers.length < 1}\n                    onClick={() => {\n                        if (selectedUsers.length > 0) {\n                            handleRemoveSelectedUsers();\n                        }\n                    }}\n                    data-test={`${dataTest}-remove-selected`}\n                >\n                    {selectedUsers.length > 0\n                        ? `Remove ${pluralize(\n                              isSelectAll\n                                  ? totalCount\n                                  : selectedUsers.length,\n                              'Selected User'\n                          )}`\n                        : 'Remove Selected Users'}\n                </ManageUsersButton>\n            </ManageUsersSection>\n        </Container>\n    );\n};\n\nconst ITEMS_PER_PAGE = 20;\n\nconst TeamMembersContainer = forwardRef(\n    (\n        { onSuccessRemoveUsersBulkActionCallback }: TeamMembersContainerProps,\n        ref\n    ) => {\n        const params: { teamId: string } = useParams();\n        const teamEditState = useTeamEditState();\n        const profile = useSelector(getProfileState);\n        const teamId = params.teamId;\n        const searchTeamMembers = useSearchSingleTeamMembersService(teamId);\n        const searchTeamMembersDebounced =\n            useSearchDebounced(searchTeamMembers);\n        const handleTableStates = useTableStateHelper();\n        const updatedUsersState = useUpdateUsersState();\n        const deleteMemberLabel = useDeleteSingleTeamMemberLabelService(teamId);\n\n        const initialSearchParams: SearchParams = {\n            searchTerm: '',\n            filters: [],\n            labelIDs: [],\n            orderBy: null,\n            limit: ITEMS_PER_PAGE,\n            offset: 0,\n            totalCount: 0,\n            numberOfPages: 0,\n        };\n\n        const {\n            searchParams,\n            setSearchTerm,\n            setOrderBy,\n            setLabelIDs,\n            setOffset,\n            setCustom,\n        } = useSearchParamsState(initialSearchParams);\n\n        useEffect(() => {\n            searchTeamMembersDebounced(searchParams);\n        }, [\n            searchParams,\n            searchTeamMembersDebounced,\n            teamId,\n            updatedUsersState.data,\n        ]);\n\n        const orderBy = searchParams.orderBy;\n        const orderByUserName = useOrderBy('name', orderBy, setOrderBy);\n        const orderByTeamLeader = useOrderBy(\n            'is_team_lead',\n            orderBy,\n            setOrderBy\n        );\n\n        const [selectedUsers, setSelectedUsers] = useState<number[]>([]);\n        const [isSelectAll, setIsSelectAll] = useState(false);\n        const userItems = useMemo(\n            () => teamEditState.teamMembers ? teamEditState.teamMembers.items : [],\n            [teamEditState.teamMembers]\n        );\n        const totalCount = teamEditState.teamMembers?.count ?? 0;\n        const checkboxDisabled = userItems.length < 1;\n        const isPartiallySelected = selectedUsers.length < userItems.length;\n\n        /**\n         * @function handleSelectUser\n         * @param { number } id\n         * @returns { void }\n         */\n        const handleSelectUser = (id: number) => {\n            const newSelectedUsers = selectedUsers.includes(id)\n                ? selectedUsers.filter(userId => userId !== id)\n                : selectedUsers.concat(id);\n            setSelectedUsers(newSelectedUsers);\n            setIsSelectAll(false);\n        };\n        /**\n         * @function handleSelectAllLoadedUsers\n         * @param { boolean } selected\n         * @returns { void }\n         */\n         const handleSelectAllLoadedUsers = (selected: boolean) => {\n            setSelectedUsers(\n                selected || isPartiallySelected ? userItems.map(item => item.user.id) : []\n            );\n        };\n        /**\n         * @function clearAllUsers\n         * @returns { void }\n         */\n         const clearAllUsers = () => {\n            setSelectedUsers([]);\n            setIsSelectAll(false);\n        };\n\n        useEffect(() => {\n            if (!isSelectAll && selectedUsers.length === totalCount && totalCount > 0) {\n                setIsSelectAll(true);\n            }\n        }, [isSelectAll, totalCount, selectedUsers]);\n    \n        useEffect(() => {\n            if (\n                isSelectAll &&\n                !isEmpty(selectedUsers) &&\n                selectedUsers.length < userItems.length\n            ) {\n                setSelectedUsers(userItems.map(item => item.user.id));\n            }\n        }, [isSelectAll, selectedUsers, userItems]);\n\n        const handleTeamLeaderChange = useTogglePromoteTeamLeader();\n\n        const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n            null\n        );\n\n        const handleToggleLabels = (itemId?: number) => {\n            if (!itemId) return;\n            if (labelsOpen === itemId) {\n                setLabelsOpen(null);\n            } else {\n                setLabelsOpen(itemId);\n            }\n        };\n\n        const registrationStatusHandler = (values: string[]) => {\n            setCustom('filterByRegistrationStatus', values);\n        };\n\n        const [lastRefreshed, setLastRefreshed] = useState(new Date());\n        /**\n         * @description reloads data with the same search params and updates last refreshed date to the current date/time\n         * @function refreshData\n         * @returns { void }\n         */\n        const refreshData = useCallback(() => {\n            searchTeamMembers(\n                {\n                    ...searchParams,\n                    limit: ITEMS_PER_PAGE + searchParams.offset, // we should increase the limit to fetch all loaded data again\n                    offset: 0,\n                },\n                true\n            );\n            setLastRefreshed(new Date());\n        }, [searchParams, searchTeamMembers]);\n        useImperativeHandle<any, TeamMembersExternalInterface>(ref, () => ({\n            refreshData,\n        }));\n\n        const registrationsStatusLength: any =\n            searchParams.filterByRegistrationStatus?.length;\n\n        const tableStates = handleTableStates({\n            searchTerm: searchParams.searchTerm,\n            appliedFilters:\n                searchParams.labelIDs?.length + registrationsStatusLength,\n            itemsCount: totalCount,\n        });\n\n        return (\n            <WithLabelsContext.Provider\n                value={{\n                    reducerName: 'teamEdit',\n                    scope: 'teamMembers',\n                }}\n            >\n                <TeamMembers\n                    users={teamEditState.teamMembers}\n                    profile={profile}\n                    teamId={teamId}\n                    searchTerm={searchParams.searchTerm}\n                    setSearchTerm={setSearchTerm}\n                    orderByUserName={orderByUserName}\n                    orderByTeamLeader={orderByTeamLeader}\n                    selectedUsers={selectedUsers}\n                    isSelectAll={isSelectAll}\n                    onSelectUser={handleSelectUser}\n                    onSelectAllLoadedUsers={handleSelectAllLoadedUsers}\n                    onSelectAll={setIsSelectAll}\n                    handleTeamLeaderChange={handleTeamLeaderChange}\n                    setOffset={setOffset}\n                    labelIDs={searchParams.labelIDs || []}\n                    setLabelIDs={setLabelIDs}\n                    totalCount={totalCount}\n                    labelsOpen={labelsOpen}\n                    checkboxDisabled={checkboxDisabled}\n                    handleToggleLabels={handleToggleLabels}\n                    tableStates={tableStates}\n                    deleteMemberLabel={deleteMemberLabel}\n                    registrationStatusHandler={registrationStatusHandler}\n                    searchParams={searchParams}\n                    clearAllUsers={clearAllUsers}\n                    onSuccessRemoveUsersBulkActionCallback={\n                        onSuccessRemoveUsersBulkActionCallback\n                    }\n                    lastRefreshed={lastRefreshed}\n                    refreshData={refreshData}\n                    leadersCount={teamEditState.data?.leaders?.length}\n                    dataTest=\"team-members\"\n                />\n            </WithLabelsContext.Provider>\n        );\n    }\n);\n\nexport default TeamMembersContainer;\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\nimport AvatarPlaceholder from '../../../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\n\nexport const Container = styled.div`\n    padding: 24px;\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 ${props => props.theme.Colors.blackTwo5};\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    flex-direction: column;\n    overflow: auto;\n`;\n\nexport const Header = styled.div`\n    margin-bottom: 6px;\n`;\n\nexport const Title = styled.div`\n    font-size: 15px;\n    font-weight: 600;\n    color: ${props => props.theme.Colors.black};\n    height: 24px;\n`;\n\nexport const TeamLeaderIcon = styled.div`\n    width: 14px;\n    height: 12px;\n    display: flex;\n    margin-left: 4px;\n    margin-right: 8px;\n    margin-top: -3px;\n    flex-shrink: 0;\n    color: ${props => props.theme.Colors.macaroniAndCheese};\n`;\n\nexport const StyledFirstTableContent = styled.div`\n    display: flex;\n    align-items: center;\n    padding: 0;\n    height: 100%;\n    width: 100%;\n`;\n\nexport const AvatarTile = styled.div`\n    display: flex;\n    align-items: center;\n    flex: 1;\n`;\n\nexport const Avatar = styled(AvatarPlaceholder)`\n    width: 24px;\n    height: 24px;\n    margin-right: 8px;\n`;\n\nexport const ToggleWrapper = styled.span``;\n\nexport const TeamLeaders = styled.p`\n    color: ${props => props.theme.Colors.steelGrey};\n    font-size: 11px;\n    padding: 0;\n    margin: 0;\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    scrollWrapperStyle: {\n        height: '100% !important',\n        position: 'relative',\n        display: 'flex',\n        flexDirection: 'column',\n        flex: 1,\n    },\n\n    tableWrapperStyle: {\n        height: '70vh',\n    },\n\n    tableBodyContainerStyle: {\n        maxHeight: 'calc(100vh - 358px)',\n    },\n\n    customCellStyle: {\n        padding: '0px !important',\n        width: '97%',\n    },\n\n    tableToolsWrapperStyle: {\n        display: 'flex',\n        flex: 1,\n        justifyContent: 'space-between',\n        flexDirection: 'row',\n    },\n\n    tableToolsRootStyle: {\n        padding: '8px 0px !important',\n    },\n\n    tableToolsLeftClassName: {\n        flex: '1 1 0%',\n    },\n\n    searchInputStyle: {\n        flex: '1 1 0%',\n    },\n}));\n","import { FC, useEffect, useRef, useState } from 'react';\n\nimport { useParams } from 'react-router';\nimport { useTeamEditState } from '../../../../store/states';\nimport {\n    useSearchSingleTeamMembersService,\n    useTogglePromoteTeamLeader,\n    useDeleteSingleTeamMemberLabelService\n} from '../../../../store/services';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../../../../constants/interfaces/filters';\nimport { ListResult } from '../../../../../../constants/interfaces/PaginationResult';\nimport { UserProfile } from '../../../../../../constants/interfaces/User';\nimport { TeamMember } from '../../../../../../constants/interfaces/TeamMember';\nimport SwitchToggle from '../../../../../../ui/components/SwitchToggle/SwitchToggle';\nimport Crown from '../../../../../../ui/icons/Crown';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../../../../pages/UserProfile/store/reducers';\nimport { handleGenerateTeamLeadersCountText } from '../../tools';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport {\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { WithLabelsContext } from '../../../../../portableLabels';\nimport { Popup } from '../../../../../../ui/components/Popup';\nimport { AllUsersFilter } from '../../components/Filters/AllUsersFilters';\nimport FilterByHandler from '../../../../../../ui/components/Filters/FilterByHandler';\nimport {\n    isCompanyAdminRole,\n    isPractisAdminRole,\n} from '../../../../../../constants/enums';\nimport { listToTree } from '../../../../../../helpers/functions/list-to-tree';\nimport { useHandleSelectLabels } from '../../../../../labels/tools';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport { Label } from '../../../../../../constants/interfaces/Label';\nimport { Tooltip } from '../../../../../../ui/components/Tooltip';\nimport User from '../../../../../../ui/icons/User';\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\nimport { useUpdateUsersState } from '../../../../../users/store/states';\nimport { useSearchDebounced } from '../../../../../../helpers/hooks/useSearch';\nimport { usePortableLabelsState } from '../../../../../portableLabels/store/states';\nimport {\n    TableStateValues,\n    TableWrapper,\n} from '../../../../../../ui/components/table-wrapper';\nimport {\n    Avatar,\n    AvatarTile,\n    Container,\n    Header,\n    StyledFirstTableContent,\n    TeamLeaderIcon,\n    TeamLeaders,\n    Title,\n    ToggleWrapper,\n    useStyles,\n} from './styles';\nimport { TableHeaderCellProps } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/type';\nimport { TableDivider } from '../../../../../../ui/components/table-wrapper/table-divider';\nimport { TableLabelTags } from '../../../../../../ui/components/table-wrapper/table/TableLabelTags';\nimport TableTitleOverflowText from '../../../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\nimport { useTableStateHelper } from '../../../../../../ui/components/table-wrapper/helper';\nimport { useOrderBy } from '../../../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\nimport { TableViewMode } from '../../../../../../ui/components/table-wrapper/table/type';\n\nconst DefaultTeamMembers: FC<{\n    users?: ListResult<TeamMember>;\n    profile?: UserProfile;\n    searchTerm?: string;\n    searchParams: SearchParams;\n    setSearchTerm: (searchTerm: string) => void;\n    orderByUserName: Partial<TableHeaderCellProps>;\n    orderByTeamLeader: Partial<TableHeaderCellProps>;\n    handleTeamLeaderChange: (\n        teamUserId: number,\n        isTeamLead: boolean,\n    ) => void;\n    setOffset: (offset: number) => void;\n    labelIDs: number[];\n    setLabelIDs: (labelIds: number[]) => void;\n    totalCount?: number;\n    leadersCount?: number;\n    labelsOpen?: number | null;\n    handleToggleLabels: (open: number) => void;\n    tableStates: TableStateValues;\n    registrationStatusHandler?: (status: string[]) => void;\n    deleteMemberLabel: (userId: number, labelId: number) => void;\n}> = ({\n    users,\n    profile,\n    searchParams,\n    setSearchTerm,\n    orderByUserName,\n    orderByTeamLeader,\n    handleTeamLeaderChange,\n    setOffset,\n    labelIDs,\n    setLabelIDs,\n    totalCount,\n    leadersCount,\n    labelsOpen,\n    handleToggleLabels,\n    tableStates,\n    deleteMemberLabel,\n    registrationStatusHandler,\n}) => {\n    const classes = useStyles();\n    const labels = useLabelsState();\n    const labelsList = usePortableLabelsState();\n    const setSelectLabels = useSelectLabels();\n    const saveLabels = useSaveLabels();\n    const labelsTree = listToTree(labelsList.data.items);\n    const handleSelectLabels = useHandleSelectLabels();\n    const ifLabelsChanged = useIfChanged(labelIDs);\n\n    const onRemoveLabel = (label: Label) => {\n        setLabelIDs(handleSelectLabels(label, labelIDs, labelsTree));\n    };\n\n    useEffect(() => {\n        if (ifLabelsChanged) {\n            setSelectLabels(labelIDs);\n            saveLabels();\n        }\n    }, [labelIDs, ifLabelsChanged, setSelectLabels, saveLabels]);\n\n    //TODO: Refactor/remove from every page\n    const handleAssignedLabelDelete = (labelId: number, userId: number) => {\n        deleteMemberLabel(userId, labelId);\n    };\n\n    const revokeLeaderDisabled = !(\n        isPractisAdminRole(profile?.role?.name) ||\n        isCompanyAdminRole(profile?.role?.name)\n    );\n\n    const scrollableRef = useRef<HTMLDivElement>(null);\n    const filterByRegistrationLength: any =\n        searchParams?.filterByRegistrationStatus?.length;\n\n    /**\n     * @function checkIsLabelTagsOpen\n     * @param { TeamMember } member\n     * @returns { boolean }\n     */\n    const checkIsLabelTagsOpen = (member: TeamMember): boolean => {\n        return labelsOpen === member.user.id;\n    };\n\n    return (\n        <Container>\n            <Header>\n                <Title data-test=\"all-members-title\">All Members</Title>\n                <TeamLeaders data-test=\"team-leaders-count\">\n                    {handleGenerateTeamLeadersCountText(leadersCount ?? 0)}\n                </TeamLeaders>\n            </Header>\n            <TableDivider />\n            <TableWrapper\n                tableStates={tableStates}\n                data={users?.items}\n                viewMode={TableViewMode.INFINITE_SCROLL}\n                headerFilterPosition=\"BOTTOM\"\n                tableWrapperClassName={classes.tableWrapperStyle}\n                tableContainerClassName={classes.tableBodyContainerStyle}\n                scrollRef={scrollableRef}\n                scrollPaginationProps={{\n                    itemsPerPage: ITEMS_PER_PAGE,\n                    itemCount: users ? users.items.length : 0,\n                    totalCount: totalCount,\n                    onOffsetChange: setOffset,\n                    scrollableRef: scrollableRef,\n                    hideLoading: false,\n                    height: 300,\n                    className: classes.scrollWrapperStyle,\n                }}\n                selectedLabels={labelIDs}\n                onRemoveLabel={\n                    labels.saved.length > 0 ? onRemoveLabel : undefined\n                }\n                tableToolsOptions={{\n                    searchInputOptions: {\n                        initialValue: searchParams.searchTerm,\n                        onSearchChange: setSearchTerm,\n                        isSearchInputDisabled: tableStates.disableSearch,\n                        className: classes.searchInputStyle,\n                        dataTest: 'all-members-search',\n                    },\n                    filterOptions: {\n                        filterComponent: (\n                            <Popup<HTMLButtonElement>\n                                content={({ hide }) => (\n                                    <AllUsersFilter\n                                        onLabelsChange={setLabelIDs}\n                                        onSuccessApply={() => hide()}\n                                        currentLabelIds={labelIDs}\n                                        registrationStatus={\n                                            searchParams.filterByRegistrationStatus ||\n                                            []\n                                        }\n                                        onRegistrationStatusChange={\n                                            registrationStatusHandler\n                                        }\n                                    />\n                                )}\n                            >\n                                {(ref, { toggleShown, shown }) => (\n                                    <FilterByHandler\n                                        ref={ref}\n                                        open={shown}\n                                        disabled={tableStates.disableFilters}\n                                        toggleOpen={toggleShown}\n                                        filtersCount={\n                                            labelIDs.length +\n                                            filterByRegistrationLength\n                                        }\n                                        dataTest=\"all-members-filters\"\n                                    />\n                                )}\n                            </Popup>\n                        ),\n                    },\n                    itemCount: users?.count\n                        ? `${users?.count} ${\n                              users?.count === 1 ? 'item' : 'items'\n                          }`\n                        : '',\n                    itemCountDataTest: 'all-members-count',\n                    customization: {\n                        wrapperClassName: classes.tableToolsWrapperStyle,\n                        tableToolsLeftClassName:\n                            classes.tableToolsLeftClassName,\n                        rootClassName: classes.tableToolsRootStyle,\n                    },\n                }}\n                tableEmptyStateConfigurations={{\n                    shouldShowEmptyState: true,\n                    noEntriesOptions: {\n                        icon: User,\n                        text: 'Add Members',\n                        dataTest: 'no-all-members',\n                    },\n                    noSearchResultsOptions: {\n                        entityName: 'Members',\n                        dataTest: 'no-found-all-members',\n                    },\n                }}\n                configurations={{\n                    columns: [\n                        {\n                            title: 'Users',\n                            width: 97,\n                            ...orderByUserName,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'users-column'\n                        },\n                        {\n                            title: 'Team Leader',\n                            width: 2,\n                            ...orderByTeamLeader,\n                            disabled: tableStates.disableSorting,\n                            dataTest: 'team-leader-column'\n                        },\n                    ],\n\n                    rowConfig: {\n                        isLabelTagsOpen: checkIsLabelTagsOpen,\n                        getLabelTagsProps: (member: TeamMember) => ({\n                            selectedLabels: member.labels,\n                            deletePermissions: [\n                                NEW_PERMISSIONS.REMOVE_USER_LABEL,\n                            ],\n                            onDeleteLabel: (labelId: number) =>\n                                handleAssignedLabelDelete(\n                                    labelId,\n                                    member.user.id\n                                ),\n                        }),\n                        dataTest: 'all-members-item',\n\n                        cells: [\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                cellClassName: classes.customCellStyle,\n                                getCustomFieldComponent: (\n                                    member: TeamMember\n                                ) => (\n                                    <StyledFirstTableContent>\n                                        <TableLabelTags\n                                            open={labelsOpen === member.user.id}\n                                            toggleOpen={() =>\n                                                handleToggleLabels(\n                                                    member.user.id\n                                                )\n                                            }\n                                            selectedLabels={member.labels}\n                                            dataTest=\"member-labels\"\n                                        />\n                                        <AvatarTile>\n                                            <Avatar\n                                                customProfile={{\n                                                    firstName:\n                                                        member.user.firstName,\n                                                    lastName:\n                                                        member.user.lastName,\n                                                    picture:\n                                                        member.user.imageUrl,\n                                                    status: member.userStatus,\n                                                }}\n                                                size=\"sm\"\n                                                dataTest=\"member-avatar\"\n                                            />\n                                            <TableTitleOverflowText\n                                                isCurrent={\n                                                    profile &&\n                                                    profile.id ===\n                                                        member.user.id\n                                                }\n                                                renderIcon={\n                                                    member.isTeamLead && (\n                                                        <TeamLeaderIcon data-test=\"team-leader-icon\">\n                                                            <Crown />\n                                                        </TeamLeaderIcon>\n                                                    )\n                                                }\n                                                dataTest=\"member-name\"\n                                            >\n                                                {`${member.user.firstName} ${member.user.lastName}`}\n                                            </TableTitleOverflowText>\n                                        </AvatarTile>\n                                    </StyledFirstTableContent>\n                                ),\n                            },\n\n                            {\n                                fieldType: 'CUSTOM_FIELD',\n                                getCustomFieldComponent: (\n                                    member: TeamMember\n                                ) => (\n                                    <Tooltip\n                                        label=\"Only admin can unassign team leader\"\n                                        position=\"center-right--bottom\"\n                                        disabled={\n                                            !(\n                                                revokeLeaderDisabled &&\n                                                !!member.isTeamLead\n                                            )\n                                        }\n                                    >\n                                        <ToggleWrapper>\n                                            <SwitchToggle\n                                                index={member.user.id}\n                                                checked={member.isTeamLead}\n                                                onChange={e => {\n                                                    handleTeamLeaderChange(\n                                                        member.id,\n                                                        e.target.checked\n                                                    );\n                                                }}\n                                                height={24}\n                                                width={42}\n                                                bulletRadius={16}\n                                                disabled={\n                                                    revokeLeaderDisabled &&\n                                                    member.isTeamLead\n                                                }\n                                                dataTest=\"team-leader-toggle\"\n                                            />\n                                        </ToggleWrapper>\n                                    </Tooltip>\n                                ),\n                            },\n                        ],\n                    },\n                }}\n            />\n        </Container>\n    );\n};\n\nconst ITEMS_PER_PAGE = 20;\n\nconst DefaultTeamMembersContainer = () => {\n    const params: { teamId: string } = useParams();\n    const teamEditState = useTeamEditState();\n    const profile = useSelector(getProfileState);\n    const teamId = params.teamId;\n    const searchTeamMembers = useSearchSingleTeamMembersService(teamId);\n    const searchTeamMembersDebounced = useSearchDebounced(searchTeamMembers);\n    const handleTableStates = useTableStateHelper();\n    const deleteLabelFromUser = useDeleteSingleTeamMemberLabelService(teamId);\n    const updatedUsersState = useUpdateUsersState();\n\n    const initialSearchParams: SearchParams = {\n        searchTerm: '',\n        filters: [],\n        labelIDs: [],\n        orderBy: null,\n        limit: ITEMS_PER_PAGE,\n        offset: 0,\n        totalCount: 0,\n        numberOfPages: 0,\n    };\n\n    const {\n        searchParams,\n        setSearchTerm,\n        setOrderBy,\n        setLabelIDs,\n        setOffset,\n        setCustom,\n    } = useSearchParamsState(initialSearchParams);\n\n    useEffect(() => {\n        searchTeamMembersDebounced(searchParams);\n    }, [searchParams, searchTeamMembersDebounced, updatedUsersState.data]);\n\n    const orderBy = searchParams.orderBy;\n    const orderByUserName = useOrderBy('name', orderBy, setOrderBy);\n    const orderByTeamLeader = useOrderBy(\n        'is_team_lead',\n        orderBy,\n        setOrderBy\n    );\n\n    const handleTeamLeaderChange = useTogglePromoteTeamLeader();\n\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\n        null\n    );\n\n    const registrationStatusHandler = (values: string[]) => {\n        setCustom('filterByRegistrationStatus', values);\n    };\n\n    const handleToggleLabels = (itemId?: number) => {\n        if (!itemId) return;\n        if (labelsOpen === itemId) {\n            setLabelsOpen(null);\n        } else {\n            setLabelsOpen(itemId);\n        }\n    };\n\n    const tableStates = handleTableStates({\n        searchTerm: searchParams.searchTerm,\n        appliedFilters: searchParams.labelIDs?.length,\n        itemsCount: teamEditState?.teamMembers?.count || 0,\n    });\n\n    return (\n        <WithLabelsContext.Provider\n            value={{\n                reducerName: 'teamEdit',\n                scope: 'defaultTeamMembers',\n            }}\n        >\n            <DefaultTeamMembers\n                users={teamEditState.teamMembers}\n                profile={profile}\n                searchTerm={searchParams.searchTerm}\n                setSearchTerm={setSearchTerm}\n                orderByUserName={orderByUserName}\n                orderByTeamLeader={orderByTeamLeader}\n                handleTeamLeaderChange={handleTeamLeaderChange}\n                setOffset={setOffset}\n                labelIDs={searchParams.labelIDs || []}\n                setLabelIDs={setLabelIDs}\n                totalCount={teamEditState.teamMembers?.count}\n                leadersCount={teamEditState?.data?.leaders?.length}\n                labelsOpen={labelsOpen}\n                handleToggleLabels={handleToggleLabels}\n                tableStates={tableStates}\n                deleteMemberLabel={deleteLabelFromUser}\n                searchParams={searchParams}\n                registrationStatusHandler={registrationStatusHandler}\n            />\n        </WithLabelsContext.Provider>\n    );\n};\n\nexport default DefaultTeamMembersContainer;\n","import { FC, useEffect, useRef } from 'react';\nimport ModalPage, {\n    ModalPageContainerProps,\n} from '../../../../ui/components/ModalPage/ModalPage';\nimport styled from 'styled-components';\nimport Header from './components/Header/Header';\nimport Actions from './components/Actions/Actions';\nimport AllUsers from './tabs/AllUsers/AllUsers';\nimport TeamMembers from './tabs/TeamMembers/TeamMembers';\nimport DefaultTeamMembers from './tabs/DefaultTeamMembers/DefaultTeamMembers';\nimport {\n    useGetSingleTeamService,\n    useResetSingleTeamPageService,\n    useUpdateTeamNameService,\n} from '../../store/services';\nimport { useTeamEditState } from '../../store/states';\nimport { TeamV2 } from '../../../../constants/interfaces/Team';\nimport { useParams } from 'react-router';\nimport { useHistory } from '../../../../tools/router';\nimport { WithLabelsContext } from '../../../portableLabels';\nimport { TableDivider } from '../../../../ui/components/table-wrapper/table-divider';\nimport { TeamUpdateStatus } from '../../store/states';\nimport { TeamMembersExternalInterface } from './tabs/TeamMembers/types';\nimport { AllUsersExternalInterface } from './tabs/AllUsers/types';\nimport { onTriggerEvent } from '../../../../helpers/functions/Events';\nimport {\n    EventNameList,\n    REFRESH_TEAMS_LIST,\n    REFRESH_TEAM_CONTROLLER,\n    REFRESH_TEAM_MEMBERS,\n} from '../../../../helpers/functions/Events/types';\n\nconst StyledModalPage = styled(ModalPage)<{ isDefaultTeam: boolean }>`\n    width: ${props => (props.isDefaultTeam ? '50%' : '65%')};\n    min-width: 780px;\n    ${props =>\n        props.isDefaultTeam &&\n        `\n            @media (max-width: ${props.theme.BreakPoints.responsiveSm}px) {\n                left: 47px;\n                width: unset;\n                right: 0\n            }\n\n    `}\n`;\n\nconst Container = styled.div`\n    width: 100%;\n    height: 100%;\n    background: ${props => props.theme.Colors.white};\n    padding: 0 32px;\n    display: flex;\n    flex-direction: column;\n    overflow: auto;\n    border-top-left-radius: 8px;\n    border-bottom-left-radius: 8px;\n`;\n\nconst Body = styled.div`\n    margin: 15px 0 24px 0;\n    flex: 1;\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    grid-template-rows: 1fr;\n    grid-column-gap: 16px;\n    overflow: auto;\n    min-height: 350px;\n`;\n\nconst DefaultBody = styled.div`\n    margin: 0 0 24px 0;\n    flex: 1;\n    display: grid;\n    grid-template-columns: 1fr;\n    grid-template-rows: 1fr;\n    grid-column-gap: 16px;\n    overflow: auto;\n    min-height: 350px;\n`;\n\nconst ManageTeam: FC<{\n    team?: TeamV2;\n    handleUpdateTeamName: (value: string) => Promise<void>;\n    handleCancel: () => void;\n    isDefaultTeam: boolean;\n    updateStatus?: TeamUpdateStatus;\n    getSingleTeam: (teamId: number) => void;\n}> = ({\n    team,\n    handleUpdateTeamName,\n    handleCancel,\n    isDefaultTeam,\n    updateStatus,\n    getSingleTeam,\n}) => {\n    const teamMembersRef = useRef<TeamMembersExternalInterface>();\n    const handleAddTeamMembersSuccess = () => {\n        teamMembersRef.current?.refreshData();\n    };\n\n    const allUsersRef = useRef<AllUsersExternalInterface>();\n    const handleRemoveTeamMembersSuccess = () => {\n        allUsersRef.current?.refreshData();\n        getSingleTeam(team!.id);\n    };\n\n    return (\n        <Container>\n            <Header\n                handleCancel={handleCancel}\n                lastUpdated={team?.updatedAt}\n                updateStatus={updateStatus}\n            />\n            {!isDefaultTeam && (\n                <>\n                    <TableDivider />\n                    <Actions\n                        team={team}\n                        handleUpdateTeamName={handleUpdateTeamName}\n                    />\n                    <TableDivider />\n                </>\n            )}\n            {isDefaultTeam ? (\n                <DefaultBody>\n                    <DefaultTeamMembers />\n                </DefaultBody>\n            ) : (\n                <Body>\n                    <AllUsers\n                        ref={allUsersRef}\n                        onSuccessAddUsersBulkActionCallback={\n                            handleAddTeamMembersSuccess\n                        }\n                    />\n                    <TeamMembers\n                        ref={teamMembersRef}\n                        onSuccessRemoveUsersBulkActionCallback={\n                            handleRemoveTeamMembersSuccess\n                        }\n                    />\n                </Body>\n            )}\n        </Container>\n    );\n};\n\nconst ManageTeamContainer: FC<ModalPageContainerProps> = ({\n    closePath,\n    closeGoingBack,\n}) => {\n    const history = useHistory();\n    const teamState = useTeamEditState();\n\n    const teamStateData = teamState && teamState.data;\n    const resetPage = useResetSingleTeamPageService();\n    const getSingleTeam = useGetSingleTeamService();\n    const params: {\n        teamId?: string | number;\n        isDefault?: string;\n    } = useParams();\n    const teamId = params.teamId!;\n    const isDefaultParam = history?.location?.state?.data?.isDefaultTeam;\n\n    const isDefaultTeam =\n        isDefaultParam || (teamStateData && teamStateData.isDefault) || false;\n    const updateTeamName = useUpdateTeamNameService(teamId);\n\n    const handleGoBack = () => {\n        history.goBack();\n    };\n\n    useEffect(() => {\n        if (params.teamId) {\n            getSingleTeam(Number(params.teamId));\n        }\n    }, [getSingleTeam, params.teamId]);\n\n    useEffect(() => {\n        return () => {\n            resetPage();\n\n            // refresh TeamController && TeamMembers Page\n            onTriggerEvent(EventNameList[REFRESH_TEAM_MEMBERS]);\n            onTriggerEvent(EventNameList[REFRESH_TEAM_CONTROLLER]);\n            onTriggerEvent(EventNameList[REFRESH_TEAMS_LIST]);\n        };\n    }, [resetPage]);\n\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'teamEdit' }}>\n            <StyledModalPage\n                isDefaultTeam={isDefaultTeam}\n                closePath={closePath}\n                closeGoingBack={closeGoingBack}\n                handleManualClose={handleGoBack}\n            >\n                <ManageTeam\n                    team={teamStateData}\n                    handleUpdateTeamName={updateTeamName}\n                    handleCancel={handleGoBack}\n                    isDefaultTeam={isDefaultTeam}\n                    updateStatus={teamState.updateStatus}\n                    getSingleTeam={getSingleTeam}\n                />\n            </StyledModalPage>\n        </WithLabelsContext.Provider>\n    );\n};\n\nexport default ManageTeamContainer;\n","import styled from 'styled-components';\nimport ModalPage from '../../../../ui/components/ModalPage/ModalPage';\nimport { Input } from '../../../../ui/components/input';\n\nexport const StyledModalPage = styled(ModalPage)`\n    width: 627px;\n    min-width: 550px;\n\n    @media (max-width: 1024px) {\n        left: unset;\n    }\n    @media (max-width: 576px) {\n        width: 45%;\n        left: 47px;\n        min-width: calc(100% - 47px);\n    }\n`;\n\nexport const Container = styled.div`\n    width: 100%;\n    height: 100%;\n    background: var(--ps-white-1);\n    padding: 0 32px;\n    display: flex;\n    flex-direction: column;\n    overflow: auto;\n    border-top-left-radius: 8px;\n    border-bottom-left-radius: 8px;\n`;\n\nexport const Title = styled.div`\n    display: flex;\n    align-items: center;\n    font-size: 20px;\n    font-weight: bold;\n    line-height: 28px;\n    height: 96px;\n    color: var(--ps-black-main);\n`;\n\nexport const NameContainer = styled.div`\n    margin: 16px 0;\n    border-radius: 4px;\n`;\n\nexport const NameInput = styled(Input)`\n    padding: 12px 16px;\n    font-size: 13px;\n    font-weight: normal;\n    border: ${props => props.error ? 'none' : '1px solid var(--ps-grey-3)'};\n    border-radius: 4px;\n    &:focus {\n        border: ${props => props.error ? 'none' : '1px solid var(--ps-grey-2)'};\n    }\n`;\n\nexport const ActionContainer = styled.div`\n    display: flex;\n    justify-content: flex-end;\n    padding-top: 24px;\n`;\n\nexport const ButtonDelimiter = styled.div`\n    width: 16px;\n`;\n\n","import { TableDivider } from '../../../../ui/components/table-wrapper/table-divider';\nimport { Button } from '../../../../ui/components/Button';\nimport { CreateTeamViewProps } from './types';\nimport {\n    StyledModalPage,\n    Container,\n    Title,\n    NameContainer,\n    NameInput,\n    ActionContainer,\n    ButtonDelimiter\n} from './styles';\n\nfunction CreateTeamView({\n    closePath,\n    closeGoingBack,\n    name,\n    isSubmitting,\n    hasError,\n    onChangeName,\n    onCancel,\n    onSave\n}: CreateTeamViewProps) {\n    return (\n        <StyledModalPage\n            closePath={closePath}\n            closeGoingBack={closeGoingBack}\n        >\n            <Container>\n                <Title data-test=\"create-team-page-title\">Create New Team</Title>\n                <TableDivider />\n                <NameContainer>\n                    <NameInput\n                        height=\"40px\"\n                        maxLength={50}\n                        placeholder=\"Team Name\"\n                        handleChange={(event: { target: HTMLInputElement }) =>\n                            onChangeName(event.target.value)\n                        }\n                        value={name}\n                        dataTest=\"create-team-name\"\n                        error={hasError}\n                    />\n                </NameContainer>\n                <TableDivider />\n                <ActionContainer>\n                    <Button\n                        label=\"Cancel\"\n                        variant=\"inverse\"\n                        width=\"126px\"\n                        action={onCancel}\n                        dataTest=\"create-team-cancel\"\n                    />\n                    <ButtonDelimiter />\n                    <Button\n                        label={'Create'}\n                        width=\"126px\"\n                        loading={isSubmitting}\n                        disabled={name.trim().length === 0}\n                        action={onSave}\n                        dataTest=\"create-team-save\"\n                    />\n\n                </ActionContainer>\n            </Container>\n        </StyledModalPage>\n    );\n}\n\nexport default CreateTeamView;","import { useState, useCallback } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { History } from 'history';\nimport { useCreateNewTeamService } from '../../store/services';\nimport { useSearchTeamsService } from '../../../portableTeams/store/hors/withTeams/services';\nimport { TeamV2 } from '../../../../constants/interfaces/Team';\nimport { replaceModal } from '../../../../tools/router';\nimport ROUTES from '../../../../routes/routes';\nimport { ModalPageContainerProps } from '../../../../ui/components/ModalPage';\nimport CreateTeamView from './view';\nimport useHtmlPageTitle from '../../../../helpers/hooks/useHtmlPageTitle';\n\nfunction CreateTeamController({\n    closePath,\n    closeGoingBack,\n}: ModalPageContainerProps) {\n    const [name, setName] = useState('');\n    const [isSubmitting, setIsSubmitting] = useState(false);\n    const [hasError, setHasError] = useState(false);\n    const history = useHistory() as History<any>;\n    const createNewTeam = useCreateNewTeamService();\n    const searchTeamsForFilters = useSearchTeamsService();\n    useHtmlPageTitle('Create New Team');\n\n    /**\n     * @description saves changed name to state and resets error\n     * @function handleChangeName\n     * @param { string } value\n     * @returns { void }\n     */    \n    const handleChangeName = (value: string) => {\n        setName(value);\n        setHasError(false);\n    }\n\n    /**\n     * @description redirects to previous page\n     * @function handleCancel\n     * @returns { void }\n     */    \n     const handleCancel = useCallback(\n        () => history.goBack(),\n        [history]\n    )\n\n    /**\n     * @description sends API request to create a new team.\n     * If a request is succeeded, then it redicts to manage team modal. Otherwise - shows error.\n     * @function handleSave\n     * @returns { void }\n     */    \n    const handleSave = () => {\n        setIsSubmitting(true);\n        createNewTeam(name)\n            .then((team: TeamV2) => {\n                setTimeout(searchTeamsForFilters, 500);\n                replaceModal(\n                    history,\n                    ROUTES.TEAMS_PAGES.MANAGE_TEAM.replace(':teamId', team.id.toString()),\n                    { isDefaultTeam: false }\n                )\n            })\n            .catch(() => {\n                Promise.resolve().then(() => {\n                    setIsSubmitting(false);\n                    setHasError(true);\n                });\n            });\n    };\n\n    return <CreateTeamView\n        closePath={closePath}\n        closeGoingBack={closeGoingBack}\n        name={name}\n        isSubmitting={isSubmitting}\n        hasError={hasError}\n        onChangeName={handleChangeName}\n        onCancel={handleCancel}\n        onSave={handleSave}\n    />\n}\n\nexport default CreateTeamController;","import { FC, useEffect, ReactNode, useState, useCallback } from 'react';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\r\nimport { usePractisSetReportState } from '../../store/states';\r\nimport {\r\n    usePractisSetReportService,\r\n    useResetPractisSetReportService,\r\n} from '../../store/services';\r\nimport {\r\n    formatDateWithTimeZone,\r\n    formatMMDDYY,\r\n} from '../../../../helpers/functions/date-convert';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport {\r\n    EnrollmentProgress,\r\n    EnrollmentStatus,\r\n    EnrollmentDailyTraining,\r\n    EnrollmentInterface,\r\n} from '../../../../constants/interfaces/Enrollments';\r\nimport Completion from './components/Sections/Completion';\r\nimport DailyTimeSpent from './components/Sections/DailyTimeSpent';\r\nimport { useSelector } from 'react-redux';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { UserProfile } from '../../../../constants/interfaces/User';\r\nimport ReportsItems from './components/Sections/ReportItems/ReportsItems';\r\nimport { TableDivider } from '../../../../ui/components/table-wrapper/table-divider';\r\nimport {\r\n    StyledTraineeDetailsContainer,\r\n    GraphSection,\r\n    GraphRow,\r\n    StyledDetailsHeader,\r\n    ProfileSection,\r\n    StyledDetailsAvatar,\r\n    StyledUserInfo,\r\n    StyledEmail,\r\n    StyledName,\r\n    StyledAdditionalInfo,\r\n    StyledPendingInvitationLabel,\r\n    StyledPendingTitle,\r\n    DueDateSubTitle,\r\n    SubHeaderContainer,\r\n    StatusContainer,\r\n    DetailsStatusCompleted,\r\n    DetailsStatusInProgress,\r\n    DetailsStatusPending,\r\n    WarningTitle,\r\n    StyledOverdueFlag,\r\n    StyledLoading,\r\n    DueDateSkeletonContainer,\r\n} from './styles';\r\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport { toFixedNumber } from '../../../../helpers/functions/math';\r\nimport { UserStatus } from '../../../users/store/costants';\r\nimport useHtmlPageTitle from '../../../../helpers/hooks/useHtmlPageTitle';\r\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\r\nimport { NudgeUser } from '../../../../ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser';\r\nimport { useNudgeTraineesService } from '../../../users/store/services';\r\nimport { NudgeData } from '../../../../api/alert/types';\r\nimport { pushModal } from '../../../../tools/router';\r\nimport { History } from 'history';\r\nimport { Skeleton } from '@material-ui/lab';\r\n\r\nexport enum SubmissionsStatus {\r\n    PENDING = 'PENDING',\r\n    REVIEWED = 'REVIEWED',\r\n    UPLOADING = 'UPLOADING',\r\n    DELETED = 'DELETED',\r\n}\r\n\r\nconst submissionsStatusNames = {\r\n    [SubmissionsStatus.PENDING as string]: 'Submitted',\r\n    [SubmissionsStatus.REVIEWED as string]: 'Reviewed',\r\n    [SubmissionsStatus.UPLOADING as string]: 'Uploading',\r\n    [SubmissionsStatus.DELETED as string]: 'Deleted',\r\n};\r\n\r\nexport function submissionsStatusName(status?: string): string {\r\n    return (status && submissionsStatusNames[status]) || status || '';\r\n}\r\n\r\nconst PractisSetReport: FC<{\r\n    profile?: UserProfile;\r\n    enrollment?: EnrollmentInterface;\r\n    progress?: ListResult<EnrollmentProgress>;\r\n    dailyTraining?: EnrollmentDailyTraining[];\r\n    params: { userId: string, enrollmentId: string };\r\n    loading?: boolean;\r\n    useGoBack: boolean;\r\n    goBackUrl: string;\r\n    onGetPractisSetReport: (enrollmentId: number) => void;\r\n    onResetPractisSetReport: () => void;\r\n    onNudgeTrainees(nudgeUserDate: NudgeData[], successCallback?: () => void): void;\r\n}> = ({\r\n    profile,\r\n    enrollment,\r\n    progress,\r\n    dailyTraining,\r\n    params,\r\n    loading,\r\n    useGoBack,\r\n    goBackUrl,\r\n    onGetPractisSetReport,\r\n    onResetPractisSetReport,\r\n    onNudgeTrainees,\r\n}) => {\r\n    const history = useHistory() as History<any>;\r\n    const [showNudgeDialog, setShowNudgeDialog] = useState(false);\r\n    const isPending = enrollment?.user.status === UserStatus.PENDING;\r\n\r\n    useEffect(() => {\r\n        if (params.enrollmentId) {\r\n            onGetPractisSetReport!(+params.enrollmentId!);\r\n        }\r\n\r\n        return () => {\r\n            onResetPractisSetReport();\r\n        };\r\n    }, [onGetPractisSetReport, onResetPractisSetReport, params.enrollmentId]);\r\n\r\n    const redirectToViewSubmission = (submissionId?: string) => {\r\n        if (!submissionId) return;\r\n\r\n        history.push(\r\n            ROUTES.SUBMISSION_SETTINGS.CHALLENGES.SINGLE.replace(\r\n                ':submissionId',\r\n                submissionId\r\n            ),\r\n            {\r\n                useGoBack: true,\r\n            }\r\n        );\r\n    };\r\n\r\n    const redirectToViewScenario = (submissionId?: string) => {\r\n        if (!submissionId) return;\r\n\r\n        history.push(\r\n            ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.SINGLE.replace(\r\n                ':submissionId',\r\n                submissionId\r\n            ),\r\n            {\r\n                useGoBack: true,\r\n            }\r\n        );\r\n    };\r\n\r\n    const handleReviewReps = (submissionId?: string) => {\r\n        if (!submissionId || !enrollment) return;\r\n        \r\n        pushModal(\r\n            history,\r\n            ROUTES.TRAINEE_DETAILS_REPS\r\n                .replace(\r\n                    ':userId',\r\n                    enrollment.user.id.toString()\r\n                )\r\n                .replace(\r\n                    ':enrollmentId',\r\n                    enrollment.id.toString()\r\n                ).replace(\r\n                    ':scenarioId',\r\n                    submissionId.toString()\r\n                )\r\n        );\r\n    };\r\n\r\n    /**\r\n     * Returns Due Date status title\r\n     * @returns ReactNode | string\r\n     */\r\n    const getDueDateTitle = (): ReactNode | string => {\r\n        const { hasOverdue, dueDate, user } = enrollment ?? {};\r\n\r\n        if (!dueDate) {\r\n            return 'No Due Date';\r\n        } else if (hasOverdue) {\r\n            return (\r\n                <WarningTitle>\r\n                    {`${user!.firstName} ${user!.lastName}\r\n                        missed the due date of ${formatDateWithTimeZone(\r\n                            dueDate\r\n                        )}`}\r\n                    <StyledOverdueFlag />\r\n                </WarningTitle>\r\n            );\r\n        } else {\r\n            return `Due Date: ${formatDateWithTimeZone(dueDate)}`;\r\n        }\r\n    };\r\n\r\n    const closeNudgeDialog = useCallback(() => {\r\n        setShowNudgeDialog(false);\r\n    }, []);\r\n\r\n    const handleNudge = useCallback(\r\n        (data: any) => {\r\n            const { text, name: senderName } = data;\r\n            if (enrollment?.user.id) {\r\n                const nudgeUserData: NudgeData = {\r\n                    type: 'enrollment',\r\n                    enrollmentId: enrollment.id,\r\n                    receiverId: enrollment.user.id,\r\n                    text,\r\n                    senderName,\r\n                };\r\n                onNudgeTrainees([nudgeUserData], closeNudgeDialog);\r\n            }\r\n        },\r\n        [enrollment?.user.id, enrollment?.id, onNudgeTrainees, closeNudgeDialog]\r\n    );\r\n\r\n    return (\r\n        <MainWrapper\r\n            title=\"Practis Set Report\"\r\n            subTitle={enrollment?.practisSet?.name}\r\n            subHeader={\r\n                <SubHeaderContainer>\r\n                    {enrollment ? (\r\n                        <>\r\n                            <StatusContainer>\r\n                                {enrollment?.status ===\r\n                                    EnrollmentStatus.PENDING && (\r\n                                    <DetailsStatusPending data-test=\"practis-set-status\">\r\n                                        Not Started\r\n                                    </DetailsStatusPending>\r\n                                )}\r\n                                {enrollment?.status ===\r\n                                    EnrollmentStatus.ENROLLED && (\r\n                                    <DetailsStatusInProgress data-test=\"practis-set-status\">\r\n                                        In Progress\r\n                                    </DetailsStatusInProgress>\r\n                                )}\r\n                                {enrollment?.status ===\r\n                                    EnrollmentStatus.COMPLETED && (\r\n                                    <DetailsStatusCompleted data-test=\"practis-set-status\">\r\n                                        Completed on{' '}\r\n                                        {formatMMDDYY(\r\n                                            new Date(enrollment.completedAt)\r\n                                        )}\r\n                                    </DetailsStatusCompleted>\r\n                                )}\r\n                            </StatusContainer>\r\n                            <DueDateSubTitle data-test=\"practis-set-due-date\">\r\n                                {getDueDateTitle()}\r\n                            </DueDateSubTitle>\r\n                        </>\r\n                    ) : (\r\n                        <DueDateSkeletonContainer>\r\n                            <Skeleton\r\n                                variant=\"text\"\r\n                                width={100}\r\n                                height={24}\r\n                                style={{\r\n                                    background: 'var(--ps-grey-3)',\r\n                                }}\r\n                            />\r\n                            <Skeleton\r\n                                variant=\"text\"\r\n                                width={80}\r\n                                height={24}\r\n                                style={{\r\n                                    background: 'var(--ps-grey-3)',\r\n                                }}\r\n                            />\r\n                        </DueDateSkeletonContainer>\r\n                    )}\r\n                </SubHeaderContainer>\r\n            }\r\n            useGoBack={useGoBack}\r\n            goBackUrl={goBackUrl}\r\n            dataTest=\"practis-set-report\"\r\n            headerMinHeight=\"114px\"\r\n        >\r\n            {loading || !enrollment\r\n                ? <StyledLoading />\r\n                : (\r\n                    <StyledTraineeDetailsContainer>\r\n                        <StyledDetailsHeader>\r\n                            <ProfileSection>\r\n                                <StyledDetailsAvatar>\r\n                                    <AvatarPlaceholder\r\n                                        profile={enrollment.user}\r\n                                        iconWidth={17}\r\n                                        iconHeight={20}\r\n                                        bottomPosition={-6}\r\n                                        noHint={true}\r\n                                        dataTest=\"practis-set-user-avatar\"\r\n                                    />\r\n                                </StyledDetailsAvatar>\r\n                                <StyledUserInfo>\r\n                                    <StyledName isFlex={isPending}>\r\n                                        <span data-test=\"practis-set-user-name\">\r\n                                            {`${enrollment.user.firstName || ''} ${\r\n                                                enrollment.user.lastName || ''\r\n                                            }`}\r\n                                            {profile && enrollment.user.id === profile.id && (\r\n                                                <StyledAdditionalInfo>\r\n                                                    {' '}(You)\r\n                                                </StyledAdditionalInfo>\r\n                                            )}\r\n                                        </span>\r\n                                        {isPending && (\r\n                                            <StyledPendingInvitationLabel>\r\n                                                <StyledPendingTitle data-test=\"practis-set-pending-user-label\">\r\n                                                    Pending Registration\r\n                                                </StyledPendingTitle>\r\n                                            </StyledPendingInvitationLabel>\r\n                                        )}\r\n                                    </StyledName>\r\n                                    <StyledEmail data-test=\"practis-set-user-email\">\r\n                                        {enrollment.user.email}\r\n                                    </StyledEmail>\r\n                                </StyledUserInfo>\r\n                            </ProfileSection>\r\n                            {!isPending && (\r\n                                <Button\r\n                                    width=\"152px\"\r\n                                    height=\"40px\"\r\n                                    action={() => setShowNudgeDialog(true)}\r\n                                    dataTest=\"nudge-button\"\r\n                                >\r\n                                    Nudge\r\n                                </Button>\r\n                            )}\r\n                        </StyledDetailsHeader>\r\n                        <TableDivider />\r\n                        <GraphSection>\r\n                            <GraphRow>\r\n                                <Completion\r\n                                    enrollment={enrollment}\r\n                                    createdAt={enrollment?.startedAt}\r\n                                    completedAt={enrollment.completedAt}\r\n                                />\r\n                                <DailyTimeSpent\r\n                                    data={dailyTraining!.map(rep => {\r\n                                        return {\r\n                                            date: rep.date,\r\n                                            value: toFixedNumber(rep.timeSpent / 60),\r\n                                        };\r\n                                    })}\r\n                                    totalTime={enrollment.trainingTime}\r\n                                />\r\n                            </GraphRow>\r\n                        </GraphSection>\r\n                        <ReportsItems\r\n                            content={progress?.items}\r\n                            redirectChallenge={redirectToViewSubmission}\r\n                            redirectScenario={redirectToViewScenario}\r\n                            handleReviewReps={handleReviewReps}\r\n                        />\r\n                    </StyledTraineeDetailsContainer>\r\n                )\r\n            }\r\n            {showNudgeDialog && (\r\n                <DialogWrapper\r\n                    customization={{\r\n                        width: 480,\r\n                        padding: '49px 32px 32px 32px',\r\n                    }}\r\n                >\r\n                    <NudgeUser\r\n                        title={`Send a direct message to ${enrollment!.user.firstName} ${enrollment!.user.lastName}`}\r\n                        fromUser={`${profile?.firstName} ${profile?.lastName}`}\r\n                        onSend={handleNudge}\r\n                        onClose={closeNudgeDialog}\r\n                        practisSetName={enrollment!.practisSet?.name ?? ''}\r\n                    />\r\n                </DialogWrapper>\r\n            )}\r\n        </MainWrapper>\r\n    );\r\n};\r\n\r\nexport const PractisSetReportContainer = () => {\r\n    const data = usePractisSetReportState();\r\n    const params = useParams<{ userId: string; enrollmentId: string }>();\r\n    const profile = useSelector(getProfileState);\r\n    const onGetPractisSetReport = usePractisSetReportService();\r\n    const resetPractisSetReport = useResetPractisSetReportService();\r\n    const nudgeTrainees = useNudgeTraineesService();\r\n    const history = useHistory();\r\n\r\n    const locationState: any = history.location.state;\r\n\r\n    useHtmlPageTitle('Practis Set Report', [\r\n        `${data.enrollment?.user.firstName} ${data.enrollment?.user.lastName}`,\r\n        data.enrollment?.practisSet?.name,\r\n    ]);\r\n\r\n    return (\r\n        <PractisSetReport\r\n            profile={profile}\r\n            enrollment={data.enrollment}\r\n            progress={data.progress}\r\n            dailyTraining={data.dailyTraining}\r\n            loading={data.loading}\r\n            params={params}\r\n            useGoBack={!!locationState?.useGoBack}\r\n            goBackUrl={ROUTES.USER_PERFORMANCE.replace(':userId', params.userId)}\r\n            onGetPractisSetReport={onGetPractisSetReport}\r\n            onResetPractisSetReport={resetPractisSetReport}\r\n            onNudgeTrainees={nudgeTrainees}\r\n        />\r\n    );\r\n};\r\n\r\nexport default PractisSetReportContainer;","import CreateTeamController from './controller';\n\nexport default CreateTeamController;","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n    height: 230px;\n    box-sizing: border-box;\n    flex: 1;\n    padding: 24px 32px;\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    border: solid 1px ${props => props.theme.Colors.paleGrey};\n    display: flex;\n    flex-direction: column;\n`;\n\nconst ChartBox: FC<{ className?: string }> = ({ children, className }) => {\n    return <Container className={className}>{children}</Container>;\n};\n\nexport default ChartBox;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n    font-size: 15px;\n    font-weight: 800;\n    color: ${props => props.theme.Colors.dark};\n    margin-bottom: 20px;\n`;\n\nconst ChartBoxTitle: FC<{ className?: string, dataTest?: string }> = ({ children, className, dataTest }) => {\n    return <Container className={className} data-test={dataTest}>{children}</Container>;\n};\n\nexport default ChartBoxTitle;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-items: flex-end;\n    flex: 1;\n    position: relative;\n`;\n\nconst ChartBoxBody: FC<{ className?: string }> = ({ children, className }) => {\n    return <Container className={className}>{children}</Container>;\n};\n\nexport default ChartBoxBody;\n","import React, { FC } from 'react';\nimport ChartBox from '../ChartBox/ChartBox';\nimport ChartBoxTitle from '../ChartBox/ChartBoxTitle';\nimport ChartBoxBody from '../ChartBox/ChartBoxBody';\nimport styled from 'styled-components';\nimport { EnrollmentInterface } from '../../../../../../constants/interfaces/Enrollments';\n\nconst StyledChartBox = styled(ChartBox)`\n    flex-direction: row;\n    max-width: 480px;\n`;\n\nconst Statistics = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-end;\n    height: 100%;\n`;\n\nconst BigText = styled.span<{ isEmpty?: boolean }>`\n    font-size: 36px;\n    line-height: 0.89;\n    font-weight: 600;\n    ${({isEmpty, theme}) => isEmpty && `color: ${theme.Colors.cloudyBlue}`}\n`;\n\nconst SmallText = styled.span`\n    font-size: 20px;\n    line-height: 2;\n    font-weight: bold;\n`;\n\nconst Description = styled.span`\n    margin: 0;\n    color: ${({ theme }) => theme.Colors.steelGrey};\n    font-size: 13px;\n`;\n\nconst AccuracyTestsContainer = styled(StyledChartBox)`\n    border: 0;\n    padding: 0;\n    flex-direction: column;\n    box-shadow: none;\n    height: 100%;\n    padding-right: 34px;\n    max-width: 150px;\n`;\n\nconst ProgressContainer = styled(StyledChartBox)`\n    border: 0;\n    padding: 0;\n    flex-direction: column;\n    box-shadow: none;\n    height: 100%;\n    flex: 1;\n`;\n\nconst NumbersChartsBodies = styled(ChartBoxBody)`\n    flex-direction: row;\n    justify-content: space-between;\n    min-width: 170px;\n`;\n\nconst VerticalBorder = styled.div`\n    background: #e0e8ee;\n    width: 1px;\n    margin-right: 34px;\n`;\n\nconst Completion: FC<{\n    enrollment: EnrollmentInterface;\n    createdAt?: string;\n    completedAt?: string;\n}> = ({ enrollment, createdAt, completedAt }) => {\n\n    return (\n        <StyledChartBox>\n            {!!enrollment.practisSet.scenarioCount && (\n                <>\n                    <AccuracyTestsContainer>\n                        <ChartBoxTitle dataTest=\"accuracy-tests-title\">Accuracy Tests</ChartBoxTitle>\n                        <ChartBoxBody>\n                            <Statistics>\n                                {!!enrollment.averageAccuracy ? (\n                                    <BigText data-test=\"average-accuracy-percentage\">\n                                        {Math.floor(\n                                            enrollment.averageAccuracy * 100\n                                        )}\n                                        <SmallText>%</SmallText>\n                                    </BigText>\n                                ) : (\n                                    <BigText isEmpty={true} data-test=\"empty-average-accuracy\">—</BigText>\n                                )}\n                                <Description data-test=\"average-accuracy-text\">Average</Description>\n                            </Statistics>\n                        </ChartBoxBody>\n                    </AccuracyTestsContainer>\n                    <VerticalBorder />\n                </>\n            )}\n            <ProgressContainer>\n                <ChartBoxTitle dataTest=\"progress-title\">Progress</ChartBoxTitle>\n                <NumbersChartsBodies>\n                    {!!enrollment.practisSet.scenarioCount && (\n                        <Statistics>\n                            <BigText data-test=\"scenario-progress\">\n                                <span data-test=\"passed-scenario-count\">{enrollment.passedScenarioCount}</span>\n                                <SmallText>\n                                    {' '}of <span data-test=\"total-scenario-count\">{enrollment.practisSet.scenarioCount}</span>\n                                </SmallText>\n                            </BigText>\n                            <Description data-test=\"progress-scenarios-text\">Scenarios</Description>\n                        </Statistics>\n                    )}\n                    {!!enrollment.practisSet.challengeCount && (\n                        <Statistics>\n                            <BigText data-test=\"challenge-progress\">\n                                <span data-test=\"passed-challenge-count\">{enrollment.passedChallengeCount}</span>\n                                <SmallText>\n                                    {' '}of <span data-test=\"total-challenge-count\">{enrollment.practisSet.challengeCount}</span>\n                                </SmallText>\n                            </BigText>\n                            <Description data-test=\"progress-challenges-text\">Challenges</Description>\n                        </Statistics>\n                    )}\n                </NumbersChartsBodies>\n            </ProgressContainer>\n        </StyledChartBox>\n    );\n};\n\nexport default Completion;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoChartData = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 21 20\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <g>\n                                <path\n                                    d=\"M79.32 11.055V0h4v11.055h-4zm5.515 1.921l1.179 1.179-5.834 5.833-1.178-1.179 5.833-5.833zm-4.655 0l5.834 5.833-1.179 1.179-5.833-5.833 1.178-1.179zm1.807-11.643h-1.334v8.34h1.334v-8.34zm-9.334 1.334h4V20h-4V2.667zm1.333 16h1.334V4h-1.334v14.667zm-8-9.334h4V20h-4V9.333zm1.334 9.334h1.333v-8H67.32v8z\"\n                                    transform=\"translate(-713 -224) translate(472) translate(176 224)\"\n                                />\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoChartData;\n","import React, { FC, ReactElement } from 'react';\nimport styled from 'styled-components';\nimport NoChartData from '../../../../../../ui/icons/NoChartData';\n\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    height: 100%;\n`;\n\nconst Text = styled.div`\n    color: ${props => props.theme.Colors.cloudyBlue};\n    font-size: 11px;\n    font-weight: bold;\n    text-align: center;\n    max-width: 244px;\n    height: 20px;\n    margin-bottom: 8px;\n    min-width: 155px;\n`;\n\nconst IconContainer = styled.div<{ customIcon: boolean }>`\n    color: ${props => props.theme.Colors.cloudyBlue};\n    ${({ customIcon }) =>\n        !customIcon &&\n        `\n            width: 20px;\n            height: 20px;\n        `}\n    margin-bottom: 8px;\n`;\n\nconst EmptySection: FC<{\n    className?: string;\n    emptyText?: string;\n    icon?: ReactElement;\n    dataTest?: string;\n}> = ({ children, className, emptyText, icon, dataTest }) => {\n    return (\n        <Container className={className}>\n            <IconContainer customIcon={!!icon} data-test={dataTest && `${dataTest}-icon`}>\n                {icon ?? <NoChartData />}\n            </IconContainer>\n            {emptyText ? (\n                <Text data-test={dataTest && `${dataTest}-text`}>{emptyText}</Text>\n            ) : (\n                <Text data-test={dataTest && `${dataTest}-text`}>Nothing to show here</Text>\n            )}\n        </Container>\n    );\n};\n\nexport default EmptySection;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ top: number; left: number }>`\n    padding: 8px 16px;\n    box-sizing: border-box;\n    min-width: 72px;\n    height: 48px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    position: fixed;\n    top: ${props => props.top}px;\n    left: ${props => props.left}px;\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    background-color: white;\n`;\n\nconst Text = styled.div`\n    font-family: Manrope;\n    font-size: 11px;\n    font-weight: 600;\n    color: #212121;\n    margin-bottom: 3px;\n`;\n\nconst Date = styled.div`\n    font-family: Manrope;\n    font-size: 11px;\n    color: #6d7f8c;\n`;\n\nconst ToolTip: FC<{\n    text: string;\n    date: string;\n    positions: { x: number | null; y: number | null };\n    title: string;\n    singleTitle?: string;\n}> = ({ text, date, positions, title, singleTitle }) => {\n    if (!positions.x || !positions.y) {\n        return <div />;\n    }\n    return (\n        <Container top={positions.y} left={positions.x}>\n            <Text>\n                {Math.round(Number(text))} {Number(text) === 1 ? singleTitle || title : title}\n            </Text>\n            <Date>{date}</Date>\n        </Container>\n    );\n};\n\nexport default ToolTip;\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { select, Selection } from 'd3-selection';\nimport { scaleBand, scaleLinear } from 'd3-scale';\nimport { max } from 'd3-array';\nimport { axisBottom, axisLeft } from 'd3-axis';\nimport styled from 'styled-components';\nimport ToolTip from './ToolTip';\nimport {\n    formatDateChart,\n    isToday,\n} from '../../../helpers/functions/date-convert';\nimport { Variables } from '../../../theme/variables';\n\n//region Styles\nconst Container = styled.div`\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    .tick line {\n        visibility: hidden;\n    }\n    .tick text {\n        color: #6d7f8c;\n        font-size: 11px;\n        font-weight: 500;\n    }\n    .domain {\n        color: ${props => props.theme.Colors.paleGrey};\n    }\n    .x-axis-filler {\n        fill: ${props => props.theme.Colors.paleGrey};\n    }\n    .x-axis-label {\n        pointer-events: none;\n        font-size: 11px;\n        font-weight: 500;\n    }\n    .bar-container:hover {\n        rect {\n            opacity: 0.5;\n        }\n        rect:hover {\n            opacity: 1;\n        }\n    }\n`;\n//endregion\n\nexport interface LineChartData {\n    date: string;\n    value: number | null;\n}\n\nconst BAR_WIDTH = 2;\n\nconst LineChart: FC<{\n    data: LineChartData[];\n    color: string;\n    label?: string;\n    singleLabel?: string;\n    dataTest?: string;\n}> = ({ data, color, label, singleLabel, dataTest }) => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [dimensions, setDimensions] = useState({\n        width: 620,\n        height: 130,\n        margin: 50,\n    });\n\n    const ref = useRef<SVGSVGElement>(null);\n    const [selection, setSelection] = useState<Selection<\n        SVGSVGElement,\n        unknown,\n        null,\n        undefined\n    > | null>(null);\n    const [showToolTip, setShowToolTip] = useState(false);\n    const [toolTipPositions, setToolTipPositions] = useState<{\n        x: number | null;\n        y: number | null;\n    }>({\n        x: null,\n        y: null,\n    });\n    const [toolTipContent, setToolTipContent] = useState({\n        header: '',\n        text: '',\n    });\n\n    const handleResize = useCallback(() => {\n        if (containerRef.current) {\n            setDimensions({\n                ...dimensions,\n                width: containerRef.current.offsetWidth - 50,\n            });\n        }\n    }, [setDimensions, dimensions]);\n\n    useEffect(() => {\n        if (!containerRef.current) {\n            return;\n        }\n        window.addEventListener('resize', handleResize);\n        return () => window.removeEventListener('resize', handleResize);\n    }, [handleResize, dimensions]);\n\n    useEffect(() => {\n        if (containerRef.current) {\n            setDimensions({\n                height: 130,\n                margin: 30,\n                width: containerRef.current.offsetWidth - 50,\n            });\n        }\n    }, [setDimensions]);\n\n    useEffect(() => {\n        if (!selection || !data || !data.length) {\n            setSelection(ref.current && select(ref.current));\n        } else {\n            const x = scaleBand()\n                .domain(data.map(d => d.date))\n                .range([25, dimensions.width - 25]);\n\n            const calculateMaxYValue = max(data, d => Number(d.value)!) || 5;\n            const maxYValue = calculateMaxYValue < 5 ? 5 : calculateMaxYValue;\n\n            const y = scaleLinear()\n                .domain([0, maxYValue])\n                .range([dimensions.height - dimensions.margin, 0]);\n\n            const xAxis = axisBottom(x)\n                .tickValues([])\n                .tickFormat(d => d)\n                .tickSizeOuter(0);\n\n            const yAxis = axisLeft(y)\n                .tickValues([0, maxYValue / 2, maxYValue])\n                .tickSizeOuter(0);\n\n            selection.selectAll('*').remove();\n\n            const svg = selection\n                .append('g')\n                .attr(\n                    'transform',\n                    `translate(${dimensions.margin}, ${dimensions.margin - 10})`\n                );\n            const rects = svg\n                .append('g')\n                .attr('class', 'bar-container')\n                .selectAll('rect')\n                .data(data);\n\n            const rect = rects.enter().append('g');\n\n            rect.append('rect')\n                .attr('width', 2)\n                .attr('height', 2)\n                .attr('display', d => {\n                    if (isToday(d.date)) {\n                        return 'block';\n                    } else {\n                        return 'none';\n                    }\n                })\n                .attr('fill', color)\n                .attr('x', (d, index) => {\n                    if (data.length > 5) {\n                        return x(d.date)! + x.bandwidth() / 2 - BAR_WIDTH / 2;\n                    } else {\n                        return index * 50 + 50;\n                    }\n                })\n                .attr('y', function (d) {\n                    return d.value ? y(d.value) : y(0) - 1;\n                });\n\n            rect.append('circle')\n                .attr('fill', color)\n                .attr('display', d => {\n                    if (isToday(d.date)) {\n                        return 'block';\n                    } else {\n                        return 'none';\n                    }\n                })\n                .attr('stroke', 'none')\n                .attr('cursor', 'pointer')\n                .attr('opacity', '0.2')\n                .attr('cx', (d, index) => {\n                    if (data.length > 5) {\n                        return (\n                            x(d.date)! + x.bandwidth() / 2 - BAR_WIDTH / 2 + 1\n                        );\n                    } else {\n                        return index * 50 + 50 + 1;\n                    }\n                })\n                .attr('cy', d => {\n                    return d.value\n                        ? y(d.value)\n                        : dimensions.height - dimensions.margin;\n                })\n                .attr('r', 8);\n\n            rect.append('rect')\n                .attr('cursor', 'pointer')\n                .attr('width', BAR_WIDTH)\n                .attr('height', d =>\n                    typeof d.value === 'number' && d.value > 0\n                        ? dimensions.height - dimensions.margin - y(d.value)\n                        : 1\n                )\n                .attr('x', (d, index) => {\n                    if (data.length > 5) {\n                        return x(d.date)! + x.bandwidth() / 2 - BAR_WIDTH / 2;\n                    } else {\n                        return index * 50 + 50;\n                    }\n                })\n                .attr('y', d => {\n                    if (typeof d.value === 'number' && d.value > 0) {\n                        return y(d.value);\n                    } else {\n                        return dimensions.height - dimensions.margin - 1;\n                    }\n                })\n                .attr('fill', color)\n                .attr('opacity', d => {\n                    if (isToday(d.date)) {\n                        return 0.5;\n                    } else {\n                        return 1;\n                    }\n                })\n                .on('mouseover', (e, data) => {\n                    setShowToolTip(true);\n                    setToolTipPositions({\n                        x: e.clientX - 35,\n                        y: e.clientY - 75,\n                    });\n                    setToolTipContent({\n                        header: `${data.value || 0}`,\n                        text: data.date,\n                    });\n                })\n                .on('mouseout', () => {\n                    setShowToolTip(false);\n                    setToolTipPositions({ x: null, y: null });\n                });\n\n            rect.append('text')\n                .attr('class', 'x-axis-label')\n                .attr('fill', Variables.Colors.steelGrey)\n                .attr('text-anchor', 'middle')\n                .attr('width', x.bandwidth())\n                .attr('x', (d, index) => {\n                    if (data.length > 5) {\n                        return x(d.date)! + x.bandwidth() / 2 - BAR_WIDTH / 2;\n                    } else {\n                        return index * 50 + 50;\n                    }\n                })\n                .attr('y', () => {\n                    return dimensions.height - dimensions.margin + 20;\n                })\n                .text((d, index) => {\n                    if (index === 0 || index === data.length - 1) {\n                        return formatDateChart(d.date);\n                    } else {\n                        return '';\n                    }\n                });\n\n            svg.append('g')\n                .attr(\n                    'transform',\n                    `translate(0, ${dimensions.height - dimensions.margin})`\n                )\n                .call(xAxis);\n\n            svg.append('rect')\n                .attr('class', 'x-axis-filler')\n                .attr('height', '1px')\n                .attr('width', dimensions.width)\n                .attr(\n                    'transform',\n                    `translate(0, ${dimensions.height - dimensions.margin})`\n                );\n\n            svg.append('g').call(yAxis);\n        }\n    }, [selection, data, dimensions, color]);\n\n    return (\n        <Container ref={containerRef} data-test={dataTest}>\n            <svg\n                ref={ref}\n                width={dimensions.width + dimensions.margin + 10}\n                height={dimensions.height + dimensions.margin}\n            />\n            {showToolTip && (\n                <ToolTip\n                    text={toolTipContent.header}\n                    date={formatDateChart(toolTipContent.text)}\n                    positions={toolTipPositions}\n                    title={label || ''}\n                    singleTitle={singleLabel}\n                />\n            )}\n        </Container>\n    );\n};\n\nexport default LineChart;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst ChartBoxHeader: FC<{ className?: string }> = ({\n    children,\n    className,\n}) => {\n    return <Container className={className}>{children}</Container>;\n};\n\nexport default ChartBoxHeader;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.steelGrey};\n    margin-bottom: 20px;\n`;\n\nexport const ChartBoxDescriptionValue = styled.div`\n    font-size: 11px;\n    font-weight: 600;\n    text-align: right;\n    color: ${props => props.theme.Colors.black};\n`;\n\nexport const ChartBoxDescriptionTitle = styled.div`\n    font-size: 11px;\n    font-weight: 500;\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ChartBoxDescription: FC<{ className?: string }> = ({\n    children,\n    className,\n}) => {\n    return <Container className={className}>{children}</Container>;\n};\n\nexport default ChartBoxDescription;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const DailyTimeSpentIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                width=\"33\"\n                height=\"32\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                ref={ref}\n                className={className}\n            >\n                <g clip-path=\"url(#a)\" fill=\"#B1C0CB\">\n                    <rect x=\"2.5\" y=\"23.938\" width=\"2\" height=\"4.063\" rx=\"1\" />\n                    <rect x=\"8.5\" y=\"9\" width=\"2\" height=\"19\" rx=\"1\" />\n                    <rect x=\"14.5\" y=\"18\" width=\"2\" height=\"10\" rx=\"1\" />\n                    <rect x=\"20.5\" y=\"13\" width=\"2\" height=\"15\" rx=\"1\" />\n                    <rect x=\"26.5\" y=\"2\" width=\"2\" height=\"26\" rx=\"1\" />\n                    <path d=\"M.5 30h32v2H.5z\" />\n                </g>\n                <defs>\n                    <clipPath id=\"a\">\n                        <path\n                            fill=\"#fff\"\n                            transform=\"translate(.5)\"\n                            d=\"M0 0h32v32H0z\"\n                        />\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default DailyTimeSpentIcon;\n","import React, { FC } from 'react';\nimport ChartBox from '../ChartBox/ChartBox';\nimport ChartBoxTitle from '../ChartBox/ChartBoxTitle';\nimport ChartBoxBody from '../ChartBox/ChartBoxBody';\nimport styled from 'styled-components';\nimport { Variables } from '../../../../../../theme/variables';\nimport EmptySection from './EmptySection';\nimport LineChart from '../../../../../../ui/components/Charts/LineChart';\nimport ChartBoxHeader from '../ChartBox/ChartBoxHeader';\nimport ChartBoxDescription, {\n    ChartBoxDescriptionValue,\n} from '../ChartBox/ChartBoxDescription';\nimport DailyTimeSpentIcon from '../../../../../../ui/icons/DailyTimeSpentIcon';\nimport { secondsToMinSimple } from '../../../../../../helpers/functions/convert-time';\n\nconst StyledChartBox = styled(ChartBox)`\n    padding-right: 40px;\n    padding-left: 35px;\n    margin-left: 20px;\n`;\n\ninterface DailyTimeSpentData {\n    date: string;\n    value: number;\n}\n\nconst ChartBoxDescriptionValueStyled = styled(ChartBoxDescriptionValue)`\n    font-size: 13px;\n`;\n\nconst ChartBoxDescriptionValueNormal = styled.span`\n    font-weight: normal;\n`;\n\nconst DailyTimeSpent: FC<{\n    data?: DailyTimeSpentData[];\n    totalTime?: number;\n}> = ({ data, totalTime }) => {\n    return (\n        <StyledChartBox>\n            <ChartBoxHeader>\n                <ChartBoxTitle dataTest=\"time-spent-title\">Time Spent</ChartBoxTitle>\n                {Number(totalTime) > 0 &&\n                    <ChartBoxDescription>\n                        <ChartBoxDescriptionValueStyled data-test=\"total-time-value\">\n                            {secondsToMinSimple(totalTime)}{' '}\n                            <ChartBoxDescriptionValueNormal>\n                                in total\n                            </ChartBoxDescriptionValueNormal>\n                        </ChartBoxDescriptionValueStyled>\n                    </ChartBoxDescription>\n                }\n            </ChartBoxHeader>\n            <ChartBoxBody>\n                {data?.length ?\n                    <LineChart\n                        data={data}\n                        color={Variables.Colors.darkSkyBlue}\n                        label={'min'}\n                        dataTest=\"time-spent-chart\"\n                    /> :\n                    <EmptySection\n                        icon={<DailyTimeSpentIcon/>}\n                        emptyText=\"Shows the time spent by a learner on this Practis Set\"\n                        dataTest=\"empty-time-spent\"\n                    />\n                }\n            </ChartBoxBody>\n        </StyledChartBox>\n    );\n};\n\nexport default DailyTimeSpent;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ScenariosIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                width=\"24\"\n                height=\"24\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                ref={ref}\n                className={className}\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M6.286 19.333h14.286c.79 0 1.429-.595 1.429-1.333V3.333C22 2.597 21.36 2 20.572 2H6.286c-.789 0-1.428.597-1.428 1.333V18c0 .737.64 1.333 1.428 1.333zM19.858 3.334c.395 0 .714.298.714.667v13.333c0 .368-.32.667-.714.667H7c-.394 0-.714-.3-.714-.667V4.001c0-.369.32-.667.715-.667h12.857zm-1.43 12h-10c-.394 0-.714-.3-.714-.668 0-.368.32-.667.714-.667h10c.395 0 .715.299.715.667 0 .369-.32.667-.714.667zm-10-4h10c.395 0 .715-.3.715-.667 0-.368-.32-.667-.714-.667h-10c-.395 0-.715.299-.715.667 0 .368.32.667.714.667zm5.715-4H8.428c-.394 0-.714-.3-.714-.667 0-.369.32-.667.714-.667h5.715c.394 0 .714.298.714.667 0 .368-.32.666-.714.666zM3.429 22h15.714c.79 0 1.429-.597 1.429-1.334H3.429V4.668C2.639 4.668 2 5.264 2 6.001v14.666c0 .737.64 1.334 1.429 1.334z\"\n                    fill=\"#4AA9E2\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default ScenariosIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ChallengeIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                width=\"24\"\n                height=\"24\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                ref={ref}\n                className={className}\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M15.158 2.311v2.95h-1.062v-2.95h1.062zm2.279-.138V1H12.88V9.496l-2.183 3.57-.814-1.31a1 1 0 0 0-1.699 0l-6.033 9.716A1 1 0 0 0 3.002 23h17.776a1 1 0 0 0 .853-1.522L14.02 9.032V6.573h1.138v1.174h6.834V2.173h-4.555zM9.035 12.71l.947 1.525-4.56 7.456H3.459l5.576-8.981zm1.35 8.981v.086h9.804l-6.674-11-6.622 10.914h3.492zM20.803 3.485v2.95h-4.457v-2.95h4.457z\"\n                    fill=\"#EC513D\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default ChallengeIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TickIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                width=\"16\"\n                height=\"16\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                ref={ref}\n                className={className}\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0z\"\n                    fill=\"#0D8770\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default TickIcon;\n","import styled from 'styled-components';\nimport ArrowRight from '../../../../../../../ui/icons/ArrowRight';\nimport TickIcon from '../../../../../../../ui/icons/TickIcon';\n\nexport const StyledListBox = styled.div`\n    border-radius: 4px;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05);\n    border: solid 1px var(--ps-grey-4);\n    display: flex;\n    flex-direction: column;\n`;\n\nexport const StyledScenarioItem = styled.div<{ disabled?: boolean }>`\n    padding: 24px 32px;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    &:hover {\n        background: var(--ps-grey-3);\n        ${props => !props.disabled && `cursor: pointer`}\n    }\n`;\n\nexport const ItemType = styled.span`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n`;\n\nexport const ItemWithIconContainer = styled.div`\n    display: flex;\n    flex-direction: row;\n    align-items: flex-start;\n    width: 45%;\n`;\n\nexport const ItemContainer = styled.div`\n    flex-direction: column;\n    display: flex;\n    padding-left: 8px;\n    padding-right: 8px;\n`;\n\nexport const ItemTitle = styled.span`\n    font-size: 15px;\n    font-weight: bold;\n    color: var(--ps-black-main);\n`;\n\nexport const ItemStatus = styled.span`\n    font-size: 13px;\n    line-height: 16px;\n    margin-top: 8px;\n`;\n\nexport const ItemStatusGreen = styled(ItemStatus)`\n    color: #0d8770;\n`;\n\nexport const ItemStatusBlue = styled(ItemStatus)`\n    color: var(--ps-blue-main);\n`;\n\nexport const ItemStatusGrey = styled(ItemStatus)`\n    color: var(--ps-grey-1);\n`;\n\nexport const RepsContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    min-width: 70px;\n    margin-left: 16px;\n    align-items: flex-start;\n    justify-content: center;\n    width: 20%\n`;\n\nexport const StatisticsValue = styled.span<{ empty?: boolean }>`\n    font-size: 20px;\n    font-weight: 600;\n    color: ${({ empty }) => (empty ? 'var(--ps-grey-2)' : 'var(--ps-black-main)')};\n    line-height: ${({ empty }) => (empty ? '20px' : `unset`)};\n`;\n\nexport const StatisticsIndicator = styled.span`\n    font-size: 16px;\n    font-weight: 800;\n`;\n\nexport const RepsDescription = styled.span`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    font-weight: 600;\n`;\n\nexport const AttemptText = styled.span`\n    font-size: 15px;\n`;\n\nexport const ReviewButton = styled.span`\n    font-size: 13px;\n    color: var(--ps-blue-main);\n    cursor: pointer;\n    margin-top: 3px;\n`;\n\nexport const PlayScreenContainer = styled.div`\n    width: 90px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nexport const PlayScreen = styled.div`\n    width: 90px;\n    height: 90px;\n    border-radius: 8px;\n    background-color: var(--ps-grey-21);\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n`;\n\nexport const PlayButton = styled.div`\n    color: var(--ps-blue-main);\n    width: 24px;\n    height: 24px;\n`\n\nexport const ArrowContainer = styled.div`\n    color: var(--ps-blue-main);\n    width: 24px;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    margin-left: auto;\n`;\n\nexport const ArrowIcon = styled(ArrowRight)<{ disabled?: boolean }>`\n    width: 10px;\n    height: 16px;\n    ${props => props.disabled && `color: #d2dfe6;`}\n`;\n\nexport const StyledTickIcon = styled(TickIcon)`\n    height: 14px;\n`;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PlayTriangle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, width = 24, height = 24 }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width={width}\n                height={height}\n                viewBox=\"0 0 24 24\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path d=\"M4 5.765C4 3.682 5.734 2 7.865 2a3.92 3.92 0 0 1 2.198.67l9.271 6.236A3.74 3.74 0 0 1 21 12c0 1.235-.623 2.4-1.666 3.094l-9.27 6.235a3.975 3.975 0 0 1-2.2.671C5.735 22 4 20.306 4 18.235V5.765z\" fill=\"currentColor\"/>\n            </svg>\n        );\n    }\n);\n\nexport default PlayTriangle;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoPlay = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, width = 32, height = 32 }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width={width}\n                height={height}\n                viewBox=\"0 0 32 32\"\n                className={className}\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path d=\"m26.892 11.846-2.34-1.47L8.055 26.504a5.265 5.265 0 0 0 3.756 1.543 5.462 5.462 0 0 0 2.89-.83l12.19-7.714c1.372-.86 2.191-2.3 2.191-3.829 0-1.528-.82-2.954-2.19-3.828zM19.455 7.13l-4.753-2.998a5.387 5.387 0 0 0-2.891-.83c-2.802 0-5.082 2.082-5.082 4.658v11.615L19.455 7.13z\" fill=\"currentColor\"/>\n                <path d=\"m3.5 27 23-22.5\" stroke=\"#EC513D\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n            </svg>\n        );\n    }\n);\n\nexport default NoPlay;\n","import React, { FC } from 'react';\n\nimport Scenarios from '../../../../../../../ui/icons/Scenarios';\nimport ChallengeIcon from '../../../../../../../ui/icons/ChallengeIcon';\nimport { formatMMDDYY } from '../../../../../../../helpers/functions/date-convert';\nimport { TableDivider } from '../../../../../../../ui/components/table-wrapper/table-divider';\nimport {\n    EnrollmentProgress,\n    TrainingContentType\n} from '../../../../../../../constants/interfaces/Enrollments';\nimport { TrainingMode } from '../../../../../../../constants/enums';\nimport {\n    StyledListBox,\n    StyledScenarioItem,\n    ItemType,\n    ItemContainer,\n    ItemTitle,\n    ItemStatusGreen,\n    RepsContainer,\n    StatisticsValue,\n    StatisticsIndicator,\n    RepsDescription,\n    ArrowContainer,\n    ArrowIcon,\n    StyledTickIcon,\n    ItemStatusBlue,\n    ReviewButton,\n    PlayScreenContainer,\n    PlayScreen,\n    AttemptText,\n    PlayButton,\n    ItemWithIconContainer,\n    ItemStatusGrey,\n} from './styles';\nimport PlayTriangle from '../../../../../../../ui/icons/PlayTriangle';\nimport NoPlay from '../../../../../../../ui/icons/NoPlay';\n\nconst ScenarioListItem: FC<{\n    enrollmentProgress: EnrollmentProgress;\n    redirect: Function;\n    handleReviewReps: Function\n}> = ({ enrollmentProgress, redirect, handleReviewReps }) => {\n    const submission = enrollmentProgress.progress.submissions?.find(\n        s => s.accuracy.modeScenario === TrainingMode.TEST_YOURSELF\n    );\n    const passed = !!enrollmentProgress.progress.completedAt;\n    const inProgress = !passed && enrollmentProgress.progress.countReps > 0;\n    const notStarted = !enrollmentProgress.progress.countReps;\n\n    return (\n        <StyledScenarioItem\n            disabled={!submission}\n            onClick={() => redirect(submission?.id)}\n            data-test=\"scenario-item\"\n        >\n            <ItemWithIconContainer>\n                <div data-test=\"scenario-item-icon\">\n                    <Scenarios />\n                </div>\n                <ItemContainer>\n                    <ItemType data-test=\"scenario-item-text\">Scenario</ItemType>\n                    <ItemTitle data-test=\"scenario-item-title\">{enrollmentProgress.content.title}</ItemTitle>\n                    {passed && (\n                        <ItemStatusGreen data-test=\"scenario-item-status\">\n                            <StyledTickIcon /> Completed{' '}\n                            {submission?.createdAt &&\n                                `on ${formatMMDDYY(\n                                    new Date(submission?.createdAt ?? '')\n                                )}`}\n                        </ItemStatusGreen>\n                    )}\n                    {inProgress && <ItemStatusBlue data-test=\"scenario-item-status\">In Progress</ItemStatusBlue>}\n                    {notStarted && <ItemStatusGrey data-test=\"scenario-item-status\">Not Started</ItemStatusGrey>}\n                </ItemContainer>\n            </ItemWithIconContainer>\n            <RepsContainer>\n                <RepsDescription data-test=\"scenario-reps-text\">Reps</RepsDescription>\n                <StatisticsValue data-test=\"scenario-reps-value\">\n                    <span data-test=\"scenario-reps-count\">{enrollmentProgress.progress.countReps}</span>\n                    <StatisticsIndicator>\n                        {' '}of <span data-test=\"scenario-reps-total-count\">{enrollmentProgress.content.minRepsCount}</span>\n                    </StatisticsIndicator>\n                </StatisticsValue>\n                {enrollmentProgress.progress.countReps > 0 && <ReviewButton data-test=\"scenario-review-button\" onClick={(e) => {\n                    e.stopPropagation();\n                    handleReviewReps(enrollmentProgress.content.scenarioId)\n                }}>Review</ReviewButton>}\n            </RepsContainer>\n            <PlayScreenContainer>\n                {!!submission?.accuracy && (\n                    <PlayScreen data-test=\"practis-set-item-play\">\n                        <PlayButton data-test=\"practis-set-item-play-icon\">\n                            {submission.mediaUrl ? <PlayTriangle /> : <NoPlay width={24} height={24} />}\n                        </PlayButton>\n                    </PlayScreen>\n                )}\n            </PlayScreenContainer>\n            <RepsContainer>\n                <RepsDescription data-test=\"scenario-accuracy-test-text\">Accuracy Test</RepsDescription>\n                <StatisticsValue empty={!submission?.accuracy} data-test=\"scenario-accuracy-value\">\n                    {!!submission?.accuracy ? (\n                        <>\n                            {Math.floor(submission.accuracy.accuracy * 100)}\n                            % • {!!submission?.accuracy && (\n                                <>\n                                    {enrollmentProgress.progress.countTries ?? 0}\n                                    <AttemptText data-test=\"scenario-accuracy-attempts-text\">\n                                        {' '}\n                                        {enrollmentProgress.progress.countTries === 1\n                                            ? 'Attempt'\n                                            : 'Attempts'}\n                                    </AttemptText>\n                                </>\n                            )}\n                        </>\n                    ) : (\n                        <>{'—'}</>\n                    )}\n                </StatisticsValue>\n            </RepsContainer>\n            <ArrowContainer data-test=\"practis-set-item-arrow\">\n                <ArrowIcon disabled={!submission} />\n            </ArrowContainer>\n        </StyledScenarioItem>\n    );\n};\n\nconst ChallengeListItem: FC<{\n    enrollmentProgress: EnrollmentProgress;\n    redirect: Function;\n}> = ({ enrollmentProgress, redirect }) => {\n    const submission = enrollmentProgress.progress.submission;\n    const isSubmitted = submission?.status === 'active';\n\n    return (\n        <StyledScenarioItem\n            disabled={!isSubmitted}\n            onClick={() => isSubmitted && redirect(submission?.id)}\n            data-test=\"challenge-item\"\n        >\n            <ItemWithIconContainer>\n                <div data-test=\"challenge-item-icon\">\n                    <ChallengeIcon />\n                </div>\n                <ItemContainer>\n                    <ItemType data-test=\"challenge-item-text\">Challenge</ItemType>\n                    <ItemTitle data-test=\"challenge-item-title\">{enrollmentProgress.content.title}</ItemTitle>\n                    {submission?.reviewedAt && (\n                        <ItemStatusGreen data-test=\"challenge-item-status\">\n                            <StyledTickIcon /> Reviewed on{' '}\n                            {formatMMDDYY(new Date(submission?.reviewedAt))}\n                        </ItemStatusGreen>\n                    )}\n                    {isSubmitted && !submission!.reviewedAt && (\n                        <ItemStatusGrey data-test=\"challenge-item-status\">Needs Review</ItemStatusGrey>\n                    )}\n                    {!isSubmitted && (\n                        <ItemStatusGrey data-test=\"challenge-item-status\">Not Submitted</ItemStatusGrey>\n                    )}\n                </ItemContainer>\n            </ItemWithIconContainer>\n            <RepsContainer />\n            <PlayScreenContainer>\n                {!!(submission && isSubmitted) && (\n                    <PlayScreen data-test=\"practis-set-item-play\">\n                        <PlayButton data-test=\"practis-set-item-play-icon\">\n                            {submission.mediaUrl ? <PlayTriangle /> : <NoPlay width={24} height={24} />}\n                        </PlayButton>\n                    </PlayScreen>\n                )}\n            </PlayScreenContainer>\n            <RepsContainer>\n                <RepsDescription data-test=\"challenge-score-text\">Score</RepsDescription>\n                <StatisticsValue empty={!submission?.score} data-test=\"challenge-score-value\">\n                    {submission?.score ?? '—'}\n                </StatisticsValue>\n            </RepsContainer>\n            <ArrowContainer data-test=\"practis-set-item-arrow\">\n                <ArrowIcon disabled={!isSubmitted} />\n            </ArrowContainer>\n        </StyledScenarioItem>\n    );\n};\n\nconst ReportsItems: FC<{\n    content?: EnrollmentProgress[];\n    redirectChallenge: Function;\n    redirectScenario: Function;\n    handleReviewReps: Function;\n}> = ({ content, redirectScenario, redirectChallenge, handleReviewReps }) => (\n    <StyledListBox>\n        {content?.map((item, index) => (\n            <>\n                {item.content.type === TrainingContentType.CHALLENGE ? (\n                    <ChallengeListItem\n                        enrollmentProgress={item}\n                        redirect={redirectChallenge}\n                    />\n                ) : item.content.type === TrainingContentType.SCENARIO ? (\n                    <ScenarioListItem\n                        enrollmentProgress={item}\n                        redirect={redirectScenario}\n                        handleReviewReps={handleReviewReps}\n                    />\n                ) : (\n                    <></>\n                )}\n                {index < content.length - 1 && <TableDivider />}\n            </>\n        ))}\n    </StyledListBox>\n);\n\nexport default ReportsItems;\n","import { ListResult } from \"../../../../../../constants/interfaces/PaginationResult\";\nimport { RepLineType } from \"../types\";\n\nexport enum ACTIONS {\n    GET_SCENARIO_REPS_START = 'GET_SCENARIO_REPS_START',\n    GET_SCENARIO_REPS_SUCCESS = 'GET_SCENARIO_REPS_SUCCESS',\n    GET_SCENARIO_REPS_FAILURE = 'GET_SCENARIO_REPS_FAILURE',\n    CLEAR_SCENARIO_REPS = 'CLEAR_SCENARIO_REPS',\n}\nexport function getScenarioRepsStart() {\n    return {\n        type: ACTIONS.GET_SCENARIO_REPS_START as ACTIONS.GET_SCENARIO_REPS_START,\n    };\n}\nexport function getScenarioRepsSuccess(data: ListResult<RepLineType>) {\n    return {\n        type: ACTIONS.GET_SCENARIO_REPS_SUCCESS as ACTIONS.GET_SCENARIO_REPS_SUCCESS,\n        data\n    };\n}\nexport function getScenarioRepsFailure(error: string) {\n    return {\n        type: ACTIONS.GET_SCENARIO_REPS_FAILURE as ACTIONS.GET_SCENARIO_REPS_FAILURE,\n        error\n    };\n}\nexport function clearScenarioReps() {\n    return {\n        type: ACTIONS.CLEAR_SCENARIO_REPS as ACTIONS.CLEAR_SCENARIO_REPS,\n    };\n}","export function toFixedNumber(num: number) {\n    return Math.round(num * 1e2) / 1e2;\n}\n","export const ITEMS_PER_PAGE = 20;\n\nexport const initialSearchParams = {\n    limit: ITEMS_PER_PAGE,\n    offset: 0,\n    numberOfPages: 0,\n    searchTerm: '',\n    orderBy: null,\n}","import { useDispatch } from 'react-redux'\nimport { useCallback } from 'react';\nimport { useGetSubmissionRepLines } from '../../../../../../api';\nimport { useShowMessage } from '../../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ListResult } from '../../../../../../constants/interfaces/PaginationResult';\nimport { getScenarioRepsStart, getScenarioRepsFailure, getScenarioRepsSuccess, clearScenarioReps } from './actions';\nimport { ErrorResult } from '../../../../../../constants/interfaces/ErrorResult';\nimport { SearchParams } from '../../../../../../constants/interfaces/filters';\nimport { RepLineType } from '../types';\n\n/**\n * @function useGetScenarioRepsService\n * @returns { CallableFunction }\n */\nexport const useGetScenarioRepsService = () => {\n    const dispatch = useDispatch();\n    const getScenarioRepsApi = useGetSubmissionRepLines();\n    const showMessage = useShowMessage();\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback((searchParams: SearchParams, enrollmentId: string, scenarioId: string) => {\n        const sp = {\n            limit: searchParams.limit ?? 20,\n            offset: searchParams.offset,\n            enrollmentId: +enrollmentId,\n            scenarioId: +scenarioId\n        }\n        dispatch(getScenarioRepsStart());\n        return getScenarioRepsApi(sp)\n            .then((data: ListResult<RepLineType>) => {\n                dispatch(getScenarioRepsSuccess(data));\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(getScenarioRepsFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, getScenarioRepsApi, showMessage]);\n}\n\n/**\n * @function useClearScenarionRepsService\n * @returns { CallableFunction }\n */\nexport const useClearScenarionRepsService = () => {\n    const dispatch = useDispatch();\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback(() => {\n        dispatch(clearScenarioReps());\n    }, [dispatch]);\n}","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ListResult } from '../../../../../../constants/interfaces/PaginationResult';\nimport { RepLineType } from '../types';\n\nexport interface ScenarioRepsState {\n    data?: ListResult<RepLineType>;\n    isLoading: boolean;\n    error?: string;\n}\nexport type ScenarioRepsStateSelector = (state: any) => ScenarioRepsState;\n\nexport const ScenarioRepsStateSelectorContext = React.createContext<ScenarioRepsStateSelector>(\n    (e) => {\n        throw new Error('Not implemented');\n    }\n);\nexport function useScenarioRepsState(): ScenarioRepsState {\n    return useSelector(useContext(ScenarioRepsStateSelectorContext));\n}\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Title = styled.div`\n    display: flex;\n    align-items: center;\n    font-size: 13px;\n    font-weight: bold;\n    color: var(--ps-grey-1);\n`;\n\nexport const Subtitle = styled.div`\n    font-size: 20px;\n    display: flex;\n    align-items: center;\n    font-weight: bold;\n    color: var(--ps-black-main);\n    margin-bottom: 35px;\n`;\n\nexport const Container = styled.div`\n    background: var(--ps-white-1);\n    padding: 25px;\n    height: 100vh;\n    overflow-y: auto;\n    border-top-left-radius: 12px;\n    border-bottom-left-radius: 12px;\n    position: relative;\n`;\n\nexport const StyledLoading = styled.div`\n    position: absolute;\n    top: calc(230px + (100vh - 230px) / 2);\n    left: 0;\n    width: 100%;\n`;\n\nexport const useStyles = makeStyles(theme => ({\n    tableWrapperStyle: {\n        borderTop: '1px solid var(--ps-grey-4)',\n    },\n    customTableColumnStyle: {\n        paddingLeft: '15px'\n    }\n}))","import { formatDate } from '../../../../../helpers/functions/date-convert';\nimport { ModalPageContainer } from '../../../../../ui/components/ModalPage';\nimport { TableWrapper } from '../../../../../ui/components/table-wrapper';\nimport { ITEMS_PER_PAGE } from './constants';\nimport { Title, Subtitle, Container, useStyles, StyledLoading } from './styles';\nimport { RepLineType, ScenarioRepViewPropsType } from './types';\nimport { trainingModeNames } from '../../../../../constants/enums';\nimport { Loading } from '../../../../../ui/components/LoadingCopmonent';\n\nexport const ScenarioRepsView = ({closePath,\n    closeGoingBack, \n    scenarioName, \n    tableStates, \n    reps,\n    isLoading,\n    lastRefreshed, \n    refreshData,\n    handlePageChange,\n    repGeneralNumber\n}: ScenarioRepViewPropsType) => {\n    const classes = useStyles();\n    return <ModalPageContainer\n            closePath={closePath}\n            closeGoingBack={closeGoingBack}\n            width={'544px'}>\n            <Container>\n                <Title>Scenario</Title>\n                <Subtitle>{scenarioName}</Subtitle>\n                {isLoading && !reps?.items.length && (\n                    <StyledLoading><Loading /></StyledLoading>\n                )}\n                <TableWrapper\n                    tableWrapperClassName={classes.tableWrapperStyle}\n                    tableStates={tableStates}\n                    data={reps?.items}\n                    tableRefreshConfigurations={{\n                        lastRefreshed: lastRefreshed,\n                        refreshData: refreshData,\n                        dataTest: 'scenario-rep-timestamp',\n                    }}\n                    tableToolsOptions={{\n                        pagingOptions: {\n                            totalCount: reps?.count,\n                            itemsPerPage: ITEMS_PER_PAGE,\n                            onPageChange: handlePageChange,\n                            searchOrFiltersApplied: false,\n                            noUrlChange: true,\n                            dataTest: 'rep-line-paging',\n                        },\n                        isSelectedItemOptionsVisible: false,\n                    }}\n                    tableEmptyStateConfigurations={{\n                        shouldShowEmptyState: false\n                    }}\n                    configurations={{\n                        columns: [\n                            {\n                                title: 'Date',\n                                width: 20,\n                                className: classes.customTableColumnStyle,\n                                disabled: tableStates.disableSorting,\n                                dataTest: 'date-column',\n                            },\n                            {\n                                title: 'Mode',\n                                width: 20,\n                                disabled: tableStates.disableSorting,\n                                dataTest: 'mode-column',\n                            },\n                            {\n                                title: 'Rep',\n                                width: 20,\n                                disabled: tableStates.disableSorting,\n                                dataTest: 'rep-column',\n                            },\n                            {\n                                title: 'Accuracy',\n                                width: 20,\n                                disabled: tableStates.disableSorting,\n                                dataTest: 'accuracy-column',\n                            },\n                        ],\n\n                        rowConfig: {\n                            cells: [\n                                {\n                                    fieldType: 'TEXT_FIELD',\n                                    shouldShowEmptyCell: (rep: RepLineType) =>\n                                        !rep.createdAt,\n                                    fieldProps: {\n                                        renderTitle: (rep: RepLineType) => formatDate(rep.createdAt),\n                                        dataTest: 'rep-line-date-item',\n                                    },\n                                },\n                                {\n                                    fieldType: 'TEXT_FIELD',\n                                    shouldShowEmptyCell: (rep: RepLineType) =>\n                                        !rep.accuracy.modeScenario,\n                                    fieldProps: {\n                                        renderTitle: (rep: RepLineType) => trainingModeNames[rep.accuracy.modeScenario],\n                                        dataTest: 'rep-line-mode-item',\n                                    },\n                                },\n                                {\n                                    fieldType: 'TEXT_FIELD',\n                                    shouldShowEmptyCell: (rep: RepLineType) =>\n                                        !rep.repNumber || !repGeneralNumber,\n                                    fieldProps: {\n                                        renderTitle: (rep: RepLineType) => `${rep.repNumber} of ${repGeneralNumber}`,\n                                        dataTest: 'rep-line-rep-item',\n                                    },\n                                },\n                                {\n                                    fieldType: 'TEXT_FIELD',\n                                    shouldShowEmptyCell: (rep: RepLineType) =>\n                                        !rep.accuracy.accuracy,\n                                    fieldProps: {\n                                        renderTitle: (rep: RepLineType) => Math.floor(rep.accuracy.accuracy * 100) + '%',\n                                        dataTest: 'rep-line-accuracy-item',\n                                    },\n                                },\n                            ],\n                        },\n                    }}\n                />\n        </Container>\n    </ModalPageContainer>\n    ;\n}\n","import { FC, useCallback, useEffect, useState } from 'react';\nimport { useParams, withRouter } from 'react-router-dom';\nimport { useSearchParamsState } from '../../../../../constants/interfaces/filters';\nimport { useTableStateHelper } from '../../../../../ui/components/table-wrapper/helper';\nimport { initialSearchParams } from './constants';\nimport { useClearScenarionRepsService, useGetScenarioRepsService } from './store/services';\nimport { useScenarioRepsState } from './store/states';\nimport { usePractisSetReportState } from '../../../store/states';\nimport { ScenarioRepsView } from './view';\nimport { ScenarioRepPropsType } from './types';\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\n\nconst ScenarioRepsController: FC<ScenarioRepPropsType> = ({closePath, closeGoingBack}) => {\n    const { data: reps, isLoading } = useScenarioRepsState();\n    const handleTableStates = useTableStateHelper();\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n\n    const params: {\n        userId?: string;\n        enrollmentId?: string;\n        scenarioId?: string;\n    } = useParams();\n\n    const { userId, enrollmentId, scenarioId } = params;\n    const { enrollment, progress: setProgress } = usePractisSetReportState();\n\n    let repGeneralNumber: number = 0;\n    let scenarioName = '';\n    let creator = '';\n\n    if (enrollment && enrollmentId && scenarioId && enrollment.id === +enrollmentId) {\n        const submission = setProgress?.items.find(({ content }) => content.scenarioId === +scenarioId);\n\n        if (submission) {\n            const { content, progress } = submission;\n\n            scenarioName = content.scenario?.title || '';\n            repGeneralNumber = progress?.countReps || 0;\n            creator = content.scenario?.creator?.firstName + ' ' + content.scenario?.creator?.lastName;\n        }\n    }\n\n    const tableStates = handleTableStates({\n        itemsCount: reps?.items?.length || 0,\n    });\n\n    const { searchParams, setOffset } =\n        useSearchParamsState(initialSearchParams);\n\n    const searchScenarioReps = useGetScenarioRepsService();\n    const clearScenarioReps = useClearScenarionRepsService();\n\n    useEffect(() => {\n        if (enrollmentId && scenarioId) {\n            searchScenarioReps(searchParams, enrollmentId, scenarioId);\n        }\n        return () => {\n            clearScenarioReps();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = useCallback(\n        (_, offset: number): void => {\n            setOffset(offset);\n            enrollmentId && scenarioId && searchScenarioReps({ ...searchParams, offset }, enrollmentId, scenarioId);\n        },\n        [searchParams, setOffset, searchScenarioReps, enrollmentId, scenarioId]\n    );\n\n    /**\n    * @function refreshData\n    * @returns { void }\n    */\n   const refreshData = useCallback(() => {\n           enrollmentId && scenarioId && searchScenarioReps(searchParams, enrollmentId, scenarioId);\n           setLastRefreshed(new Date());\n   }, [searchScenarioReps, searchParams, enrollmentId, scenarioId]);\n\n   useHtmlPageTitle('Rep log', [creator, scenarioName]);\n\n    return <ScenarioRepsView\n        closePath={closePath\n            .replace(':userId', userId ?? '')\n            .replace(':enrollmentId', enrollmentId ?? '')\n            .replace(':scenarioId', scenarioId ?? '')\n        }\n        closeGoingBack={closeGoingBack}\n        scenarioName={scenarioName}\n        tableStates={tableStates}\n        reps={reps}\n        isLoading={isLoading}\n        lastRefreshed={lastRefreshed}\n        refreshData={refreshData}\n        handlePageChange={handlePageChange}\n        repGeneralNumber={repGeneralNumber}\n    />;\n}\n\nexport default withRouter(ScenarioRepsController);","import { AppState } from './reducers';\r\n\r\nfunction selectAppState(state: AppState) {\r\n    return state as AppState;\r\n}\r\n\r\nexport function selectTrainerState(state: AppState) {\r\n    return selectAppState(state).progress;\r\n}\r\n\r\nexport function selectTainerPractisSetState(state: AppState) {\r\n    return selectAppState(state).practisSetsTraining;\r\n}\r\n\r\nexport function selectUpdatedProgressState(state: AppState) {\r\n    return selectTrainerState(state).updatedProgress;\r\n}\r\n\r\nexport function PractisSetsEnrollmentState(state: AppState) {\r\n    return selectTrainerState(state).enrollments;\r\n}\r\n\r\nexport function TrainerInvitationState(state: AppState) {\r\n    return selectAppState(state).assignUsers;\r\n}\r\n\r\nexport function PractisSetReportsState(state: AppState) {\r\n    return selectTrainerState(state).report;\r\n}\r\n\r\nexport function UsersState(state: AppState) {\r\n    return selectAppState(state).users;\r\n}\r\n\r\nexport function AuthState(state: AppState) {\r\n    return selectAppState(state).auth;\r\n}\r\n\r\nexport function InvitationsState(state: AppState) {\r\n    return selectAppState(state).invitations;\r\n}\r\n\r\nexport function UserPerformanceState(state: AppState) {\r\n    return selectAppState(state).performance;\r\n}\r\n\r\nexport function UpdatedUsersState(state: AppState) {\r\n    return selectAppState(state).updatedUsers;\r\n}\r\n\r\nexport function UpdatedInvitationsState(state: AppState) {\r\n    return selectAppState(state).updatedInvitations;\r\n}\r\n\r\nexport function UpdatedUserPractisSetsState(state: AppState) {\r\n    return selectAppState(state).updatedUserPractisSets;\r\n}\r\n\r\nexport function VoiceGenerationState(state: AppState) {\r\n    return selectAppState(state).voiceGeneration;\r\n}\r\n\r\nexport function LibraryPractisSetsState(state: AppState) {\r\n    return selectAppState(state).libraryPractisSets;\r\n}\r\n\r\nexport function UpdatedLibraryPractisSetsState(state: AppState) {\r\n    return selectAppState(state).libraryUpdatedPractisSets;\r\n}\r\n\r\nexport function LibraryScenariosState(state: AppState) {\r\n    return selectAppState(state).libraryScenarios;\r\n}\r\n\r\nexport function UpdatedLibraryScenariosState(state: AppState) {\r\n    return selectAppState(state).libraryUpdatedScenarios;\r\n}\r\n\r\nexport function LibraryChallengesState(state: AppState) {\r\n    return selectAppState(state).libraryChallenges;\r\n}\r\n\r\nexport function UpdatedLibraryChallengesState(state: AppState) {\r\n    return selectAppState(state).libraryUpdatedChallenges;\r\n}\r\n\r\nexport function ChallengeState(state: AppState) {\r\n    return selectAppState(state).challenge;\r\n}\r\n\r\nexport function SubmissionsState(state: AppState) {\r\n    return selectAppState(state).submissions;\r\n}\r\n\r\nexport function SubmissionPaginationState(state: AppState) {\r\n    return selectAppState(state).submissionPagination;\r\n}\r\n\r\nexport function SubmissionDetailsState(state: AppState) {\r\n    return selectAppState(state).submissionDetails;\r\n}\r\n\r\nexport function AccuracyScoreState(state: AppState) {\r\n    return selectAppState(state).accuracyscore;\r\n}\r\n\r\nexport function UpdatedSubmissionsState(state: AppState) {\r\n    return selectAppState(state).updatedSubmissions;\r\n}\r\n\r\nexport function CompanyVoiceSettingsState(state: AppState) {\r\n    return selectAppState(state).companyVoiceSettings;\r\n}\r\n\r\nexport function LabelsState(state: AppState) {\r\n    return selectAppState(state).labels;\r\n}\r\n\r\nexport function LabelsConfigState(state: AppState) {\r\n    return selectAppState(state).labelsConfig;\r\n}\r\n\r\nexport function UpdatedLabelsState(state: AppState) {\r\n    return selectAppState(state).updatedLabels;\r\n}\r\n\r\nexport function SelectPermissionsState(state: AppState) {\r\n    const profile = selectAppState(state).profile.info;\r\n    return profile && profile.permissions ? profile.permissions : [];\r\n}\r\n\r\nexport function SelectLogsState(state: AppState) {\r\n    return selectAppState(state).logs;\r\n}\r\nexport function SelectTelepromterState(state: AppState) {\r\n    return selectAppState(state).telepromter;\r\n}\r\n\r\nexport function DraftsState(state: AppState) {\r\n    return selectAppState(state).drafts;\r\n}\r\n\r\nexport function DraftEditState(state: AppState) {\r\n    return selectAppState(state).draftEdit;\r\n}\r\n\r\nexport function UpdatedDraftsState(state: AppState) {\r\n    return selectAppState(state).updatedDrafts;\r\n}\r\n\r\nexport function SelectAiLogsState(state: AppState) {\r\n    return selectAppState(state).aiLogs;\r\n}\r\n\r\nexport function TeamsState(state: AppState) {\r\n    return selectAppState(state).teams;\r\n}\r\n\r\nexport function UpdatedMembersState(state: AppState) {\r\n    return selectAppState(state).updatedMembers;\r\n}\r\n\r\nexport function UpdatedTeamsState(state: AppState) {\r\n    return selectAppState(state).updatedTeams;\r\n}\r\n\r\nexport function TeamMembersState(state: AppState) {\r\n    return selectAppState(state).teamMembers;\r\n}\r\n\r\nexport function TeamsEditState(state: AppState) {\r\n    return selectAppState(state).teamEdit;\r\n}\r\n\r\nexport function RolesState(state: AppState) {\r\n    return selectAppState(state).roles;\r\n}\r\n\r\nexport function CompanyAdminsState(state: AppState) {\r\n    return selectAppState(state).companyAdmins;\r\n}\r\n\r\nexport function CompanyUserStatsState(state: AppState) {\r\n    return selectAppState(state).companyUserStats;\r\n}\r\n\r\nexport function ReportsState(state: AppState) {\r\n    return selectAppState(state).reports;\r\n}\r\n\r\nexport function OverdueLearnersState(state: AppState) {\r\n    return selectAppState(state).overdueLearners;\r\n}\r\n\r\nexport function ScenarioRepsState(state: AppState) {\r\n    return selectAppState(state).scenarioReps;\r\n}\r\n\r\nexport function RoleplaysState(state: AppState) {\r\n    return selectAppState(state).roleplays\r\n}\r\n\r\nexport function RoleplayState(state: AppState) {\r\n    return selectAppState(state).roleplay\r\n}","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Published = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 24 24\"\n                className={className}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M448.782 65.759l-10.473 10.414c-.016.02-.01.048-.027.066-.15.15-.347.215-.544.21-.2.007-.4-.055-.552-.208-.022-.021-.014-.055-.033-.078l-4.43-4.405c-.29-.288-.29-.756 0-1.046.29-.288.76-.288 1.051 0l3.959 3.937 9.995-9.938c.29-.29.763-.29 1.054 0 .29.289.29.759 0 1.048zm-11.785-4.26c-5.799 0-10.5 4.701-10.5 10.5 0 5.8 4.701 10.5 10.5 10.5s10.5-4.7 10.5-10.5c0-.227-.053-.438-.067-.661l1.383-1.344c.11.654.18 1.32.18 2.005 0 6.628-5.37 12-11.996 12S425 78.627 425 71.999C425 65.372 430.37 60 436.997 60c3.04 0 5.808 1.14 7.923 3.005l-1.103 1.072c-1.838-1.585-4.203-2.578-6.82-2.578z\"\n                                transform=\"translate(-1167 -60) translate(742)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default Published;\n","import { useMemo } from \"react\";\nimport { UserProfile, UserV2 } from \"../../../constants/interfaces/User\";\nimport { useLoggedInUserProfileState } from '../../users/store/states';\nimport { hasPermission, NEW_PERMISSIONS } from '../../users/tools';\nimport { getBulkActionAvailabilityItem, getBulkActionsAvailability } from \"../../../tools/bulkActions\";\n\nexport enum TraineeInvitationActions {\n    SET_DUEDATE,\n}\n\n\nfunction createTraineeInvitationActionHelper(loggedInUser: UserProfile | undefined) {    \n    const canUpdateDueDate = () => hasPermission(loggedInUser, NEW_PERMISSIONS.SET_DUE_DATE);\n\n    const getBulkActions = (trainees?: (UserV2 & {dueDate?: Date})[]) =>\n        getBulkActionsAvailability(\n            trainees,\n            [\n                getBulkActionAvailabilityItem(\n                    TraineeInvitationActions.SET_DUEDATE,\n                    trainees,\n                    canUpdateDueDate\n                ),\n            ]\n        );\n\n    return {\n        canUpdateDueDate,\n        getBulkActions,\n    };\n}\n\nexport type TraineeInvitationActionHelper = ReturnType<typeof createTraineeInvitationActionHelper>;\n\nexport function useTraineeInvitationActionHelpers() {\n    const loggedInUser = useLoggedInUserProfileState();\n    return useMemo(\n        () => createTraineeInvitationActionHelper(loggedInUser),\n        [loggedInUser]\n    );\n}\n ","import { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { UserV2 } from '../../../../constants/interfaces/User';\nimport dayjs from 'dayjs';\nimport { DATE_FORMAT } from '../../../../constants/interfaces/DueDates';\n/**\n * @description find selected trainee due date\n * @function findSelectedTraineeDueDate\n * @param { PaginationResult<UserInterface> | undefined } trainees\n * @param { number } selectedTraineeId\n * @returns { string | null }\n */\nexport const findSelectedTraineeDueDate = (\n    trainees: ListResult<UserV2 & {dueDate?: Date}> | undefined,\n    selectedTraineeId: number\n): string | null => {\n    const date = trainees?.items?.find(trainee => trainee.id === selectedTraineeId)?.dueDate;\n\n    return date ? dayjs(date as Date).format(DATE_FORMAT) : null;\n};\n","import styled from 'styled-components';\n\nexport const ActionMenuHandler = styled.div<{\n    open: boolean;\n    hasCustomComponent: boolean;\n}>`\n    width: 10px;\n    ${({ hasCustomComponent }) => !hasCustomComponent && `height: 24px;`}\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    border-radius: 8px;\n    color: ${props => props.theme.Colors.steelGrey};\n    box-shadow: ${props =>\n        props.open && !props.hasCustomComponent\n            ? `0 0 0 1px ${props.theme.Colors.cloudyBlue}`\n            : 'none'};\n    background-color: ${props =>\n        props.open && !props.hasCustomComponent\n            ? props.theme.Colors.whiteTwo\n            : 'unset'};\n`;\n\nexport const IconContainer = styled.div`\n    height: 100%;\n    width: 12px;\n    cursor: pointer;\n    margin: 0 5px;\n    display: flex;\n    align-items: center;\n    &:active {\n        opacity: 0.7;\n    }\n`;\n\nexport const menuPaperStyle = {\n    width: 168,\n    boxShadow: '0 5px 20px 0 rgba(0, 0, 0, 0.1)',\n    padding: '8px',\n    borderRadius: 8,\n    background: '#fff',\n    right: 20,\n    marginTop: 40,\n};\n","import { FC, Fragment, useState } from 'react';\nimport { Menu } from '@material-ui/core';\n\nimport { ActionItem } from '../../../../../../../ui/components/ActionButton';\n\nimport Dots from '../../../../../../../ui/icons/Dots';\nimport { CheckPermission } from '../../../../../../permissions';\nimport { ActionMenuHandler, IconContainer, menuPaperStyle } from './styles';\nimport { DueDateListActionProps } from './contants';\n\nconst uuid = require('uuid/v1');\n\nconst DueDateListAction: FC<DueDateListActionProps> = props => {\n    const { actions } = props;\n\n    const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n    const isVisible = Boolean(anchorEl);\n\n    /**\n     * @function handleToggle\n     * @param { React.MouseEvent<HTMLElement> } event\n     * @returns { void }\n     */\n    const handleToggle = (event: React.MouseEvent<HTMLElement>): void => {\n        setAnchorEl(event.currentTarget);\n    };\n\n    /**\n     * @function handleClose\n     * @returns { void }\n     */\n    const handleClose = (): void => {\n        setAnchorEl(null);\n    };\n\n    return (\n        <>\n            <IconContainer onClick={handleToggle} data-test=\"due-date-actions-button\">\n                <ActionMenuHandler open={isVisible} hasCustomComponent={false}>\n                    <Dots />\n                </ActionMenuHandler>\n            </IconContainer>\n            {isVisible && (\n                <Menu\n                    id=\"Due-Date-Menu\"\n                    MenuListProps={{\n                        'aria-labelledby': 'long-button',\n                    }}\n                    anchorEl={anchorEl}\n                    open={isVisible}\n                    onClose={handleClose}\n                    PaperProps={{\n                        style: menuPaperStyle,\n                    }}\n                >\n                    {actions.map(action => {\n                        const { title, permissions, onClick, dataTest } = action;\n\n                        return (\n                            <Fragment key={uuid()}>\n                                {permissions ? (\n                                    <CheckPermission permissions={permissions}>\n                                        <ActionItem\n                                            onClick={() => {\n                                                onClick();\n                                                handleClose();\n                                            }}\n                                            dataTest={dataTest}\n                                        >\n                                            {title}\n                                        </ActionItem>\n                                    </CheckPermission>\n                                ) : (\n                                    <ActionItem\n                                        onClick={() => {\n                                            onClick();\n                                            handleClose();\n                                        }}\n                                    >\n                                        {title}\n                                    </ActionItem>\n                                )}\n                            </Fragment>\n                        );\n                    })}\n                </Menu>\n            )}\n        </>\n    );\n};\n\nexport default DueDateListAction;\n","import { History } from 'history';\r\nimport { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router';\r\n\r\nimport ModalPage, {\r\n    ModalPageContainerProps,\r\n} from '../../../../ui/components/ModalPage/ModalPage';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../constants/interfaces/filters';\r\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport { PractisSets } from '../../../../constants/interfaces/PractisSets';\r\nimport { UserInterface, UserProfile, UserV2 } from '../../../../constants/interfaces/User';\r\nimport { PractisSetsEnrollmentState } from '../../../../store/selectors';\r\nimport {\r\n    useClearLabelFilterActionService,\r\n    useEnrollPractisSetsToUsersService,\r\n    useGetPractisSetService,\r\n    useSaveSelectedInvitationLabelsService,\r\n    useSearchAssignUsersService,\r\n    useUpdateAllSelectedInvitationTraineesStateService,\r\n    useUpdateSelectedInvitationTraineesStateService,\r\n} from '../../store/services';\r\nimport { useTrainerInvitationState } from '../../store/states';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport {\r\n    formatDate,\r\n    formatDateWithTimeZone,\r\n} from '../../../../helpers/functions/date-convert';\r\nimport { useLabelsState } from '../../../labels/store/states';\r\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\r\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\r\nimport {\r\n    clearSelectedItemIfNotLoaded,\r\n    useHandleSelectLabels,\r\n} from '../../../labels/tools';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { Label } from '../../../../constants/interfaces/Label';\r\nimport { listToTree } from '../../../../helpers/functions/list-to-tree';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { WithLabelsContext } from '../../../portableLabels';\r\nimport Published from '../../../../ui/icons/Published';\r\nimport { useLabelsState as useLocalLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../portableLabels/store/hors/withLabels/services';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { AllUsersFilter } from '../ManageTeam/components/Filters/AllUsersFilters';\r\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\r\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\r\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\r\nimport User from '../../../../ui/icons/User';\r\nimport {\r\n    TraineeInvitationActionHelper,\r\n    TraineeInvitationActions,\r\n    useTraineeInvitationActionHelpers,\r\n} from '../../tools/TraineeInvitationActionHelpers';\r\nimport { findSelectedTraineeDueDate } from './helper';\r\nimport { DueDateCalendar } from '../../../../ui/components/DueDateCalendar';\r\nimport DueDateListAction from './components/ListActions/DueDateListAction';\r\nimport { isEmpty as lodashIsEmpty, uniqBy } from 'lodash';\r\nimport {\r\n    DueDateType,\r\n} from '../../../../constants/interfaces/DueDates';\r\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\r\nimport {\r\n    Avatar,\r\n    AvatarTile,\r\n    CancelWrapper,\r\n    IconWrapper,\r\n    InvitationHeader,\r\n    InvitationHeaderSubText,\r\n    InvitationHeaderWrapper,\r\n    QuickAssignmentInvitationFooter,\r\n    QuickAssignmentInvitationHeaderText,\r\n    StyledFirstTableItemContent,\r\n    StyledTableCell,\r\n    StyledTraineeInvitationContainer,\r\n    useStyles,\r\n} from './styles';\r\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\r\nimport { TableDivider } from '../../../../ui/components/table-wrapper/table-divider';\r\nimport { TableLabelTags } from '../../../../ui/components/table-wrapper/table/TableLabelTags';\r\nimport TableTitleOverflowText from '../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\r\nimport { TableViewMode } from '../../../../ui/components/table-wrapper/table/type';\r\nimport { countAppliedFiltersCount } from './tools';\r\nimport { useCreateEnrollmentBulkActionService } from './services/EnrollmentBulkActionsService';\r\nimport { EnrollmentType } from '../../../../api/enrollments/types';\r\nimport useHtmlPageTitle from '../../../../helpers/hooks/useHtmlPageTitle';\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst TraineeQuickAssignment: FC<{\r\n    profile?: UserProfile;\r\n    history: History<any>;\r\n    searchTrainees(searchParams: SearchParams, isRefreshed?: boolean): void;\r\n    params: { practisSetId?: number };\r\n    trainees?: ListResult<UserV2 & {dueDate?: Date}>;\r\n    selectedTrainees?: number[];\r\n    updateSelectedTrainees(userId: number): void;\r\n    updateAllSelectedTrainees(\r\n        userIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    practisSet?: PractisSets;\r\n    updateTrainees?: Array<any>;\r\n    loading?: boolean;\r\n    onEnrollPractisSetsToUsers: (params: EnrollmentType[]) => Promise<void>;\r\n    onGetPractisSet: (practisSetId: number) => void;\r\n    selectedLabels?: number[];\r\n    actionsHelper: TraineeInvitationActionHelper;\r\n}> = ({\r\n    profile,\r\n    trainees,\r\n    selectedTrainees,\r\n    updateSelectedTrainees,\r\n    updateAllSelectedTrainees,\r\n    params,\r\n    searchTrainees,\r\n    loading,\r\n    updateTrainees,\r\n    onEnrollPractisSetsToUsers,\r\n    history,\r\n    onGetPractisSet,\r\n    practisSet,\r\n    selectedLabels,\r\n    actionsHelper,\r\n}) => {\r\n    const classes = useStyles();\r\n    const localLabels = useLocalLabelsState();\r\n    const labelsList = usePortableLabelsState();\r\n    const saveLabels = useSaveLabels();\r\n    const setLabelSelect = useSelectLabels();\r\n    const handleSelectLabels = useHandleSelectLabels();\r\n    const labelsTree = listToTree(labelsList.data.items);\r\n    const [isDueDateCalendarVisible, setIsDueDateCalendarVisible] =\r\n        useState<boolean>(false);\r\n\r\n    const [dueDateData, setDueDateData] = useState<any>();\r\n    const [dueDates, setDueDates] = useState<DueDateType>();\r\n\r\n    useHtmlPageTitle('Assign Users and Due Dates', [practisSet?.name]);\r\n\r\n    const localSelectedLabels = useMemo(\r\n        () =>\r\n            localLabels.saved.length > 0\r\n                ? localLabels.saved\r\n                : selectedLabels || [],\r\n        [localLabels.saved, selectedLabels]\r\n    );\r\n\r\n    const isCheckboxPartiallySelected =\r\n        trainees &&\r\n        trainees.items &&\r\n        selectedTrainees &&\r\n        selectedTrainees.length < trainees.items.length;\r\n\r\n    const isListEmpty = !trainees || !trainees?.items?.length;\r\n\r\n    useEffect(() => {\r\n        if (localLabels.saved.length < 1 && selectedLabels) {\r\n            setLabelSelect(selectedLabels);\r\n        }\r\n    }, [selectedLabels, localLabels.saved, setLabelSelect]);\r\n\r\n    const onLocalRemoveLabels = (label: Label) => {\r\n        if (localSelectedLabels.length > 0) {\r\n            setLabelSelect(\r\n                handleSelectLabels(label, localSelectedLabels, labelsTree)\r\n            );\r\n            saveLabels();\r\n        }\r\n    };\r\n\r\n    const scrollRef = useRef<any>(null);\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        orderBy: { field: 'name', asc: true },\r\n        practisSetId: params.practisSetId,\r\n        filters: [],\r\n        labelIDs: localSelectedLabels,\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        companyId: profile?.companyId\r\n    };\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOffset,\r\n        setLabelIDs,\r\n        refreshSearchParams,\r\n        setOrderBy,\r\n        setCustom,\r\n    } = useSearchParamsState(initialSearchParams);\r\n\r\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\r\n\r\n    const refreshData = useCallback(() => {\r\n        searchTrainees(\r\n            {\r\n                ...searchParams,\r\n                offset: 0,\r\n                limit: ITEMS_PER_PAGE + searchParams.offset, // we should increase the limit to fetch all loaded data again\r\n            },\r\n            true\r\n        );\r\n        setLastRefreshed(new Date());\r\n        updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n    }, [\r\n        searchParams,\r\n        searchTrainees,\r\n        updateAllSelectedTrainees,\r\n        isCheckboxPartiallySelected,\r\n    ]);\r\n\r\n    const ifSearchParamsChanged = useIfChanged(searchParams);\r\n\r\n    useEffect(() => {\r\n        params.practisSetId && onGetPractisSet(params.practisSetId);\r\n    }, [onGetPractisSet, params.practisSetId]);\r\n\r\n    useEffect(() => {\r\n        if (ifSearchParamsChanged) {\r\n            searchParams.limit = ITEMS_PER_PAGE;\r\n            searchTrainees(searchParams);\r\n        }\r\n    }, [searchTrainees, searchParams, ifSearchParamsChanged]);\r\n\r\n    useEffect(() => {\r\n        localSelectedLabels && setLabelIDs(localSelectedLabels);\r\n    }, [localSelectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (updateTrainees && updateTrainees.length > 0) {\r\n            refreshSearchParams();\r\n        }\r\n    }, [updateTrainees, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        return () =>\r\n            updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [trainees?.count]);\r\n\r\n    /**\r\n     * @function onChangeOrderBy\r\n     * @param { string } field\r\n     */\r\n    const onChangeOrderBy = (field: string): void => {\r\n        setOrderBy(field);\r\n        onClearSelection();\r\n    };\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const atFirstName = useOrderBy('name', orderBy, onChangeOrderBy);\r\n    const atRegisteredOn = useOrderBy('date_registered', orderBy, onChangeOrderBy);\r\n\r\n    const [disabledAssign, setDisabledAssign] = useState(true);\r\n    const [loadingAssign, setLoadingAssign] = useState(false);\r\n    const [isSelectAll, setIsSelectAll] = useState(false);\r\n\r\n    useEffect(() => {\r\n        if (selectedTrainees && selectedTrainees.length > 0) {\r\n            setDisabledAssign(false);\r\n        } else {\r\n            setDisabledAssign(true);\r\n        }\r\n    }, [selectedTrainees]);\r\n\r\n    const updateAllTraineesCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const userIds =\r\n                (trainees &&\r\n                    trainees.items.map(({id}: UserV2) => id)) ||\r\n                [];\r\n            updateAllSelectedTrainees(\r\n                userIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [trainees, isCheckboxPartiallySelected, updateAllSelectedTrainees]\r\n    );\r\n\r\n    const handleTraineeCheck = (e: any, user: UserInterface) => {\r\n        e.stopPropagation();\r\n        if (!!user.id) {\r\n            updateSelectedTrainees(user.id);\r\n        }\r\n    };\r\n\r\n    const enrollmentParams = {\r\n        practisSetId: params.practisSetId as number,\r\n        enrollments:\r\n            selectedTrainees?.map(selectedTrainee => ({\r\n                userId: selectedTrainee,\r\n                practisSetId: params.practisSetId as number,\r\n                dueDate: findSelectedTraineeDueDate(trainees, selectedTrainee) ??\r\n                    dueDates?.[selectedTrainee]\r\n                        ? dueDates?.[selectedTrainee] as string\r\n                        : null,\r\n            })) ?? [],\r\n        search: searchParams,\r\n        dueDate: isSelectAll ? dueDateData?.selectAllDueDate : null\r\n    }\r\n\r\n    const handleCreateEnrollmentsBulkActionSuccess = () => {\r\n        refreshData()\r\n        updateAllSelectedTrainees([], true, false);\r\n        history.goBack();\r\n    }\r\n\r\n    const handleCreateEnrollmentsBulkActionService =\r\n        useCreateEnrollmentBulkActionService(\r\n            enrollmentParams,\r\n            trainees?.count,\r\n            handleCreateEnrollmentsBulkActionSuccess\r\n        );\r\n\r\n    const handleTraineeInvitation = () => {\r\n        setLoadingAssign(true);\r\n        if (isSelectAll) {\r\n            handleCreateEnrollmentsBulkActionService();\r\n        } else {\r\n            onEnrollPractisSetsToUsers(enrollmentParams.enrollments)\r\n                .then(() => handleCreateEnrollmentsBulkActionSuccess())\r\n        }\r\n        setLoadingAssign(false);\r\n    };\r\n\r\n    useEffect(() => {\r\n        const filteredPractisSetsEnrollments = trainees\r\n            ? trainees.items.map(trainee => trainee.id)\r\n            : [];\r\n        const traineesToClear = clearSelectedItemIfNotLoaded(\r\n            selectedTrainees,\r\n            filteredPractisSetsEnrollments\r\n        );\r\n        if (traineesToClear && traineesToClear.length > 0) {\r\n            updateAllSelectedTrainees(traineesToClear, false);\r\n        }\r\n    }, [selectedTrainees, trainees, updateAllSelectedTrainees]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            selectedTrainees?.length &&\r\n            selectedTrainees.length === trainees?.count\r\n        ) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [trainees?.count, selectedTrainees]);\r\n\r\n    useEffect(() => {\r\n        if (isSelectAll) {\r\n            const userIds =\r\n                (trainees &&\r\n                    trainees.items.map(({id}: UserV2) => id)) ||\r\n                [];\r\n            updateAllSelectedTrainees(\r\n                userIds,\r\n                true,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        }\r\n\r\n        if (dueDateData?.selectAllDueDate) {\r\n            const changedDueDates: DueDateType = {};\r\n            (trainees?.items || []).forEach(({ id }) => {\r\n                changedDueDates[id] = dueDateData?.selectAllDueDate;\r\n            });\r\n            setDueDates({ ...dueDates, ...changedDueDates });\r\n        }\r\n\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [trainees]);\r\n\r\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\r\n        null\r\n    );\r\n    const filterByRegistrationLength: any =\r\n        searchParams?.filterByRegistrationStatus?.length;\r\n\r\n    const handleToggleLabels = (itemId?: number) => {\r\n        if (!itemId) return;\r\n        if (labelsOpen === itemId) {\r\n            setLabelsOpen(null);\r\n        } else {\r\n            setLabelsOpen(itemId);\r\n        }\r\n    };\r\n\r\n    const clearLabelFilters = useClearLabelFilterActionService();\r\n    const saveLabelFilters = useSaveSelectedInvitationLabelsService();\r\n    useEffect(() => {\r\n        return () => {\r\n            clearLabelFilters();\r\n            saveLabelFilters();\r\n        };\r\n    }, [clearLabelFilters, saveLabelFilters]);\r\n\r\n    const labelChangeHandler = (ids: number[]) => {\r\n        setLabelIDs(ids);\r\n    };\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: countAppliedFiltersCount(searchParams),\r\n        itemsCount: trainees?.items.length || 0,\r\n    });\r\n\r\n    const registrationStatusHandler = (values: string[]) => {\r\n        setCustom('filterByRegistrationStatus', values);\r\n    };\r\n\r\n    const bulkActions = useMemo(\r\n        () =>\r\n            actionsHelper.getBulkActions(\r\n                trainees?.items.filter(x => selectedTrainees?.includes(x.id))\r\n            ),\r\n        [selectedTrainees, actionsHelper, trainees?.items]\r\n    );\r\n\r\n    const handleCancel = () => {\r\n        history.goBack();\r\n    };\r\n\r\n    const getUserDueDate = (userId: number) => {\r\n        const user = trainees?.items.find(item => item.id === userId);\r\n        return user && (dueDates?.[user.id] || user?.dueDate)\r\n            ? formatDateWithTimeZone(\r\n                  dueDates?.[user?.id] || (user?.dueDate as Date)\r\n              )\r\n            : null;\r\n    };\r\n\r\n    const openDueDatePopup = async (userId?: number) => {\r\n        let dueDate = null;\r\n        let type = '';\r\n\r\n        const dueDates = userId\r\n            ? [getUserDueDate(userId)]\r\n            : selectedTrainees?.map(id => {\r\n                  return getUserDueDate(id);\r\n              });\r\n\r\n        const dueDateSet = uniqBy(dueDates, item => item);\r\n\r\n        if (dueDateSet.length > 1) {\r\n            type = 'MULTIPLE';\r\n        } else {\r\n            type = dueDateSet[0]\r\n                ? 'SINGLE'\r\n                : isSelectAll && dueDateData?.selectAllDueDate\r\n                ? 'MULTIPLE'\r\n                : 'NO_DUEDATE';\r\n            [dueDate] = dueDateSet;\r\n        }\r\n\r\n        const data = {\r\n            count: selectedTrainees?.length,\r\n            type,\r\n            dueDate,\r\n        };\r\n\r\n        setDueDateData({\r\n            ...data,\r\n            enrollmentIds: userId ? [userId] : selectedTrainees,\r\n        });\r\n        setIsDueDateCalendarVisible(true);\r\n    };\r\n\r\n    const updateDueDate = async (date: string | null) => {\r\n        if (isSelectAll) {\r\n            setDueDateData({ ...dueDateData, selectAllDueDate: date });\r\n        }\r\n\r\n        const { enrollmentIds } = dueDateData;\r\n\r\n        const changedDueDates: DueDateType = {};\r\n        enrollmentIds.forEach((id: number) => {\r\n            changedDueDates[id] = date;\r\n        });\r\n\r\n        setDueDates({ ...dueDates, ...changedDueDates });\r\n        setIsDueDateCalendarVisible(false);\r\n        refreshData();\r\n    };\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        const userIds =\r\n            (trainees &&\r\n                trainees.items.map(({id}: UserV2) => id)) ||\r\n            [];\r\n        updateAllSelectedTrainees(userIds, false, true);\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        updateAllTraineesCheck(event.target.checked);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked =\r\n        !!selectedTrainees && !!selectedTrainees.length;\r\n\r\n    const isMasterCheckBoxDisabled = tableStates.disableSorting;\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { UserInterface } user\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (user: UserInterface): boolean =>\r\n        !!selectedTrainees && !!user.id && selectedTrainees.includes(user.id);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { UserInterface } user\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, user: UserInterface) => {\r\n        handleTraineeCheck(event, user);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsLabelTagsOpen\r\n     * @param { UserInterface } user\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsLabelTagsOpen = (user: UserInterface): boolean => {\r\n        return labelsOpen === user?.['id'];\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <StyledTraineeInvitationContainer>\r\n                <InvitationHeader>\r\n                    <div>\r\n                        <InvitationHeaderWrapper>\r\n                            <QuickAssignmentInvitationHeaderText data-test=\"practis-set-published-title\">\r\n                                Practis Set has been published\r\n                            </QuickAssignmentInvitationHeaderText>\r\n                            <IconWrapper>\r\n                                <Published />\r\n                            </IconWrapper>\r\n                        </InvitationHeaderWrapper>\r\n                        <InvitationHeaderSubText data-test=\"assign-users-title\">\r\n                            Assign Users and Due Dates to {practisSet?.name}\r\n                        </InvitationHeaderSubText>\r\n                    </div>\r\n                </InvitationHeader>\r\n                <TableDivider />\r\n                {loading && !isSelectAll && <LoadingComponent />}\r\n                <TableWrapper\r\n                    tableStates={tableStates}\r\n                    data={trainees?.items}\r\n                    viewMode={TableViewMode.INFINITE_SCROLL}\r\n                    headerFilterPosition=\"BOTTOM\"\r\n                    scrollRef={scrollRef}\r\n                    scrollPaginationProps={{\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        itemCount: trainees?.items?.length,\r\n                        totalCount: trainees?.count,\r\n                        onOffsetChange: setOffset,\r\n                        scrollableRef: scrollRef,\r\n                        hideLoading: false,\r\n                        height: 300,\r\n                        className: classes.scrollWrapperStyle,\r\n                    }}\r\n                    tableWrapperClassName={classes.tableWrapperStyle}\r\n                    tableContainerClassName={\r\n                        classes.tableBodyContainerStyleForAssignment\r\n                    }\r\n                    selectedLabels={localSelectedLabels}\r\n                    onRemoveLabel={\r\n                        localLabels.saved.length > 0\r\n                            ? label => {\r\n                                  onLocalRemoveLabels(label);\r\n                              }\r\n                            : undefined\r\n                    }\r\n                    tableRefreshConfigurations={{\r\n                        lastRefreshed: lastRefreshed,\r\n                        refreshData: refreshData,\r\n                        dataTest: 'assign-users-timestamp',\r\n                    }}\r\n                    tableToolsOptions={{\r\n                        searchInputOptions: {\r\n                            initialValue: searchParams.searchTerm,\r\n                            onSearchChange: setSearchTerm,\r\n                            isSearchInputDisabled: tableStates.disableSearch,\r\n                            dataTest: 'assign-users-search',\r\n                        },\r\n                        isSelectedItemOptionsVisible:\r\n                            !lodashIsEmpty(selectedTrainees) &&\r\n                            !lodashIsEmpty(trainees),\r\n                        selectedItemOptions: {\r\n                            isSelectAll: isSelectAll,\r\n                            selectedLength: selectedTrainees?.length,\r\n                            totalCount: trainees?.count,\r\n                            itemsPerPage: ITEMS_PER_PAGE,\r\n                            onClearSelection: onClearSelection,\r\n                            onSelectAll: onSelectAll,\r\n                            bulkActionsConfig: {\r\n                                disabled: bulkActions.areBulkActionsDisabled(),\r\n                                disabledLabel: bulkActions.areItemsEmpty()\r\n                                    ? undefined\r\n                                    : \"Bulk actions can't be applied\",\r\n                                dueDatesPermissions:\r\n                                    bulkActions.isBulkActionVisible(\r\n                                        TraineeInvitationActions.SET_DUEDATE\r\n                                    )\r\n                                        ? [NEW_PERMISSIONS.SET_DUE_DATE]\r\n                                        : [],\r\n                                isDueDatesDisabled:\r\n                                    bulkActions.isBulkActionDisabled(\r\n                                        TraineeInvitationActions.SET_DUEDATE\r\n                                    ),\r\n                                isSelectAll: isSelectAll,\r\n                                totalCount: trainees?.count,\r\n                                onUpdateDueDatesSubmit: openDueDatePopup,\r\n                            },\r\n                        },\r\n                        filterOptions: {\r\n                            filterComponent: (\r\n                                <Popup<HTMLButtonElement>\r\n                                    content={({ hide }) => (\r\n                                        <AllUsersFilter\r\n                                            onLabelsChange={labelChangeHandler}\r\n                                            onSuccessApply={() => hide()}\r\n                                            registrationStatus={\r\n                                                searchParams.filterByRegistrationStatus ||\r\n                                                []\r\n                                            }\r\n                                            onRegistrationStatusChange={\r\n                                                registrationStatusHandler\r\n                                            }\r\n                                        />\r\n                                    )}\r\n                                >\r\n                                    {(ref, { toggleShown, shown }) => (\r\n                                        <FilterByHandler\r\n                                            ref={ref}\r\n                                            open={shown}\r\n                                            disabled={\r\n                                                (searchParams.searchTerm\r\n                                                    .length > 0 ||\r\n                                                    countAppliedFiltersCount(\r\n                                                        searchParams\r\n                                                    ) === 0) &&\r\n                                                isListEmpty\r\n                                            }\r\n                                            toggleOpen={toggleShown}\r\n                                            filtersCount={\r\n                                                localSelectedLabels &&\r\n                                                localSelectedLabels.length +\r\n                                                    filterByRegistrationLength\r\n                                            }\r\n                                            dataTest=\"assign-users-filters\"\r\n                                        />\r\n                                    )}\r\n                                </Popup>\r\n                            ),\r\n                        },\r\n                        itemCount: trainees?.count\r\n                            ? `${trainees?.count} ${\r\n                                  trainees?.count === 1 ? 'item' : 'items'\r\n                              }`\r\n                            : '',\r\n                        itemCountDataTest: 'assign-users-total-count',\r\n                    }}\r\n                    tableEmptyStateConfigurations={{\r\n                        shouldShowEmptyState:\r\n                            !loading && trainees?.items?.length === 0,\r\n                        noEntriesOptions: {\r\n                            icon: User,\r\n                            text: 'No Users Yet',\r\n                            dataTest: 'no-users-yet',\r\n                        },\r\n                        noSearchResultsOptions: {\r\n                            entityName: 'Users',\r\n                            dataTest: 'no-users-found'\r\n                        },\r\n                    }}\r\n                    configurations={{\r\n                        masterCheckBoxConfig: {\r\n                            checked: isMasterCheckBoxChecked,\r\n                            disabled: isMasterCheckBoxDisabled,\r\n                            partial:\r\n                                isCheckboxPartiallySelected || !isSelectAll,\r\n                            handleCheck: onCheckMasterCheckbox,\r\n                            size: 12,\r\n                            dataTest: 'assign-users-master-checkbox',\r\n                        },\r\n                        columns: [\r\n                            {\r\n                                title: 'Users',\r\n                                width: 47,\r\n                                ...atFirstName,\r\n                                disabled: tableStates.disableSorting,\r\n                                dataTest: 'users-column',\r\n                            },\r\n                            {\r\n                                title: 'Due Date',\r\n                                width: 18,\r\n                                disabled: tableStates.disableSorting,\r\n                                dataTest: 'due-date-column',\r\n                            },\r\n                            {\r\n                                title: 'Registered on',\r\n                                width: 21,\r\n                                ...atRegisteredOn,\r\n                                disabled: tableStates.disableSorting,\r\n                                dataTest: 'registration-date-column',\r\n                            },\r\n                        ],\r\n\r\n                        rowConfig: {\r\n                            onRowCheckHandler: onRowCheckHandler,\r\n                            isRowChecked: checkIsRowChecked,\r\n                            size: 12,\r\n                            isLabelTagsOpen: checkIsLabelTagsOpen,\r\n\r\n                            getLabelTagsProps: (user: UserV2) => ({\r\n                                selectedLabels: user?.labels || [],\r\n                                deletePermissions: [\r\n                                    NEW_PERMISSIONS.REMOVE_INVITATION_LABEL,\r\n                                ],\r\n                            }),\r\n                            dataTest: 'user-item',\r\n\r\n                            cells: [\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    width: 58,\r\n                                    cellClassName: classes.customCellStyle,\r\n                                    getCustomFieldComponent: (user: UserV2) => (\r\n                                        <StyledFirstTableItemContent>\r\n                                            <TableLabelTags\r\n                                                open={labelsOpen === user.id}\r\n                                                toggleOpen={() =>\r\n                                                    handleToggleLabels(user.id)\r\n                                                }\r\n                                                selectedLabels={\r\n                                                    user?.labels || []\r\n                                                }\r\n                                                dataTest=\"user-item-labels\"\r\n                                            />\r\n                                            <AvatarTile>\r\n                                                <Avatar\r\n                                                    profile={user}\r\n                                                    size=\"sm\"\r\n                                                    marginRight={8}\r\n                                                    dataTest=\"user-item-avatar\"\r\n                                                />\r\n                                                <TableTitleOverflowText\r\n                                                    isCurrent={\r\n                                                        profile &&\r\n                                                        profile.id === user.id\r\n                                                    }\r\n                                                    dataTest=\"user-item-name\"\r\n                                                >{`${user.firstName} ${user.lastName}`}</TableTitleOverflowText>\r\n                                            </AvatarTile>\r\n                                        </StyledFirstTableItemContent>\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    cellClassName: classes.customCellStyle,\r\n                                    width: 24,\r\n                                    shouldShowEmptyCell: (\r\n                                        user: UserInterface\r\n                                    ) => !dueDates?.[user.id] && !user.dueDate,\r\n                                    fieldProps: {\r\n                                        renderTitle: (user: UserInterface) =>\r\n                                            (dueDates?.[user.id] ||\r\n                                                user.dueDate) &&\r\n                                            formatDateWithTimeZone(\r\n                                                dueDates?.[user.id] ||\r\n                                                    (user.dueDate as Date)\r\n                                            ),\r\n                                        dataTest: 'user-item-due-date',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    cellClassName: classes.customCellStyle,\r\n                                    width: 30,\r\n                                    shouldShowEmptyCell: (\r\n                                        user: UserInterface\r\n                                    ) => !user.registeredAt,\r\n                                    fieldProps: {\r\n                                        renderTitle: (user: UserInterface) =>\r\n                                            formatDate(user?.registeredAt),\r\n                                        dataTest: 'user-item-registration-date',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'LIST_ACTIONS',\r\n                                    fieldProps: {\r\n                                        getListActionsComponent: (\r\n                                            user: UserInterface\r\n                                        ) => (\r\n                                            <StyledTableCell>\r\n                                                {!selectedTrainees?.length &&\r\n                                                    <DueDateListAction\r\n                                                        actions={[\r\n                                                            {\r\n                                                                title: 'Due Date',\r\n                                                                onClick: () =>\r\n                                                                    openDueDatePopup(\r\n                                                                        user.id\r\n                                                                    ),\r\n                                                                permissions: [\r\n                                                                    NEW_PERMISSIONS.SET_DUE_DATE,\r\n                                                                ],\r\n                                                                dataTest: 'due-date-action'\r\n                                                            },\r\n                                                        ]}\r\n                                                    />\r\n                                                }\r\n                                            </StyledTableCell>\r\n                                        ),\r\n                                    },\r\n                                },\r\n                            ],\r\n                        },\r\n                    }}\r\n                />\r\n                <QuickAssignmentInvitationFooter>\r\n                    <CancelWrapper>\r\n                        <Button\r\n                            label={'Cancel'}\r\n                            variant={'inverse'}\r\n                            width={'122px'}\r\n                            action={handleCancel}\r\n                            dataTest='cancel-button'\r\n                        />\r\n                    </CancelWrapper>\r\n                    <Button\r\n                        label={'Assign Selected Users'}\r\n                        height={'40px'}\r\n                        width={'169px'}\r\n                        disabled={disabledAssign}\r\n                        loading={loadingAssign}\r\n                        action={handleTraineeInvitation}\r\n                        dataTest=\"assign-users-button\"\r\n                    />\r\n                </QuickAssignmentInvitationFooter>\r\n            </StyledTraineeInvitationContainer>\r\n            {isDueDateCalendarVisible && (\r\n                <DueDateCalendar\r\n                    data={{ ...dueDateData, isSubTitleVisible: false }}\r\n                    onCancel={() => setIsDueDateCalendarVisible(false)}\r\n                    onApply={updateDueDate}\r\n                />\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport const TraineeQuickAssignmentContainer: FC<ModalPageContainerProps> = ({\r\n    closePath,\r\n    closeGoingBack,\r\n}) => {\r\n    const [state] = useTrainerInvitationState();\r\n    const profile = useSelector(getProfileState);\r\n    const params = useParams();\r\n    const history = useHistory();\r\n    const enrollment = useSelector(PractisSetsEnrollmentState);\r\n    const searchAssignUsers = useSearchAssignUsersService();\r\n    const searchAssignUsersDebounced = useSearchDebounced(searchAssignUsers);\r\n    const enrollPractisSetsToUsers = useEnrollPractisSetsToUsersService();\r\n    const getPractisSet = useGetPractisSetService();\r\n    const labels = useLabelsState();\r\n    const updateSelectedTrainees = useUpdateSelectedInvitationTraineesStateService();\r\n    const updateAllSelectedInvitationTrainees = useUpdateAllSelectedInvitationTraineesStateService();\r\n    const actionsHelper = useTraineeInvitationActionHelpers();\r\n\r\n    return (\r\n        <WithLabelsContext.Provider\r\n            value={{\r\n                reducerName: 'assignUsers',\r\n            }}\r\n        >\r\n            <ModalPage\r\n                closePath={closePath}\r\n                closeGoingBack={closeGoingBack}\r\n                width=\"50%\"\r\n            >\r\n                <TraineeQuickAssignment\r\n                    profile={profile}\r\n                    history={history}\r\n                    params={params}\r\n                    searchTrainees={searchAssignUsersDebounced}\r\n                    trainees={state.data}\r\n                    selectedTrainees={state.selectedUsers}\r\n                    updateSelectedTrainees={updateSelectedTrainees}\r\n                    updateAllSelectedTrainees={\r\n                        updateAllSelectedInvitationTrainees\r\n                    }\r\n                    practisSet={enrollment.practisSet}\r\n                    updateTrainees={state.update}\r\n                    loading={state.loading}\r\n                    onGetPractisSet={getPractisSet}\r\n                    onEnrollPractisSetsToUsers={enrollPractisSetsToUsers}\r\n                    selectedLabels={labels.selected}\r\n                    actionsHelper={actionsHelper}\r\n                />\r\n            </ModalPage>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n\r\nexport default TraineeQuickAssignmentContainer;\r\n","import { History } from 'history';\r\nimport { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router';\r\nimport { isEmpty as lodashIsEmpty, uniqBy } from 'lodash';\r\n\r\nimport ModalPage, {\r\n    ModalPageContainerProps,\r\n} from '../../../../ui/components/ModalPage/ModalPage';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../constants/interfaces/filters';\r\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport { PractisSets } from '../../../../constants/interfaces/PractisSets';\r\nimport { UserInterface, UserProfile, UserV2 } from '../../../../constants/interfaces/User';\r\nimport { PractisSetsEnrollmentState } from '../../../../store/selectors';\r\nimport { EnrollmentType } from '../../../../api/enrollments/types';\r\nimport {\r\n    useGetPractisSetService,\r\n    useSearchAssignUsersService,\r\n    useSearchTeamMembersService,\r\n    useEnrollPractisSetsToUsersService,\r\n    useUpdateAllSelectedInvitationTraineesStateService,\r\n    useUpdateSelectedInvitationTraineesStateService,\r\n} from '../../store/services';\r\nimport {\r\n    useTrainerInvitationState,\r\n} from '../../store/states';\r\nimport { Button } from '../../../../ui/components/Button';\r\nimport {\r\n    formatDateWithTimeZone,\r\n    formatDate,\r\n} from '../../../../helpers/functions/date-convert';\r\nimport { useLabelsState } from '../../../labels/store/states';\r\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\r\nimport {\r\n    clearSelectedItemIfNotLoaded,\r\n    useHandleSelectLabels,\r\n} from '../../../labels/tools';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { Label } from '../../../../constants/interfaces/Label';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { WithLabelsContext } from '../../../portableLabels';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport { AllUsersFilter } from '../ManageTeam/components/Filters/AllUsersFilters';\r\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\r\nimport {\r\n    useSaveLabels,\r\n    useSelectLabels,\r\n} from '../../../portableLabels/store/hors/withLabels/services';\r\nimport { useLabelsState as useLocalLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\r\nimport { listToTree } from '../../../../helpers/functions/list-to-tree';\r\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\r\nimport { usePortableLabelsState } from '../../../portableLabels/store/states';\r\nimport User from '../../../../ui/icons/User';\r\nimport {\r\n    TraineeInvitationActionHelper,\r\n    TraineeInvitationActions,\r\n    useTraineeInvitationActionHelpers,\r\n} from '../../tools/TraineeInvitationActionHelpers';\r\nimport { findSelectedTraineeDueDate } from './helper';\r\nimport { DueDateCalendar } from '../../../../ui/components/DueDateCalendar';\r\nimport DueDateListAction from './components/ListActions/DueDateListAction';\r\nimport {\r\n    DueDateType,\r\n} from '../../../../constants/interfaces/DueDates';\r\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\r\nimport {\r\n    Avatar,\r\n    AvatarTile,\r\n    InvitationFooter,\r\n    InvitationHeader,\r\n    InvitationHeaderText,\r\n    StyledFirstTableItemContent,\r\n    StyledInvitationTitle,\r\n    StyledTableCell,\r\n    StyledTraineeInvitationContainer,\r\n    useStyles,\r\n} from './styles';\r\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\r\nimport TableTitleOverflowText from '../../../../ui/components/table-wrapper/table/TableTitleOverflowText/TableTitleOverflowText';\r\nimport { TableLabelTags } from '../../../../ui/components/table-wrapper/table/TableLabelTags';\r\nimport { TableViewMode } from '../../../../ui/components/table-wrapper/table/type';\r\nimport { countAppliedFiltersCount } from './tools';\r\nimport { onTriggerEvent } from '../../../../helpers/functions/Events';\r\nimport { EventNameList, REFRESH_TRAINING_PAGE } from '../../../../helpers/functions/Events/types';\r\nimport { useCreateEnrollmentBulkActionService } from './services/EnrollmentBulkActionsService';\r\nimport useHtmlPageTitle from '../../../../helpers/hooks/useHtmlPageTitle';\r\nimport { TitleIcon } from '../../../../ui/layout/Header/styles';\r\nimport BackArrow from '../../../../ui/icons/BackArrow';\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst TraineeInvitation: FC<{\r\n    profile?: UserProfile;\r\n    history: History<any>;\r\n    searchTeamMembers: (sp: SearchParams) => void;\r\n    searchTrainees(searchParams: SearchParams, isRefreshed?: boolean): void;\r\n    params: { teamId?: string; practisSetId?: string };\r\n    trainees?: ListResult<UserV2 & {dueDate?: Date}>;\r\n    selectedTrainees?: number[];\r\n    updateSelectedTrainees(userId: number): void;\r\n    updateAllSelectedTrainees(\r\n        userIds: number[],\r\n        checked: boolean,\r\n        partial?: boolean\r\n    ): void;\r\n    practisSet?: PractisSets;\r\n    updateTrainees?: Array<any>;\r\n    loading?: boolean;\r\n    onEnrollPractisSetsToUsers: (params: EnrollmentType[]) => Promise<void>;\r\n    onGetPractisSet: (practisSetId: number) => void;\r\n    selectedLabels?: number[];\r\n    actionsHelper: TraineeInvitationActionHelper;\r\n}> = ({\r\n    profile,\r\n    trainees,\r\n    searchTeamMembers,\r\n    selectedTrainees,\r\n    updateSelectedTrainees,\r\n    updateAllSelectedTrainees,\r\n    params,\r\n    searchTrainees,\r\n    loading,\r\n    updateTrainees,\r\n    onEnrollPractisSetsToUsers,\r\n    history,\r\n    onGetPractisSet,\r\n    practisSet,\r\n    selectedLabels,\r\n    actionsHelper,\r\n}) => {\r\n    const localLabels = useLocalLabelsState();\r\n    const labelsList = usePortableLabelsState();\r\n    const saveLabels = useSaveLabels();\r\n    const setLabelSelect = useSelectLabels();\r\n    const handleSelectLabels = useHandleSelectLabels();\r\n    const labelsTree = listToTree(labelsList.data.items);\r\n    const classes = useStyles();\r\n\r\n    const [isDueDateCalendarVisible, setIsDueDateCalendarVisible] =\r\n        useState<boolean>(false);\r\n\r\n    const localSelectedLabels = useMemo(\r\n        () =>\r\n            localLabels.saved.length > 0\r\n                ? localLabels.saved\r\n                : selectedLabels || [],\r\n        [localLabels.saved, selectedLabels]\r\n    );\r\n\r\n    useEffect(() => {\r\n        if (localLabels.saved.length < 1 && selectedLabels) {\r\n            setLabelSelect(selectedLabels);\r\n        }\r\n    }, [selectedLabels, localLabels.saved, setLabelSelect]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            selectedTrainees?.length &&\r\n            selectedTrainees.length === trainees?.count\r\n        ) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [trainees?.count, selectedTrainees]);\r\n\r\n    const onLocalRemoveLabels = (label: Label) => {\r\n        if (localSelectedLabels.length > 0) {\r\n            setLabelSelect(\r\n                handleSelectLabels(label, localSelectedLabels, labelsTree)\r\n            );\r\n            saveLabels();\r\n        }\r\n    };\r\n\r\n    const scrollRef = useRef<any>(null);\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        orderBy: { field: 'name', asc: true },\r\n        practisSetId: Number(params.practisSetId),\r\n        teamId: params?.teamId ? Number(params.teamId) : undefined,\r\n        filters: [],\r\n        labelIDs: localSelectedLabels,\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        companyId: profile?.companyId\r\n    };\r\n\r\n    const initialTeamMembersSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        filters: [],\r\n        labelIDs: selectedLabels,\r\n        orderBy: null,\r\n        limit: ITEMS_PER_PAGE,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        filterByStatus: [],\r\n        filterByRegistrationStatus: [],\r\n        companyId: profile?.companyId\r\n    };\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOffset,\r\n        setLabelIDs,\r\n        refreshSearchParams,\r\n        setOrderBy,\r\n        setCustom,\r\n    } = useSearchParamsState(initialSearchParams);\r\n\r\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\r\n\r\n    const isCheckboxPartiallySelected =\r\n        trainees &&\r\n        trainees.items &&\r\n        selectedTrainees &&\r\n        selectedTrainees.length < trainees.items.length;\r\n\r\n    const refreshData = useCallback(() => {\r\n        if (params?.practisSetId) {\r\n            searchTrainees(\r\n                {\r\n                    ...searchParams,\r\n                    offset: 0,\r\n                    limit: ITEMS_PER_PAGE + searchParams.offset, // we should increase the limit to fetch all loaded data again\r\n                },\r\n                true\r\n            );\r\n        }\r\n        setLastRefreshed(new Date());\r\n        updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n    }, [\r\n        params.practisSetId,\r\n        updateAllSelectedTrainees,\r\n        isCheckboxPartiallySelected,\r\n        searchParams,\r\n        searchTrainees\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        params.practisSetId && onGetPractisSet(+params.practisSetId);\r\n    }, [onGetPractisSet, params.practisSetId]);\r\n\r\n    useEffect(() => {\r\n        if (params?.practisSetId) {\r\n            searchTrainees(searchParams);\r\n            params?.teamId && searchTeamMembers(initialTeamMembersSearchParams);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [params?.teamId, params?.practisSetId, searchTrainees, searchParams]);\r\n\r\n    useEffect(() => {\r\n        localSelectedLabels && setLabelIDs(localSelectedLabels);\r\n    }, [localSelectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (updateTrainees && updateTrainees.length > 0) {\r\n            refreshSearchParams();\r\n        }\r\n    }, [updateTrainees, refreshSearchParams]);\r\n\r\n    /**\r\n     * @function onChangeOrderBy\r\n     * @param { string } field\r\n     */\r\n    const onChangeOrderBy = (field: string): void => {\r\n        setOrderBy(field);\r\n        onClearSelection();\r\n    };\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const atFirstName = useOrderBy('name', orderBy, onChangeOrderBy);\r\n    const atRegisteredOn = useOrderBy('date_registered', orderBy, onChangeOrderBy);\r\n\r\n    const [disabledAssign, setDisabledAssign] = useState(true);\r\n    const [loadingAssign, setLoadingAssign] = useState(false);\r\n    const [isSelectAll, setIsSelectAll] = useState(false);\r\n\r\n    const [dueDateData, setDueDateData] = useState<any>();\r\n    const [dueDates, setDueDates] = useState<DueDateType>();\r\n\r\n    const isListEmpty = !trainees || !trainees?.items?.length;\r\n\r\n    useHtmlPageTitle('Assign Users and Due Dates', [practisSet?.name]);\r\n\r\n     /**\r\n     * @description redirects to previous page\r\n     * @function handleCancel\r\n     * @returns { void }\r\n     */    \r\n     const handleCancel = useCallback(\r\n        () => history.goBack(),\r\n        [history]\r\n    )\r\n\r\n    useEffect(() => {\r\n        if (selectedTrainees && selectedTrainees.length > 0) {\r\n            setDisabledAssign(false);\r\n        } else {\r\n            setDisabledAssign(true);\r\n        }\r\n    }, [selectedTrainees]);\r\n\r\n    useEffect(() => {\r\n        return () =>\r\n            updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (isSelectAll) {\r\n            const userIds =\r\n                (trainees &&\r\n                    trainees.items.map(({id}: UserV2) => id)) ||\r\n                [];\r\n\r\n            updateAllSelectedTrainees(\r\n                userIds,\r\n                true,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        }\r\n        if (dueDateData?.selectAllDueDate) {\r\n            const changedDueDates: DueDateType = {};\r\n            (trainees?.items || []).forEach(({ id }) => {\r\n                changedDueDates[id] = dueDateData?.selectAllDueDate;\r\n            });\r\n            setDueDates({ ...dueDates, ...changedDueDates });\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [trainees]);\r\n\r\n    const updateAllTraineesCheck = useCallback(\r\n        (checked: boolean) => {\r\n            const userIds =\r\n                (trainees &&\r\n                    trainees.items.map(({id}: UserV2) => id)) ||\r\n                [];\r\n            updateAllSelectedTrainees(\r\n                userIds,\r\n                checked,\r\n                isCheckboxPartiallySelected\r\n            );\r\n        },\r\n        [trainees, isCheckboxPartiallySelected, updateAllSelectedTrainees]\r\n    );\r\n\r\n    const handleTraineeCheck = (e: any, user: UserInterface) => {\r\n        e.stopPropagation();\r\n        if (!!user.id) {\r\n            updateSelectedTrainees(user.id);\r\n        }\r\n    };\r\n\r\n    const getUserDueDate = (userId: number) => {\r\n        const user = trainees?.items.find(item => item.id === userId);\r\n        return user && (dueDates?.[user.id] || user?.dueDate)\r\n            ? formatDateWithTimeZone(\r\n                  dueDates?.[user?.id] || (user?.dueDate as Date)\r\n              )\r\n            : null;\r\n    };\r\n\r\n    const openDueDatePopup = async (userId?: number) => {\r\n        let dueDate = null;\r\n        let type = '';\r\n\r\n        const dueDates = userId\r\n            ? [getUserDueDate(userId)]\r\n            : selectedTrainees?.map(id => {\r\n                  return getUserDueDate(id);\r\n              });\r\n\r\n        const dueDateSet = uniqBy(dueDates, item => item);\r\n\r\n        if (dueDateSet.length > 1) {\r\n            type = 'MULTIPLE';\r\n        } else {\r\n            type = dueDateSet[0]\r\n                ? 'SINGLE'\r\n                : isSelectAll && dueDateData?.selectAllDueDate\r\n                ? 'MULTIPLE'\r\n                : 'NO_DUEDATE';\r\n            [dueDate] = dueDateSet;\r\n        }\r\n\r\n        const data = {\r\n            count: selectedTrainees?.length,\r\n            type,\r\n            dueDate,\r\n        };\r\n\r\n        setDueDateData({\r\n            ...data,\r\n            enrollmentIds: userId ? [userId] : selectedTrainees,\r\n        });\r\n        setIsDueDateCalendarVisible(true);\r\n    };\r\n\r\n    const updateDueDate = async (date: string | null) => {\r\n        if (isSelectAll) {\r\n            setDueDateData({ ...dueDateData, selectAllDueDate: date });\r\n        }\r\n\r\n        const { enrollmentIds } = dueDateData;\r\n\r\n        const changedDueDates: DueDateType = {};\r\n        enrollmentIds.forEach((id: number) => {\r\n            changedDueDates[id] = date;\r\n        });\r\n        setDueDates({ ...dueDates, ...changedDueDates });\r\n\r\n        setIsDueDateCalendarVisible(false);\r\n        refreshData();\r\n    };\r\n\r\n    const enrollmentParams = {\r\n        practisSetId: +(params.practisSetId as string),\r\n        enrollments:\r\n            selectedTrainees?.map(selectedTrainee => ({\r\n                userId: selectedTrainee,\r\n                practisSetId: +(params.practisSetId as string),\r\n                dueDate: findSelectedTraineeDueDate(trainees, selectedTrainee) ??\r\n                    dueDates?.[selectedTrainee]\r\n                        ? dueDates?.[selectedTrainee] as string\r\n                        : null,\r\n            })) ?? [],\r\n        search: searchParams,\r\n        dueDate: isSelectAll ? dueDateData?.selectAllDueDate : null\r\n    }\r\n    \r\n    const handleCreateEnrollmentsBulkActionSuccess = () => {\r\n        refreshData();\r\n        updateAllSelectedTrainees([], true, false);\r\n        onTriggerEvent(EventNameList[REFRESH_TRAINING_PAGE]);\r\n        history.goBack();\r\n    }\r\n\r\n    const handleCreateEnrollmentsBulkActionService =\r\n        useCreateEnrollmentBulkActionService(\r\n            enrollmentParams,\r\n            trainees?.count,\r\n            handleCreateEnrollmentsBulkActionSuccess\r\n        );\r\n\r\n    const handleTraineeInvitation = () => {\r\n        setLoadingAssign(true);\r\n        if (isSelectAll) {\r\n            handleCreateEnrollmentsBulkActionService();\r\n        } else {\r\n            onEnrollPractisSetsToUsers(enrollmentParams.enrollments)\r\n            .then(() => handleCreateEnrollmentsBulkActionSuccess())\r\n        }\r\n       \r\n        setLoadingAssign(false);\r\n    };\r\n\r\n    const registrationStatusHandler = (values: string[]) => {\r\n        setCustom('filterByRegistrationStatus', values);\r\n    };\r\n\r\n    useEffect(() => {\r\n        const filteredPractisSetsEnrollments = trainees\r\n            ? trainees.items.map(trainee => trainee.id)\r\n            : [];\r\n        const traineesToClear = clearSelectedItemIfNotLoaded(\r\n            selectedTrainees,\r\n            filteredPractisSetsEnrollments\r\n        );\r\n        if (traineesToClear && traineesToClear.length > 0) {\r\n            updateAllSelectedTrainees(traineesToClear, false);\r\n        }\r\n    }, [selectedTrainees, trainees, updateAllSelectedTrainees]);\r\n\r\n    const [labelsOpen, setLabelsOpen] =\r\n        useState<null | undefined | number>(null);\r\n\r\n    const handleToggleLabels = (itemId?: number) => {\r\n        if (!itemId) return;\r\n        if (labelsOpen === itemId) {\r\n            setLabelsOpen(null);\r\n        } else {\r\n            setLabelsOpen(itemId);\r\n        }\r\n    };\r\n\r\n    const labelChangeHandler = (ids: number[]) => {\r\n        setLabelIDs(ids);\r\n    };\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: countAppliedFiltersCount(searchParams),\r\n        itemsCount: trainees?.items.length || 0,\r\n    });\r\n    const filterByRegistrationLength: any =\r\n        searchParams?.filterByRegistrationStatus?.length;\r\n\r\n    const bulkActions = useMemo(\r\n        () =>\r\n            actionsHelper.getBulkActions(\r\n                trainees?.items.filter(x => selectedTrainees?.includes(x.id))\r\n            ),\r\n        [selectedTrainees, actionsHelper, trainees?.items]\r\n    );\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        updateAllSelectedTrainees([], true, isCheckboxPartiallySelected);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        const userIds =\r\n            (trainees &&\r\n                trainees.items.map(({id}: UserV2) => id)) ||\r\n            [];\r\n        updateAllSelectedTrainees(userIds, false, true);\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    /**\r\n     * @function onCheckMasterCheckbox\r\n     * @param { any } event\r\n     * @returns { void }\r\n     */\r\n    const onCheckMasterCheckbox = (event: any) => {\r\n        updateAllTraineesCheck(event.target.checked);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked =\r\n        !!selectedTrainees && !!selectedTrainees.length;\r\n\r\n    const isMasterCheckBoxDisabled = tableStates.disableSorting;\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { UserInterface } user\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (user: UserInterface): boolean =>\r\n        !!selectedTrainees && !!user.id && selectedTrainees.includes(user.id);\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { UserInterface } user\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, user: UserInterface) => {\r\n        handleTraineeCheck(event, user);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsLabelTagsOpen\r\n     * @param { UserInterface } user\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsLabelTagsOpen = (user: UserInterface): boolean => {\r\n        return labelsOpen === user?.['id'];\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <StyledTraineeInvitationContainer>\r\n                <InvitationHeader>\r\n                    <TitleIcon\r\n                        onClick={handleCancel}\r\n                        data-test=\"back-arrow-button\"\r\n                    >\r\n                        <BackArrow />\r\n                    </TitleIcon>\r\n                    <div>       \r\n                        <InvitationHeaderText data-test=\"assign-users-title\">\r\n                            Assign Users and Due Dates\r\n                        </InvitationHeaderText>\r\n                        <StyledInvitationTitle data-test=\"practis-set-name\">\r\n                            {practisSet?.name ?? ''}\r\n                        </StyledInvitationTitle>\r\n                    </div>\r\n                </InvitationHeader>\r\n                {loading && !isSelectAll && <LoadingComponent />}\r\n\r\n                <TableWrapper\r\n                    tableStates={tableStates}\r\n                    data={trainees?.items}\r\n                    viewMode={TableViewMode.INFINITE_SCROLL}\r\n                    headerFilterPosition=\"BOTTOM\"\r\n                    scrollRef={scrollRef}\r\n                    scrollPaginationProps={{\r\n                        itemsPerPage: ITEMS_PER_PAGE,\r\n                        itemCount: trainees?.items?.length,\r\n                        totalCount: trainees?.count,\r\n                        onOffsetChange: setOffset,\r\n                        scrollableRef: scrollRef,\r\n                        hideLoading: false,\r\n                        height: 300,\r\n                        className: classes.scrollWrapperStyle,\r\n                    }}\r\n                    tableWrapperClassName={classes.tableWrapperStyle}\r\n                    tableContainerClassName={\r\n                        classes.tableBodyContainerStyleForInvitation\r\n                    }\r\n                    selectedLabels={localSelectedLabels}\r\n                    onRemoveLabel={\r\n                        localLabels.saved.length > 0\r\n                            ? label => {\r\n                                  onLocalRemoveLabels(label);\r\n                              }\r\n                            : undefined\r\n                    }\r\n                    tableRefreshConfigurations={{\r\n                        lastRefreshed: lastRefreshed,\r\n                        refreshData: refreshData,\r\n                        dataTest: 'assign-users-timestamp',\r\n                    }}\r\n                    tableToolsOptions={{\r\n                        searchInputOptions: {\r\n                            initialValue: searchParams.searchTerm,\r\n                            onSearchChange: setSearchTerm,\r\n                            isSearchInputDisabled: tableStates.disableSearch,\r\n                            dataTest: 'assign-users-search',\r\n                        },\r\n                        isSelectedItemOptionsVisible:\r\n                            !lodashIsEmpty(selectedTrainees) &&\r\n                            !lodashIsEmpty(trainees),\r\n                        selectedItemOptions: {\r\n                            isSelectAll: isSelectAll,\r\n                            selectedLength: selectedTrainees?.length,\r\n                            totalCount: trainees?.count,\r\n                            itemsPerPage: ITEMS_PER_PAGE,\r\n                            onClearSelection: onClearSelection,\r\n                            onSelectAll: onSelectAll,\r\n                            bulkActionsConfig: {\r\n                                disabled: bulkActions.areBulkActionsDisabled(),\r\n                                disabledLabel: bulkActions.areItemsEmpty()\r\n                                    ? undefined\r\n                                    : \"Bulk actions can't be applied\",\r\n                                dueDatesPermissions:\r\n                                    bulkActions.isBulkActionVisible(\r\n                                        TraineeInvitationActions.SET_DUEDATE\r\n                                    )\r\n                                        ? [NEW_PERMISSIONS.SET_DUE_DATE]\r\n                                        : [],\r\n                                isDueDatesDisabled:\r\n                                    bulkActions.isBulkActionDisabled(\r\n                                        TraineeInvitationActions.SET_DUEDATE\r\n                                    ),\r\n                                isSelectAll: isSelectAll,\r\n                                totalCount: trainees?.count,\r\n                                onUpdateDueDatesSubmit: openDueDatePopup,\r\n                            },\r\n                        },\r\n                        filterOptions: {\r\n                            filterComponent: (\r\n                                <Popup<HTMLButtonElement>\r\n                                    content={({ hide }) => (\r\n                                        <AllUsersFilter\r\n                                            onLabelsChange={labelChangeHandler}\r\n                                            onSuccessApply={() => hide()}\r\n                                            registrationStatus={\r\n                                                searchParams.filterByRegistrationStatus ||\r\n                                                []\r\n                                            }\r\n                                            onRegistrationStatusChange={\r\n                                                registrationStatusHandler\r\n                                            }\r\n                                        />\r\n                                    )}\r\n                                >\r\n                                    {(ref, { toggleShown, shown }) => (\r\n                                        <FilterByHandler\r\n                                            ref={ref}\r\n                                            open={shown}\r\n                                            disabled={\r\n                                                (searchParams.searchTerm\r\n                                                    .length > 0 ||\r\n                                                    countAppliedFiltersCount(\r\n                                                        searchParams\r\n                                                    ) === 0) &&\r\n                                                isListEmpty\r\n                                            }\r\n                                            toggleOpen={toggleShown}\r\n                                            filtersCount={\r\n                                                localSelectedLabels &&\r\n                                                localSelectedLabels.length +\r\n                                                    filterByRegistrationLength\r\n                                            }\r\n                                            dataTest='assign-users-filters'\r\n                                        />\r\n                                    )}\r\n                                </Popup>\r\n                            ),\r\n                        },\r\n                        itemCount: trainees?.count\r\n                            ? `${trainees?.count} ${\r\n                                  trainees?.count === 1 ? 'item' : 'items'\r\n                              }`\r\n                            : '',\r\n                        itemCountDataTest: 'assign-users-total-count',\r\n                    }}\r\n                    tableEmptyStateConfigurations={{\r\n                        shouldShowEmptyState:\r\n                            !loading && trainees?.items?.length === 0,\r\n                        noEntriesOptions: {\r\n                            icon: User,\r\n                            text: 'No Users Yet',\r\n                            dataTest: 'no-users-yet',\r\n                        },\r\n                        noSearchResultsOptions: {\r\n                            entityName: 'Users',\r\n                            dataTest: 'no-users-found'\r\n                        },\r\n                    }}\r\n                    configurations={{\r\n                        masterCheckBoxConfig: {\r\n                            checked: isMasterCheckBoxChecked,\r\n                            disabled: isMasterCheckBoxDisabled,\r\n                            partial:\r\n                                isCheckboxPartiallySelected || !isSelectAll,\r\n                            handleCheck: onCheckMasterCheckbox,\r\n                            size: 12,\r\n                            dataTest: 'assign-users-master-checkbox',\r\n                        },\r\n                        columns: [\r\n                            {\r\n                                title: 'Users',\r\n                                width: 60,\r\n                                ...atFirstName,\r\n                                disabled: tableStates.disableSorting,\r\n                                dataTest: 'users-column',\r\n                            },\r\n                            {\r\n                                title: 'Due Date',\r\n                                width: 19,\r\n                                disabled: tableStates.disableSorting,\r\n                                dataTest: 'due-date-column',\r\n                            },\r\n                            {\r\n                                title: 'Registered on',\r\n                                width: 20,\r\n                                ...atRegisteredOn,\r\n                                disabled: tableStates.disableSorting,\r\n                                dataTest: 'registration-date-column',\r\n                            },\r\n                        ],\r\n\r\n                        rowConfig: {\r\n                            onRowCheckHandler: onRowCheckHandler,\r\n                            isRowChecked: checkIsRowChecked,\r\n                            size: 12,\r\n                            isLabelTagsOpen: checkIsLabelTagsOpen,\r\n\r\n                            getLabelTagsProps: (user: UserV2) => ({\r\n                                selectedLabels: user?.labels || [],\r\n                                deletePermissions: [\r\n                                    NEW_PERMISSIONS.REMOVE_INVITATION_LABEL,\r\n                                ],\r\n                            }),\r\n                            dataTest: 'user-item',\r\n\r\n                            cells: [\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    width: 63,\r\n                                    cellClassName: classes.customCellStyle,\r\n                                    getCustomFieldComponent: (user: UserV2) => (\r\n                                        <StyledFirstTableItemContent>\r\n                                            <TableLabelTags\r\n                                                open={labelsOpen === user.id}\r\n                                                toggleOpen={() =>\r\n                                                    handleToggleLabels(user.id)\r\n                                                }\r\n                                                selectedLabels={\r\n                                                    user?.labels || []\r\n                                                }\r\n                                                dataTest=\"user-item-labels\"\r\n                                            />\r\n                                            <AvatarTile>\r\n                                                <Avatar\r\n                                                    profile={user}\r\n                                                    size=\"sm\"\r\n                                                    marginRight={8}\r\n                                                    dataTest=\"user-item-avatar\"\r\n                                                />\r\n                                                <TableTitleOverflowText\r\n                                                    isCurrent={\r\n                                                        profile &&\r\n                                                        profile.id === user.id\r\n                                                    }\r\n                                                    dataTest=\"user-item-name\"\r\n                                                >{`${user.firstName} ${user.lastName}`}</TableTitleOverflowText>\r\n                                            </AvatarTile>\r\n                                        </StyledFirstTableItemContent>\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    cellClassName: classes.customCellStyle,\r\n                                    width: 23,\r\n                                    shouldShowEmptyCell: (\r\n                                        user: UserInterface\r\n                                    ) => !dueDates?.[user.id] && !user.dueDate,\r\n                                    fieldProps: {\r\n                                        renderTitle: (user: UserInterface) =>\r\n                                            (dueDates?.[user.id] ||\r\n                                                user.dueDate) &&\r\n                                            formatDateWithTimeZone(\r\n                                                dueDates?.[user.id] ||\r\n                                                    (user.dueDate as Date)\r\n                                            ),\r\n                                        dataTest: 'user-item-due-date',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    cellClassName: classes.customCellStyle,\r\n                                    width: 30,\r\n                                    shouldShowEmptyCell: (\r\n                                        user: UserInterface\r\n                                    ) => !user.registeredAt,\r\n                                    fieldProps: {\r\n                                        renderTitle: (user: UserInterface) =>\r\n                                            formatDate(user?.registeredAt),\r\n                                        dataTest: 'user-item-registration-date',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'LIST_ACTIONS',\r\n                                    fieldProps: {\r\n                                        getListActionsComponent: (\r\n                                            user: UserInterface\r\n                                        ) => (\r\n                                            <StyledTableCell>\r\n                                                {!selectedTrainees?.length &&\r\n                                                    <DueDateListAction\r\n                                                        actions={[\r\n                                                            {\r\n                                                                title: 'Due Date',\r\n                                                                onClick: () =>\r\n                                                                    openDueDatePopup(\r\n                                                                        user.id\r\n                                                                    ),\r\n                                                                permissions: [\r\n                                                                    NEW_PERMISSIONS.SET_DUE_DATE,\r\n                                                                ],\r\n                                                                dataTest: 'due-date-action'\r\n                                                            },\r\n                                                        ]}\r\n                                                    />\r\n                                                }\r\n                                            </StyledTableCell>\r\n                                        ),\r\n                                    },\r\n                                },\r\n                            ],\r\n                        },\r\n                    }}\r\n                />\r\n\r\n                <InvitationFooter>\r\n                    <Button\r\n                        label={'Cancel'}\r\n                        height={'40px'}\r\n                        width={'80px'}\r\n                        variant=\"transparent\"\r\n                        action={handleCancel}\r\n                        dataTest='cancel-button'\r\n                    />\r\n                    <Button\r\n                        label={'Assign Selected Users'}\r\n                        height={'40px'}\r\n                        width={'169px'}\r\n                        disabled={disabledAssign}\r\n                        loading={loadingAssign}\r\n                        action={handleTraineeInvitation}\r\n                        dataTest=\"assign-users-button\"\r\n                    />\r\n                </InvitationFooter>\r\n            </StyledTraineeInvitationContainer>\r\n            {isDueDateCalendarVisible && (\r\n                <DueDateCalendar\r\n                    data={{ ...dueDateData, isSubTitleVisible: false }}\r\n                    onCancel={() => setIsDueDateCalendarVisible(false)}\r\n                    onApply={updateDueDate}\r\n                />\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport const TraineeInvitationContainer: FC<ModalPageContainerProps> = ({\r\n    closePath,\r\n    closeGoingBack,\r\n}) => {\r\n    const [state] = useTrainerInvitationState();\r\n    const profile = useSelector(getProfileState);\r\n    const params: { practisSetId: string; teamId: string } = useParams();\r\n    const history = useHistory();\r\n    const searchTeamMembers = useSearchTeamMembersService(params.teamId);\r\n    const searchTeamMembersDebounced = useSearchDebounced(searchTeamMembers);\r\n    const enrollment = useSelector(PractisSetsEnrollmentState);\r\n    const searchAssignUsers = useSearchAssignUsersService();\r\n    const searchAssignUsersDebounced = useSearchDebounced(searchAssignUsers);\r\n    const enrollPractisSetsToUsers = useEnrollPractisSetsToUsersService();\r\n    const getPractisSet = useGetPractisSetService();\r\n    const labels = useLabelsState();\r\n    const updateSelectedTrainees =\r\n        useUpdateSelectedInvitationTraineesStateService();\r\n    const updateAllSelectedInvitationTrainees =\r\n        useUpdateAllSelectedInvitationTraineesStateService();\r\n    const actionsHelper = useTraineeInvitationActionHelpers();\r\n\r\n    return (\r\n        <WithLabelsContext.Provider\r\n            value={{\r\n                reducerName: 'assignUsers',\r\n            }}\r\n        >\r\n            <ModalPage\r\n                closePath={closePath}\r\n                closeGoingBack={closeGoingBack}\r\n                width=\"50%\"\r\n            >\r\n                <TraineeInvitation\r\n                    profile={profile}\r\n                    history={history}\r\n                    searchTeamMembers={searchTeamMembersDebounced}\r\n                    params={params}\r\n                    searchTrainees={searchAssignUsersDebounced}\r\n                    trainees={state.data}\r\n                    selectedTrainees={state.selectedUsers}\r\n                    updateSelectedTrainees={updateSelectedTrainees}\r\n                    updateAllSelectedTrainees={\r\n                        updateAllSelectedInvitationTrainees\r\n                    }\r\n                    practisSet={enrollment.practisSet}\r\n                    updateTrainees={state.update}\r\n                    loading={state.loading}\r\n                    onGetPractisSet={getPractisSet}\r\n                    onEnrollPractisSetsToUsers={enrollPractisSetsToUsers}\r\n                    selectedLabels={labels.selected}\r\n                    actionsHelper={actionsHelper}\r\n                />\r\n            </ModalPage>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n\r\nexport default TraineeInvitationContainer;\r\n","import styled from 'styled-components';\n\nexport const MainImage = styled.div`\n    width: 416px;\n    height: 416px;\n    border-radius: 8px;\n    margin-top: 16px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    background: var(--ps-graphite-3);\n`;\n\nexport const ErrorMessage = styled.div`\n    font-size: 13px;\n    color: #b0bdc6;\n    padding-top: 8px;\n`;\n\nexport const NoPlayIcon = styled.div`\n    color: var(--ps-grey-1);\n`;","import NoPlay from '../../../../icons/NoPlay';\nimport { Loading } from '../../../LoadingCopmonent';\nimport { BlankVideoProps } from './types';\nimport {\n    MainImage,\n    ErrorMessage,\n    NoPlayIcon,\n} from './styles';\n\nfunction BlankVideoView({\n    errorMessage,\n    isLoading\n}: BlankVideoProps) {\n    return <MainImage>\n        {\n            isLoading\n                ? <Loading size={40} />\n                : <>\n                    <NoPlayIcon><NoPlay /></NoPlayIcon>\n                    <ErrorMessage>{errorMessage}</ErrorMessage>\n                </> \n        }\n    </MainImage>;\n}\n\nexport default BlankVideoView;","import BlankVideo from './view';\n\nexport default BlankVideo;","import styled from 'styled-components';\n\nexport const BlockSection = styled.div`\n    background: var(--ps-graphite-3);\n`;\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-start;\n`;\n\nexport const TopContainer = styled.div`\n    display: flex;\n    flex-direction: row;\n`;\n\nexport const Avatar = styled(BlockSection)`\n    width: 40px;\n    height: 40px;\n    border-radius: 4px;\n`;\n\nexport const TopInfo = styled.div`\n    padding-left: 11px;\n    padding-top: 7px;\n`;\n\nexport const TopTitle = styled(BlockSection)`\n    width: 157px;\n    height: 8px;\n`;\n\nexport const TopDescription = styled(BlockSection)`\n    width: 72px;\n    height: 8px;\n    margin-top: 8px;\n`;\n\nexport const BottomTitle = styled(BlockSection)`\n    width: 276px;\n    height: 13px;\n    margin-top: 21px;\n`;\n\nexport const BottomDescription = styled(BlockSection)`\n    width: 147px;\n    height: 13px;\n    margin-top: 16px;\n    margin-bottom: 5px;\n`;","import BlankVideo from '../BlankVideo';\nimport { ScreenLoadingProps } from './types';\nimport {\n    Container,\n    TopContainer,\n    Avatar,\n    TopInfo,\n    TopTitle,\n    TopDescription,\n    BottomTitle,\n    BottomDescription\n} from './styles';\n\nfunction ScreenLoadingView({ isError }: ScreenLoadingProps) {\n    return <Container>\n        <TopContainer>\n            <Avatar />\n            <TopInfo>\n                <TopTitle />\n                <TopDescription />\n            </TopInfo>\n        </TopContainer>\n        <BlankVideo\n            isLoading={!isError}\n            errorMessage=\"Something went wrong. Please try again.\"\n        />\n        <BottomTitle />\n        <BottomDescription />\n    </Container>;\n}\n\nexport default ScreenLoadingView;","import ScreenLoading from './view';\n\nexport default ScreenLoading;","import UnavailableContent from '../UnavailableContent';\n\nfunction BrokenSharedLinkView() {\n    return <UnavailableContent\n        title=\"Oops. Looks like you're not meant to access this.\"\n        description=\"For whatever reason (your permissions, content that was deleted, a broken link, cosmic intervention) we can't show you this material. If you feel like the universe is conspiring against you, please let your manager know.\"\n    />;\n}\n\nexport default BrokenSharedLinkView;","import React, { useCallback, useEffect, useState } from 'react';\n\nimport Storage from '../../services/Storage';\nimport { ProgressModal } from '../../ui/components/ProgressModal';\n\nimport { w3cwebsocket as WebSocket } from 'websocket';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getSocketState } from './store/reducer';\nimport { SocketProgressHide } from './store/actions';\nimport { useShowMessage } from '../../ui/components/ErrorMessages/ErrorMessages';\n\nlet wssurl: any;\n\nif (window.location.href.includes('portal-dev.gopractis')) {\n    wssurl = 'wss://api-dev.gopractis.com/';\n} else if (window.location.href.includes('portal-beta.gopractis')) {\n    wssurl = 'wss://api-beta.gopractis.com/'\n} else if (window.location.href.includes('gopractis.com')) {\n    wssurl = 'wss://api.gopractis.com/';\n} else {\n    wssurl = 'wss://api-dev.gopractis.com/';\n}\n\nconst socket = Storage.get('token') ? new WebSocket(\n    `${wssurl}socket?token=${Storage.get('token')}`\n) : null;\n\nconst PAGE_KEYS = [\n    {\n        key: 'REMOVE_STAGING',\n        route: '/drafts'\n    },\n    {\n        key: 'CREATE_STAGING_INVITATION',\n        route: '/drafts'\n    },\n    {\n        key: 'CREATE_INVITATION',\n        route: '/drafts'\n    },\n    {\n        key: 'STAGING_ASSIGN_DATA',\n        route: '/drafts'\n    }\n]\n\nconst ProgressPage = () => {\n    const [percentage, setPercentage] = useState(0);\n    const [isOpen, setIsOpen] = useState(false);\n    const socketLoaderState = useSelector(getSocketState);\n    const dispatch = useDispatch();\n    const showMessage = useShowMessage();\n    const token = Storage.get('token');\n    const [socketConnetion, setSocketConnection] = useState<any>();\n\n    const onUnload = useCallback(\n        (e: any) => {\n            if (\n                percentage > 0 && percentage < 100\n            ) {\n                e.preventDefault();\n                e.returnValue = true;\n            }\n        },\n        [percentage]\n    );\n\n\n    useEffect(() => {\n        if (!token && socket) {\n            socket.close();\n        } else if (token && !socket) {\n            let keyArray = PAGE_KEYS.map(item => item?.key);\n\n            const socket = new WebSocket(\n                `${wssurl}socket?token=${Storage.get('token')}`\n            );\n\n            setSocketConnection(socket);\n            socket.onmessage = (eventName: any) => {\n                const data = JSON.parse(eventName.data);\n                let perc = data.payload.percentage;\n                let key = data.event;\n\n                if (keyArray.includes(key)) {\n                    setPercentage(perc)\n                }\n            }\n\n            socket.onerror = function (event) {\n                showMessage(`Something went wrong. Try again`, 'error');\n            };\n        }  else if(!token){\n            socket && socket.close();\n            socketConnetion && socketConnetion.close();\n        }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [token])\n\n    useEffect(() => {\n        let keyArray = PAGE_KEYS.map(item => item?.key);\n\n        if (socket?.readyState === 1) {\n\n            socket.onmessage = (eventName: any) => {\n                const data = JSON.parse(eventName.data);\n                let perc = data.payload.percentage;\n                let key = data.event;\n\n                if (keyArray.includes(key)) {\n                    setPercentage(perc)\n                }\n            }\n\n            socket.onerror = function (event) {\n                showMessage(`Something went wrong. Try again`, 'error');\n            };\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [socket, socket?.readyState])\n  \n    \n    useEffect(() => {\n        window.addEventListener('beforeunload', onUnload);\n        return () => {\n            window.removeEventListener('beforeunload', onUnload);\n        };\n    }, [onUnload]);\n\n\n\n    useEffect(() => {\n        if (percentage > 0 && percentage < 100) {\n            setIsOpen(true);\n        } else if (percentage === 100) {\n            setTimeout(() => {\n                dispatch(SocketProgressHide())\n                setTimeout(() => {\n                    setPercentage(0);\n                }, 2100)\n              \n            }, 2000)\n        }\n    }, [dispatch, percentage])\n\n\n    if(!isOpen && !socketLoaderState){\n        return null;\n    }\n\n    return (\n        <div>\n            {socketLoaderState && isOpen && <ProgressModal\n                progressValue={percentage}\n                open={true}\n            />}\n        </div>\n\n    );\n};\n\nexport default ProgressPage;","import BrokenSharedLink from './view';\n\nexport default BrokenSharedLink;","import styled from \"styled-components\";\n\nexport const TextEllipsis = styled.span<{ width?: number }>`\n    max-width: ${props => props?.width || 150}px;\n    overflow-x: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    display: block;\n`;","import { FC, useEffect, useState, useCallback } from 'react';\nimport { History } from 'history';\nimport { useHistory, useParams } from 'react-router';\nimport styled from 'styled-components';\nimport AvatarPlaceholder from '../AvatarPlaceholder/AvatarPlaceholder';\nimport ROUTES from '../../../routes/routes';\n\nimport ModalPage from '../ModalPage/ModalPage';\nimport { VideoPlayer } from '../VideoPlayer';\nimport {\n    useGetSubmissionFromFeedService,\n    useGetSubmissionDetailsService,\n    useCopyAccuracyLink,\n} from '../../../features/submissions/store/services';\nimport { useSubmissionDetailsState } from '../../../features/submissions/store/states';\nimport Close from '../../icons/Close';\nimport {\n    formatHour,\n    formatMMDDYY,\n} from '../../../helpers/functions/date-convert';\nimport useKeypress from '../../../helpers/hooks/useKeyPress';\nimport { SubmissionV2 } from '../../../constants/interfaces/Reviews';\nimport ScreenLoading from './components/ScreenLoading';\nimport { useLocalStorage } from '../../../tools/localStorage/LocalStorage';\nimport BrokenSharedLink from '../BrokenSharedLink';\nimport CopyLinkNotification from '../CopyLinkNotification';\nimport BlankVideo from './components/BlankVideo';\nimport { handleDownloadVideoFile } from '../../../helpers/functions/file-download';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\nimport { TextEllipsis } from '../../generalStyles/TextStyles';\n\nconst MainWrapper = styled.div`\n    background: ${props => props.theme.Colors.backgroundDark};\n    height: 100%;\n    display: flex;\n    align-items: center;\n    flex-direction: column;\n    justify-content: center;\n    position: relative;\n\n    p {\n        color: white;\n    }\n\n    .video {\n        min-width: 416px;\n        max-height: 416px;\n        min-height: 416px;\n        background: #292b39;\n        border-radius: 8px;\n\n        .player-background {\n            background: #292b39 !important;\n        }\n\n        .MuiSlider-rail {\n            box-shadow: 1px 1px 1px;\n        }\n    }\n\n    video {\n        margin-top: 5px;\n        border-radius: 8px;\n    }\n`;\n\nconst CloseWrapper = styled.div`\n    position: absolute;\n    right: -72px;\n    top: 54px;\n    width: 40px;\n    height: 40px;\n    padding: 11px 12px 12px;\n    box-sizing: border-box;\n    border-radius: 75px;\n    cursor: pointer;\n    background-color: var(--ps-graphite-1);\n\n    g {\n        fill: #fff;\n    }\n`;\n\nconst TopWrapper = styled.div`\n    display: flex;\n    justify-content: space-between;\n`;\n\nconst ScoreWrapper = styled.div`\n    color: white;\n    display: flex;\n    align-items: center;\n    max-height: 40px;\n\n    span {\n        color: white;\n        font-size: 32px;\n        margin-right: 4px;\n    }\n\n    div {\n        line-height: 16px;\n        font-size: 12px;\n    }\n`;\n\nconst UserWrapper = styled.div`\n    display: flex;\n    max-height: 40px;\n    margin-bottom: 16px;\n    flex: 1;\n\n    .avatar {\n        max-width: 40px;\n        margin-right: 12px;\n        overflow: hidden;\n\n        & > div {\n            font-size: 20px;\n        }\n    }\n`;\n\nconst Title = styled.div`\n    color: #fff;\n    font-size: 18px;\n    margin-top: 10px;\n    margin-bottom: 6px;\n    line-height: 27px;\n`;\n\nconst PractisSetTitle = styled.div`\n    color: #8ea6b7;\n    font-size: 15px;\n\n    span {\n        color: ${props => props.theme.Colors.mainBlue};\n        text-decoration: none;\n        cursor: pointer;\n        word-break: break-all;\n    }\n`;\n\nconst UserTextWrapper = styled.div`\n    color: white;\n    font-size: 15px;\n`;\n\nconst DateWrapper = styled.div`\n    color: #8ea6b7;\n    font-size: 15px;\n    line-height: 20px;\n`;\n\nexport const PlaybackVideo: FC<{\n    handleDownloadVideo?: any;\n    handleCopyLink?(): void;\n    handleClose: () => void;\n    submission?: SubmissionV2;\n    videoDownloading: boolean;\n    loading: boolean;\n    isLoadingError: boolean;\n    history: History<any>;\n    showCopyLinkNotification: boolean;\n    handleHideCopyLinkNotification: () => void;\n}> = ({\n    handleDownloadVideo,\n    handleCopyLink,\n    handleClose,\n    submission,\n    videoDownloading,\n    loading,\n    isLoadingError,\n    history,\n    showCopyLinkNotification,\n    handleHideCopyLinkNotification,\n}) => {\n    const handleViewPractisSetReport = (\n        userId: number,\n        enrollmentId: number\n    ) => {\n        history.push(\n            ROUTES.TRAINEE_DETAILS.replace(\n                ':userId',\n                userId.toString()\n            ).replace(':enrollmentId', enrollmentId.toString()),\n            { useGoBack: true }\n        );\n    };\n\n    const formatDate = (submission: SubmissionV2) => {\n        const date = new Date(submission.createdAt);\n        return `${formatMMDDYY(date)} at ${formatHour(date)}`;\n    };\n\n    useHtmlPageTitle('Accuracy Test', [\n        `${submission?.practisSet?.name}`,\n        `${submission?.user.firstName} ${submission?.user.lastName}`,\n    ]);\n\n    const userFullName = `${submission?.user.firstName} ${submission?.user.lastName}`;\n\n    return (\n        <ModalPage\n            closePath={'submissions/accuracy'}\n            closeGoingBack={true}\n            width=\"100%\"\n            handleManualClose={handleClose}\n        >\n            <MainWrapper title=\"Accuracy Test Details\">\n                {!submission || loading ? (\n                    <ScreenLoading isError={isLoadingError} />\n                ) : (\n                    <div style={{ position: 'relative' }}>\n                        <TopWrapper>\n                            <UserWrapper>\n                                <AvatarPlaceholder\n                                    profile={submission.user}\n                                    size=\"sm\"\n                                    className=\"avatar\"\n                                />\n                                <UserTextWrapper style={{ color: '#fff' }}>\n                                    <TextEllipsis\n                                        width={200}\n                                        title={userFullName}\n                                    >\n                                        {userFullName}\n                                    </TextEllipsis>\n                                    <DateWrapper>\n                                        Submitted {formatDate(submission)}\n                                    </DateWrapper>\n                                </UserTextWrapper>\n                            </UserWrapper>\n                            <ScoreWrapper>\n                                <span>\n                                    {submission.accuracy\n                                        ? Math.floor(\n                                              submission.accuracy.accuracy * 100\n                                          )\n                                        : 0}\n                                </span>\n                                <div>\n                                    <div>%</div>\n                                    <div>Accuracy</div>\n                                </div>\n                            </ScoreWrapper>\n                        </TopWrapper>\n                        {submission.mediaUrl && (\n                            <VideoPlayer\n                                className=\"video\"\n                                url={submission.mediaUrl}\n                                onDownloadVideo={() =>\n                                    handleDownloadVideo(submission.id)\n                                }\n                                onCopyLink={handleCopyLink}\n                                videoLoading={videoDownloading}\n                            />\n                        )}\n                        {!submission.mediaUrl && (\n                            <BlankVideo\n                                isLoading={false}\n                                errorMessage=\"This video is not available for playback\"\n                            />\n                        )}\n                        <div style={{ maxWidth: 416 }}>\n                            <Title>{submission.scenario?.title}</Title>\n                            <PractisSetTitle>\n                                Practis Set Report:{' '}\n                                <span\n                                    onClick={() =>\n                                        handleViewPractisSetReport(\n                                            submission.user.id,\n                                            submission.enrollmentId\n                                        )\n                                    }\n                                >\n                                    {submission.practisSet?.name}\n                                </span>\n                            </PractisSetTitle>\n                        </div>\n                        <CloseWrapper onClick={handleClose}>\n                            <Close />\n                        </CloseWrapper>\n                        {showCopyLinkNotification && (\n                            <CopyLinkNotification\n                                onClose={handleHideCopyLinkNotification}\n                            />\n                        )}\n                    </div>\n                )}\n            </MainWrapper>\n        </ModalPage>\n    );\n};\n\nexport const PlaybackScreen: FC = () => {\n    const submissionDetails = useSubmissionDetailsState();\n    const history = useHistory();\n    const params: { submissionId: string } = useParams();\n    const [videoDownloading, setVideoDownloading] = useState(false);\n    const [showCopyLinkNotification, setShowCopyLinkNotification] =\n        useState(false);\n    const copyAccuracyLink = useCopyAccuracyLink();\n    const localStorage = useLocalStorage();\n\n    const getSubmissionFromFeed = useGetSubmissionFromFeedService();\n    const getSubmissionDetails = useGetSubmissionDetailsService();\n\n    const handleDownloadVideo = () => {\n        setVideoDownloading(true);\n\n        const url = submissionDetails.details?.mediaUrl;\n        const fileName = submissionDetails.details?.scenario?.title;\n\n        if (url && fileName) {\n            handleDownloadVideoFile(url, fileName)\n                .then(() => setVideoDownloading(false))\n                .catch(() => setVideoDownloading(false));\n        }\n    };\n\n    const state: any = history.location.state;\n    const isDirectLink = !state?.useGoBack;\n\n    useEffect(() => {\n        if (isDirectLink) {\n            getSubmissionFromFeed(params.submissionId);\n        } else {\n            getSubmissionDetails(params.submissionId);\n        }\n    }, [\n        getSubmissionDetails,\n        getSubmissionFromFeed,\n        params.submissionId,\n        isDirectLink,\n    ]);\n\n    const handleClose = (goBack: boolean) => {\n        if (goBack) {\n            history.goBack();\n        } else {\n            history.push('/feed/accuracy');\n        }\n    };\n\n    useKeypress('Escape', () => handleClose(!isDirectLink));\n\n    /**\n     * @function handleCopyLink\n     * @description shows a notification modal for the first time or copies link to a clipboard\n     * @returns { void }\n     */\n    const handleCopyLink = useCallback(() => {\n        if (submissionDetails.details) {\n            if (localStorage.get('submissionLinkWasCopied')) {\n                copyAccuracyLink(submissionDetails.details);\n            } else {\n                setShowCopyLinkNotification(true);\n            }\n        }\n    }, [submissionDetails.details, copyAccuracyLink, localStorage]);\n\n    /**\n     * @function handleHideCopyLinkNotification\n     * @description hides a notification modal and copies link to a clipboard\n     * @returns { void }\n     */\n    const handleHideCopyLinkNotification = useCallback(() => {\n        setShowCopyLinkNotification(false);\n        copyAccuracyLink(submissionDetails.details!);\n        localStorage.set('submissionLinkWasCopied', true);\n    }, [submissionDetails.details, copyAccuracyLink, localStorage]);\n\n    useKeypress('Escape', () => handleClose(!!state?.useGoBack));\n\n    return submissionDetails.error && isDirectLink ? (\n        <BrokenSharedLink />\n    ) : (\n        <PlaybackVideo\n            submission={submissionDetails.details}\n            handleDownloadVideo={handleDownloadVideo}\n            handleCopyLink={handleCopyLink}\n            handleClose={() => handleClose(!isDirectLink)}\n            history={history}\n            videoDownloading={videoDownloading}\n            loading={!!submissionDetails.loading || !!submissionDetails.error}\n            isLoadingError={!!submissionDetails.error}\n            showCopyLinkNotification={showCopyLinkNotification}\n            handleHideCopyLinkNotification={handleHideCopyLinkNotification}\n        />\n    );\n};\n\nexport default PlaybackScreen;","import React from 'react';\nimport styled from 'styled-components';\nimport { rgba } from 'polished';\nimport { CircularProgress } from '@material-ui/core';\nimport CheckMark from '../../icons/CheckMark';\n\nconst Blacker = styled.div`\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1200;\n    background: ${props => rgba(props.theme.Colors.blackTwo, 0.5)};\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\nconst Wrapper = styled.div`\n\n.MuiCircularProgress-determinate{\n    position: absolute;\n    color:  ${props => props.theme.Colors.mainBlue} !important;\n}\n\n.completed{\n    color: ${props => props.theme.Colors.topaz} !important;\n\n    .check{\n        transform: scale(1.8);\n        \n        path{\n            fill: ${props => props.theme.Colors.topaz};\n        }\n    }\n\n    .MuiCircularProgress-determinate{\n        color:  ${props => props.theme.Colors.topaz} !important;\n    }\n}\n\n`;\n\nconst FilledCircle = styled.div`\n    width: 78px;\n    height: 78px;\n    border-radius: 50%;\n    border: 2px solid #eef0f0;\n    position: absolute;\n`\n\nconst Content = styled.div`\n    background-color: #fff;\n    width: 120px;\n    height: 120px;\n    margin: 20px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    font-size: 16px;\n    border-radius: 8px;\n`;\n\nexport const ProgressModal = ({ open, progressValue, onClose }: any) => {\n    // const [open, setOpen] = useState(false);\n\n    return (\n        <Wrapper>\n            {open &&\n                <Blacker>\n                    <Content className={progressValue < 100 ? '' : 'completed'}>\n                        <FilledCircle />\n                        <CircularProgress thickness={2} size={`80px`} variant={'determinate'} value={progressValue} />{progressValue < 100 ? `${progressValue}%` : <CheckMark className='check' /> }\n                    </Content>\n                </Blacker>\n            }\n        </Wrapper>\n    );\n};\n","export enum OnboardingRole {\n    ADMIN = 'admin',\n    TEAM_LEAD = 'team-lead',\n    USER = 'user'\n}\n\nexport interface OnboardingViewProps {\n    onRedirect: () => void;\n}"," export const COLORS: {[key: string]: string} = {\n    'white-1': '#ffffff',\n    'white-2': '#f4f4f4',\n    'white-3': '#e2e2e2',\n    'white-4': '#f7f8f9', // also paleGreyTwo\n    'white-5': '#0000000d', // rgb blackTwo5\n    'white-6': '#e4f2fb',\n    'blue-main': '#4aa9e2', // also primaryBlue,1eb0ff dodgerBlue,3fbcff\n    'blue-1': '#015895', //search by code\n    'blue-2': '#73bbe5', // '#4aa9e280' rgb  darkSkyBlue50\n    'blue-3': '#31a4e9',\n    'blue-4': '#5faad6', \n    'blue-5': '#5cc7ff',\n    'blue-6': '#4893bf',\n    'blue-7': '#3d93c7',\n    'blue-8': '#5eb7ed',\n    'blue-10': '#4aa9e280', // rgb transparentSoftBlueTwo\n    'blue-11': '#409ed6',\n    'blue-12': '#4aa9e226', // also darkSkyBlue15\n    'grey-1': '#6d7f8c',\n    'grey-2': '#b1c0cb',\n    'grey-3': '#f8f8f8',\n    'grey-4': '#e1e8ee',\n    'grey-5': '#f4f6f7',\n    'grey-6': '#ebf1f3',\n    'grey-7': '#f6f6f6',\n    'grey-8': '#9aa6b6',\n    'grey-9': '#f2f2f2',\n    'grey-10': '#9da2a8',\n    'grey-11': '#0000008a',\n    'grey-12': '#77777740',\n    'grey-13': '#d2dfe6',\n    'grey-14': '#6d7f8c66', // steelGrey40 rgb \n    'grey-15': '#a5b5c0',\n    'grey-16': '#64717b',\n    'grey-17': '#626365',\n    'grey-18': '#b1c0cb26', //rgb cloudyBlue15\n    'grey-19': '#99a9b4',\n    'grey-20': '#0000001e',\n    'grey-21': '#EAEAEA',\n    'grey-22': '#93a6b4',\n    'red-main': '#ec513d', // '#e55340'\n    'red-1': '#fa6653', \n    'red-2': '#ff7a69',\n    'orange-main': '#f0a803', // not used yet\n    'orange-1': '#a47200', // '#f5ba33'\n    'orange-2': '#ffebc3', // not used yet '#f5ba333d', // rgb macaroniAndCheeseOpaque\n    'green-main': '#15cba9',\n    'green-1': '#066150',\n    'green-2': '#d6f7e8', // search by code\n    'green-3': '#51d76a',\n    'green-4': '#72dbc8', //also green, mint\n    'graphite-1': '#222431', // also darkThree, rgb \n    'graphite-2': '#171923',\n    'graphite-3': '#292b39', // search by code\n    'graphite-4': '#343850',\n    'black-main': '#212121',\n    'black-1': '#181923',  \n    'black-2': '#323232',\n    'black': '#000000', \n    'pink-1': '#fe5c6c',\n    'pink-2': '#e14a59', // also fadedRedTwoMobile '#e14a59'\n    'pink-3': '#cb3a48',\n};\n\nexport const SCREEN_SIZES = {\n    sm: '576px',\n    md: '768px',\n    ld: '992px',\n    xl: '1200px',\n};\n\nexport const BREAK_POINTS = {\n    mid: 1368,\n    small: 768,\n    smaller: 640,\n    responsiveLg: 1920,\n    responsiveMd: 1440,\n    responsiveSm: 1024,\n    responsiveSmPlus: 1245,\n}\n\nexport const SPACINGS = {\n    md: 8\n}\n\nexport const FONTS = {\n    manrope: 'Manrope'\n}","export default __webpack_public_path__ + \"static/media/Learner-Desktop_img.03c5b0ed.png\";","export default __webpack_public_path__ + \"static/media/Learner-Desktop_img@2x.bc320b39.png\";","export default __webpack_public_path__ + \"static/media/Learner-Desktop_img@3x.9448bb19.png\";","export default __webpack_public_path__ + \"static/media/Learner-Tablet_img.bdf57f22.png\";","export default __webpack_public_path__ + \"static/media/Learner-Tablet_img@2x.e9c87d47.png\";","export default __webpack_public_path__ + \"static/media/Learner-Tablet_img@3x.5d710f12.png\";","export default __webpack_public_path__ + \"static/media/Learner-Phone_img.95f8e42f.png\";","export default __webpack_public_path__ + \"static/media/Learner-Phone_img@2x.f513d4a4.png\";","export default __webpack_public_path__ + \"static/media/Learner-Phone_img@3x.feca0ce0.png\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/button-google-play.62d4415f.png\";","import styled from 'styled-components';\n\nexport const OnboardingContent = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n   \n    @media(max-width:767px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 768px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 1024px) {\n        flex-direction: row;\n        justify-content: space-between;\n    }\n`;\n\nexport const OnboardingText = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    @media(max-width:767px) {\n        width: 290px;\n        padding-top: 24px;\n    }\n    @media(min-width:768px) {\n        width: 432px;\n        padding: 32px 33px 0 33px;\n    }\n    @media(min-width: 1024px) {\n        align-items: flex-start;\n        justify-content: center;\n        width: 345px;\n        padding-right: 56px;\n    }\n`;\n\nexport const OnboardingGreeting = styled.div`\n    color: var(--ps-blue-main);\n\n    @media(max-width:767px) {\n        font-size: 13px;\n        line-height: 18px;\n        font-weight: 600;\n    }\n    @media(min-width:768px) {\n        font-size: 15px;\n        font-weight: 400;\n        line-height: 20px;\n    }\n    @media(min-width: 1024px) {\n        font-size: 15px;\n        font-weight: 600;\n        line-height: 20px;\n    }\n`;\n\nexport const OnboardingTitle = styled.div`\n    font-family: Merriweather;\n    color: var(--ps-white-1);\n    padding-top: 4px;\n    font-weight: 600;\n\n    @media(max-width:767px) {\n        font-size: 20px;\n        line-height: 25px;\n    }\n    @media(min-width:768px) {\n        font-size: 24px;\n        font-weight: 600;\n        line-height: 30px;\n    }\n`\n\nexport const OnboardingDescription = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    padding-top: 8px;\n`\n\nexport const DownloadButtons = styled.div`\n    display: flex;\n    flex-direction: row;\n    padding-top: 24px;\n    justify-content: space-between;\n    width: 286px;\n`","import mainImageDesktop from '../../../../../assets/images/Learner-Desktop_img.png';\nimport mainImageDesktop2x from '../../../../../assets/images/Learner-Desktop_img@2x.png';\nimport mainImageDesktop3x from '../../../../../assets/images/Learner-Desktop_img@3x.png';\nimport mainImageTablet from '../../../../../assets/images/Learner-Tablet_img.png';\nimport mainImageTablet2x from '../../../../../assets/images/Learner-Tablet_img@2x.png';\nimport mainImageTablet3x from '../../../../../assets/images/Learner-Tablet_img@3x.png';\nimport mainImagePhone from '../../../../../assets/images/Learner-Phone_img.png';\nimport mainImagePhone2x from '../../../../../assets/images/Learner-Phone_img@2x.png';\nimport mainImagePhone3x from '../../../../../assets/images/Learner-Phone_img@3x.png';\nimport appStoreImage from '../../../../../assets/images/button-app-store.png'\nimport googlePlayImage from '../../../../../assets/images/button-google-play.png'\nimport useWindowDimensions from '../../../../../helpers/hooks/useWindowDimensions';\nimport LoginAuthWrapper from '../../../../../ui/wrapper/LoginAuthWrapper';\nimport { Variables } from '../../../../../theme/variables';\nimport {\n    OnboardingContent,\n    OnboardingText,\n    OnboardingGreeting,\n    OnboardingTitle,\n    OnboardingDescription,\n    DownloadButtons\n} from './styles';\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\n\nfunction UserOnboardingView() {\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.small;\n    const isTablet = !isMobile && windowDimensions.width < Variables.BreakPoints.responsiveSm;\n    const isDesktop= windowDimensions.width >= Variables.BreakPoints.responsiveSm;\n\n    useHtmlPageTitle(\n        \"You're now registered! Download the Practis mobile app to continue\"\n    );\n\n    return (\n        <LoginAuthWrapper heightToShowScroll={700}>\n            <OnboardingContent>\n            <OnboardingText>\n                <OnboardingGreeting>You're now registered!</OnboardingGreeting>\n                <OnboardingTitle>Download the Practis mobile app to continue</OnboardingTitle>\n                <OnboardingDescription>\n                    We are a mobile-native platform. All the learning happens on our mobile app. Once you download it, log in with the credentials you just created to start practicing.\n                </OnboardingDescription>\n                <DownloadButtons>\n                    <a href=\"https://apps.apple.com/us/app/practis/id1499329539\" target=\"_blank\" rel=\"noreferrer\">\n                        <img src={appStoreImage} width=\"139px\" height=\"40px\" alt=\"Download on the App Store\" />\n                    </a>\n                    <a href=\"https://play.google.com/store/apps/details?id=com.gopractis.android\" target=\"_blank\" rel=\"noreferrer\">\n                        <img src={googlePlayImage} width=\"139px\" height=\"40px\" alt=\"Get it on Google Play\" />\n                    </a>\n                </DownloadButtons>\n            </OnboardingText>\n            {isMobile && (\n                <img\n                    src={mainImagePhone}\n                    srcSet={`${mainImagePhone2x} 2x, ${mainImagePhone3x} 3x`}\n                    alt=\"\"\n                />\n            )}\n            {isTablet && (\n                <img\n                    src={mainImageTablet}\n                    srcSet={`${mainImageTablet2x} 2x, ${mainImageTablet3x} 3x`}\n                    alt=\"\"\n                />\n            )}\n            {isDesktop && (\n                <img\n                    src={mainImageDesktop}\n                    srcSet={`${mainImageDesktop2x} 2x, ${mainImageDesktop3x} 3x`}\n                    alt=\"\"\n                />\n            )}\n            </OnboardingContent>\n        </LoginAuthWrapper>\n    )\n}\n\nexport default UserOnboardingView;","import UserOnboardingView from './view';\n\nexport default UserOnboardingView;","export default __webpack_public_path__ + \"static/media/Admin-Desktop_img.786b0286.png\";","export default __webpack_public_path__ + \"static/media/Admin-Desktop_img@2x.245bc797.png\";","export default __webpack_public_path__ + \"static/media/Admin-Desktop_img@3x.a6353970.png\";","export default __webpack_public_path__ + \"static/media/Admin-Tablet_img.77056251.png\";","export default __webpack_public_path__ + \"static/media/Admin-Tablet_img@2x.9ec3a410.png\";","export default __webpack_public_path__ + \"static/media/Admin-Tablet_img@3x.452c91cc.png\";","export default __webpack_public_path__ + \"static/media/Admin-Phone_img.441ddcaf.png\";","export default __webpack_public_path__ + \"static/media/Admin-Phone_img@2x.a19762e3.png\";","export default __webpack_public_path__ + \"static/media/Admin-Phone_img@3x.c352be9f.png\";","import styled from 'styled-components';\n\nexport const OnboardingContent = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    \n    @media(max-width:767px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 768px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 1024px) {\n        flex-direction: row;\n        justify-content: space-between;\n    }\n`;\n\nexport const OnboardingText = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    @media(max-width:767px) {\n        width: 290px;\n        padding-top: 24px;\n    }\n    @media(min-width:768px) {\n        align-items: center;\n        width: 432px;\n        padding: 32px 33px 0 33px;\n    }\n    @media(min-width: 1024px) {\n        align-items: flex-start;\n        justify-content: center;\n        width: 345px;\n        padding-right: 56px;\n    }\n`;\n\nexport const OnboardingTitle = styled.div`\n    font-family: Merriweather;\n    color: var(--ps-white-1);\n    padding-top: 4px;\n    font-weight: 600;\n\n    @media(max-width:767px) {\n        font-size: 20px;\n        line-height: 25px;\n    }\n    @media(min-width:768px) {\n        font-size: 24px;\n        font-weight: 600;\n        line-height: 30px;\n    }\n`\n\nexport const OnboardingDescription = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    padding-top: 8px;\n`\n\nexport const OnboardingButton = styled.div`\n    margin-top: 24px;\n`","import mainImageDesktop from '../../../../../assets/images/Admin-Desktop_img.png';\nimport mainImageDesktop2x from '../../../../../assets/images/Admin-Desktop_img@2x.png';\nimport mainImageDesktop3x from '../../../../../assets/images/Admin-Desktop_img@3x.png';\nimport mainImageTablet from '../../../../../assets/images/Admin-Tablet_img.png';\nimport mainImageTablet2x from '../../../../../assets/images/Admin-Tablet_img@2x.png';\nimport mainImageTablet3x from '../../../../../assets/images/Admin-Tablet_img@3x.png';\nimport mainImagePhone from '../../../../../assets/images/Admin-Phone_img.png';\nimport mainImagePhone2x from '../../../../../assets/images/Admin-Phone_img@2x.png';\nimport mainImagePhone3x from '../../../../../assets/images/Admin-Phone_img@3x.png';\nimport useWindowDimensions from '../../../../../helpers/hooks/useWindowDimensions';\nimport LoginAuthWrapper from '../../../../../ui/wrapper/LoginAuthWrapper';\nimport { Variables } from '../../../../../theme/variables';\nimport { OnboardingViewProps } from '../../types';\nimport {\n    OnboardingContent,\n    OnboardingText,\n    OnboardingTitle,\n    OnboardingDescription,\n    OnboardingButton\n} from './styles';\nimport { Button } from '../../../../../ui/components/Button';\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\n\nfunction AdminOnboardingView({ onRedirect }: OnboardingViewProps) {\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.small;\n    const isTablet = !isMobile && windowDimensions.width < Variables.BreakPoints.responsiveSm;\n    const isDesktop= windowDimensions.width >= Variables.BreakPoints.responsiveSm;\n\n    useHtmlPageTitle(\"You're an Admin on Practis\");\n\n    return (\n        <LoginAuthWrapper heightToShowScroll={700}>\n            <OnboardingContent>\n                <OnboardingText>\n                    <OnboardingTitle>You're an Admin on Practis</OnboardingTitle>\n                    <OnboardingDescription>\n                        Make sure you bookmark the link to the Practis Admin Portal.\n                    </OnboardingDescription>\n                    <OnboardingButton>\n                        <Button\n                            height=\"40px\"\n                            width=\"220px\"\n                            buttonWidth=\"100%\"\n                            fontSize={13}\n                            action={onRedirect}\n                        >\n                            Open the Practis Admin Portal\n                        </Button>\n                    </OnboardingButton>\n                </OnboardingText>\n                {isMobile && (\n                    <img\n                        src={mainImagePhone}\n                        srcSet={`${mainImagePhone2x} 2x, ${mainImagePhone3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n                {isTablet && (\n                    <img\n                        src={mainImageTablet}\n                        srcSet={`${mainImageTablet2x} 2x, ${mainImageTablet3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n                {isDesktop && (\n                    <img\n                        src={mainImageDesktop}\n                        srcSet={`${mainImageDesktop2x} 2x, ${mainImageDesktop3x} 3x`}\n                        alt=\"\"\n                        width=\"424px\"\n                        height=\"470px\"\n                    />\n                )}\n            </OnboardingContent>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default AdminOnboardingView;","import AdminOnboardingView from './view';\n\nexport default AdminOnboardingView;","export default __webpack_public_path__ + \"static/media/TeamLeader-Desktop_img.3b44a439.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Desktop_img@2x.5f0bea64.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Desktop_img@3x.afc16f9d.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Tablet_img.2f6c7af3.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Tablet_img@2x.40364660.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Tablet_img@3x.a0192e7c.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Phone_img.b2d44704.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Phone_img@2x.10d230a2.png\";","export default __webpack_public_path__ + \"static/media/TeamLeader-Phone_img@3x.09fc3497.png\";","import styled from 'styled-components';\n\nexport const OnboardingContent = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n   \n    @media(max-width:767px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 768px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 1024px) {\n        flex-direction: row;\n        justify-content: space-between;\n    }\n`;\n\nexport const OnboardingText = styled.div`\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n\n    @media(max-width:767px) {\n        width: 290px;\n        padding-top: 24px;\n    }\n    @media(min-width:768px) {\n        width: 432px;\n        padding: 32px 33px 0 33px;\n    }\n    @media(min-width: 1024px) {\n        align-items: flex-start;\n        justify-content: center;\n        width: 345px;\n        padding: 0;\n        margin-right: 56px;\n    }\n`;\n\nexport const OnboardingGreeting = styled.div`\n    color: var(--ps-blue-main);\n\n    @media(max-width:767px) {\n        font-size: 13px;\n        line-height: 18px;\n        font-weight: 600;\n    }\n    @media(min-width:768px) {\n        font-size: 15px;\n        font-weight: 400;\n        line-height: 20px;\n    }\n    @media(min-width: 1024px) {\n        font-size: 15px;\n        font-weight: 600;\n        line-height: 20px;\n    }\n`;\n\nexport const OnboardingTitle = styled.div`\n    font-family: Merriweather;\n    color: var(--ps-white-1);\n    padding-top: 4px;\n    font-weight: 600;\n\n    @media(max-width:767px) {\n        font-size: 20px;\n        line-height: 25px;\n    }\n    @media(min-width:768px) {\n        font-size: 28px;\n        font-weight: 600;\n        line-height: 35px;\n    }\n`\n\nexport const OnboardingDescription = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    padding-top: 8px;\n\n    b {\n        color: var(--ps-white-1);\n        font-weight: 600;\n    }\n`\n\nexport const DownloadTitle = styled.div`\n    width: 290px;\n    padding-top: 16px;\n    font-size: 15px;\n    line-height: 20px;\n    text-align: center;\n    color: var(--ps-grey-2);\n\n    @media(max-width:767px) {\n        margin: 0 auto;\n    }\n    @media(min-width: 1024px) {\n        margin: 0;\n    }\n`\n\nexport const DownloadButtons = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    width: 290px;\n    margin: 0 auto;\n\n    @media(max-width:767px) {\n        padding-top: 4px;\n        margin: 0 auto;\n    }\n    @media(min-width:768px) {\n        padding-top: 8px;\n    }\n    @media(min-width: 1024px) {\n        margin: 0;\n    }\n`\n\nexport const OnboardingButton = styled.div`\n    margin-top: 24px;\n`","import mainImageDesktop from '../../../../../assets/images/TeamLeader-Desktop_img.png';\nimport mainImageDesktop2x from '../../../../../assets/images/TeamLeader-Desktop_img@2x.png';\nimport mainImageDesktop3x from '../../../../../assets/images/TeamLeader-Desktop_img@3x.png';\nimport mainImageTablet from '../../../../../assets/images/TeamLeader-Tablet_img.png';\nimport mainImageTablet2x from '../../../../../assets/images/TeamLeader-Tablet_img@2x.png';\nimport mainImageTablet3x from '../../../../../assets/images/TeamLeader-Tablet_img@3x.png';\nimport mainImagePhone from '../../../../../assets/images/TeamLeader-Phone_img.png';\nimport mainImagePhone2x from '../../../../../assets/images/TeamLeader-Phone_img@2x.png';\nimport mainImagePhone3x from '../../../../../assets/images/TeamLeader-Phone_img@3x.png';\nimport appStoreImage from '../../../../../assets/images/button-app-store.png'\nimport googlePlayImage from '../../../../../assets/images/button-google-play.png'\nimport useWindowDimensions from '../../../../../helpers/hooks/useWindowDimensions';\nimport LoginAuthWrapper from '../../../../../ui/wrapper/LoginAuthWrapper';\nimport { Variables } from '../../../../../theme/variables';\nimport {\n    OnboardingContent,\n    OnboardingText,\n    OnboardingGreeting,\n    OnboardingTitle,\n    OnboardingDescription,\n    DownloadTitle,\n    DownloadButtons,\n    OnboardingButton\n} from './styles';\nimport { Button } from '../../../../../ui/components/Button';\nimport { OnboardingViewProps } from '../../types';\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\n\nfunction TeamLeaderOnboardingView({ onRedirect }: OnboardingViewProps) {\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.small;\n    const isTablet =\n        !isMobile &&\n        windowDimensions.width < Variables.BreakPoints.responsiveSm;\n    const isDesktop =\n        windowDimensions.width >= Variables.BreakPoints.responsiveSm;\n\n    useHtmlPageTitle(\"Welcome to Practis! You're an Admin on Practis\");\n\n    return (\n        <LoginAuthWrapper heightToShowScroll={700}>\n            <OnboardingContent>\n                <OnboardingText>\n                    <OnboardingGreeting>Welcome to Practis!</OnboardingGreeting>\n                    <OnboardingTitle>You're a Team Leader</OnboardingTitle>\n                    <OnboardingDescription>\n                        When creating your Learner account on Practis, someone\n                        decided that you would also be a great Team Leader and\n                        assigned you this role.\n                    </OnboardingDescription>\n                    <OnboardingDescription>\n                        This means that you'll both be able to{' '}\n                        <b>train on the Practis Mobile App</b> and manage your\n                        team's training on our{' '}\n                        <b>web-based Practis Admin Portal</b>.\n                    </OnboardingDescription>\n                    <OnboardingButton>\n                        <Button\n                            height=\"40px\"\n                            width=\"290px\"\n                            buttonWidth=\"100%\"\n                            fontSize={13}\n                            action={onRedirect}\n                        >\n                            Open the Practis Admin Portal\n                        </Button>\n                    </OnboardingButton>\n                    <DownloadTitle>The Practis Mobile App</DownloadTitle>\n                    <DownloadButtons>\n                        <a\n                            href=\"https://apps.apple.com/us/app/practis/id1499329539\"\n                            target=\"_blank\"\n                            rel=\"noreferrer\"\n                        >\n                            <img\n                                src={appStoreImage}\n                                width=\"137px\"\n                                height=\"40px\"\n                                alt=\"Download on the App Store\"\n                            />\n                        </a>\n                        <a\n                            href=\"https://play.google.com/store/apps/details?id=com.gopractis.android\"\n                            target=\"_blank\"\n                            rel=\"noreferrer\"\n                        >\n                            <img\n                                src={googlePlayImage}\n                                width=\"137px\"\n                                height=\"40px\"\n                                alt=\"Get it on Google Play\"\n                            />\n                        </a>\n                    </DownloadButtons>\n                </OnboardingText>\n                {isMobile && (\n                    <img\n                        src={mainImagePhone}\n                        srcSet={`${mainImagePhone2x} 2x, ${mainImagePhone3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n                {isTablet && (\n                    <img\n                        src={mainImageTablet}\n                        srcSet={`${mainImageTablet2x} 2x, ${mainImageTablet3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n                {isDesktop && (\n                    <img\n                        src={mainImageDesktop}\n                        srcSet={`${mainImageDesktop2x} 2x, ${mainImageDesktop3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n            </OnboardingContent>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default TeamLeaderOnboardingView;","import TeamLeaderOnboardingView from './view';\n\nexport default TeamLeaderOnboardingView;","import { useCallback } from 'react';\nimport { useParams } from 'react-router';\nimport { useHistory } from 'react-router';\nimport ROUTES from '../../../routes/routes';\nimport { OnboardingRole } from './types';\nimport UserOnboardingView from './components/UserOnboarding';\nimport AdminOnboardingView from './components/AdminOnboarding';\nimport TeamLeaderOnboardingView from './components/TeamLeaderOnboarding';\n\nfunction Onboarding () {\n    const { role } = useParams<{ role: string }>();\n    const history = useHistory();\n\n    /**\n     * @function handleRedirect - redirects to feeds route\n     * @returns { void }\n     */    \n     const handleRedirect = useCallback(() => {\n        history.push(ROUTES.SUBMISSIONS);\n    }, [history]);\n\n    if (role === OnboardingRole.ADMIN)\n        return <AdminOnboardingView\n            onRedirect={handleRedirect}\n        />;\n    if (role === OnboardingRole.TEAM_LEAD)\n        return <TeamLeaderOnboardingView\n            onRedirect={handleRedirect}\n        />;\n\n    return <UserOnboardingView />;\n}\n\nexport default Onboarding;","import Onboarding from './controller';\n\nexport default Onboarding;","export default __webpack_public_path__ + \"static/media/broken-link.9068ea2c.svg\";","import styled from 'styled-components';\n\nexport const ErrorTitle = styled.div`\n    font-family: Merriweather;\n    color: var(--ps-white-1);\n    padding-top: 24px;\n    font-weight: 600;\n    font-size: 20px;\n    line-height: 25px;\n`;\n\nexport const ErrorDescription = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    padding-top: 8px;\n    padding-bottom: 4px;\n\n    &:last-child {\n        padding-bottom: 0;\n    }\n\n    a {\n        color: var(--ps-blue-main);\n        text-decoration: none;\n    }\n`;","import brokenLink from '../../../assets/images/broken-link.svg';\nimport {\n    ErrorTitle,\n    ErrorDescription\n} from './styles';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nfunction InvalidInvite() {\n\n    useHtmlPageTitle('Hmm. This didn’t work.');\n\n    return (\n        <LoginAuthWrapper contentWidth={324} heightToShowScroll={500}>\n            <img src={brokenLink} width='72px' height='72px' alt='Invalid invite' data-test=\"error-image\" />\n            <ErrorTitle data-test=\"error-title\">Hmm. This didn't work.</ErrorTitle>\n            <ErrorDescription data-test=\"error-description\">\n                Looks like this link has been revoked, is broken, or has already been used. Either way, life goes on. But ask your manager or trainer if they were somehow trying to invite you to training.\n            </ErrorDescription>\n            <ErrorDescription data-test=\"contact-us\">\n                You can also <a href='mailto:support@gopractis.com'>contact us</a> at Practis and we may be able to help.\n            </ErrorDescription>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default InvalidInvite;","import InvalidInvite from \"./view\";\n\nexport default InvalidInvite;","import styled from 'styled-components';\n\nexport const Title = styled.div`\n    font-size: 20px;\n    font-weight: 700;\n    line-height: 28px;\n    color: var(--ps-white-1);\n`;\n\nexport const Description = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    text-align: center;\n    padding-top: 4px;\n`;\n\nexport const MobileNumberContainer = styled.div`\n    padding-top: 12px;\n    width: 100%;\n`;\n\nexport const SecondaryText = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-grey-4);\n    padding-top: 4px;\n    padding-bottom: 4px;\n`;\n\nexport const ButtonContainer = styled.div`\n    padding-top: 20px;\n    width: 100%;\n`","import InputPhone from '../../../../../ui/components/input/PhoneInput/PhoneInput';\nimport { Button } from '../../../../../ui/components/Button';\nimport { EnterMobileNumberViewProps } from './types';\nimport {\n    Title,\n    Description,\n    MobileNumberContainer,\n    SecondaryText,\n    ButtonContainer\n} from './styles';\n\nfunction EnterMobileNumberView({ \n    mobileNumber,\n    isSending,\n    canSkip,\n    onSendCode,\n    onSkip,\n    onMobileNumberChange\n}: EnterMobileNumberViewProps) {\n    return <>\n        <Title data-test=\"add-mobile-number-title\">Add Mobile Number</Title>\n        <Description data-test=\"add-mobile-number-description\">\n            Adding a mobile number improves security and gives you more options to log in later.\n        </Description>\n        <MobileNumberContainer>\n            <InputPhone\n                value={mobileNumber}\n                onChange={onMobileNumberChange}\n                height='56px'\n                fontSize='15px'\n                autoFocus={true}\n                className='grey-border-on-focus'\n                label=''\n                dataTest='mobile-number-input'\n            />\n        </MobileNumberContainer>\n        <SecondaryText data-test=\"mobile-number-input-text\">\n            We will send an SMS to verify your mobile number. Carrier fees may apply.\n        </SecondaryText>\n        <ButtonContainer>\n            <Button\n                height='56px'\n                width='100%'\n                buttonWidth='100%'\n                fontSize={15}\n                disabled={!mobileNumber || mobileNumber.length < 3}\n                loading={isSending}\n                type='button'\n                action={onSendCode}\n                dataTest='send-code-button'\n            >\n                Send Code\n            </Button>\n        </ButtonContainer>\n        {canSkip && (\n            <ButtonContainer>\n                <Button\n                    height='56px'\n                    width='100%'\n                    buttonWidth='100%'\n                    fontSize={15}\n                    variant='inverse'\n                    type='button'\n                    action={onSkip}\n                    dataTest='add-later-button'\n                >\n                    Add Later\n                </Button>\n            </ButtonContainer>\n        )}\n    </>\n}\n\nexport default EnterMobileNumberView;","import { useCallback, useState } from 'react';\n\nimport { useShowMessage } from '../../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { EnterMobileNumberProps } from './types';\nimport EnterMobileNumberView from './view';\nimport { useUpdateUserPhoneNumber } from '../../../../../api';\nimport { ErrorResult } from '../../../../../constants/interfaces/ErrorResult';\nimport {\n    CLIENT_SIDE_ERROR_MESSAGE,\n    PHONE_ALREADY_EXISTS\n} from '../../../../../ui/components/ErrorMessages/constants';\n\nfunction EnterMobileNumberController({\n    userId,\n    mobileNumber,\n    canSkip,\n    onMobileNumberChange,\n    onSendCode,\n    onSkip,\n}: EnterMobileNumberProps) {\n    const showMessage = useShowMessage();\n    const updateUserPhoneNumber = useUpdateUserPhoneNumber();\n\n    const [isSending, setIsSending] = useState(false);\n\n    /**\n     * @function handleSendCode - calls API to save mobile number in user profile\n     * and send verification code to a user cell phone\n     * @returns { void }\n     */\n    const handleSendCode = useCallback(() => {\n        if (userId) {\n            setIsSending(true);\n\n            updateUserPhoneNumber(userId, mobileNumber)\n                .then((result: any) => {\n                    setIsSending(false);\n                    if (result.status === 'error') {\n                        showMessage(result.message ?? result.data, 'error');\n                    } else {\n                        onSendCode();\n                    }\n                })\n                .catch((error: ErrorResult) => {\n                    error.message && showMessage(\n                        error.errorCode === 409 ? CLIENT_SIDE_ERROR_MESSAGE[PHONE_ALREADY_EXISTS] : error.message,\n                        'error'\n                    );\n                    setIsSending(false);\n                });\n        }\n    }, [\n        userId,\n        updateUserPhoneNumber,\n        mobileNumber,\n        showMessage,\n        onSendCode,\n    ]);\n\n    return (\n        <EnterMobileNumberView\n            mobileNumber={mobileNumber}\n            isSending={isSending}\n            canSkip={canSkip}\n            onSendCode={handleSendCode}\n            onSkip={onSkip}\n            onMobileNumberChange={onMobileNumberChange}\n        />\n    );\n}\n\n\nexport default EnterMobileNumberController;","import EnterMobileNumberController from \"./controller\";\n\nexport default EnterMobileNumberController;","import { VerifyMobileNumberProps } from './types';\nimport { useConfirmUserPhoneNumber } from '../../../../../api';\nimport { useUpdateUserPhoneNumber } from '../../../../../api';\nimport CheckVerificationCode from '../CheckVerificationCode';\nimport { useCallback } from 'react';\nimport useHtmlPageTitle from '../../../../../helpers/hooks/useHtmlPageTitle';\n\nfunction VerifyMobileNumberController({\n    userId,\n    mobileNumber,\n    onBack,\n    onVerify,\n}: VerifyMobileNumberProps) {\n    const confirmUserPhoneNumber = useConfirmUserPhoneNumber();\n    const updateUserPhoneNumber = useUpdateUserPhoneNumber();\n\n    useHtmlPageTitle('Verify Mobile Number');\n\n    /**\n     * @function handleVerify\n     * @description calls API to verify entered code\n     * @param { string } code\n     * @returns { Promise }\n     */\n    const handleVerify = useCallback((code: string) => {\n        if (!userId)\n            return Promise.reject({ message: 'User is not defined' });\n        return confirmUserPhoneNumber(userId, +code);\n    }, [userId, confirmUserPhoneNumber]);\n\n    /**\n     * @function handleResend \n     * @description calls API to resend a verification code\n     * @returns { Promise }\n     */    \n    const handleResend = useCallback(() => {\n        if (!userId)\n            return Promise.reject({ message: 'User is not defined' });\n        return updateUserPhoneNumber(userId, mobileNumber);\n    }, [userId, mobileNumber, updateUserPhoneNumber]);\n\n    return (\n        <CheckVerificationCode\n            mobileNumber={mobileNumber}\n            onBack={onBack}\n            onVerify={handleVerify}\n            onVerifySuccess={onVerify}\n            onResend={handleResend}\n        />\n    );\n}\n\n\nexport default VerifyMobileNumberController;","import VerifyMobileNumberController from \"./controller\";\n\nexport default VerifyMobileNumberController;","import LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport EnterMobileNumberController from './components/EnterMobileNumber';\nimport VerifyMobileNumberController from './components/VerifyMobileNumber';\nimport { AddMobileNumberViewProps, MobileNumberVerificationStep } from './types';\n\nfunction AddMobileNumberView({\n    userId,\n    mobileNumber,\n    canSkip,\n    currentStep,\n    onMobileNumberChange,\n    onSendCode,\n    onSkip,\n    onVerify,\n    onBackFromVerify\n}: AddMobileNumberViewProps) {\n    return (\n        <LoginAuthWrapper contentWidth={343} heightToShowScroll={500}>\n            {currentStep === MobileNumberVerificationStep.ENTER && (\n                <EnterMobileNumberController\n                    userId={userId}\n                    mobileNumber={mobileNumber}\n                    canSkip={canSkip}\n                    onMobileNumberChange={onMobileNumberChange}\n                    onSendCode={onSendCode}\n                    onSkip={onSkip}\n                />\n            )}\n            {currentStep === MobileNumberVerificationStep.VERIFY && !!mobileNumber && (\n                <VerifyMobileNumberController\n                    userId={userId}\n                    mobileNumber={mobileNumber}\n                    onBack={onBackFromVerify}\n                    onVerify={onVerify}\n                />\n            )}\n        </LoginAuthWrapper>\n    );\n}\n\nexport default AddMobileNumberView;","import { useCallback, useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\nimport { History } from 'history';\nimport ROUTES from '../../../routes/routes';\nimport Storage from '../../../services/Storage';\nimport { UrlBuilder, UrlBuilderContext } from '../../../tools/url/UrlBuilder';\nimport { UserInterface, UserV2 } from '../../../constants/interfaces/User';\nimport {\n    setAuthToken,\n    redirectAfterLogin,\n    isAuthorized,\n} from '../../../helpers/functions/auth-helpers';\nimport { getUserFeaturesState } from '../../../features/users/store/reducers';\nimport {\n    isPractisAdminRole,\n    isCompanyAdminRole,\n    isTeamLeader,\n} from '../../../constants/enums';\nimport { useGetProfileService } from '../../UserProfile/store/services';\nimport { getProfileState } from '../../UserProfile/store/reducers';\nimport { OnboardingRole } from '../Onboarding/types';\nimport AddMobileNumberView from './view';\nimport { MobileNumberVerificationStep } from './types';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nfunction AddMobileNumberController() {\n    const history: History<any> = useHistory();\n    const userFeatures = useSelector(getUserFeaturesState);\n    const profile = useSelector(getProfileState);\n    const getProfile = useGetProfileService();\n    const user =\n        (history.location.state?.user as UserInterface | UserV2) ?? profile;\n    const isNewUser = history.location.state?.isNewUser ?? false;\n    const initialVerificationStep =\n        history.location.state?.verificationStep ??\n        MobileNumberVerificationStep.ENTER;\n    const from = history.location.state?.from as Location;\n    const [mobileNumber, setMobileNumber] = useState<string>(\n        user?.phoneNumber ?? ''\n    );\n    const [currentStep, setCurrentStep] =\n        useState<MobileNumberVerificationStep>(initialVerificationStep);\n    const [canSkip, setCanSkip] = useState<boolean>(false);\n\n    /**\n     * @function finalizeVerification - redirects to a proper page after verification process is completed or skipped\n     * @param { UrlBuilder } urlBuilder\n     * @returns { void }\n     */\n    const finalizeVerification = useCallback(\n        (urlBuilder: UrlBuilder) => {\n            const tempToken = Storage.get('temp_token');\n            if (tempToken) {\n                Storage.remove('temp_token');\n                setAuthToken(user, tempToken);\n                if (isNewUser) {\n                    const role =\n                        isCompanyAdminRole(user.role?.name) ||\n                        isPractisAdminRole(user.role?.name)\n                            ? OnboardingRole.ADMIN\n                            : isTeamLeader(user.role?.name)\n                            ? OnboardingRole.TEAM_LEAD\n                            : OnboardingRole.USER;\n                    history.push(\n                        ROUTES.AUTH_PAGES.ONBOARDING.replace(':role', role)\n                    );\n                } else {\n                    redirectAfterLogin(\n                        history,\n                        urlBuilder,\n                        user,\n                        tempToken,\n                        from\n                    );\n                }\n            } else {\n                redirectAfterLogin(\n                    history,\n                    urlBuilder,\n                    user,\n                    Storage.get('token')!,\n                    from\n                );\n            }\n        },\n        [user, history, isNewUser, from]\n    );\n\n    /**\n     * @function handleSendCode - switches to code verification view\n     * @returns { void }\n     */\n    const handleSendCode = () =>\n        setCurrentStep(MobileNumberVerificationStep.VERIFY);\n\n    /**\n     * @function handleBackFromVerify - switches to mobile number view\n     * @returns { void }\n     */\n    const handleBackFromVerify = () => {\n        setCurrentStep(MobileNumberVerificationStep.ENTER);\n    };\n\n    useEffect(() => {\n        setCanSkip(userFeatures?.phoneSkip?.allow ?? false);\n    }, [userFeatures]);\n\n    // to prevent browser back button\n    useEffect(() => {\n        window.history.pushState(null, document.title, window.location.href);\n\n        window.addEventListener('popstate', function (event) {\n            window.history.pushState(\n                null,\n                document.title,\n                window.location.href\n            );\n        });\n    }, []);\n\n    useEffect(() => {\n        if (!user?.id && isAuthorized()) {\n            getProfile();\n        }\n    }, [user?.id, getProfile]);\n\n    useEffect(() => {\n        if (user?.id) {\n            setMobileNumber(user.phoneNumber ?? '');\n        }\n    }, [user?.id, user.phoneNumber]);\n\n    useHtmlPageTitle('Add Mobile Number');\n\n    return (\n        <UrlBuilderContext.Consumer>\n            {urlBuilder => (\n                <AddMobileNumberView\n                    userId={user?.id}\n                    mobileNumber={mobileNumber}\n                    canSkip={canSkip}\n                    currentStep={currentStep}\n                    onMobileNumberChange={setMobileNumber}\n                    onSendCode={handleSendCode}\n                    onSkip={() => finalizeVerification(urlBuilder)}\n                    onVerify={() => finalizeVerification(urlBuilder)}\n                    onBackFromVerify={handleBackFromVerify}\n                />\n            )}\n        </UrlBuilderContext.Consumer>\n    );\n}\n\nexport default AddMobileNumberController;","import AddMobileNumber from \"./controller\";\n\nexport default AddMobileNumber;","import styled from 'styled-components';\n\nexport const Content = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n   \n    @media(max-width:767px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 768px) {\n        flex-direction: column-reverse;\n    }\n    @media(min-width: 1024px) {\n        flex-direction: row;\n        justify-content: space-between;\n    }\n`;\n\nexport const TextSection = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    @media(max-width:767px) {\n        width: 290px;\n        padding-top: 24px;\n    }\n    @media(min-width:768px) {\n        width: 432px;\n        padding: 32px 33px 0 33px;\n    }\n    @media(min-width: 1024px) {\n        align-items: flex-start;\n        justify-content: center;\n        width: 345px;\n        padding-right: 56px;\n    }\n`;\n\nexport const Title = styled.div`\n    font-family: Merriweather;\n    color: var(--ps-white-1);\n    padding-top: 4px;\n    font-weight: 600;\n\n    @media(max-width:767px) {\n        font-size: 20px;\n        line-height: 25px;\n    }\n    @media(min-width:768px) {\n        font-size: 24px;\n        font-weight: 600;\n        line-height: 30px;\n    }\n`\n\nexport const Description = styled.div`\n    font-size: 15px;\n    line-height: 20px;\n    color: var(--ps-grey-2);\n    padding-top: 8px;\n`\n\nexport const DownloadButtons = styled.div`\n    display: flex;\n    flex-direction: row;\n    padding-top: 24px;\n    justify-content: space-between;\n    width: 286px;\n`","import mainImageDesktop from '../../../assets/images/Learner-Desktop_img.png';\nimport mainImageDesktop2x from '../../../assets/images/Learner-Desktop_img@2x.png';\nimport mainImageDesktop3x from '../../../assets/images/Learner-Desktop_img@3x.png';\nimport mainImageTablet from '../../../assets/images/Learner-Tablet_img.png';\nimport mainImageTablet2x from '../../../assets/images/Learner-Tablet_img@2x.png';\nimport mainImageTablet3x from '../../../assets/images/Learner-Tablet_img@3x.png';\nimport mainImagePhone from '../../../assets/images/Learner-Phone_img.png';\nimport mainImagePhone2x from '../../../assets/images/Learner-Phone_img@2x.png';\nimport mainImagePhone3x from '../../../assets/images/Learner-Phone_img@3x.png';\nimport appStoreImage from '../../../assets/images/button-app-store.png'\nimport googlePlayImage from '../../../assets/images/button-google-play.png'\nimport useWindowDimensions from '../../../helpers/hooks/useWindowDimensions';\nimport { useParams } from 'react-router';\nimport { Variables } from '../../../theme/variables';\nimport {\n    Content,\n    TextSection,\n    Title,\n    Description,\n    DownloadButtons\n} from './styles';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\n\nfunction TraineeSplashView() {\n    const windowDimensions = useWindowDimensions();\n    const isMobile = windowDimensions.width < Variables.BreakPoints.small;\n    const isTablet = !isMobile && windowDimensions.width < Variables.BreakPoints.responsiveSm;\n    const isDesktop= windowDimensions.width >= Variables.BreakPoints.responsiveSm;\n    const { userName } = useParams<{ userName: string }>();\n\n    useHtmlPageTitle('You don’t have permission to access this page');\n\n    return (\n        <LoginAuthWrapper heightToShowScroll={700}>\n            <Content>\n                <TextSection>\n                    <Title>Hi {userName}</Title>\n                    <Description>\n                    Looks like you don’t have permission to log into the Practis Admin Portal. To access the\n                     Learning app, download the Practis Mobile App from the App Store and log in through there.\n                    </Description>\n                    <DownloadButtons>\n                        <a href=\"https://apps.apple.com/us/app/practis/id1499329539\" target=\"_blank\" rel=\"noreferrer\">\n                            <img src={appStoreImage} width=\"139px\" height=\"40px\" alt=\"Download on the App Store\" />\n                        </a>\n                        <a href=\"https://play.google.com/store/apps/details?id=com.gopractis.android\" target=\"_blank\" rel=\"noreferrer\">\n                            <img src={googlePlayImage} width=\"139px\" height=\"40px\" alt=\"Get it on Google Play\" />\n                        </a>\n                    </DownloadButtons>\n                </TextSection>\n                {isMobile && (\n                    <img\n                        src={mainImagePhone}\n                        srcSet={`${mainImagePhone2x} 2x, ${mainImagePhone3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n                {isTablet && (\n                    <img\n                        src={mainImageTablet}\n                        srcSet={`${mainImageTablet2x} 2x, ${mainImageTablet3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n                {isDesktop && (\n                    <img\n                        src={mainImageDesktop}\n                        srcSet={`${mainImageDesktop2x} 2x, ${mainImageDesktop3x} 3x`}\n                        alt=\"\"\n                    />\n                )}\n            </Content>\n        </LoginAuthWrapper>\n    );\n}\n\nexport default TraineeSplashView;","import TraineeSplashView from \"./view\";\n\nexport default TraineeSplashView;","import React, {\n    ChangeEvent,\n    FC,\n    useCallback,\n    useEffect,\n    useState,\n} from 'react';\nimport styled from 'styled-components';\nimport { EnrollmentStatus } from '../../../../../../constants/interfaces/Enrollments';\nimport { Variables } from '../../../../../../theme/variables';\nimport { Button } from '../../../../../../ui/components/Button';\nimport { Fieldset } from '../../../../../../ui/components/Fieldset';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\nimport { PortableLabelsWithStore } from '../../../../../portableLabels';\nimport {\n    useDeselectAllLabels,\n    useSaveLabels,\n    useSelectLabels,\n} from '../../../../../portableLabels/store/hors/withLabels/services';\nimport { useIfChanged } from '../../../../../../helpers/hooks/usePreviousData';\nimport { useLabelsState } from '../../../../../portableLabels/store/hors/withLabels/states';\nimport { TeamMemberStatusEnum } from '../../../../../../constants/interfaces/TeamMember';\nimport OverdueFlag from '../../../../../../ui/icons/OverdueFlag';\n\n//region Styles\nconst Container = styled.div`\n    display: flex;\n    flex-direction: column;\n\n    background-color: inherit;\n`;\nconst Wrapper = styled.div`\n    display: flex;\n    gap: 16px;\n    max-height: 416px;\n    flex-grow: 1;\n\n    background-color: inherit;\n`;\n\nconst LabelsContainer = styled.div`\n    width: 208px;\n    height: 100%;\n\n    overflow: auto;\n    background-color: inherit;\n`;\n\nconst StatusContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    width: 152px;\n    background-color: inherit;\n`;\n\nconst StatusItem = styled.div`\n    margin-bottom: 8px;\n    display: flex;\n    align-items: center;\n`;\n\nconst Actions = styled.div`\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    flex-shrink: 0;\n    margin-top: 16px;\n`;\n\nconst SummaryCaption = styled.span`\n    font-size: 11px;\n    font-weight: 500;\n\n    margin-right: 24px;\n\n    color: ${props => props.theme.Colors.steelGrey};\n`;\n\nconst ButtonWrapper = styled.div`\n    margin-right: 12px;\n`;\n\nconst OverdueFlagWrapped = styled(OverdueFlag)`\n    margin-left: 4px;\n`;\n//endregion\n\nexport const TeamMembersFilter: FC<{\n    preSelectedLabels: number[];\n    status: EnrollmentStatus[];\n    registrationStatus: any;\n    onLabelsChange: (ids: number[]) => void;\n    onStatusChange: (status: EnrollmentStatus[]) => void;\n    onSuccessApply: () => void;\n    onRegistrationStatusChange: (status: any) => void;\n    onOverdueChange: (hasOverdue: boolean) => void;\n    overdue?: boolean;\n}> = ({\n    preSelectedLabels,\n    onLabelsChange,\n    onStatusChange,\n    status,\n    registrationStatus,\n    onSuccessApply,\n    onRegistrationStatusChange,\n    onOverdueChange,\n    overdue,\n}) => {\n    const [statuses, setStatuses] = useState(status);\n    const [hasOverdue, setHasOverdue] = useState(!!overdue);\n    const [registrationStatuses, setRegistrationStatuses] = useState<any>(registrationStatus)\n    const labels = useLabelsState();\n    const saveLabels = useSaveLabels();\n    const selectLabels = useSelectLabels();\n \n    const ifPreselectedLabelsChanged = useIfChanged(preSelectedLabels);\n\n    useEffect(() => {\n        if (ifPreselectedLabelsChanged) {\n            selectLabels(preSelectedLabels);\n            saveLabels();\n        }\n    }, [\n        ifPreselectedLabelsChanged,\n        preSelectedLabels,\n        saveLabels,\n        selectLabels,\n    ]);\n\n    const regStatusesMap: Record<any, { title: string, dataTest: string }> = {\n        [TeamMemberStatusEnum.PENDING]: { title: 'Pending', dataTest: 'pending' },\n        [TeamMemberStatusEnum.ACTIVE]: { title: 'Active', dataTest: 'active' }\n    };\n\n    const statusesMap: Record<\n        EnrollmentStatus,\n        { title: string; dataTest: string }\n    > = {\n        [EnrollmentStatus.PENDING]: {\n            title: 'Not Started',\n            dataTest: 'not-started',\n        },\n        [EnrollmentStatus.ENROLLED]: {\n            title: 'In Progress',\n            dataTest: 'in-progress',\n        },\n        [EnrollmentStatus.COMPLETED]: {\n            title: 'Completed',\n            dataTest: 'completed',\n        },\n    };\n\n    const onStatusChangeHandler = useCallback(\n        (statusIn: EnrollmentStatus, e: ChangeEvent<HTMLInputElement>) => {\n            if (e.target.checked) {\n                setStatuses([...statuses, statusIn]);\n            } else {\n                setStatuses(statuses.filter(item => item !== statusIn));\n            }\n        },\n        [setStatuses, statuses]\n    );\n\n    const onRegistrationStatusChangeHandler = useCallback(\n        (statusIn: TeamMemberStatusEnum, e: ChangeEvent<HTMLInputElement>) => {\n           \n            if (e.target.checked) {\n                setRegistrationStatuses([...registrationStatuses, statusIn]);\n            } else {\n                setRegistrationStatuses(registrationStatuses.filter((item: any) => item !== statusIn));\n            }\n        },\n        [setRegistrationStatuses, registrationStatuses]\n    );\n\n    const onApplyHandler = useCallback(() => {\n        onStatusChange(statuses);\n        onRegistrationStatusChange(registrationStatuses);\n        onLabelsChange(labels.selected);\n        saveLabels();\n        onSuccessApply();\n        onOverdueChange(hasOverdue);\n    }, [\n        onStatusChange,\n        statuses,\n        registrationStatuses,\n        onLabelsChange,\n        labels.selected,\n        onSuccessApply,\n        saveLabels,\n        onRegistrationStatusChange,\n        onOverdueChange,\n        hasOverdue\n    ]);\n\n    const totalFiltersSelected =\n        labels.selected.filter(id => id > 0).length +\n        statuses.length +\n        registrationStatuses?.length +\n        (hasOverdue ? 1 : 0);\n\n    const deselectLabels = useDeselectAllLabels();\n\n    const onClearHandler = () => {\n        deselectLabels();\n        setStatuses([]);\n        setRegistrationStatuses([]);\n        setHasOverdue(false);\n    }\n \n    return (\n        <Container>\n            <Wrapper>\n                <Fieldset\n                    title={'Registration Status'}\n                    dataTest=\"registration-status\"\n                >\n                    <StatusContainer>\n                        {(\n                            Object.keys(\n                                regStatusesMap\n                            ) as TeamMemberStatusEnum[]\n                        ).map(item => (\n                            <StatusItem data-test=\"registration-status-item-container\">\n                                <Checkbox\n                                    key={item}\n                                    checked={\n                                        registrationStatuses &&\n                                        registrationStatuses.includes(item)\n                                    }\n                                    handleChange={e =>\n                                        onRegistrationStatusChangeHandler(\n                                            item,\n                                            e\n                                        )\n                                    }\n                                    label={regStatusesMap[item].title}\n                                    border={Variables.Colors.steelGrey}\n                                    size={12}\n                                    fontColor={Variables.Colors.black}\n                                    dataTest={regStatusesMap[item].dataTest}\n                                />\n                            </StatusItem>\n                        ))}\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset\n                    title={'Practis Set Status'}\n                    dataTest=\"practisset-status\"\n                >\n                    <StatusContainer>\n                        {(Object.keys(statusesMap) as EnrollmentStatus[]).map(\n                            item => (\n                                <StatusItem data-test=\"practisset-status-item-container\">\n                                    <Checkbox\n                                        key={item}\n                                        checked={statuses.includes(item)}\n                                        handleChange={e =>\n                                            onStatusChangeHandler(item, e)\n                                        }\n                                        label={statusesMap[item].title}\n                                        border={Variables.Colors.steelGrey}\n                                        size={12}\n                                        fontColor={Variables.Colors.black}\n                                        dataTest={statusesMap[item].dataTest}\n                                    />\n                                </StatusItem>\n                            )\n                        )}\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Overdue'} dataTest=\"overdue\">\n                    <StatusContainer>\n                        <StatusItem>\n                            <Checkbox\n                                checked={hasOverdue}\n                                handleChange={e =>\n                                    setHasOverdue(e.target.checked)\n                                }\n                                label=\"Overdue\"\n                                border={Variables.Colors.steelGrey}\n                                size={12}\n                                fontColor={Variables.Colors.black}\n                                dataTest=\"overdue\"\n                            />\n                            <OverdueFlagWrapped dataTest=\"overdue-flag-icon\" />\n                        </StatusItem>\n                    </StatusContainer>\n                </Fieldset>\n                <Fieldset title={'Labels'} dataTest=\"labels-section-title\">\n                    <LabelsContainer>\n                        <PortableLabelsWithStore\n                            showSave={false}\n                            showSelectActions\n                            showSearch\n                        />\n                    </LabelsContainer>\n                </Fieldset>\n            </Wrapper>\n            <Actions>\n                <SummaryCaption data-test=\"total-filters-counter\">\n                    {totalFiltersSelected} Selected\n                </SummaryCaption>\n                <ButtonWrapper>\n                    <Button\n                        disabled={!totalFiltersSelected}\n                        variant=\"inverse\"\n                        width={'122px'}\n                        action={() => onClearHandler()}\n                        dataTest=\"clear-filters-button\"\n                    >\n                        Clear\n                    </Button>\n                </ButtonWrapper>\n                <Button\n                    width={'122px'}\n                    action={() => onApplyHandler()}\n                    dataTest=\"apply-filters-button\"\n                >\n                    Apply Filter\n                </Button>\n            </Actions>\n        </Container>\n    );\n};\n\nexport default TeamMembersFilter;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoMembers = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 48 48\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.2%\"\n                            x=\"-14.3%\"\n                            y=\"-1.2%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                fill=\"#212121\"\n                                d=\"M45.602 35.997H45.6h.002zm-.002 3.001h.002-.002z\"\n                                transform=\"translate(-821 -541) translate(821 541)\"\n                            />\n                            <path\n                                d=\"M846.637 554c11.386 0 13.917 6.857 13.917 15.314 0 6.516-3.304 13.43-8.643 16.286 2.07.498 12.71 3.103 14.024 4.306 2.398 2.198 3.353 8.795.955 12.094l-20.154-.005-20.34.005c-2.417-3.3-1.438-9.896.98-12.094 1.343-1.223 11.657-3.712 14.054-4.277-5.377-2.834-8.71-9.773-8.71-16.315 0-8.457 2.53-15.314 13.917-15.314zm0 2.99c-9.01 0-10.812 5.543-10.812 12.38 0 5.69 2.925 11.981 7.724 13.948v5.19h-1.284c-5.899 1.23-11.32 2.944-12.903 3.716-1.01 1.132-1.655 4.508-1.028 6.777l18.4-.005 18.21.005c.624-2.269-.002-5.635-.997-6.775-1.59-.76-6.919-2.476-12.748-3.718h-1.468v-5.194c4.795-1.971 7.716-8.256 7.716-13.944 0-6.837-1.802-12.38-10.81-12.38z\"\n                                transform=\"translate(-825 -554)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default NoMembers;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TeamMembersIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                fill=\"none\"\n            >\n                <path\n                    fillRule=\"evenodd\"\n                    clipRule=\"evenodd\"\n                    d=\"M4.077 4.086A2.062 2.062 0 0 1 5.52 3.5c.54 0 1.06.21 1.443.586.382.375.597.883.597 1.414 0 .53-.215 1.04-.597 1.414A2.062 2.062 0 0 1 5.52 7.5c-.542 0-1.06-.21-1.443-.586A1.98 1.98 0 0 1 3.479 5.5c0-.53.215-1.04.598-1.414zm-1.7-.248a3.445 3.445 0 0 0 .696 4.212 5.596 5.596 0 0 0-2.058 1.67A5.453 5.453 0 0 0 0 12h1.568a3.991 3.991 0 0 1 1.304-2.041 4.133 4.133 0 0 1 2.648-.955c.97 0 1.908.338 2.647.955A3.991 3.991 0 0 1 9.47 12h1.568a5.45 5.45 0 0 0-1.014-2.28 5.595 5.595 0 0 0-2.058-1.671c.43-.398.754-.894.941-1.444.187-.55.232-1.138.13-1.71a3.467 3.467 0 0 0-.715-1.564 3.564 3.564 0 0 0-1.387-1.044 3.637 3.637 0 0 0-3.378.288c-.495.318-.9.753-1.182 1.263zM10.34 13h-.067a.75.75 0 0 0 .067 0zM.754 13H.712h.042zm14.594 0h-.139a.779.779 0 0 0 .14 0zM16 12h-1.64a3.566 3.566 0 0 0-2.387-1.902.767.767 0 0 1-.422-.266.74.74 0 0 1-.164-.464v-.352c0-.14.04-.277.115-.395a.76.76 0 0 1 .31-.277c.309-.15.557-.399.704-.705.148-.306.185-.652.106-.981a1.496 1.496 0 0 0-.54-.833 1.551 1.551 0 0 0-.95-.325.773.773 0 0 1-.541-.22.742.742 0 0 1 0-1.06.773.773 0 0 1 .54-.22c.594 0 1.174.169 1.671.486.497.317.89.769 1.13 1.3.24.532.317 1.12.222 1.694a2.976 2.976 0 0 1-.757 1.538 5.102 5.102 0 0 1 1.622 1.243c.442.51.776 1.101.981 1.739z\"\n                    fill=\"currentColor\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default TeamMembersIcon;\n","import { FC, useRef, useState } from 'react';\nimport {\n    ActionButton,\n    ActionItem,\n} from '../../../../../../ui/components/ActionButton';\nimport { Team } from '../../../../../../constants/interfaces/Team';\nimport { UserInterface } from '../../../../../../constants/interfaces/User';\nimport { TeamMember } from '../../../../../../constants/interfaces/TeamMember';\nimport { CheckPermission } from '../../../../../permissions';\nimport { NEW_PERMISSIONS } from '../../../../../../constants/enums/permissions';\nimport { usePractisSetsEnrollmentsService } from '../../../../../users/store/services';\nimport { AssignPractisSets } from '../../../../../../features/assign-practisSets';\n\nconst ListActions: FC<{\n    member: TeamMember;\n    profile?: UserInterface;\n    team?: Team;\n    viewProfileHandler: () => void;\n    onSendNudge: () => void;\n    getMembersReportService: (id?: number) => void;\n    onDeleteMember: () => void;\n    canRemoveTeamLeader: boolean;\n    canNudgeUser: boolean;\n    isDefaultTeam?: boolean;\n    isHidden?: boolean;\n    successApplyPractisSetsCallback: () => void;\n}> = ({\n    member,\n    viewProfileHandler,\n    onSendNudge,\n    getMembersReportService,\n    onDeleteMember,\n    canRemoveTeamLeader,\n    canNudgeUser,\n    isDefaultTeam,\n    isHidden,\n    successApplyPractisSetsCallback,\n}) => {\n    const [\n        isAssignPractisSetPopupOpen,\n        setIsAssignPractisSetPopupOpen,\n    ] = useState(false);\n    \n\n    const getUserPractisSets = usePractisSetsEnrollmentsService(\n        member.user.id.toString()\n    );\n\n    const triggerRef = useRef(null);\n\n    /**\n     * @function handleOpenAssignPractisSetPopup\n     * @returns { void }\n     */\n    const handleOpenAssignPractisSetPopup = (): void => {\n        getUserPractisSets(() => setIsAssignPractisSetPopupOpen(true));\n    };\n\n    /**\n     * @function handleCloseAssignPractisSetPopup\n     * @returns { void }\n     */\n    const handleCloseAssignPractisSetPopup = (): void => {\n        setIsAssignPractisSetPopupOpen(false);\n    };\n\n    return (\n        <span>\n            <div ref={triggerRef}>\n                <ActionButton customWidth={200} isHidden={isHidden} dataTest=\"action-menu\">\n                    <ActionItem\n                        onClick={e => {\n                            e.stopPropagation();\n                            viewProfileHandler();\n                        }}\n                        dataTest=\"view-profile-action-item\"\n                    >\n                        View Profile\n                    </ActionItem>\n                    <CheckPermission\n                        permissions={[NEW_PERMISSIONS.ASSIGN_ENROLLMENT]}\n                    >\n                        <ActionItem\n                            onClick={e => {\n                                e.stopPropagation();\n                                handleOpenAssignPractisSetPopup();\n                            }}\n                            dataTest=\"assign-practisset-action-item\"\n                        >\n                            Assign Practis Sets\n                        </ActionItem>\n                    </CheckPermission>\n                    {canNudgeUser && (<ActionItem\n                        onClick={e => {\n                            e.stopPropagation();\n                            onSendNudge();\n                        }}\n                        dataTest=\"nudge-user-action-item\"\n                    >\n                        Nudge User\n                    </ActionItem>\n                    )}\n                    <ActionItem\n                        onClick={e => {\n                            e.stopPropagation();\n                            getMembersReportService(member.user.id);\n                        }}\n                        dataTest=\"export-report-action-item\"\n                    >\n                        Export Report\n                    </ActionItem>\n                    {canRemoveTeamLeader && !isDefaultTeam && (\n                        <ActionItem\n                            destructive={true}\n                            onClick={e => {\n                                e.stopPropagation();\n                                onDeleteMember();\n                            }}\n                            dataTest=\"remove-from-team-action-item\"\n                        >\n                            Remove From Team\n                        </ActionItem>\n                    )}\n                </ActionButton>\n            </div>\n            {isAssignPractisSetPopupOpen && (\n                <AssignPractisSets\n                    triggerRef={triggerRef}\n                    isOpen={isAssignPractisSetPopupOpen}\n                    onClose={handleCloseAssignPractisSetPopup}\n                    users={[member.user.id]}\n                    successApplyPractisSetsCallback={\n                        successApplyPractisSetsCallback\n                    }\n                />\n            )}\n        </span>\n    );\n};\n\nexport default ListActions;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Corona = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"100%\"\n                height=\"100%\"\n                viewBox=\"0 0 14 12\"\n                className={className}\n            >\n                {!!shadow && (\n                    <defs>\n                        <filter\n                            width=\"134.3%\"\n                            height=\"102.1%\"\n                            x=\"-14.3%\"\n                            y=\"-1.1%\"\n                            filterUnits=\"objectBoundingBox\"\n                        >\n                            <feOffset\n                                dx=\"-2\"\n                                in=\"SourceAlpha\"\n                                result=\"shadowOffsetOuter1\"\n                            />\n                            <feGaussianBlur\n                                in=\"shadowOffsetOuter1\"\n                                result=\"shadowBlurOuter1\"\n                                stdDeviation=\"1\"\n                            />\n                            <feColorMatrix\n                                in=\"shadowBlurOuter1\"\n                                result=\"shadowMatrixOuter1\"\n                                values=\"0 0 0 0 0.161525996 0 0 0 0 0.18496362 0 0 0 0 0.213088768 0 0 0 0.3 0\"\n                            />\n                            <feMerge>\n                                <feMergeNode in=\"shadowMatrixOuter1\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs>\n                )}\n                <g fill=\"none\" fillRule=\"evenodd\">\n                    <g fill=\"currentColor\" fillRule=\"nonzero\">\n                        <g>\n                            <path\n                                d=\"M12.19 9.53V12H1.8V9.53h10.39zm-.897.89H2.695v.69h8.598v-.69zM7 0c.808 0 1.464.65 1.464 1.453 0 .363-.134.694-.355.949L9.58 4.66l1.494-.746c.02-.786.667-1.418 1.463-1.418.809 0 1.464.651 1.464 1.454 0 .74-.558 1.352-1.28 1.442l-.585 3.432H1.865L1.28 5.392C.558 5.302 0 4.691 0 3.95c0-.803.655-1.454 1.464-1.454.808 0 1.463.651 1.463 1.454l-.002-.037 1.463.73 1.464-2.288c-.198-.248-.316-.561-.316-.902C5.536.651 6.192 0 7 0zm-.405 2.85L4.71 5.8l-2.043-1.02c-.13.186-.302.34-.503.448l.472 2.708h8.73l.474-2.707c-.201-.109-.374-.263-.505-.449L9.263 5.813 7.344 2.867c-.11.026-.225.04-.344.04-.14 0-.276-.02-.405-.056zm5.941.536c-.313 0-.567.252-.567.564 0 .311.254.564.567.564.314 0 .568-.253.568-.564 0-.312-.254-.564-.568-.564zm-11.072 0c-.314 0-.568.252-.568.564 0 .311.254.564.568.564.313 0 .567-.253.567-.564 0-.312-.254-.564-.567-.564zM7 .89c-.314 0-.568.252-.568.563 0 .312.254.564.568.564.314 0 .568-.252.568-.564 0-.311-.254-.563-.568-.563z\"\n                                transform=\"translate(-508 -374) translate(508 374)\"\n                            />\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n);\n","import { makeStyles } from '@material-ui/core';\nimport styled from 'styled-components';\n\nimport AvatarPlaceholder from '../../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { Corona } from '../../../../ui/icons/Corona';\n\nexport const useStyles = makeStyles(theme => ({\n    multiHeaderContainer: {\n        width: '45% !important',\n        \n        '@media(max-width:1680px)': {\n            width: '85% !important',\n        },\n\n        '@media(max-width: 1441px)': {\n            width: '100% !important',\n        },\n\n        '@media(min-width:1681px)': {\n            width: '70% !important',\n        },\n\n        '@media(min-width: 2041px)': {\n            width: '57% !important',\n        },\n    },\n\n    labelsCellStyle: {\n        justifyContent: 'flex-end !important'\n    }\n}));\n\nexport const Info = styled.div`\n    display: flex;\n    align-items: center;\n`;\n\nexport const StyledAvatarPlaceholder = styled(AvatarPlaceholder)`\n    height: 24px;\n    width: 24px;\n    margin-right: 8px;\n`;\n\nexport const StyledCoronaIcon = styled(Corona)`\n    width: 14px;\n    margin-left: 4px;\n    margin-bottom: 2px;\n\n    color: ${props => props.theme.Colors.macaroniAndCheese};\n`;\n\nexport const NameAdditionalInfo = styled.span`\n    color: ${props => props.theme.Colors.black};\n    margin-left: 3px;\n`;\n\nexport const WrapperTableCell = styled.div`\n    width: 70%;\n    margin: 0 auto;\n    display: flex;\n    flex-wrap: no-wrap;\n\n    td {\n        display: inline-flex;\n        align-items: center;\n        padding: 0 !important;\n        justify-content: flex-end;\n\n        span {\n            width: 95px;\n        }\n    }\n\n    td:nth-child(1) {\n        span {\n            padding-left: 7px !important;\n        }\n    }\n\n    td:nth-child(2) {\n        span {\n            padding-left: 7px !important;\n            width: 92px;\n        }\n    }\n\n    td:nth-child(3) {\n        justify-content: flex-start;\n\n        span {\n            padding-left: 7px !important;\n        }\n    }\n\n    @media (max-width: 1680px) {\n        width: 90%;\n    }\n\n    @media (max-width: 1441px) {\n        width: 100%;\n    }\n`;\n","import {\r\n    ChangeEventHandler,\r\n    FC,\r\n    ReactNode,\r\n    useCallback,\r\n    useEffect,\r\n    useState,\r\n} from 'react';\r\nimport { isEmpty as lodashIsEmpty } from 'lodash';\r\n\r\nimport { useParams } from 'react-router';\r\nimport MainWrapper from '../../../../ui/wrapper/MainWrapper/MainWrapper';\r\nimport { TeamsPageNavigation } from '../../components/TeamsPageNavigation';\r\nimport ROUTES from '../../../../routes/routes';\r\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\r\nimport {\r\n    useTeamEditState,\r\n    useTeamMembersState,\r\n    useUpdateMembersState,\r\n} from '../../store/states';\r\nimport {\r\n    SearchParams,\r\n    useSearchParamsState,\r\n} from '../../../../constants/interfaces/filters';\r\nimport { LoadingComponent } from '../../../../ui/components/LoadingCopmonent';\r\nimport {\r\n    UpdatedLabelsState,\r\n    useLabelsState,\r\n    useUpdatedLabelsState,\r\n} from '../../../labels/store/states';\r\nimport { Popup } from '../../../../ui/components/Popup';\r\nimport TeamMembersFilter from './components/Filters/TeamMembersFilter';\r\nimport { EnrollmentStatus } from '../../../../constants/interfaces/Enrollments';\r\nimport { WithLabelsContext } from '../../../portableLabels';\r\nimport {\r\n    useGetMembersReportService,\r\n    useMarkTeamAsViewedService,\r\n    useNudgeUsersService,\r\n    useSearchTeamMembersService,\r\n    useDeleteMemberLabelService,\r\n} from '../../store/services';\r\nimport { TeamMember } from '../../../../constants/interfaces/TeamMember';\r\nimport { useIfChanged } from '../../../../helpers/hooks/usePreviousData';\r\nimport { CompanyInterface } from '../../../../constants/interfaces/Company';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { getCompanyState } from '../../../../pages/CompanySettings/store/reducers';\r\nimport { pushModal, useHistory } from '../../../../tools/router';\r\nimport FilterByHandler from '../../../../ui/components/Filters/FilterByHandler';\r\nimport { TeamV2 } from '../../../../constants/interfaces/Team';\r\nimport { NEW_PERMISSIONS } from '../../../../constants/enums/permissions';\r\nimport { getProfileState } from '../../../../pages/UserProfile/store/reducers';\r\nimport { UserProfile } from '../../../../constants/interfaces/User';\r\nimport { getPageUrl } from '../../../../routes/helpers';\r\nimport {\r\n    useSaveUserFiltersService,\r\n    useSetAssignLabelsActionService,\r\n} from '../../../labels/store/services';\r\nimport { countAppliedFiltersCount } from './tools';\r\nimport {\r\n    isCompanyAdminRole,\r\n    isPractisAdminRole,\r\n} from '../../../../constants/enums';\r\nimport NoTrainingsFiltering from '../../../../ui/icons/NoTrainingsFiltering';\r\nimport NoMembers from '../../../../ui/icons/NoMembers';\r\nimport { useSearchDebounced } from '../../../../helpers/hooks/useSearch';\r\nimport TeamMembersIcon from '../../../../ui/icons/TeamMembersIcon';\r\nimport { normalizeSP } from '../../../../helpers/functions/searchparams-normalize';\r\nimport { getSearchState } from '../../../searchState/store/reducer';\r\nimport { SearchStateInterface } from '../../../searchState/store/states';\r\nimport { SEARCH_STATE } from '../../../searchState/constants';\r\nimport { isEmpty } from '../../../../helpers/functions/object-helpers';\r\nimport { WithPractisSetsContext } from '../../../portablePractisSets';\r\nimport { TableWrapper } from '../../../../ui/components/table-wrapper';\r\nimport { Tooltip } from '../../../../ui/components/Tooltip';\r\nimport OverdueFlag from '../../../../ui/icons/OverdueFlag';\r\nimport { TableCell } from '../../../../ui/components/table-wrapper/table/table-cell';\r\nimport dayjs from 'dayjs';\r\nimport ListActions from './components/ListActions/ListActions';\r\nimport { EmptyCellDash } from '../../../../ui/components/table-wrapper/table/EmptyCellDash';\r\nimport { useOrderBy } from '../../../../ui/components/table-wrapper/table/table-header/table-header-cell/hook';\r\nimport { useTableStateHelper } from '../../../../ui/components/table-wrapper/helper';\r\nimport { NudgeUser } from '../../../../ui/components/table-wrapper/table/TableAssignOptionsMenu/components/NudgeUser';\r\nimport {\r\n    Info,\r\n    NameAdditionalInfo,\r\n    StyledAvatarPlaceholder,\r\n    StyledCoronaIcon,\r\n    useStyles,\r\n    WrapperTableCell,\r\n} from './styles';\r\nimport { secondsToMinSimple } from '../../../../helpers/functions/convert-time';\r\nimport { Subheader } from '../../components/SubHeader';\r\nimport {\r\n    onListenEvent,\r\n    onRemoveEvent,\r\n    onTriggerEvent,\r\n} from '../../../../helpers/functions/Events';\r\nimport {\r\n    EventNameList,\r\n    REFRESH_TEAM_CONTROLLER,\r\n    REFRESH_TEAM_MEMBERS,\r\n} from '../../../../helpers/functions/Events/types';\r\nimport {\r\n    useDeleteMembersFromTeamService,\r\n    useUpdateTeamMembersBulkActionService,\r\n} from '../../services/TeamBulkActionsService';\r\nimport { clearTeamUpdateStatus } from '../../store/actions';\r\nimport { NudgeData } from '../../../../api/alert/types';\r\nimport { useNudgeUsersBulkActionService } from '../../../../services/GeneralBulkActionServices';\r\nimport { UPDATE_TEAM_ACTION } from '../../services/TeamBulkActionsService/constants';\r\nimport { UserStatus } from '../../../users/store/costants';\r\nimport { TextEllipsis } from '../../../../ui/generalStyles/TextStyles';\r\nimport { useShowConfirmModalDialog } from '../../../../ui/components/ModalDialogs/store/actions';\r\nimport DialogWrapper from '../../../../ui/components/DialogWrapper/DialogWrapper';\r\n\r\nconst qs = require('query-string');\r\n\r\nconst ITEMS_PER_PAGE = 20;\r\n\r\nconst TeamMembers: FC<{\r\n    profile?: UserProfile;\r\n    searchHandler: (sp: SearchParams) => void;\r\n    team?: TeamV2;\r\n    members: ListResult<TeamMember>;\r\n    itemsOnPage: number;\r\n    loading: boolean;\r\n    company?: CompanyInterface;\r\n    params: { teamId?: string };\r\n    updatedMembers?: TeamMember;\r\n    teamUpdateState?: Partial<TeamV2>;\r\n    getMembersReportService?(\r\n        userIds: number[] | null,\r\n        teamId: string,\r\n        searchParams: SearchParams\r\n    ): void;\r\n    onNudgeMembers(\r\n        nudgeUsersData: NudgeData[],\r\n        successCallback?: () => void\r\n    ): void;\r\n    saveGlobalLabelFilters: (labels: number[] | null) => void;\r\n    updatedLabels?: UpdatedLabelsState;\r\n    selectedLabels: number[];\r\n    assignedLabels?: number[];\r\n    setAssignLabelsAction(labels: number[]): void;\r\n    markTeamAsViewed(teamId: any): void;\r\n    deleteMemberLabel: (userId: number, labelId: number) => void;\r\n    searchState: SearchStateInterface;\r\n    locationState: any;\r\n}> = ({\r\n    profile,\r\n    members,\r\n    team,\r\n    itemsOnPage,\r\n    loading,\r\n    selectedLabels,\r\n    searchHandler,\r\n    company,\r\n    params,\r\n    updatedMembers,\r\n    teamUpdateState,\r\n    getMembersReportService,\r\n    onNudgeMembers,\r\n    saveGlobalLabelFilters,\r\n    updatedLabels,\r\n    markTeamAsViewed,\r\n    deleteMemberLabel,\r\n    searchState,\r\n    locationState,\r\n}) => {\r\n    const deleteMembersFromTeamService = useDeleteMembersFromTeamService();\r\n\r\n    const classes = useStyles();\r\n    const history = useHistory();\r\n    const dispatch = useDispatch();\r\n    const [lastRefreshedDate, setLastRefreshedDate] = useState(new Date());\r\n    const [selectedUsers, setSelectedUsers] = useState<number[]>([]);\r\n    const [isSelectAll, setIsSelectAll] = useState<boolean>(false);\r\n    const [showNudgeDialogMemberId, setShowNudgeDialogMemberId] = useState<\r\n        number | null\r\n    >(null);\r\n    const [labelsOpen, setLabelsOpen] = useState<null | undefined | number>(\r\n        null\r\n    );\r\n\r\n    const canRemoveTeamLeader =\r\n        isPractisAdminRole(profile?.role?.name) ||\r\n        isCompanyAdminRole(profile?.role?.name);\r\n\r\n    const canNudgeUser = useCallback(\r\n        (member: TeamMember) => member.userStatus === UserStatus.ACTIVE,\r\n        []\r\n    );\r\n\r\n    const bulkRemoveDisabled =\r\n        members &&\r\n        members.items\r\n            .filter(member => member.isTeamLead)\r\n            .some(member => selectedUsers.includes(member.user.id)) &&\r\n        !canRemoveTeamLeader;\r\n\r\n    const initialSearchParams: SearchParams = {\r\n        searchTerm: '',\r\n        filters: [],\r\n        labelIDs: selectedLabels,\r\n        orderBy: null,\r\n        limit: itemsOnPage,\r\n        offset: 0,\r\n        totalCount: 0,\r\n        numberOfPages: 0,\r\n        filterByStatus: [],\r\n    };\r\n\r\n    const usableParams: SearchParams =\r\n        !isEmpty(searchState) &&\r\n        !!searchState?.params &&\r\n        searchState.key === SEARCH_STATE.MEMBERS.name\r\n            ? searchState.params\r\n            : initialSearchParams;\r\n\r\n    const {\r\n        searchParams,\r\n        setSearchTerm,\r\n        setOrderBy,\r\n        setLabelIDs,\r\n        setOffset,\r\n        setCustom,\r\n        refreshSearchParams,\r\n        setFilter,\r\n    } = useSearchParamsState(usableParams);\r\n    const ifSearchParamsChanged = useIfChanged(searchParams);\r\n    const ifCompanyChanged = useIfChanged(company && company.id, true);\r\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\r\n\r\n    const location = history.location;\r\n    const pageIndex = parseInt(qs.parse(location.search).page);\r\n    const initialOffset = pageIndex\r\n        ? pageIndex === 1\r\n            ? 0\r\n            : (pageIndex - 1) * ITEMS_PER_PAGE\r\n        : 0;\r\n\r\n    const orderBy = searchParams.orderBy;\r\n    const hcTeamMembers = useOrderBy<TeamMember>('name', orderBy, setOrderBy);\r\n    const hcTrainingTime = useOrderBy<TeamMember>(\r\n        'training_time',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n    const hcTraining = useOrderBy<TeamMember>(\r\n        'last_training',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n\r\n    const hcCompletedEnrollmentCount = useOrderBy<TeamMember>(\r\n        'enrollment_completed',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n    const hcProgressEnrollmentCount = useOrderBy<TeamMember>(\r\n        'enrollment_in_progress',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n    const hcPendingEnrollmentCount = useOrderBy<TeamMember>(\r\n        'enrollment_not_started',\r\n        orderBy,\r\n        setOrderBy\r\n    );\r\n\r\n    const hcAccuracyAvg = useOrderBy('accuracy', orderBy, setOrderBy);\r\n    const hcOverdue = useOrderBy('overdue', orderBy, setOrderBy);\r\n\r\n    const refreshHandler = () => {\r\n        setLastRefreshedDate(new Date());\r\n        searchParams.limit = ITEMS_PER_PAGE;\r\n        searchParams.offset = initialOffset;\r\n        searchHandler(searchParams);\r\n        setSelectedUsers([]);\r\n        setIsSelectAll(false);\r\n    };\r\n\r\n    const selectAllHandler: ChangeEventHandler<HTMLInputElement> = e => {\r\n        if (\r\n            members.count < ITEMS_PER_PAGE &&\r\n            e.target.checked === true\r\n        ) {\r\n            setIsSelectAll(true);\r\n        } else {\r\n            setIsSelectAll(false);\r\n        }\r\n\r\n        if (e.target.checked || isCheckboxPartiallySelected) {\r\n            setSelectedUsers(members.items.map(item => item.user.id));\r\n        } else {\r\n            setSelectedUsers([]);\r\n        }\r\n    };\r\n\r\n    const labelChangeHandler = (ids: number[]) => {\r\n        saveGlobalLabelFilters(ids);\r\n    };\r\n\r\n    const filterStatusHandler = (status: EnrollmentStatus[]) => {\r\n        setCustom('filterByStatus', status);\r\n    };\r\n\r\n    const filterOverdueHandler = (hasOverdue: boolean) => {\r\n        setFilter({\r\n            field: 'hasOverdue',\r\n            value: hasOverdue,\r\n        });\r\n    };\r\n\r\n    const registrationStatusHandler = (values: string[]) => {\r\n        setCustom('filterByRegistrationStatus', values);\r\n    };\r\n\r\n    const isTableHeadersDisabled =\r\n        !members || (members && !members.items.length);\r\n\r\n    const selectUserHandler = useCallback(\r\n        (id: number, state: boolean) => {\r\n            if (state) {\r\n                setSelectedUsers(prevState => [...prevState, id]);\r\n            } else {\r\n                setSelectedUsers(prevState =>\r\n                    prevState.filter(item => item !== id)\r\n                );\r\n            }\r\n            setIsSelectAll(false);\r\n        },\r\n        [setSelectedUsers]\r\n    );\r\n\r\n    const handleManageTeam = useCallback(() => {\r\n        if (!team?.id || team?.isDefault === undefined) {\r\n            return;\r\n        }\r\n        if (params && params.teamId) {\r\n            pushModal(\r\n                history,\r\n                ROUTES.TEAMS_PAGES.MANAGE_TEAM.replace(\r\n                    ':teamId',\r\n                    team.id.toString()\r\n                ),\r\n                { isDefaultTeam: team?.isDefault }\r\n            );\r\n        }\r\n    }, [history, params, team]);\r\n\r\n    const onNudgeMultipleUsersSuccessCallback = useCallback(() => {\r\n        onClearSelection();\r\n    }, []);\r\n\r\n    const nudgeUsersBulkActionService = useNudgeUsersBulkActionService(\r\n        'common',\r\n        {\r\n            companyId: company?.id ?? 0,\r\n        },\r\n        searchParams,\r\n        members?.count ?? 0,\r\n        refreshHandler\r\n    );\r\n\r\n    const handleNudgeMultipleUsers = useCallback(\r\n        (data: any) => {\r\n            const { text, name: senderName } = data;\r\n\r\n            if (isSelectAll) {\r\n                nudgeUsersBulkActionService({ text, senderName });\r\n            } else {\r\n                if (selectedUsers) {\r\n                    const nudgeUsersDate = selectedUsers.map(\r\n                        user =>\r\n                            ({\r\n                                type: 'common',\r\n                                receiverId: user,\r\n                                enrollmentId: null,\r\n                                senderName,\r\n                                text,\r\n                            } as NudgeData)\r\n                    );\r\n\r\n                    onNudgeMembers(\r\n                        nudgeUsersDate,\r\n                        onNudgeMultipleUsersSuccessCallback\r\n                    );\r\n                }\r\n            }\r\n        },\r\n        [\r\n            isSelectAll,\r\n            nudgeUsersBulkActionService,\r\n            selectedUsers,\r\n            onNudgeMembers,\r\n            onNudgeMultipleUsersSuccessCallback,\r\n        ]\r\n    );\r\n\r\n    const onSinglePractisExportClicked = useCallback(\r\n        (memberId: any) => {\r\n            if (\r\n                getMembersReportService &&\r\n                params &&\r\n                params.teamId &&\r\n                memberId\r\n            ) {\r\n                getMembersReportService(\r\n                    [memberId],\r\n                    params.teamId,\r\n                    searchParams\r\n                );\r\n            }\r\n        },\r\n        [getMembersReportService, params, searchParams]\r\n    );\r\n\r\n    const onNudgeSingleUserSuccessCallback = () => {\r\n        setShowNudgeDialogMemberId(null);\r\n    };\r\n\r\n    const handleNudgeSingleUser = useCallback(\r\n        (data: any) => {\r\n            const { text, name: senderName } = data;\r\n            if (showNudgeDialogMemberId) {\r\n                const nudgeUserDate: NudgeData = {\r\n                    type: 'common',\r\n                    enrollmentId: null,\r\n                    receiverId: showNudgeDialogMemberId,\r\n                    text,\r\n                    senderName,\r\n                };\r\n\r\n                onNudgeMembers(\r\n                    [nudgeUserDate],\r\n                    onNudgeSingleUserSuccessCallback\r\n                );\r\n            }\r\n        },\r\n        [onNudgeMembers, showNudgeDialogMemberId]\r\n    );\r\n\r\n    const onExportClicked = useCallback(() => {\r\n        if (\r\n            selectedUsers &&\r\n            selectedUsers.length &&\r\n            getMembersReportService &&\r\n            params &&\r\n            params.teamId\r\n        ) {\r\n            getMembersReportService(\r\n                !isSelectAll ? selectedUsers : null,\r\n                params.teamId,\r\n                isSelectAll\r\n                    ? normalizeSP(searchParams, members.count)\r\n                    : searchParams\r\n            );\r\n        }\r\n    }, [\r\n        selectedUsers,\r\n        getMembersReportService,\r\n        params,\r\n        isSelectAll,\r\n        searchParams,\r\n        members.count,\r\n    ]);\r\n\r\n    /**\r\n     * @function onDeleteTeamMembersSuccessCallback\r\n     * @returns { void }\r\n     */\r\n    const onDeleteTeamMembersSuccessCallback = (): void => {\r\n        Promise.resolve().then(() => {\r\n            setSelectedUsers([]);\r\n            refreshHandler();\r\n            dispatch(clearTeamUpdateStatus());\r\n            onTriggerEvent(EventNameList[REFRESH_TEAM_CONTROLLER]);\r\n        });\r\n    };\r\n\r\n    /**\r\n     * @function handleDeleteTeamMembersSingleAction\r\n     * @param { number[] | undefined } selectedUserIds\r\n     * @returns { void }\r\n     */\r\n    const handleDeleteTeamMembersSingleAction = (\r\n        selectedUserIds?: number[]\r\n    ): void => {\r\n        const { teamId = null } = params!;\r\n        if (!isEmpty(selectedUserIds) && teamId) {\r\n            deleteMembersFromTeamService(\r\n                +teamId,\r\n                undefined,\r\n                selectedUserIds\r\n            ).then(() => {\r\n                onDeleteTeamMembersSuccessCallback();\r\n            });\r\n        }\r\n    };\r\n\r\n    const deleteMembersFromTeamServiceOptions = {\r\n        parameters: {\r\n            teamId: +(params.teamId ?? 0),\r\n            searchParams: {\r\n                ...searchParams,\r\n                limit: ITEMS_PER_PAGE,\r\n                offset: isSelectAll ? members?.count : selectedUsers.length,\r\n            },\r\n            selectedItemIds: !isSelectAll ? selectedUsers : undefined,\r\n            itemsCount: selectedUsers?.length ?? 0,\r\n        },\r\n        fieldName: !isSelectAll ? 'selectedItemIds' : 'searchParams.offset',\r\n    };\r\n\r\n    const {\r\n        handleStartBulkActionService:\r\n            handleStartDeleteMembersFromTeamBulkAction,\r\n    } = useUpdateTeamMembersBulkActionService(\r\n        {\r\n            actionName: UPDATE_TEAM_ACTION,\r\n            actionFunction: deleteMembersFromTeamService,\r\n            actionFunctionOptions: deleteMembersFromTeamServiceOptions,\r\n        },\r\n        'Removing Users',\r\n        onDeleteTeamMembersSuccessCallback\r\n    );\r\n\r\n    /**\r\n     * @function handleDeleteTeamMembers\r\n     * @param { number[] } ids\r\n     * @returns { void }\r\n     */\r\n    const handleDeleteTeamMembers = (ids: number[]): void => {\r\n        // we should start chunk service.\r\n        if (isSelectAll) {\r\n            handleStartDeleteMembersFromTeamBulkAction();\r\n        } else {\r\n            showConfirmationModalDialog({\r\n                modalTitle: 'Warning',\r\n                description:\r\n                    'You will remove the selected member(s) from the team. This action cannot be undone. Are you sure?',\r\n                cancelButtonText: 'Go Back',\r\n                confirmButtonText: 'Proceed',\r\n                dialogType: 'DANGER',\r\n                onConfirm: () => handleDeleteTeamMembersSingleAction(ids),\r\n            });\r\n        }\r\n    };\r\n\r\n    const handleTableStates = useTableStateHelper();\r\n    const tableStates = handleTableStates({\r\n        searchTerm: searchParams.searchTerm,\r\n        appliedFilters: countAppliedFiltersCount(searchParams),\r\n        itemsCount: members?.items.length || 0,\r\n    });\r\n\r\n    useEffect(() => {\r\n        if (ifSearchParamsChanged) {\r\n            searchParams.limit = ITEMS_PER_PAGE;\r\n            searchParams.offset = initialOffset;\r\n            searchHandler(searchParams);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [searchHandler, searchParams, ifSearchParamsChanged]);\r\n\r\n    useEffect(() => {\r\n        if (ifCompanyChanged) {\r\n            history.push(ROUTES.TEAMS);\r\n        }\r\n    }, [ifCompanyChanged, history]);\r\n\r\n    useEffect(() => {\r\n        if (updatedMembers || teamUpdateState) refreshSearchParams();\r\n    }, [updatedMembers, teamUpdateState, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        if (selectedUsers.length) {\r\n            setSelectedUsers([]);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [searchParams.orderBy]);\r\n\r\n    useEffect(() => {\r\n        if (team && params && params.teamId) {\r\n            const leaders = team.leaders;\r\n\r\n            if (!leaders || (leaders && !leaders.length)) {\r\n                return;\r\n            } else {\r\n                const leader = leaders.find(\r\n                    item => item.user.id === profile?.id\r\n                );\r\n                if (!leader) return;\r\n\r\n                if (!(leader && leader.isViewed)) {\r\n                    markTeamAsViewed(parseInt(params.teamId));\r\n                }\r\n            }\r\n        }\r\n    }, [team, params.teamId, profile, markTeamAsViewed, params]);\r\n\r\n    useEffect(() => {\r\n        selectedLabels && setLabelIDs(selectedLabels);\r\n    }, [selectedLabels, setLabelIDs]);\r\n\r\n    useEffect(() => {\r\n        if (updatedLabels && updatedLabels.updateType === 'delete')\r\n            refreshSearchParams();\r\n    }, [updatedLabels, refreshSearchParams]);\r\n\r\n    useEffect(() => {\r\n        if (selectedUsers?.length === members?.count) {\r\n            setIsSelectAll(true);\r\n        }\r\n    }, [members?.count, selectedUsers]);\r\n\r\n    useEffect(() => {\r\n        return () => setSelectedUsers([]);\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        Promise.resolve().then(() => {\r\n            setSelectedUsers([]);\r\n            setIsSelectAll(false);\r\n        });\r\n    }, [members]);\r\n\r\n    useEffect(() => {\r\n        if (pageIndex > 1) {\r\n            setTimeout(() => {\r\n                setOffset(initialOffset);\r\n            }, 300);\r\n        } else if (pageIndex === 1) {\r\n            setTimeout(() => {\r\n                setOffset(0);\r\n            }, 100);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [pageIndex]);\r\n\r\n    useEffect(() => {\r\n        onListenEvent(EventNameList[REFRESH_TEAM_MEMBERS], refreshHandler);\r\n\r\n        return () => {\r\n            onRemoveEvent(EventNameList[REFRESH_TEAM_MEMBERS], refreshHandler);\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    const isListEmpty = !members || (members && !members.items.length);\r\n\r\n    const isFilteredByOverdue = searchParams.filters?.some(\r\n        item => item.field === 'hasOverdue' && item.value === true\r\n    );\r\n\r\n    /**\r\n     * @function handlePageChange\r\n     * @param { number } limit\r\n     * @param { number } offset\r\n     * @returns { void }\r\n     */\r\n    const handlePageChange = (offset: number) => {\r\n        setOffset(offset);\r\n    };\r\n\r\n    /**\r\n     * @function onClearSelection\r\n     * @returns { void }\r\n     */\r\n    const onClearSelection = () => {\r\n        setIsSelectAll(false);\r\n        setSelectedUsers([]);\r\n    };\r\n\r\n    /**\r\n     * @function handleAssignedLabelDelete\r\n     * @param { number } labelId\r\n     * @param { TeamMember } member\r\n     * @returns { void }\r\n     */\r\n    const handleAssignedLabelDelete = (\r\n        labelId: number,\r\n        member: TeamMember\r\n    ): void => {\r\n        deleteMemberLabel(member.user.id, labelId);\r\n    };\r\n\r\n    /**\r\n     * @function onSelectAll\r\n     * @returns { void }\r\n     */\r\n    const onSelectAll = () => {\r\n        setSelectedUsers(members.items.map(item => item.user.id));\r\n        setIsSelectAll(true);\r\n    };\r\n\r\n    const isMasterCheckBoxChecked = !!selectedUsers.length;\r\n\r\n    const isMasterCheckBoxDisabled = !members.items.length;\r\n\r\n    const isCheckboxPartiallySelected =\r\n        selectedUsers && selectedUsers.length < members.items.length;\r\n\r\n    /**\r\n     * @function viewProfileHandler\r\n     * @param { TeamMember } member\r\n     * @returns { void }\r\n     */\r\n    const viewProfileHandler = useCallback(\r\n        (member: TeamMember) => {\r\n            history.push(\r\n                getPageUrl(ROUTES.USER_PERFORMANCE, {\r\n                    userId: member.user.id.toString(),\r\n                }),\r\n                { useGoBack: true }\r\n            );\r\n        },\r\n        [history]\r\n    );\r\n\r\n    /**\r\n     * @function checkIsRowChecked\r\n     * @param { TeamMember } member\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsRowChecked = (member: TeamMember): boolean =>\r\n        selectedUsers.includes(member.user.id) || isSelectAll;\r\n\r\n    /**\r\n     * @function onRowCheckHandler\r\n     * @param event\r\n     * @param { TeamMember } member\r\n     * @returns { void }\r\n     */\r\n    const onRowCheckHandler = (event: any, member: TeamMember) => {\r\n        selectUserHandler(member.user.id, event?.target?.checked);\r\n    };\r\n\r\n    /**\r\n     * @function checkIsLabelTagsOpen\r\n     * @param { TeamMember } member\r\n     * @returns { boolean }\r\n     */\r\n    const checkIsLabelTagsOpen = (member: TeamMember): boolean => {\r\n        return labelsOpen === member.user.id;\r\n    };\r\n\r\n    /**\r\n     * @function onDeleteLabelHandler\r\n     * @param { number } labelId\r\n     * @param { TeamMember } member\r\n     * @returns { void }\r\n     */\r\n    const onDeleteLabelHandler = (\r\n        labelId: number,\r\n        member: TeamMember\r\n    ): void => {\r\n        handleAssignedLabelDelete(labelId, member);\r\n    };\r\n\r\n    /**\r\n     * @function getAdditionalMemberInfo\r\n     * @returns { ReactNode | null }\r\n     */\r\n    const getAdditionalMemberInfo = useCallback(\r\n        (memberId: number) => {\r\n            if (profile?.id === memberId) {\r\n                return <NameAdditionalInfo>{` (You)`}</NameAdditionalInfo>;\r\n            }\r\n\r\n            return null;\r\n        },\r\n        [profile]\r\n    );\r\n\r\n    /**\r\n     * @function getFormattedLastTrainingAt\r\n     * @param { Date } lastTrainingAt\r\n     * @returns { string }\r\n     */\r\n    const getFormattedLastTrainingAt = (lastTrainingAt: Date): string => {\r\n        if (!lastTrainingAt) {\r\n            return '';\r\n        }\r\n\r\n        const date = dayjs(lastTrainingAt);\r\n        return date.isBefore(Date.now(), 'day')\r\n            ? date.format('M/D/YY')\r\n            : date.format('h:mm A');\r\n    };\r\n\r\n    /**\r\n     * @function renderTeamLeadInfo\r\n     * @returns { ReactNode }\r\n     */\r\n    const renderTeamLeadInfo = (): ReactNode => {\r\n        return (\r\n            <Tooltip\r\n                label=\"User is a team leader\"\r\n                position=\"bottom-start\"\r\n                offset={{\r\n                    y: '-2px',\r\n                    x: '4px',\r\n                }}\r\n            >\r\n                <StyledCoronaIcon />\r\n            </Tooltip>\r\n        );\r\n    };\r\n\r\n    /**\r\n     * @function handleToggleLabels\r\n     * @param { number } itemId\r\n     * @returns { void }\r\n     */\r\n    const handleToggleLabels = (itemId?: number) => {\r\n        if (!itemId) return;\r\n        if (labelsOpen === itemId) {\r\n            setLabelsOpen(null);\r\n        } else {\r\n            setLabelsOpen(itemId);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <MainWrapper\r\n                subTitle={team && team.name ? team.name : ''}\r\n                tabs={<TeamsPageNavigation teamName={team?.name} />}\r\n                subHeader={\r\n                    <Subheader\r\n                        practisSetsCount={team?.countPractisSets}\r\n                        usersCount={team?.countMembers}\r\n                        teamLeadersCount={team?.leaders?.length}\r\n                    />\r\n                }\r\n                goBackUrl={ROUTES.TEAMS_PAGES.LIST_OF_TEAMS}\r\n                title=\"Team\"\r\n                useGoBack={locationState?.useGoBack}\r\n                htmlPageTitle={`Teams ${\r\n                    team ? `- ${team.name}` : ''\r\n                } - Practis`}\r\n                dataTest=\"team\"\r\n            >\r\n                {!!showNudgeDialogMemberId && (\r\n                    <DialogWrapper\r\n                        customization={{\r\n                            width: 480,\r\n                            padding: '49px 32px 32px 32px',\r\n                        }}\r\n                    >\r\n                        <NudgeUser\r\n                            fromUser={\r\n                                !!profile\r\n                                    ? `${profile.firstName} ${profile.lastName}`\r\n                                    : ''\r\n                            }\r\n                            onSend={handleNudgeSingleUser}\r\n                            onClose={() => setShowNudgeDialogMemberId(null)}\r\n                        />\r\n                    </DialogWrapper>\r\n                )}\r\n                <TableWrapper\r\n                    tableStates={tableStates}\r\n                    data={members?.items}\r\n                    selectedLabels={selectedLabels}\r\n                    cornered={selectedLabels && !!selectedLabels.length}\r\n                    tableRefreshConfigurations={{\r\n                        lastRefreshed: lastRefreshedDate,\r\n                        refreshData: refreshHandler,\r\n                        dataTest: \"team-timestamp\",\r\n                        buttons: [\r\n                            {\r\n                                name: 'Manage Team',\r\n                                icon: <TeamMembersIcon />,\r\n                                onPress: handleManageTeam,\r\n                                disabled: !team?.id,\r\n                                dataTest: 'manage-team',\r\n                            },\r\n                        ],\r\n                    }}\r\n                    tableToolsOptions={{\r\n                        pagingOptions: {\r\n                            totalCount: members?.count ?? 0,\r\n                            itemsPerPage: ITEMS_PER_PAGE,\r\n                            onPageChange: handlePageChange,\r\n                            searchOrFiltersApplied:\r\n                                searchParams.searchTerm.length ||\r\n                                countAppliedFiltersCount(searchParams),\r\n                            dataTest: \"team-paging\",\r\n                        },\r\n                        searchInputOptions: {\r\n                            initialValue: searchParams.searchTerm,\r\n                            onSearchChange: setSearchTerm,\r\n                            isSearchInputDisabled:\r\n                                isListEmpty && !searchParams.searchTerm.length,\r\n                            dataTest: \"team-search\",\r\n                        },\r\n                        isSelectedItemOptionsVisible:\r\n                            !lodashIsEmpty(selectedUsers) &&\r\n                            !lodashIsEmpty(members),\r\n                        selectedItemOptions: {\r\n                            isSelectAll: isSelectAll,\r\n                            selectedLength: selectedUsers?.length,\r\n                            totalCount: members?.count,\r\n                            itemsPerPage: ITEMS_PER_PAGE,\r\n                            onClearSelection: onClearSelection,\r\n                            onSelectAll: onSelectAll,\r\n                            bulkActionsConfig: {\r\n                                disabled: selectedUsers.length === 0,\r\n                                showNudgeWarning: false,\r\n                                assignPractisSetsAndDueDatePermissions: [\r\n                                    NEW_PERMISSIONS.ASSIGN_ENROLLMENT,\r\n                                ],\r\n                                onNudgeSendButtonClicked:\r\n                                    handleNudgeMultipleUsers,\r\n                                sendNudgePermissions: [\r\n                                    NEW_PERMISSIONS.SEND_NUDGE,\r\n                                ],\r\n                                onExportClicked: onExportClicked,\r\n                                showExportPermissions: [\r\n                                    NEW_PERMISSIONS.EXPORT_LIST_USER,\r\n                                ],\r\n                                removeItemPermissions: !team?.isDefault\r\n                                    ? [NEW_PERMISSIONS.REMOVE_TEAM_MEMBER]\r\n                                    : undefined,\r\n                                removeItemTitle: 'Remove From Team',\r\n                                onRemoveItemsSubmit: () =>\r\n                                    handleDeleteTeamMembers(selectedUsers),\r\n                                removeItemsDisabled: bulkRemoveDisabled,\r\n                                removeItemTooltip:\r\n                                    'Team leaders can’t be removed from team',\r\n                                isSelectAll: isSelectAll,\r\n                                totalCount: members?.count,\r\n                                searchQuery: {\r\n                                    query: !lodashIsEmpty(\r\n                                        searchParams?.searchTerm\r\n                                    )\r\n                                        ? searchParams.searchTerm\r\n                                        : null,\r\n                                    teamId: team?.id,\r\n                                    labelId: !lodashIsEmpty(\r\n                                        searchParams?.labelIDs\r\n                                    )\r\n                                        ? searchParams.labelIDs\r\n                                        : null,\r\n                                    status: !lodashIsEmpty(\r\n                                        searchParams?.filterByRegistrationStatus\r\n                                    )\r\n                                        ? searchParams.filterByRegistrationStatus\r\n                                        : null,\r\n                                    trainingStatus: !lodashIsEmpty(\r\n                                        searchParams?.filterByStatus\r\n                                    )\r\n                                        ? searchParams.filterByStatus\r\n                                        : null,\r\n                                    hasOverdue: isFilteredByOverdue,\r\n                                },\r\n                                selectedItems: selectedUsers,\r\n                                successApplyPractisSetsCallback: refreshHandler,\r\n                            },\r\n                        },\r\n                        filterOptions: {\r\n                            filterComponent: (\r\n                                <Popup<HTMLButtonElement>\r\n                                    content={({ hide }) => (\r\n                                        <TeamMembersFilter\r\n                                            preSelectedLabels={\r\n                                                selectedLabels || []\r\n                                            }\r\n                                            onStatusChange={filterStatusHandler}\r\n                                            onRegistrationStatusChange={\r\n                                                registrationStatusHandler\r\n                                            }\r\n                                            status={\r\n                                                searchParams.filterByStatus as EnrollmentStatus[]\r\n                                            }\r\n                                            registrationStatus={\r\n                                                searchParams.filterByRegistrationStatus ||\r\n                                                []\r\n                                            }\r\n                                            onOverdueChange={\r\n                                                filterOverdueHandler\r\n                                            }\r\n                                            onLabelsChange={labelChangeHandler}\r\n                                            onSuccessApply={() => hide()}\r\n                                            overdue={isFilteredByOverdue}\r\n                                        />\r\n                                    )}\r\n                                    anchorOrigin={{\r\n                                        vertical: 'bottom',\r\n                                        horizontal: 'right',\r\n                                    }}\r\n                                    horizontalOffset={256}\r\n                                >\r\n                                    {(ref, { toggleShown, shown }) => (\r\n                                        <FilterByHandler\r\n                                            ref={ref}\r\n                                            open={shown}\r\n                                            toggleOpen={toggleShown}\r\n                                            filtersCount={countAppliedFiltersCount(\r\n                                                searchParams\r\n                                            )}\r\n                                            disabled={\r\n                                                (searchParams.searchTerm\r\n                                                    .length > 0 ||\r\n                                                    countAppliedFiltersCount(\r\n                                                        searchParams\r\n                                                    ) === 0) &&\r\n                                                isListEmpty\r\n                                            }\r\n                                            dataTest=\"team-filters\"\r\n                                        />\r\n                                    )}\r\n                                </Popup>\r\n                            ),\r\n                        },\r\n                    }}\r\n                    tableEmptyStateConfigurations={{\r\n                        shouldShowEmptyState:\r\n                            !loading && members?.items?.length === 0,\r\n                        noEntriesOptions: {\r\n                            icon: NoMembers,\r\n                            text: 'No Members Yet',\r\n                            dataTest: 'no-members-yet',\r\n                        },\r\n                        noSearchResultsOptions: {\r\n                            entityName: 'Members',\r\n                            dataTest: 'no-members-found',\r\n                        },\r\n                        noFilterResultsOptions: {\r\n                            icon: NoTrainingsFiltering,\r\n                            width: '160px',\r\n                            dataTest: 'no-filtering-criteria',\r\n                        },\r\n                    }}\r\n                    configurations={{\r\n                        masterCheckBoxConfig: {\r\n                            checked: isMasterCheckBoxChecked,\r\n                            disabled: isMasterCheckBoxDisabled,\r\n                            partial:\r\n                                isCheckboxPartiallySelected || !isSelectAll,\r\n                            handleCheck: selectAllHandler,\r\n                            dataTest: \"members-master-checkbox\"\r\n                        },\r\n                        columns: [\r\n                            {\r\n                                title: 'Team Members',\r\n                                width: 18,\r\n                                ...(isTableHeadersDisabled\r\n                                    ? null\r\n                                    : hcTeamMembers),\r\n                                disabled: isTableHeadersDisabled,\r\n                                dataTest: 'team-members-column',\r\n                            },\r\n                            {\r\n                                title: 'Overdue',\r\n                                width: 1,\r\n                                ...(isTableHeadersDisabled ? null : hcOverdue),\r\n                                disabled: isTableHeadersDisabled,\r\n                                withTooltip: true,\r\n                                dataTest: 'overdue-column',\r\n                            },\r\n                            {\r\n                                title: 'Practis Sets Status',\r\n                                width: 30,\r\n                                dataTest: 'practis-set-status-column',\r\n                                ...(isTableHeadersDisabled\r\n                                    ? null\r\n                                    : hcAccuracyAvg),\r\n                                disabled: isTableHeadersDisabled,\r\n                                titleWidth: 70,\r\n                                multiHeaderContainerClassName:\r\n                                    classes.multiHeaderContainer,\r\n                                subColumns: [\r\n                                    {\r\n                                        title: 'Not Started',\r\n                                        width: 33,\r\n                                        ...(isListEmpty\r\n                                            ? null\r\n                                            : hcPendingEnrollmentCount),\r\n                                        disabled: isListEmpty,\r\n                                        dataTest: 'not-started-column',\r\n                                    },\r\n                                    {\r\n                                        title: 'In Progress',\r\n                                        width: 33,\r\n                                        ...(isListEmpty\r\n                                            ? null\r\n                                            : hcProgressEnrollmentCount),\r\n                                        disabled: isListEmpty,\r\n                                        dataTest: 'in-progress-column',\r\n                                    },\r\n                                    {\r\n                                        title: 'Completed',\r\n                                        width: 33,\r\n                                        ...(isListEmpty\r\n                                            ? null\r\n                                            : hcCompletedEnrollmentCount),\r\n                                        disabled: isListEmpty,\r\n                                        dataTest: 'completed-column',\r\n                                    },\r\n                                ],\r\n                            },\r\n                            {\r\n                                title: 'Accuracy',\r\n                                width: 10,\r\n                                ...(isTableHeadersDisabled\r\n                                    ? null\r\n                                    : hcAccuracyAvg),\r\n                                disabled: isTableHeadersDisabled,\r\n                                withTooltip: true,\r\n                                dataTest: 'accuracy-column',\r\n                                tooltipText:\r\n                                    'The average of the accuracy scores for all submitted scenario accuracy tests.',\r\n                            },\r\n                            {\r\n                                title: 'Training Time',\r\n                                width: 10,\r\n                                ...(isTableHeadersDisabled\r\n                                    ? null\r\n                                    : hcTrainingTime),\r\n                                disabled: isTableHeadersDisabled,\r\n                                withTooltip: true,\r\n                                dataTest: 'training-time-column',\r\n                                tooltipText:\r\n                                    'The total time spent by a user learning material.',\r\n                            },\r\n                            {\r\n                                title: 'Last Training',\r\n                                width: 10,\r\n                                ...(isTableHeadersDisabled ? null : hcTraining),\r\n                                disabled: isTableHeadersDisabled,\r\n                                dataTest: 'last-training-column',\r\n                            },\r\n                            {\r\n                                width: 9,\r\n                            },\r\n                            {\r\n                                width: 3,\r\n                            },\r\n                        ],\r\n                        rowConfig: {\r\n                            onRowClick: viewProfileHandler,\r\n                            onRowCheckHandler: onRowCheckHandler,\r\n                            isRowChecked: checkIsRowChecked,\r\n                            isLabelTagsOpen: checkIsLabelTagsOpen,\r\n                            getLabelTagsProps: (member: TeamMember) => ({\r\n                                selectedLabels: member.labels || [],\r\n                                deletePermissions: [\r\n                                    NEW_PERMISSIONS.REMOVE_USER_LABEL,\r\n                                ],\r\n                                onDeleteLabel: (labelId: any) =>\r\n                                    onDeleteLabelHandler(labelId, member),\r\n                            }),\r\n                            dataTest: 'member-item',\r\n                            cells: [\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    getCustomFieldComponent: (\r\n                                        member: TeamMember\r\n                                    ) => (\r\n                                        <Info>\r\n                                            <StyledAvatarPlaceholder\r\n                                                customProfile={{\r\n                                                    firstName:\r\n                                                        member.user.firstName,\r\n                                                    lastName:\r\n                                                        member.user.lastName,\r\n                                                    picture:\r\n                                                        member.user.imageUrl,\r\n                                                    status: member.userStatus,\r\n                                                }}\r\n                                                size=\"sm\"\r\n                                                dataTest=\"member-avatar\"\r\n                                            />\r\n                                            <TextEllipsis\r\n                                                title={`${member.user.firstName} ${member.user.lastName}`}\r\n                                                data-test=\"member-name\"\r\n                                            >{`${member.user.firstName} ${member.user.lastName}`}</TextEllipsis>\r\n                                            {getAdditionalMemberInfo(\r\n                                                member.user.id\r\n                                            )}\r\n                                            {member?.isTeamLead &&\r\n                                                renderTeamLeadInfo()}\r\n                                        </Info>\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (member: TeamMember) =>\r\n                                        !member.isOverdue,\r\n                                    fieldProps: {\r\n                                        renderTitle: (member: TeamMember) =>\r\n                                            member.isOverdue && <span data-test=\"overdue-icon\"><OverdueFlag /></span>,\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'CUSTOM_FIELD',\r\n                                    getCustomFieldComponent: (\r\n                                        member: TeamMember\r\n                                    ) => (\r\n                                        <WrapperTableCell>\r\n                                            <TableCell width={33}>\r\n                                                {member.enrollmentNotStarted ? (\r\n                                                    <span data-test=\"not-started-count\">\r\n                                                        {\r\n                                                            member.enrollmentNotStarted\r\n                                                        }\r\n                                                    </span>\r\n                                                ) : (\r\n                                                    <EmptyCellDash />\r\n                                                )}\r\n                                            </TableCell>\r\n                                            <TableCell width={33}>\r\n                                                {member.enrollmentEnrolled ? (\r\n                                                    <span data-test=\"in-progress-count\">\r\n                                                        {\r\n                                                            member.enrollmentEnrolled\r\n                                                        }\r\n                                                    </span>\r\n                                                ) : (\r\n                                                    <EmptyCellDash />\r\n                                                )}\r\n                                            </TableCell>\r\n                                            <TableCell width={33}>\r\n                                                {member.enrollmentCompleted ? (\r\n                                                    <span data-test=\"completed-count\">\r\n                                                        {\r\n                                                            member.enrollmentCompleted\r\n                                                        }\r\n                                                    </span>\r\n                                                ) : (\r\n                                                    <EmptyCellDash />\r\n                                                )}\r\n                                            </TableCell>\r\n                                        </WrapperTableCell>\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (member: TeamMember) =>\r\n                                        !member.accuracy,\r\n                                    fieldProps: {\r\n                                        renderTitle: (member: TeamMember) =>\r\n                                            member.accuracy &&\r\n                                            `${Math.floor(\r\n                                                member.accuracy * 100\r\n                                            )}%`,\r\n                                        dataTest: 'accuracy-value',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (member: TeamMember) =>\r\n                                        !member?.trainingTime,\r\n                                    fieldProps: {\r\n                                        renderTitle: (member: TeamMember) =>\r\n                                            member?.trainingTime &&\r\n                                            secondsToMinSimple(\r\n                                                member.trainingTime\r\n                                            ),\r\n                                        dataTest: 'training-time',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'TEXT_FIELD',\r\n                                    shouldShowEmptyCell: (member: TeamMember) =>\r\n                                        !member?.lastTraining,\r\n                                    fieldProps: {\r\n                                        renderTitle: (member: TeamMember) =>\r\n                                            member?.lastTraining &&\r\n                                            getFormattedLastTrainingAt(\r\n                                                member.lastTraining\r\n                                            ),\r\n                                        dataTest: 'last-training-date'\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'LABEL_TAGS',\r\n                                    fieldProps: {\r\n                                        getLabelTagsProps: (\r\n                                            member: TeamMember\r\n                                        ) => ({\r\n                                            selectedLabels: member.labels || [],\r\n                                            open: labelsOpen === member.user.id,\r\n                                            toggleOpen: () =>\r\n                                                handleToggleLabels(\r\n                                                    member.user.id\r\n                                                ),\r\n                                            dataTest: \"member-tags\",\r\n                                        }),\r\n                                        className: classes.labelsCellStyle,\r\n                                    },\r\n                                },\r\n                                {\r\n                                    fieldType: 'LIST_ACTIONS',\r\n                                    fieldProps: {\r\n                                        getListActionsComponent: (\r\n                                            member: TeamMember\r\n                                        ) => (\r\n                                            <WithLabelsContext.Provider\r\n                                                value={{\r\n                                                    reducerName: 'teamMembers',\r\n                                                    scope: 'assignLabels',\r\n                                                }}\r\n                                            >\r\n                                                <ListActions\r\n                                                    member={member}\r\n                                                    viewProfileHandler={() =>\r\n                                                        viewProfileHandler(\r\n                                                            member\r\n                                                        )\r\n                                                    }\r\n                                                    onSendNudge={() => {\r\n                                                        setShowNudgeDialogMemberId(\r\n                                                            member.user.id\r\n                                                        );\r\n                                                    }}\r\n                                                    getMembersReportService={() =>\r\n                                                        onSinglePractisExportClicked(\r\n                                                            member.user.id\r\n                                                        )\r\n                                                    }\r\n                                                    onDeleteMember={() => {\r\n                                                        handleDeleteTeamMembers(\r\n                                                            [member.user.id]\r\n                                                        );\r\n                                                    }}\r\n                                                    canRemoveTeamLeader={\r\n                                                        canRemoveTeamLeader\r\n                                                    }\r\n                                                    canNudgeUser={canNudgeUser(\r\n                                                        member\r\n                                                    )}\r\n                                                    isDefaultTeam={\r\n                                                        team?.isDefault\r\n                                                    }\r\n                                                    isHidden={\r\n                                                        !!selectedUsers.length\r\n                                                    }\r\n                                                    successApplyPractisSetsCallback={\r\n                                                        refreshHandler\r\n                                                    }\r\n                                                />\r\n                                            </WithLabelsContext.Provider>\r\n                                        ),\r\n                                    },\r\n                                },\r\n                            ],\r\n                        },\r\n                    }}\r\n                />\r\n            </MainWrapper>\r\n            {loading && !isSelectAll && <LoadingComponent />}\r\n        </>\r\n    );\r\n};\r\n\r\nconst TeamMembersContainer: FC = () => {\r\n    const profile = useSelector(getProfileState);\r\n    const params: { teamId: string } = useParams();\r\n    const {\r\n        itemsOnPage,\r\n        list,\r\n        data: teamData,\r\n        loading,\r\n    } = useTeamMembersState();\r\n    const updatedMembersState = useUpdateMembersState();\r\n    const teamUpdateState = useTeamEditState().updatedTeam;\r\n    const labels = useLabelsState();\r\n    const teamId = params.teamId;\r\n    const searchTeamMembers = useSearchTeamMembersService(teamId);\r\n    const searchTeamMembersDebounced = useSearchDebounced(searchTeamMembers);\r\n    const company = useSelector(getCompanyState);\r\n    const getMembersReportService = useGetMembersReportService();\r\n    const nudgeUsers = useNudgeUsersService();\r\n    const saveGlobalLabelFilters = useSaveUserFiltersService();\r\n    const updatedLabels = useUpdatedLabelsState();\r\n    const setAssignLabelsAction = useSetAssignLabelsActionService();\r\n    const markTeamAsViewedService = useMarkTeamAsViewedService();\r\n    const deleteMemberLabel = useDeleteMemberLabelService(teamId);\r\n    const searchState = useSelector(getSearchState);\r\n    const history = useHistory();\r\n    const locationState: any = history.location.state;\r\n\r\n    return (\r\n        <WithLabelsContext.Provider\r\n            value={{\r\n                reducerName: 'teamMembers',\r\n            }}\r\n        >\r\n            <WithPractisSetsContext.Provider\r\n                value={{\r\n                    reducerName: 'performance',\r\n                }}\r\n            >\r\n                <TeamMembers\r\n                    profile={profile}\r\n                    members={list}\r\n                    team={teamData}\r\n                    itemsOnPage={itemsOnPage}\r\n                    loading={loading}\r\n                    selectedLabels={labels.selected}\r\n                    searchHandler={searchTeamMembersDebounced}\r\n                    company={company}\r\n                    params={params}\r\n                    updatedMembers={updatedMembersState.data}\r\n                    teamUpdateState={teamUpdateState}\r\n                    getMembersReportService={getMembersReportService}\r\n                    onNudgeMembers={nudgeUsers}\r\n                    saveGlobalLabelFilters={saveGlobalLabelFilters}\r\n                    updatedLabels={updatedLabels}\r\n                    setAssignLabelsAction={setAssignLabelsAction}\r\n                    assignedLabels={labels.assignedLabels}\r\n                    markTeamAsViewed={markTeamAsViewedService}\r\n                    deleteMemberLabel={deleteMemberLabel}\r\n                    searchState={searchState}\r\n                    locationState={locationState}\r\n                />\r\n            </WithPractisSetsContext.Provider>\r\n        </WithLabelsContext.Provider>\r\n    );\r\n};\r\n\r\nexport { TeamMembersContainer };\r\n","import { TeamMembersContainer } from './TeamMembers';\n\nexport default TeamMembersContainer;\n","import { useCallback, useEffect } from 'react';\nimport { useLocation, useParams } from 'react-router-dom';\n\nimport {\n    onListenEvent,\n    onRemoveEvent,\n} from '../../../helpers/functions/Events';\nimport {\n    EventNameList,\n    REFRESH_TEAM_CONTROLLER,\n} from '../../../helpers/functions/Events/types';\n\nimport { usePreviousData } from '../../../helpers/hooks/usePreviousData';\nimport {\n    useGetTeamInfoService,\n    useResetTeamInfoService,\n} from '../store/services';\nimport TeamMembers from './TeamMembers';\nimport Progress from './Training/Progress';\n\nfunction TeamsPageController() {\n    const location = useLocation();\n\n    const { teamId = '' as string } = useParams() as Record<string, unknown>;\n    const prevTeamId = usePreviousData(teamId);\n    const searchTeam = useGetTeamInfoService();\n    const resetTeamInfo = useResetTeamInfoService();\n\n    /**\n     * @dev -- it should be callback function while it's passed to event listener\n     * @function fetchTeamData\n     * @return { void }\n     */\n    const fetchTeamData = useCallback(() => {\n        searchTeam(parseInt(teamId as string));\n    }, [searchTeam, teamId]);\n\n    useEffect(() => {\n        if (teamId && prevTeamId !== teamId) {\n            fetchTeamData();\n        }\n    }, [searchTeam, teamId, prevTeamId, fetchTeamData]);\n\n    // Listen to ManageTeam Screen Refresh dispatch\n    useEffect(() => {\n        onListenEvent(EventNameList[REFRESH_TEAM_CONTROLLER], fetchTeamData);\n\n        return () => {\n            onRemoveEvent(\n                EventNameList[REFRESH_TEAM_CONTROLLER],\n                fetchTeamData\n            );\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        return () => {\n            resetTeamInfo();\n        };\n    }, [resetTeamInfo]);\n\n    if (location?.pathname?.includes('members')) {\n        return <TeamMembers />;\n    }\n\n    return <Progress />;\n}\n\nexport default TeamsPageController;\n","import styled from 'styled-components';\n\nexport const Title = styled.div<{\n    color?: string;\n}>`\n    font-size: 20px;\n    font-weight: 800;\n    width: 100%;\n    color: ${props => (!!props.color ? props.color : 'var(--ps-black-main)')};\n`;\n\nexport const StyledConfirmModalTitle = styled.div<{ marginBottom?: number }>`\n    font-size: 20px;\n    font-weight: 800;\n    letter-spacing: 0.5px;\n    color: var(--ps-black-main);\n    text-align: left;\n    margin-bottom: ${props =>\n        !!props.marginBottom ? `${props.marginBottom}px` : '14px'};\n    text-align: left;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 24px;\n    letter-spacing: normal;\n`;\n\nexport const StyledConfirmModalDescription = styled.div<{\n    marginBottom?: number;\n}>`\n    color: var(--ps-grey-1);\n    font-size: 13px;\n    text-align: left;\n    margin-bottom: ${props =>\n        !!props.marginBottom ? `${props.marginBottom}px` : '37px'};\n    white-space: break-spaces;\n`;\n\nexport const ProgressBarContainer = styled.div`\n    margin: 1rem 0 1.5rem 0;\n`;\n\nexport const ActionsContainer = styled.div<{\n    justify?: string;\n}>`\n    display: flex;\n    align-items: center;\n    justify-content: ${props => (!!props.justify ? props.justify : 'flex-end')};\n`;\n\nexport const ActionWarningContainer = styled.div`\n    display: flex;\n`;\n\nexport const WarningText = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    max-width: 165px;\n    margin-left: 10px;\n`;\n\nexport const Description = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    margin: 10px 0 20px 0;\n`;\n","import { useEffect } from 'react';\n\nimport { Button } from '../Button';\nimport DialogWrapper from '../DialogWrapper/DialogWrapper';\nimport { ActionsContainer, Description, Title } from './styles';\nimport { BulkActionStopConfirmationModalViewProps } from './types';\n\nfunction StopBulkActionModalView(\n    props: BulkActionStopConfirmationModalViewProps\n) {\n    const { modalTitle, dataTest, onStopBulkActionService, onCancel } = props;\n\n\n    useEffect(() => {\n        return () => {\n            onCancel();\n        };\n    }, [onCancel]);\n    \n\n    return (\n        <DialogWrapper customization={{ width: 402, padding: '35px 40px' }}>\n            <Title\n                color=\"var(--ps-red-main)\"\n                data-test={dataTest && `${dataTest}-stop-title`}\n            >\n                Stop: {modalTitle}?\n            </Title>\n\n            <Description data-test={dataTest && `${dataTest}-stop-description`}>\n                The operation hasn't been completed yet. If you stop performing\n                this operation, some data won't have been processed.\n            </Description>\n\n            <ActionsContainer>\n                <Button\n                    width=\"128px\"\n                    height=\"40px\"\n                    action={onCancel}\n                    variant=\"inverse\"\n                    color=\"warning-inverse\"\n                    customColor=\"var(--ps-red-main)\"\n                    dataTest={dataTest && `${dataTest}-cancel-stop`}\n                >\n                    Cancel\n                </Button>\n                <Button\n                    width=\"128px\"\n                    height=\"40px\"\n                    action={onStopBulkActionService}\n                    color=\"warning-inverse\"\n                    customColor=\"var(--ps-red-main)\"\n                    style={{ marginLeft: '15px' }}\n                    dataTest={dataTest && `${dataTest}-confirm-stop`}\n                >\n                    Stop\n                </Button>\n            </ActionsContainer>\n        </DialogWrapper>\n    );\n}\n\nexport default StopBulkActionModalView;\n","import { Button } from '../Button';\nimport DialogWrapper from '../DialogWrapper/DialogWrapper';\nimport { ActionsContainer, Description, Title } from './styles';\nimport { GeneralBulkActionModalInterface } from './types';\n\nfunction FailedModalView(props: GeneralBulkActionModalInterface) {\n    const { modalTitle, dataTest = 'failed-progress-modal', onClose } = props;\n\n    return (\n        <DialogWrapper\n            customization={{ width: 402, padding: '35px 40px' }}\n        >\n            <Title\n                color=\"var(--ps-red-main)\"\n                data-test={dataTest && `${dataTest}-title`}\n            >\n                Failed: {modalTitle}\n            </Title>\n\n            <Description data-test={dataTest && `${dataTest}-description`}>\n                Oops! Something went wrong, please try again or contact our\n                support team.\n            </Description>\n\n            <ActionsContainer>\n                <Button\n                    width=\"128px\"\n                    height=\"40px\"\n                    action={onClose}\n                    color=\"warning-inverse\"\n                    customColor=\"var(--ps-red-main)\"\n                    style={{ marginLeft: '15px' }}\n                    dataTest={dataTest && `${dataTest}-got-it`}\n                >\n                    Got it\n                </Button>\n            </ActionsContainer>\n        </DialogWrapper>\n    );\n}\n\nexport default FailedModalView;\n","import { Reducer } from 'redux';\n\nimport { AppState } from '../../../store/reducers';\nimport { initialState, SET_PERCENTAGE } from './constants';\nimport { ChunkServiceActions, ChunkServiceInterface } from './types';\n\nconst chunkServiceReducer: Reducer<\n    ChunkServiceInterface,\n    ChunkServiceActions\n> = (state = initialState, action): ChunkServiceInterface => {\n    switch (action.type) {\n        case SET_PERCENTAGE:\n            return {\n                ...state,\n                percentage: action.percentage,\n            };\n        default:\n            return state;\n    }\n};\n\nexport const getChunkServiceState = (state: AppState) => state.chunkService;\n\nexport default chunkServiceReducer;\n","import { forwardRef } from 'react';\n\nimport { IconProps } from './types';\n\nexport const StopWarning = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"currentColor\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                className={className}\n            >\n                <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M4.47.22A.75.75 0 0 1 5 0h6a.75.75 0 0 1 .53.22l4.25 4.25c.141.14.22.331.22.53v6a.75.75 0 0 1-.22.53l-4.25 4.25A.75.75 0 0 1 11 16H5a.75.75 0 0 1-.53-.22L.22 11.53A.75.75 0 0 1 0 11V5a.75.75 0 0 1 .22-.53L4.47.22zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5H5.31zM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\"\n                    fill=\"#EC513D\"\n                />\n            </svg>\n        );\n    }\n);\n\nexport default StopWarning;\n","import { useCallback, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getChunkServiceState } from '../../../services/ChunkRequestService/store/reducers';\nimport StopWarning from '../../icons/StopWarning';\nimport { Button } from '../Button';\nimport DialogWrapper from '../DialogWrapper/DialogWrapper';\nimport { StripedProgressBar } from '../ProgressBar';\nimport {\n    ActionsContainer,\n    ActionWarningContainer,\n    ProgressBarContainer,\n    Title,\n    WarningText,\n} from './styles';\nimport { BulkActionProgressModalViewProps } from './types';\n\nfunction ProgressModalView(props: BulkActionProgressModalViewProps) {\n    const { modalTitle, dataTest = 'progress-modal', onStopProgressModal, handleClickAwayProgressModal } =\n        props;\n\n    const { percentage } = useSelector(getChunkServiceState);\n\n    /**\n     * @function onUnload\n     * @param { Event } event\n     * @returns { void }\n     */\n    const onUnload = useCallback(\n        (event: Event) => {\n            if (percentage > 0 && percentage < 100) {\n                event.preventDefault();\n                event.returnValue = true;\n            }\n        },\n        [percentage]\n    );\n\n    useEffect(() => {\n        window.addEventListener('beforeunload', onUnload);\n\n        return () => {\n            window.removeEventListener('beforeunload', onUnload);\n        };\n    }, [onUnload]);\n\n    return (\n        <DialogWrapper\n            customization={{ width: 400, padding: '30px 32px' }}\n            onClickAway={handleClickAwayProgressModal}\n        >\n            <div onClick={event => event.stopPropagation()}>\n                <Title data-test={dataTest && `${dataTest}-title`}>{modalTitle}</Title>\n\n                <ProgressBarContainer>\n                    <StripedProgressBar percentage={percentage} dataTest={dataTest} />\n                </ProgressBarContainer>\n\n                <ActionsContainer justify=\"space-between\">\n                    <ActionWarningContainer>\n                        <span data-test={dataTest && `${dataTest}-warning-icon`}><StopWarning /></span>\n                        <WarningText data-test={dataTest && `${dataTest}-warning`}>\n                            Do not refresh or close the page to avoid losing\n                            data.\n                        </WarningText>\n                    </ActionWarningContainer>\n                    <Button\n                        width=\"110px\"\n                        height=\"40px\"\n                        action={onStopProgressModal}\n                        disabled={percentage === 100}\n                        dataTest={dataTest && `${dataTest}-stop`}\n                    >\n                        Stop\n                    </Button>\n                </ActionsContainer>\n            </div>\n        </DialogWrapper>\n    );\n}\n\nexport default ProgressModalView;","import { Reducer } from 'redux';\n\nimport { AppState } from '../../../../store/reducers';\nimport { ModalDialogActions } from './actions';\nimport {\n    HIDE_MODAL,\n    initialState,\n    SHOW_MODAL,\n    UPDATE_LOADING_STATUS,\n} from './constants';\nimport { ModalDialogInterface } from './types';\n\nconst modalDialogsReducer: Reducer<ModalDialogInterface, ModalDialogActions> = (\n    state = initialState,\n    action\n): ModalDialogInterface => {\n    switch (action.type) {\n        case SHOW_MODAL:\n            return {\n                ...action?.modalOptions,\n            };\n        case HIDE_MODAL:\n            return initialState;\n\n        case UPDATE_LOADING_STATUS:\n            return {\n                ...state,\n                isLoading: action.isLoading,\n            };\n        default:\n            return state;\n    }\n};\n\nexport const getModalDialogsState = (state: AppState) => state.modalDialogs;\n\nexport default modalDialogsReducer;","import { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Dialog from '../DialogWrapper/DialogWrapper';\nimport { useHideModalDialog } from './store/actions';\nimport { getModalDialogsState } from './store/reducers';\nimport { ConfirmationModalViewProps } from './types';\n\nfunction ConfirmationModalView(props: ConfirmationModalViewProps) {\n    const {\n        modalTitle,\n        description,\n        onConfirm,\n        cancelButtonText,\n        confirmButtonText,\n        customization,\n        dialogType,\n        dataTest = 'confirmation-modal',\n    } = props;\n\n    const onClose = useHideModalDialog();\n\n    const { isLoading } = useSelector(getModalDialogsState);\n\n    const handleConfirm = useCallback(() => {\n        onConfirm?.();\n\n        setTimeout(() => {\n            onClose();\n        }, 300);\n    }, [onClose, onConfirm]);\n\n    return (\n        <Dialog\n            modalTitle={modalTitle}\n            description={description}\n            cancelButtonText={cancelButtonText}\n            confirmButtonText={confirmButtonText}\n            onConfirm={handleConfirm}\n            isLoading={isLoading}\n            onCancel={onClose}\n            customization={customization}\n            dialogType={dialogType}\n            dataTest={dataTest}\n        />\n    );\n}\n\nexport default ConfirmationModalView;","import { memo, useCallback, useState } from 'react';\n\nimport StopBulkActionModalView from './StopBulkActionModal.view';\nimport FailedModalView from './FailedModal.view';\nimport ProgressModalView from './ProgressModal.view';\n\nimport { getModalDialogsState } from './store/reducers';\nimport { useSelector } from 'react-redux';\nimport {\n    BulkActionProgressModalViewProps,\n    BulkActionStopConfirmationModalViewProps,\n    ConfirmationModalViewProps,\n    GeneralBulkActionModalInterface,\n} from './types';\nimport ConfirmationModalView from './ConfirmationModal.view';\n\nfunction ModalDialogsController() {\n    const { modalType, modalProps } = useSelector(getModalDialogsState);\n\n    const [isStopBulkActionModalOpen, setIsStopBulkActionModalOpen] =\n        useState<boolean>(false);\n\n    /**\n     * @function handleStopProgressModal\n     * @returns { void }\n     */\n    const handleStopProgressModal = (): void => {\n        setIsStopBulkActionModalOpen(true);\n    };\n\n    /**\n     * @function handleStopBulkActionServiceModal\n     * @returns { void }\n     */\n    const handleStopBulkActionServiceModal = useCallback(() => {\n        Promise.resolve().then(() => {\n            (\n                modalProps as BulkActionStopConfirmationModalViewProps\n            ).onStopBulkActionService();\n            setIsStopBulkActionModalOpen(false);\n        });\n    }, [modalProps]);\n\n    /**\n     * @function handleCancelClick\n     * @returns { void }\n     */\n    const handleCancelClick = (): void => {\n        setIsStopBulkActionModalOpen(false);\n    };\n\n    /**\n     * @function handleClickAwayProgressModal\n     * @returns { void }\n     */\n    const handleClickAwayProgressModal = (): void => {\n        let confirmAction = window.confirm(\n            'Are you sure you want to leave this page?'\n        );\n\n        if (confirmAction) {\n            handleStopBulkActionServiceModal();\n        }\n    };\n\n    let modalComponent = <></>;\n\n    if (!modalProps) {\n        return modalComponent;\n    }\n\n    switch (modalType) {\n        case 'BULK_ACTION_PROGRESS_MODAL':\n            {\n                const { modalTitle, dataTest, onClose } =\n                    modalProps as BulkActionProgressModalViewProps;\n                modalComponent = (\n                    <ProgressModalView\n                        modalTitle={modalTitle}\n                        dataTest={dataTest}\n                        onStopProgressModal={handleStopProgressModal}\n                        handleClickAwayProgressModal={\n                            handleClickAwayProgressModal\n                        }\n                        onClose={onClose}\n                    />\n                );\n            }\n            break;\n        case 'BULK_ACTION_FAILED_MODAL':\n            {\n                const { modalTitle, onClose, dataTest } =\n                    modalProps as GeneralBulkActionModalInterface;\n                modalComponent = (\n                    <FailedModalView\n                        modalTitle={modalTitle}\n                        dataTest={dataTest}\n                        onClose={onClose}\n                    />\n                );\n            }\n\n            break;\n\n        case 'CONFIRMATION_MODAL':\n            {\n                const {\n                    modalTitle,\n                    description,\n                    onConfirm,\n                    cancelButtonText,\n                    confirmButtonText,\n                    dialogType,\n                    customization,\n                    dataTest,\n                } = modalProps as ConfirmationModalViewProps;\n                modalComponent = (\n                    <ConfirmationModalView\n                        modalTitle={modalTitle}\n                        description={description}\n                        onConfirm={onConfirm}\n                        confirmButtonText={confirmButtonText}\n                        cancelButtonText={cancelButtonText}\n                        dialogType={dialogType}\n                        customization={customization}\n                        dataTest={dataTest}\n                    />\n                );\n            }\n\n            break;\n    }\n\n    return (\n        <>\n            {modalComponent}\n            {isStopBulkActionModalOpen && (\n                <StopBulkActionModalView\n                    modalTitle={modalProps.modalTitle}\n                    dataTest={modalProps.dataTest}\n                    onStopBulkActionService={handleStopBulkActionServiceModal}\n                    onCancel={handleCancelClick}\n                    onClose={handleCancelClick}\n                />\n            )}\n        </>\n    );\n}\n\nexport default memo(ModalDialogsController);","import { memo } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useGetSubmissionIdByOldId } from '../../../../api';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { OldSubmissionRouterParams } from './types';\n\nfunction OldSubmissionRouterController({\n    id,\n    type,\n    singleRoute,\n    allRoute,\n }: OldSubmissionRouterParams) {\n    const getSubmissionIdByOldId = useGetSubmissionIdByOldId();\n    const showMessage = useShowMessage();\n    const history = useHistory();\n    \n    getSubmissionIdByOldId(id, type)\n        .then(response => {\n            history.push(singleRoute.replace(':submissionId', response.id.toString()));\n        })\n        .catch((error: ErrorResult) => {\n            showMessage(error.message, 'error');\n            history.push(allRoute);\n        });\n\n    return <></>;\n}\n\nexport default memo(OldSubmissionRouterController);","import OldSubmissionRouter from './controller';\n\nexport default OldSubmissionRouter;","import { memo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport OldSubmissionRouter from '../components/OldSubmissionRouter';\nimport ROUTES from '../../../routes/routes';\n\nfunction OldAccuracyTestController() {\n    const params = useParams<{ submissionId: string }>();\n\n    return <OldSubmissionRouter\n        id={params.submissionId}\n        type=\"scenario\"\n        singleRoute={ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.SINGLE}\n        allRoute={ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.ALL}\n    />;\n}\n\nexport default memo(OldAccuracyTestController)","import OldAccuracyTest from './controller';\n\nexport default OldAccuracyTest;","import { memo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport OldSubmissionRouter from '../components/OldSubmissionRouter';\nimport ROUTES from '../../../routes/routes';\n\nfunction OldChallengeController() {\n    const params = useParams<{ submissionId: string }>();\n\n    return <OldSubmissionRouter\n        id={params.submissionId}\n        type=\"challenge\"\n        singleRoute={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.SINGLE}\n        allRoute={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL}\n    />;\n}\n\nexport default memo(OldChallengeController)","import { ListResult } from \"../../../constants/interfaces/PaginationResult\";\nimport { ReportItem } from \"../../../constants/interfaces/ReportItem\";\n\nexport enum ACTIONS {\n    GET_REPORTS_START = 'GET_REPORTS_START',\n    GET_REPORTS_SUCCESS = 'GET_REPORTS_SUCCESS',\n    GET_REPORTS_FAILURE = 'GET_REPORTS_FAILURE',\n}\n\nexport function getReportsStart() {\n    return {\n        type: ACTIONS.GET_REPORTS_START as ACTIONS.GET_REPORTS_START,\n    };\n}\n\nexport function getReportsSuccess(data: ListResult<ReportItem>) {\n    return {\n        type: ACTIONS.GET_REPORTS_SUCCESS as ACTIONS.GET_REPORTS_SUCCESS,\n        data\n    };\n}\n\nexport function getReportsFailure(error: string) {\n    return {\n        type: ACTIONS.GET_REPORTS_FAILURE as ACTIONS.GET_REPORTS_FAILURE,\n        error\n    };\n}","import OldChallenge from './controller';\n\nexport default OldChallenge;","import { useDispatch } from 'react-redux'\nimport { useCallback } from 'react';\nimport { useGetReportsApi } from '../../../api/reports';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { ReportItem } from '../../../constants/interfaces/ReportItem';\nimport {\n    getReportsStart,\n    getReportsSuccess,\n    getReportsFailure,\n} from './actions';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\n\n/**\n * @function useGetReportsService\n * @returns { CallableFunction }\n */\nexport const useGetReportsService = () => {\n    const dispatch = useDispatch();\n    const getReportsApi = useGetReportsApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback(() => {\n        dispatch(getReportsStart());\n        return getReportsApi()\n            .then((data: ListResult<ReportItem>) => {\n                dispatch(getReportsSuccess(data));\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(getReportsFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, getReportsApi, showMessage]);\n}","export interface ReportItem {\n    id: number;\n    type: ReportType;\n}\n\nexport enum ReportType {\n    PRACTIS_SET_SUMMARY = 'practis_set_summary',\n    USERS_ACTIVITY = 'users_activity',\n    TEAM_LEADER_ACTIVITY = 'team_leader_activity',\n    BILLING = 'billing',\n    TRAINING_TIME = 'training_time',\n}","import { useCallback } from 'react';\nimport { useHttp } from '../../tools/http/Http';\nimport {\n    GenerateReportApiParams,\n    GetReportAvailabilityApiParams,\n    GetReportsApiParams\n} from './types';\n\n/**\n * @function useGetReports\n * @returns { GetReportsApiParams }\n */\nexport function useGetReportsApi(): GetReportsApiParams {\n    const http = useHttp();\n    return useCallback(\n        () => http.get('/reports', undefined, undefined, true),\n        [http]\n    );\n}\n\n/**\n * @function useGenerateReportApi\n * @returns { GetReportsApiParams }\n */\nexport function useGenerateReportApi(): GenerateReportApiParams {\n    const http = useHttp();\n    return useCallback(\n        (reportType, reportData) =>\n            http.post(`/reports/${reportType}/request`, reportData, true),\n        [http]\n    );\n}\n\n/**\n * @function useGenerateReportApi\n * @returns { GetReportsApiParams }\n */\nexport function useGetReportAvailabilityApi(): GetReportAvailabilityApiParams {\n    const http = useHttp();\n    return useCallback(\n        (reportType, reportData) =>\n            http.post(`/reports/${reportType}/request/availability`, reportData, true),\n        [http]\n    );\n}","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ListResult } from '../../../constants/interfaces/PaginationResult';\nimport { ReportItem } from '../../../constants/interfaces/ReportItem';\n\nexport interface ReportsState {\n    data?: ListResult<ReportItem>;\n    isLoading: boolean;\n    error?: string;\n}\n\nexport type ReportsStateSelector = (state: any) => ReportsState;\n\nexport const ReportsStateSelectorContext = React.createContext<ReportsStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useReportsState(): ReportsState {\n    return useSelector(useContext(ReportsStateSelectorContext));\n}\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PractisSetSummary = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 40 40\"\n                className={className}\n                width=\"40\"\n                height=\"40\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path fill=\"#4AA9E2\" d=\"M.833 5h38.333v4.167H.833z\"/>\n                <path d=\"M33.473 35.33H6.526a3.482 3.482 0 0 1-3.482-3.483V9.721h33.911v22.126a3.482 3.482 0 0 1-3.482 3.482z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"m13.333 10 2.34 2.631a3.334 3.334 0 0 0 2.49 1.119h4.09c.952 0 1.859-.407 2.491-1.119L27.084 10\" stroke=\"#222431\" stroke-width=\"1.567\"/>\n                <path d=\"M39.219 4.67H.78v5.051H39.22v-5.05zM10 29.167h1.5M10 20h1.5M10 24.167h1.5M15 29.166h6.5M15 20h10M15 24.166h15\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n        );\n    }\n);\n\nexport default PractisSetSummary;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TeamLeaderSummary = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 40 40\"\n                className={className}\n                width=\"40\"\n                height=\"40\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path d=\"M3.323 14.563v16.873h33.354V14.583\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"m19.159 10.402-7.247 8.218-7.046-4.562M35.148 14.05l-7.06 4.57-7.24-8.21\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <mask id=\"uup75c9s0a\" mask-type=\"luminance\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"40\" height=\"40\">\n                    <path d=\"M0 0h40v40H0V0z\" fill=\"#fff\"/>\n                </mask>\n                <g mask=\"url(#uup75c9s0a)\">\n                    <path d=\"M38.483 36.127H1.517v-4.69h36.966v4.69zM23.258 7.16c0 1.815-1.459 3.287-3.258 3.287-1.8 0-3.258-1.472-3.258-3.287 0-1.816 1.459-3.287 3.258-3.287 1.8 0 3.258 1.471 3.258 3.287zM39.219 11.912c0 1.416-1.138 2.565-2.542 2.565s-2.542-1.149-2.542-2.565 1.138-2.564 2.542-2.564 2.542 1.148 2.542 2.564zM5.865 11.912c0 1.416-1.138 2.565-2.542 2.565S.78 13.328.78 11.912 1.92 9.348 3.323 9.348s2.542 1.148 2.542 2.564z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M32.188 25.395a2.194 2.194 0 1 1-4.389 0 2.194 2.194 0 0 1 4.389 0zM24.131 23.7a4.131 4.131 0 1 1-8.262 0 4.131 4.131 0 0 1 8.262 0zM12.2 25.395a2.194 2.194 0 1 1-4.388 0 2.194 2.194 0 0 1 4.389 0z\" fill=\"#4AA9E2\"/>\n                </g>\n            </svg>\n        );\n    }\n);\n\nexport default TeamLeaderSummary;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const UserActivity = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 40 40\"\n                className={className}\n                width=\"40\"\n                height=\"40\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#1ox9uh36ua)\">\n                    <path d=\"M32.917 23.75 35 21.667l2.5 1.25 2.5 3.75v5h-9.167v-5l2.084-2.917zM12.917 10.833h3.75l2.083 1.25 1.667 4.584V22.5h-7.5l1.25-5.417-1.667-3.75.417-2.5zM13.333 30.833 15 29.583l2.083-.833L20 34.583v4.584h-8.75l.417-5 .416-2.084 1.25-1.25z\" fill=\"#4AA9E2\"/>\n                    <path d=\"M25 6.12v-.705C25 2.89 22.757.833 20 .833s-5 2.056-5 4.582v.706c0 1.632.937 3.067 2.344 3.879h5.312C24.063 9.188 25 7.753 25 6.12zM20 14.9v5.542M23.9 22.86a4.685 4.685 0 0 1 2.768-.899h7.844c2.6 0 4.707 2.107 4.707 4.707v4.707H27.43M12.569 31.375H.781v-4.707c0-2.6 2.107-4.707 4.707-4.707h7.844c1.035 0 1.991.334 2.768.9M23.53 10.194 20 14.901l-3.53-4.707h7.06z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M30.59 21.961a4.314 4.314 0 0 1-4.315-4.314v-.785a4.314 4.314 0 0 1 8.63 0v.785a4.314 4.314 0 0 1-4.315 4.314z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"m34.12 21.961-3.53 4.707-3.53-4.707h7.06zM30.59 26.668v4.706M9.41 21.961a4.314 4.314 0 0 1-4.314-4.314v-.785a4.314 4.314 0 0 1 8.628 0v.785A4.314 4.314 0 0 1 9.41 21.96zM12.94 21.961l-3.53 4.707-3.53-4.707h7.06zM9.41 26.668v4.706\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M11.689 13.198a4.708 4.708 0 0 1 4.389-3.004h7.844a4.708 4.708 0 0 1 4.389 3.004\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M25.096 25.491v-.785A5.102 5.102 0 0 0 20 19.611a5.102 5.102 0 0 0-5.096 5.095v.785c0 1.816.956 3.412 2.39 4.314h5.412a5.095 5.095 0 0 0 2.39-4.314z\" fill=\"#fff\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M23.53 29.805 20 34.512l-3.53-4.707h7.06zM20 34.512v4.707\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M23.922 29.805c2.6 0 4.707 2.108 4.707 4.707v4.707H11.37v-4.707c0-2.6 2.107-4.707 4.707-4.707h7.844z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"1ox9uh36ua\">\n                        <path fill=\"#fff\" d=\"M0 0h40v40H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default UserActivity;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const BillingReport = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 40 40\"\n                className={className}\n                width=\"40\"\n                height=\"40\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5.781 17.781h3.438v3.438H5.781z\"/>\n                <path stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5.781 17.781h3.438v3.438H5.781zM5.781 24.781h3.438v3.438H5.781zM12.781 24.781h3.438v3.438h-3.438zM5.781 31.781h3.438v3.438H5.781zM12.781 31.781h3.438v3.438h-3.438zM19.781 24.781h3.438v10.438h-3.438zM12.781 17.781h3.438v3.438h-3.438zM19.781 17.781h3.438v3.438h-3.438z\"/>\n                <rect x=\"2.781\" y=\"5.781\" width=\"23.438\" height=\"33.438\" rx=\"1.219\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M5 6.343V5a4 4 0 0 1 4-4h18.5a4 4 0 0 1 4 4v30h1.643A4.857 4.857 0 0 0 38 30.143h-6.5M27 35h4\" stroke=\"#222431\" stroke-width=\"1.56\"/>\n                <path d=\"M24 6V5a4 4 0 0 1 4-4\" stroke=\"#222431\" stroke-width=\"1.56\"/>\n                <path fill=\"#4AA9E2\" d=\"M5 8h19v7H5z\"/>\n            </svg>\n        );\n    }\n);\n\nexport default BillingReport;","export const DATE_RANGE_PARAM_NAME = 'dateRange';","import dayjs from \"dayjs\";\nimport { DATE_RANGE_PARAM_NAME } from \"../../features/filters/dynamic-filter/date-filter/constants\";\nimport ROUTES from \"../../routes/routes\"\n\nconst getLastWeekDateRangeParam = () =>\n    new URLSearchParams({[DATE_RANGE_PARAM_NAME]: `${dayjs(new Date().getTime() - 604800000).format('YYYY-MM-DD')},${dayjs(new Date()).format('YYYY-MM-DD')}`});\n\nexport const getTeamLeaderReportUrl = () => ROUTES.REPORTS.TEAM_LEADER_ACTIVITY_REPORT + `?${getLastWeekDateRangeParam()}`;\n\nexport const getTrainingTimeReportUrl = () => ROUTES.REPORTS.TRAINING_TIME_REPORT + `?${getLastWeekDateRangeParam()}`;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const TrainingTime = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 40 40\"\n                className={className}\n                width=\"40\"\n                height=\"40\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#bur0pzbema)\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.266 14.897h34.267V7.283H23.767v1.332c0 1.026-.856 1.866-1.903 1.866h-7.615c-1.047 0-1.904-.84-1.904-1.866V7.282H1.266v7.615z\" fill=\"#4AA9E2\"/>\n                    <path clip-rule=\"evenodd\" d=\"M31.615 23c4.188 0 7.615 3.427 7.615 7.615 0 4.188-3.427 7.615-7.615 7.615h0c-4.188 0-7.615-3.427-7.615-7.615C24 26.427 27.427 23 31.615 23z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M25.5 35.5H1.266V7.282h10.698m12.184 0h11.384V24M35.423 30.615h-3.808v-3.807\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path clip-rule=\"evenodd\" d=\"M12.345 6.747h1.906c-.084-2.118 1.64-3.882 3.805-3.882 2.164 0 3.89 1.764 3.804 3.882h1.907v1.867c0 1.026-.857 1.866-1.904 1.866H14.25c-1.048 0-1.904-.84-1.904-1.866V6.747z\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M18.056 6.748h.002M8.88 26.32H5.073m0 3.806H8.88m3.808 0h3.807m3.807 0H24m1-3.807h-4.698m-3.807 0h-3.807M8.88 18.704H5.073m0 3.808H8.88m3.807 0h3.808m3.807 0h3.808m7.614-3.808h-3.807m-3.807 0h-3.808m-3.807 0h-3.807\" stroke=\"#222431\" stroke-width=\"1.563\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"bur0pzbema\">\n                        <path fill=\"#fff\" d=\"M0 0h40v40H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default TrainingTime;","import React from 'react'\nimport { range } from 'lodash';\nimport { ReportType } from '../../constants/interfaces/ReportItem';\nimport { ReportingCardProps } from '../../ui/components/ReportingCard/types';\nimport PractisSetSummary from '../../ui/icons/PractisSetSummary';\nimport TeamLeaderSummary from '../../ui/icons/TeamLeaderSummary';\nimport UserActivity from '../../ui/icons/UserActivity';\nimport ROUTES from '../../routes/routes';\nimport BillingReport from '../../ui/icons/BillingReport';\nimport { getTeamLeaderReportUrl, getTrainingTimeReportUrl } from './helpers';\nimport TrainingTime from '../../ui/icons/TrainingTime';\n\nexport const LOADING_ITEMS_COUNT = 3;\nexport const LOADING_ITEMS = range(0, LOADING_ITEMS_COUNT);\n\nexport const ReportInfoMap: Record<ReportType, ReportingCardProps> = {\n    [ReportType.PRACTIS_SET_SUMMARY]: {\n        url: ROUTES.REPORTS.PRACTIS_SET_SUMMARY_REPORT,\n        icon: React.createElement(PractisSetSummary),\n        title: 'Practis Set Summary',\n        description: 'Shows more information about a particular practis set.',\n        resultFormat: 'Excel'\n    },\n    [ReportType.USERS_ACTIVITY]: {\n        url: ROUTES.REPORTS.USER_ACTIVITY_REPORT,\n        icon: React.createElement(UserActivity),\n        title: 'User Activity',\n        description: 'Understand your team(s) progress on all their Practis Sets.',\n        resultFormat: 'Excel'\n    },\n    [ReportType.TEAM_LEADER_ACTIVITY]: {\n        url: getTeamLeaderReportUrl(),\n        icon: React.createElement(TeamLeaderSummary),\n        title: 'Team Leader Engagement',\n        description: 'How engaged are Team Leaders in their learner\\'s training.',\n        resultFormat: 'Excel'\n    },\n    [ReportType.BILLING]: {\n        url: ROUTES.REPORTS.BILLING_REPORT,\n        icon: React.createElement(BillingReport),\n        title: 'Billing Report',\n        description: 'Generate a list of monthly active users on the platform.',\n        resultFormat: 'Excel'\n    },\n    [ReportType.TRAINING_TIME]: {\n        url: getTrainingTimeReportUrl(),\n        icon: React.createElement(TrainingTime),\n        title: 'Training Time Report',\n        description: 'Tracking overall training time by learners by date range.',\n        resultFormat: 'Excel'\n    },\n}","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    padding-top: 25px;\n    max-width: 1450px;\n`;\n\nexport const Item = styled.div`\n    display: inline-block;\n    padding-right: 8px;\n    padding-bottom: 8px;\n`","import styled from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n\nexport const Link = styled(NavLink)`\n    display: inline-block;\n    width: 280px;\n    height: 184px;\n    padding: 24px 16px;\n    border-radius: 4px;\n    border: solid 1px var(--ps-grey-4);\n    background-color: var(--ps-white-1);\n    text-decoration: none;\n\n    &:hover {\n        box-shadow: 0 4px 24px 0 var(--ps-grey-20);\n    }\n`;\n\nexport const Title = styled.div`\n    font-size: 15px;\n    font-weight: 800;\n    line-height: 20px;\n    padding-top: 6px;\n    color: var(--ps-black);\n`;\n\nexport const Description = styled.div`\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-black-main);\n`;\n\nexport const ResultFormat = styled.div`\n    font-size: 11px;\n    font-weight: 600;\n    color: var(--ps-black-main);\n    padding: 2px 8px;\n    border-radius: 2px;\n    background-color: var(--ps-grey-3);\n    display: inline-block;\n    margin-top: 8px;\n`;","import { kebabCase } from 'lodash';\nimport {\n    Link,\n    Title,\n    Description,\n    ResultFormat,\n} from './styles';\nimport { ReportingCardProps } from './types';\n\nfunction ReportingCardView({\n    url,\n    icon,\n    title,\n    description,\n    resultFormat\n}: ReportingCardProps) {\n    const dataTest = kebabCase(title);\n    return <Link to={url} data-test={`${dataTest}-link`}>\n        <span data-test={`${dataTest}-icon`}>{icon}</span>\n        <Title data-test={`${dataTest}-title`}>{title}</Title>\n        <Description data-test={`${dataTest}-description`}>{description}</Description>\n        <ResultFormat data-test={`${dataTest}-excel`}>{resultFormat}</ResultFormat>\n    </Link>\n}\n\nexport default ReportingCardView;","import ReportingCard from './view';\n\nexport default ReportingCard;","import styled from 'styled-components';\n\nexport const CardContainer = styled.div`\n    width: 280px;\n    height: 184px;\n    padding: 24px 16px;\n    border-radius: 4px;\n    border: solid 1px var(--ps-grey-4);\n    background-color: var(--ps-white-1);\n`;\n\nexport const Icon = styled.div<{size: number}>`\n    width: ${props => props.size}px;\n    height: ${props => props.size}px;\n    border-radius: ${props => props.size / 2}px;\n    background-color: var(--ps-grey-4);\n    animation: pulse 1.5s ease-in-out infinite;\n\n    @keyframes pulse {\n        0% {\n            opacity: 0.2;\n        }\n        50% {\n            opacity: 0.4;\n        }\n        100% {\n            opacity: 0.2;\n        }\n    }\n`;\n\nexport const CardIcon = styled(Icon)`\n    margin-bottom: 20px;\n`;\n\nexport const SingleTextLine = styled.div<{ width: number, height?: number }>`\n    width: ${props => props.width}px;\n    height: ${props => props.height ?? 8}px;\n    background-color: var(--ps-grey-4);\n    animation: pulse 1.5s ease-in-out infinite;\n\n    @keyframes pulse {\n        0% {\n            opacity: 0.2;\n        }\n        50% {\n            opacity: 0.4;\n        }\n        100% {\n            opacity: 0.2;\n        }\n    }\n`;\n\nexport const RoundSkeleton = styled(SingleTextLine)`\n    border-radius: 50%\n`;\n\n\nexport const TextLine = styled(SingleTextLine)`\n    margin-bottom: 10px;\n`;\n\nexport const ResultFormat = styled.div`\n    width: 44px;\n    height: 20px;\n    border-radius: 2px;\n    background-color: var(--ps-grey-4);\n    display: inline-block;\n    margin-top: 2px;\n\n    animation: pulse 1.5s ease-in-out infinite;\n\n    @keyframes pulse {\n        0% {\n            opacity: 0.2;\n        }\n        50% {\n            opacity: 0.4;\n        }\n        100% {\n            opacity: 0.2;\n        }\n    }\n`;","import { CardContainer, CardIcon, TextLine, ResultFormat } from './styles';\n\nfunction ReportingCardSkeletonView() {\n    return (\n        <CardContainer>\n            <CardIcon size={40} />\n            <TextLine width={164} />\n            <TextLine width={232} />\n            <TextLine width={103} />\n            <ResultFormat />\n        </CardContainer>\n    );\n}\n\nexport default ReportingCardSkeletonView;","import { TextLine } from './styles';\n\nfunction FilterSkeletonView() {\n    return (\n        <>\n            <TextLine width={81} />\n            <TextLine width={149} />\n            <TextLine width={120} />\n        </>\n    );\n}\n\nexport default FilterSkeletonView;","import MainWrapper from '../../ui/wrapper/MainWrapper/MainWrapper';\nimport { LOADING_ITEMS, ReportInfoMap } from './constants';\nimport { ReportsViewProps } from './types';\nimport { Container, Item } from './styles';\nimport ReportingCard from '../../ui/components/ReportingCard';\nimport { ReportingCardSkeleton } from '../../ui/components/Skeleton';\n\nfunction ReportsView({ isLoading, data }: ReportsViewProps) {\n    return (\n        <MainWrapper subTitle=\"Reports\" contentSize={false} dataTest=\"reports\" htmlPageTitle=\"Reports - Practis\">\n            <Container>\n                {isLoading &&\n                    LOADING_ITEMS.map(() => (\n                        <Item>\n                            <ReportingCardSkeleton />\n                        </Item>\n                    ))}\n                {!isLoading &&\n                    data &&\n                    data.items.map(report => (\n                        <Item>\n                            <ReportingCard {...ReportInfoMap[report.type]} />\n                        </Item>\n                    ))}\n            </Container>\n        </MainWrapper>\n    );\n}\n\nexport default ReportsView;","import { useEffect } from 'react';\nimport { useGetReportsService } from './store/services';\nimport { useReportsState } from './store/states';\nimport ReportsView from './view';\n\nfunction ReportsController() {\n    const getReports = useGetReportsService();\n    const reportsState = useReportsState();\n\n    useEffect(() => {\n        getReports();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return <ReportsView\n        isLoading={reportsState.isLoading}\n        data={reportsState.data}\n    />\n}\n\nexport default ReportsController;","import { ListResult } from \"../../../../constants/interfaces/PaginationResult\";\nimport { Roleplay } from \"../../../../constants/interfaces/Roleplay\";\n\nexport enum ACTIONS {\n    GET_ROLEPLAYS_START = 'GET_ROLEPLAYS_START',\n    GET_ROLEPLAYS_SUCCESS = 'GET_ROLEPLAYS_SUCCESS',\n    GET_ROLEPLAYS_FAILURE = 'GET_ROLEPLAYS_FAILURE',\n}\n\nexport function getRoleplaysStart() {\n    return {\n        type: ACTIONS.GET_ROLEPLAYS_START as ACTIONS.GET_ROLEPLAYS_START,\n    };\n}\n\nexport function getRoleplaysSuccess(data: ListResult<Roleplay>) {\n    return {\n        type: ACTIONS.GET_ROLEPLAYS_SUCCESS as ACTIONS.GET_ROLEPLAYS_SUCCESS,\n        data\n    };\n}\n\nexport function getRoleplaysFailure(error: string) {\n    return {\n        type: ACTIONS.GET_ROLEPLAYS_FAILURE as ACTIONS.GET_ROLEPLAYS_FAILURE,\n        error\n    };\n}","import Reports from './controller';\n\nexport default Reports;","import styled from 'styled-components';\n\nexport const FieldContainer = styled.div`\n    height: 78px;\n\n    .company-select {\n        width: 400px;\n        border: solid 1px var(--ps-grey-3);\n\n        &.company-select-open {\n            border: solid 1px var(--ps-grey-2);\n        }\n\n        .company-select-input > div {\n            color: var(--ps-black-main);\n        }\n\n        .company-select-input > div[disabled] {\n            color: var(--ps-grey-2);\n        }\n\n        .content-area {\n            padding: 8px 0;\n\n            > div {\n                padding: 5px 12px;\n                border-radius: 0;\n                margin-bottom: 0;\n                min-height: auto;\n                font-weight: 400;\n\n                &.selected-item {\n                    color: var(--ps-white-1);\n                    background: var(--ps-blue-main);\n                }\n\n                &:hover {\n                    color: var(--ps-white-1);\n                    background: var(--ps-blue-main);\n                }\n            }\n        }\n    }\n\n    .company-select-label {\n        left: 12px;\n    }\n\n    .company-select-arrow {\n        right: 12px;\n    }\n\n    .company-select-input {\n        padding: 0 12px;\n    }\n`;\n\nexport const FieldName = styled.div`\n    font-size: 13px;\n    font-weight: 800;\n    color: var(--ps-black-main);\n    padding-bottom: 4px;\n    display: flex;\n    flex-direction: row;\n`;\n\nexport const AdvancedSettingsHeader = styled.div`\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: space-between;\n    margin-top: 2px;\n    margin-bottom: 8px;\n`;\n\nexport const AdvancedSettingsTitle = styled.div`\n    font-size: 12px;\n    font-weight: bold;\n    color: var(--ps-grey-1);\n`;\n\nexport const ResetButton = styled.div<{ isActive: boolean }>`\n    font-size: 13px;\n    color: ${props => props.isActive ? 'var(--ps-blue-main)' : 'var(--ps-grey-2)' };\n    cursor: ${props => props.isActive ? 'pointer' : 'default' };\n`;\n\nexport const AdvancedFieldContainer = styled.div`\n    height: 68px;\n\n    .input-range__label--min,\n    .input-range__label--max {\n        font-size: 12px;\n        font-weight: bold;\n        color: var(--ps-grey-1);\n        bottom: -0.9rem;\n    }\n\n    .input-range__track {\n        height: 2px;\n    }\n\n    .input-range__slider {\n        background: var(--ps-blue-main) !important;\n        width: 12px;\n        height: 12px;\n        margin-top: -7px;\n    }\n\n    .input-range--disabled .input-range__slider {\n        background: var(--ps-grey-2) !important;\n    }\n`;\n\nexport const QuestionContainer = styled.div`\n    margin-left: 3px;\n    cursor: pointer;\n    display: inline-block;\n    vertical-align: middle;\n`;\n\nexport const TooltipContainer = styled.div`\n    padding: 4px;\n`\n\nexport const TootlipTitle = styled.div`\n    padding-top: 16px;\n    font-size: 13px;\n    font-weight: 800;\n    color: var(--ps-black-main);\n\n    &:first-child {\n        padding-top: 0;\n    }\n`;\n\nexport const TootlipContent = styled.div`\n    padding-top: 4px;\n    font-size: 13px;\n    color: var(--ps-black-main);\n`;\n\nexport const SampleTextContainer = styled.div`\n    margin-top: 8px;\n`;","export const ITEMS_PER_PAGE = 20;\n\nexport const initialSearchParams = {\n    searchTerm: '',\n    orderBy: null,\n    limit: ITEMS_PER_PAGE,\n    numberOfPages: 0,\n    offset: 0,\n};\n\n","import styled from 'styled-components';\n\nexport const Subheader = styled.div`\n    display: flex;\n    font-size: 13px;\n`;\n\nexport const Container = styled.div`\n    display: flex;\n    justify-content: start;\n    flex-wrap: wrap;\n    margin-top: 10px;\n`;\n\nexport const Title = styled.div`\n    font-size: 15px;\n    font-weight: 800;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.33;\n    letter-spacing: normal;\n    text-align: left;\n    color: var(--black-1);\n    display: -webkit-box;\n    max-width: 400px;\n    -webkit-line-clamp: 3;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    text-overflow: ellipsis;\n`;\n\nexport const RoleplayCard = styled.div<{isDotMenuVisible: boolean}>`\n  width: 290px;\n  height: 120px;\n  margin-right: 8px;\n  margin-top: 8px;\n  padding: 16px;\n  padding-right: 12px;\n  border-radius: 4px;\n  border: solid 1px var(--ps-grey-4);\n  background-color: var(--ps-white-1);\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  cursor: pointer;\n\n  .dot-container {\n    visibility: hidden;\n\n    .dot-icon-container {\n        svg {\n            min-width: 16px !important;\n            height: 16px;\n        }\n\n        width: 11px;\n        height: 24px;\n    }\n  }\n  \n  :hover {\n     box-shadow: 0 4px 24px 0 rgba(0, 0, 0, 0.12);\n\n     .dot-container {\n        visibility: ${props => props.isDotMenuVisible ? 'visible' : 'hidden'};\n     }\n  }\n`;\n\nexport const Footer = styled.div`\n  display: flex;\n  justify-content: space-between\n`;\n\nexport const SelectionTitle = styled.div`\n    font-weight: 700;\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-black-main);\n    padding-bottom: 8px;\n`;\n\nexport const SingleTextLine = styled.div<{ width: number }>`\n    width: ${props => props.width}px;\n    height: 8px;\n    background-color: var(--ps-grey-4);\n    animation: pulse 1.5s ease-in-out infinite;\n\n    @keyframes pulse {\n        0% {\n            opacity: 0.2;\n        }\n        50% {\n            opacity: 0.4;\n        }\n        100% {\n            opacity: 0.2;\n        }\n    }\n`;\n\nexport const SkeletonContainer = styled.div`\n    display: flex;\n`;\n\nexport const SelectionTitleSkeleton = styled(SingleTextLine)`\n    margin-top: 6px;\n    margin-bottom: 12px;\n`;\n\nexport const NoRoleplayLink = styled.div`\n    display: flex;\n    margin-top: 12px;\n    flex-direction: column;\n    margin-left: 15px;\n    align-items: center;\n`;\n\nexport const Text = styled.div`\nfont-size: 15px;\n  font-weight: bold;\n  font-stretch: normal;\n  font-style: normal;\n  line-height: 1.33;\n  margin-top: 17px;\n`;\n\nexport const OwnerName = styled.div`\n    max-width: 93px;\n    overflow-x: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n`;\n\nexport const DotsIconContainer = styled.div<{ disabled: boolean }>`\n    height: 100%;\n    padding: 0 6px 0 4px;\n    width: 22px;\n    cursor: pointer;\n    color: ${props =>\n        props.disabled ? 'var(--ps-grey-1)' : 'var(--ps-white-1)'};\n    &:hover {\n        color: ${props =>\n            props.disabled ? 'var(--ps-grey-1)' : 'var(--ps-white-1)'};\n    }\n    visibility: hidden;\n`;\n\nexport const NameContainer = styled.div`\nfont-size: 11px;\n  font-weight: normal;\n  font-stretch: normal;\n  font-style: normal;\n  line-height: 1.45;\n  letter-spacing: normal;\n  text-align: left;\n  color: var(--ps-grey-1);\n    display: flex;\n    padding-top: 5px;\n    padding-bottom: 5px;\n\n`;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SidebarRoleplaysLarge = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, dataTest}, ref) => {\n        return (\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\" data-test={dataTest}>\n            <g clip-path=\"url(#kifedtetla)\">\n                <mask id=\"aiohq7s5hb\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"-1\" width=\"57\" height=\"57\">\n                    <path d=\"M.5-.002h56v56H.5v-56z\" fill=\"#fff\"/>\n                </mask>\n                <g mask=\"url(#aiohq7s5hb)\" stroke=\"#B1C0CB\" stroke-width=\"3.379\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M2.14 9.792v28.382l9.02-6.435a6.078 6.078 0 0 1 3.53-1.13h19.84c2.59 0 4.692-2.1 4.692-4.692V5.099H6.833a4.692 4.692 0 0 0-4.692 4.693z\"/>\n                    <path d=\"M45.785 17.823h4.383a4.693 4.693 0 0 1 4.692 4.694v28.381l-9.02-6.434a6.078 6.078 0 0 0-3.53-1.13H22.47a4.693 4.693 0 0 1-4.692-4.693v-1.47M31.252 14.037H12.297M31.252 21.693H12.297\"/>\n                </g>\n            </g>\n            <defs>\n                <clipPath id=\"kifedtetla\">\n                    <path fill=\"#fff\" transform=\"translate(.5)\" d=\"M0 0h56v56H0z\"/>\n                </clipPath>\n            </defs>\n        </svg>)\n    }\n);\n\nexport default SidebarRoleplaysLarge;\n","import { useDispatch } from 'react-redux'\nimport { useCallback } from 'react';\nimport { useGetRoleplaysApi } from '../../../../api/roleplay';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { Roleplay } from '../../../../constants/interfaces/Roleplay';\nimport {\n    getRoleplaysStart,\n    getRoleplaysSuccess,\n    getRoleplaysFailure,\n} from './actions';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\n\n/**\n * @function useGetRoleplaysService\n * @returns { CallableFunction }\n */\nexport const useGetRoleplaysService = () => {\n    const dispatch = useDispatch();\n    const getRoleplaysApi = useGetRoleplaysApi();\n    const showMessage = useShowMessage();\n\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback((searchParams) => {\n        dispatch(getRoleplaysStart());\n        const sp = {\n            offset: searchParams.offset,\n            limit: searchParams.limit,\n            query: searchParams.searchTerm,\n            companyId: searchParams.companyId\n        }\n        return getRoleplaysApi(sp)\n            .then((data: ListResult<Roleplay>) => {                \n                dispatch(getRoleplaysSuccess(data));\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(getRoleplaysFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, getRoleplaysApi, showMessage]);\n}","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ListResult } from '../../../../constants/interfaces/PaginationResult';\nimport { Roleplay } from '../../../../constants/interfaces/Roleplay';\n\nexport interface RoleplaysState {\n    data?: ListResult<Roleplay>;\n    isLoading: boolean;\n    error?: string;\n}\n\nexport type RoleplaysStateSelector = (state: any) => RoleplaysState;\n\nexport const RoleplaysStateSelectorContext = React.createContext<RoleplaysStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useRoleplaysState(): RoleplaysState {\n    return useSelector(useContext(RoleplaysStateSelectorContext));\n}\n","import styled from 'styled-components';\nimport { SingleTextLine } from '../../../../ui/components/Skeleton/styles';\n\nexport const Container = styled.div`\n    margin-right: 8px;\n    margin-top: 7px;\n    border: 1px solid var(--ps-grey-4);\n    border-radius: 4px;\n    padding: 20px 12px;\n`;\n\nexport const BodySkeletonContainer = styled.div`\n    padding: 0px 20px;\n    margin-bottom: 32px;\n`;\n\nexport const RoleplayContainer = styled.div`\n    padding: 0px;\n`;\n\nexport const RoleplaySkeletonContainer = styled(Container)`\n    padding: 24px 31px 20px 16px;\n`\n\n\nexport const LineSkeleton = styled(SingleTextLine)<{marginTop?: string}>`\n    margin-top: ${props => props.marginTop ?? '11px'};\n    margin-right: 8px;\n\n    &:first-child {\n        margin-top: 0;\n    }\n`;\n\nexport const HeaderSkeletonContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    margin-top: 17px;\n`;\n\nexport const LineContainer = styled.div`\n    display: flex;\n`;","import { RoleplaySkeletonContainer, LineSkeleton, RoleplayContainer } from \"./styles\";\nconst bodyLineWidths = [\n    {\n        lineWidths: [232,164,123]\n    },\n    {\n        lineWidths: [232,164,123]\n    },\n    {\n        lineWidths: [232,164,123]\n    }\n];\n\nfunction RoleplaySceleton() {\n    return <>{bodyLineWidths.map(({lineWidths}, index) => {\n        return <RoleplayContainer key={index} data-test=\"roleplay-content-skeleton\">\n            <RoleplaySkeletonContainer>\n                {\n                    lineWidths.map((width, index) => <LineSkeleton width={width} height={8} key={index} marginTop={index === lineWidths.length - 1 ? \"40px\" : undefined} data-test=\"roleplay-content-skeleton-line\"/>)\n                }\n            </RoleplaySkeletonContainer>\n            </RoleplayContainer>\n    })}</>\n}\n\nexport default RoleplaySceleton;","// src/hooks/useGoogleAnalyticsEvents.ts\n\nimport { useEffect } from 'react';\n\nexport interface AnalyticsInformation {\n  UserID?: string;\n  UserName?: string;\n  Email?: string;\n  CompanyID?: number;\n  CompanyName?: string;\n  Environment?: string;\n  CharacterLimit?: number;\n}\n\nexport interface EventOptions {\n  category: string;\n  action: string;\n  label?: string;\n  value?: number;\n  userInformation?: AnalyticsInformation;\n}\n\n\nconst useGoogleAnalyticsEvents = () => {\n  if (window && window.gtag) { \n    window.gtag('config', 'G-QB6SGQF7VJ', { 'allow_enhanced_measurement': false }); \n  }\n\n  const sendEvent = ({ category, action, value, userInformation }: EventOptions) => {\n    const eventPayload = {\n      event_category: category,\n      value: value,\n      ...userInformation,\n    };\n\n    if (window && window.gtag) {\n      window.gtag('event', action, eventPayload);\n    }\n  };\n\n  useEffect(() => {\n    if (typeof window.gtag !== 'function') {\n      console.error(\"Google Analytics 'gtag' function not found. Make sure Google Analytics is properly set up.\");\n    }\n  }, []);\n\n  return sendEvent;\n};\n\nexport default useGoogleAnalyticsEvents;\n","import useGoogleAnalyticsEvents, { EventOptions, AnalyticsInformation } from '../../../services/GoogleAnalytics';\nimport { useCallback } from 'react';\nimport { getProfileState } from '../../UserProfile/store/reducers';\nimport { useSelector } from 'react-redux';\nimport { getCompanyState } from '../../CompanySettings/store/reducers';\n\n// export const EventObjects = {\n//     ROLEPLAYS_SCREEN_OPEN: 'roleplays_screen_open',\n//     ROLEPLAYS_SCREEN_DUPLICATE: 'roleplays_screen_duplicate',\n//     ROLEPLAYS_SCREEN_DELETE: 'roleplays_screen_delete',\n//     ROLEPLAYS_SCREEN_SEARCH: 'roleplays_screen_search',\n//     ROLEPLAYS_SCREEN_HINT: 'roleplays_screen_hint',\n//     ROLEPLAYS_SCREEN_NEW: 'roleplays_screen_new',\n//     CONTEXT_WIZARD_SCREEN_OPEN: 'context_wizard_screen_open',\n//     CONTEXT_WIZARD_SCREEN_SITUATION_FILLED: 'context_wizard_screen_situation_filled',\n//     CONTEXT_WIZARD_SCREEN_SITUATION_HINT: 'context_wizard_screen_situation_hint',\n//     CONTEXT_WIZARD_SCREEN_CUSTOMER_FILLED: 'context_wizard_screen_customer_filled',\n//     CONTEXT_WIZARD_SCREEN_CUSTOMER_HINT: 'context_wizard_screen_customer_hint',\n//     CONTEXT_WIZARD_SCREEN_PRODUCT_FILLED: 'context_wizard_screen_product_filled',\n//     CONTEXT_WIZARD_SCREEN_PRODUCT_HINT: 'context_wizard_screen_product_hint',\n//     CONTEXT_WIZARD_SCREEN_GOAL_FILLED: 'context_wizard_screen_goal_filled',\n//     CONTEXT_WIZARD_SCREEN_GOAL_HINT: 'context_wizard_screen_goal_hint',\n//     CONTEXT_WIZARD_SCREEN_NUANCES_FILLED: 'context_wizard_screen_nuances_filled',\n//     CONTEXT_WIZARD_SCREEN_NUANCES_HINT: 'context_wizard_screen_nuances_hint',\n//     CONTEXT_WIZARD_SCREEN_METHOD_FILLED: 'context_wizard_screen_method_filled',\n//     CONTEXT_WIZARD_SCREEN_METHOD_HINT: 'context_wizard_screen_method_hint',\n//     CONTEXT_WIZARD_SCREEN_CLOSE: 'context_wizard_screen_close',\n//     CONTEXT_WIZARD_SCREEN_CREATE: 'context_wizard_screen_create',\n//     CONTEXT_WIZARD_SCREEN_LEFT_EMPTY: 'context_wizard_screen_left_empty',\n//     ROLEPLAY_SCREEN_OPEN_NEW: 'roleplay_screen_open_new',\n//     ROLEPLAY_SCREEN_OPEN_EDIT: 'roleplay_screen_open_edit',\n//     ROLEPLAY_SCREEN_OPEN_READ_ONLY: 'roleplay_screen_open_read_only',\n//     ROLEPLAY_SCREEN_SITUATION_UPDATED: 'roleplay_screen_situation_updated',\n//     ROLEPLAY_SCREEN_SITUATION_HINT: 'roleplay_screen_situation_hint',\n//     ROLEPLAY_SCREEN_CUSTOMER_UPDATED: 'roleplay_screen_customer_updated',\n//     ROLEPLAY_SCREEN_CUSTOMER_HINT: 'roleplay_screen_customer_hint',\n//     ROLEPLAY_SCREEN_PRODUCT_UPDATED: 'roleplay_screen_product_updated',\n//     ROLEPLAY_SCREEN_PRODUCT_HINT: 'roleplay_screen_product_hint',\n//     ROLEPLAY_SCREEN_GOAL_UPDATED: 'roleplay_screen_goal_updated',\n//     ROLEPLAY_SCREEN_GOAL_HINT: 'roleplay_screen_goal_hint',\n//     ROLEPLAY_SCREEN_NUANCES_UPDATED: 'roleplay_screen_nuances_updated',\n//     ROLEPLAY_SCREEN_NUANCES_HINT: 'roleplay_screen_nuances_hint',\n//     ROLEPLAY_SCREEN_METHOD_UPDATED: 'roleplay_screen_method_updated',\n//     ROLEPLAY_SCREEN_METHOD_HINT: 'roleplay_screen_method_hint',\n//     ROLEPLAY_SCREEN_GENERATE: 'roleplay_screen_generate',\n//     ROLEPLAY_SCREEN_TITLE_UPDATED: 'roleplay_screen_title_updated',\n//     ROLEPLAY_SCREEN_SCRIPT_GENERATED: 'roleplay_screen_script_generated',\n//     ROLEPLAY_SCREEN_RESET: 'roleplay_screen_reset',\n//     ROLEPLAY_SCREEN_REGENERATE: 'roleplay_screen_regenerate',\n//     ROLEPLAY_SCREEN_AUDIO_PLAYBACK: 'roleplay_screen_audio_playback',\n//     ROLEPLAY_SCREEN_CREATE_SCRENARIO: 'roleplay_screen_create_screnario',\n//     ROLEPLAY_SCREEN_CREATE_CHALLENGE: 'roleplay_screen_create_challenge',\n//     ROLEPLAY_SCREEN_SAVE_FILE: 'roleplay_screen_save_file',\n//     ROLEPLAY_SCREEN_COPY_CLIPBOARD: 'roleplay_screen_copy_clipboard',\n//     ROLEPLAY_SCREEN_INSTRUCTION_SENT_MANUALLY: 'roleplay_screen_instruction_sent_manually',\n//     ROLEPLAY_SCREEN_INSTRUCTION_SENT_AUTO: 'roleplay_screen_instruction_sent_auto',\n//     ROLEPLAY_SCREEN_DUPLICATE: 'roleplay_screen_duplicate',\n//     ROLEPLAY_SCREEN_DISCLAIMER: 'roleplay_screen_disclaimer',\n//     ROLEPLAY_SCREEN_GENERATE_ERROR: 'roleplay_screen_generate_error',\n//   };\n\nconst useGoogleAnalyticsWithRoleplay = () => {\n  const sendEvent = useGoogleAnalyticsEvents();\n  const profile = useSelector(getProfileState);\n  const company = useSelector(getCompanyState);\n\n  const trackEventWithRoleplay = useCallback((action: string, additionalData?: AnalyticsInformation) => {\n    const userInformation: AnalyticsInformation = {\n      UserID:  profile?.id?.toString() || 'N/A',\n      UserName: profile ? profile?.firstName + ' ' + profile?.lastName : 'N/A',\n      Email:  profile?.email || 'N/A',\n      CompanyID: company?.id || 0,\n      CompanyName:  company?.name || 'N/A',\n      Environment: process.env.REACT_APP_DEV_ENV?.toUpperCase() ?? 'DEV', \n      ...(additionalData || {})\n    };\n\n    const eventOptions: EventOptions = {\n      category: 'Roleplay',\n      action,\n      userInformation,\n    };\n\n    sendEvent(eventOptions);\n  }, [sendEvent, company, profile]);\n\n  return trackEventWithRoleplay;\n};\n\nexport default useGoogleAnalyticsWithRoleplay;\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { pushModal, useHistory } from '../../../tools/router';\nimport { TableWrapper } from '../../../ui/components/table-wrapper';\nimport { useTableStateHelper } from '../../../ui/components/table-wrapper/helper';\nimport { QuestionTooltip } from '../../../ui/components/Tooltip/QuestionTooltip';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { QuestionContainer, TooltipContainer, TootlipContent, TootlipTitle } from '../../CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/styles';\nimport { initialSearchParams, ITEMS_PER_PAGE } from './constants';\nimport { Container, Footer, NameContainer, NoRoleplayLink, OwnerName, RoleplayCard, SkeletonContainer, Subheader, Text, Title } from './styles';\nimport {\n    SearchParams,\n    useSearchParamsState,\n} from '../../../constants/interfaces/filters';\nimport SidebarRoleplaysLarge from '../../../ui/icons/SidebarRoleplaysLarge';\nimport dayjs from 'dayjs';\nimport { useGetRoleplaysService } from './store/services';\nimport { getProfileState } from '../../UserProfile/store/reducers';\nimport { useSelector } from 'react-redux';\nimport { useRoleplaysState } from './store/states';\nimport PlusInCircleIcon from '../../../ui/icons/PlusInCircleIcon';\nimport { Button } from '../../../ui/components/Button';\nimport ROUTES from '../../../routes/routes';\nimport { isPractisAdminRole, isAdminRole } from '../../../constants/enums';\nimport { ActionButton, ActionItem } from '../../../ui/components/ActionButton';\nimport { useDeleteRoleplayApi, useDuplicateRoleplayApi } from '../../../api/roleplay';\nimport { generateCopyOfEntityName } from '../../../services/GeneralBulkActionServices/helpers';\nimport { useShowConfirmModalDialog } from '../../../ui/components/ModalDialogs/store/actions';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport RoleplaySceleton from '../components/Skeletons/RoleplaySkeleton';\nimport useGoogleAnalyticsWithRoleplay from '../GoogleAnalytics';\nimport { debounce } from 'lodash';\n\nconst qs = require('query-string');\n\nfunction RoleplaysController() {\n    const getRoleplays = useGetRoleplaysService();\n    const duplicateRoleplay = useDuplicateRoleplayApi();\n    const deleteRoleplay = useDeleteRoleplayApi();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n    const showMessage = useShowMessage();\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n\n    const profile = useSelector(getProfileState);\n    const { isLoading, data: roleplays } = useRoleplaysState();\n    const [lastRefreshed, setLastRefreshed] = useState(new Date());\n\n    const history = useHistory();\n    const location = history.location;\n    const pageIndex = parseInt(qs.parse(location.search).page) || 1;\n\n    const initialOffset = (pageIndex - 1) * ITEMS_PER_PAGE;\n\n    const usableParams: SearchParams = initialSearchParams;\n    const infoPanel = localStorage.getItem('infoPanel');\n\n    const { searchParams, setSearchTerm, setOffset } =\n        useSearchParamsState(usableParams);\n\n    const handleTableStates = useTableStateHelper();\n    const tableStates = handleTableStates({\n        searchTerm: searchParams?.searchTerm,\n        itemsCount: roleplays?.items?.length || 0,\n    });\n\n    useEffect(() => {\n        profile?.companyId && getRoleplays({ ...searchParams, companyId: profile?.companyId });\n        setLastRefreshed(new Date());\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [profile?.companyId]);\n\n    /**\n     * @function handlePageChange\n     * @param { number } limit\n     * @param { number } offset\n     * @returns { void }\n     */\n    const handlePageChange = useCallback(\n        (_, offset: number): void => {\n            setOffset(offset);\n            profile?.companyId && getRoleplays({ ...searchParams, offset, companyId: profile?.companyId });\n        },\n        [searchParams, getRoleplays, setOffset, profile?.companyId]\n    );\n\n    const isDotMenuVisible = useMemo(() => {\n        return isAdminRole(profile?.role?.name) || isPractisAdminRole(profile?.role?.name)\n    }, [profile?.role?.name]);\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const roleplaySeachTrackEvent = useCallback(\n        debounce(() => trackEventWithRoleplay('roleplays_screen_search'), 500),\n        []\n    );\n\n    useEffect(() => {\n        searchParams.searchTerm && roleplaySeachTrackEvent?.();\n    }, [searchParams.searchTerm, roleplaySeachTrackEvent])\n\n    useEffect(() => {\n        trackEventWithRoleplay('roleplays_screen_open');\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n    /**\n     * @function refreshData\n     * @returns { void }\n     */\n    const refreshData = useCallback(() => {\n        trackEventWithRoleplay('roleplay_list_refresh')\n        searchParams.limit = ITEMS_PER_PAGE;\n        searchParams.offset = initialOffset;\n        profile?.companyId && getRoleplays({ ...searchParams, companyId: profile?.companyId });\n        setLastRefreshed(new Date());\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [initialOffset, searchParams, getRoleplays, profile?.companyId]);\n\n    /**\n     * @function handleSearchChange\n     * @param { string } searchTerm\n     */\n    const handleSearchChange = useCallback(\n        (searchTerm: string) => {\n            setSearchTerm(searchTerm)\n            profile?.companyId && getRoleplays({ ...searchParams, searchTerm, companyId: profile?.companyId });\n        },\n        [searchParams, getRoleplays, setSearchTerm, profile?.companyId]\n    );\n\n    const handleCreateRoleplay = () => { pushModal(history, ROUTES.ROLEPLAYS.NEW_ROLEPLAY); trackEventWithRoleplay('roleplays_screen_new') };\n    const handleDuplicate = (id: number, title: string) => {\n        duplicateRoleplay({\n            roleplayId: id.toString(),\n            title: generateCopyOfEntityName(title)\n        }).then((roleplay) => {\n            showMessage('Roleplay has been duplicated', 'success');\n            trackEventWithRoleplay('roleplays_screen_duplicate')\n            history.push(`${ROUTES.ROLEPLAYS.SINGLE.replace(\n                ':roleplayId',\n                roleplay.id.toString()\n            )}`)\n            infoPanel === null && localStorage.setItem(\n                'infoPanel',\n                'true'\n            );\n        })\n    };\n\n    const handleDeleteRoleplay = useCallback(\n        (event: React.MouseEvent<HTMLElement>, roleplayId: number) => {\n            event.stopPropagation();\n            showConfirmationModalDialog({\n                modalTitle: 'Delete Roleplay?',\n                description:\n                    'It will be permanently deleted from the collection. This action cannot be undone.',\n                confirmButtonText: 'Delete',\n                cancelButtonText: 'Cancel',\n                onConfirm: () => {\n                    deleteRoleplay([roleplayId.toString()]).then((data) => {\n                        trackEventWithRoleplay('roleplays_screen_delete');\n                        showMessage('Roleplay has been deleted', 'success');\n                        refreshData();\n                    })\n                },\n            });\n        },\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [showConfirmationModalDialog, deleteRoleplay, refreshData, showMessage]\n    );    \n\n    \n    const canCreateRoleplay = profile && (isAdminRole(profile.role?.name) || isPractisAdminRole(profile.role?.name));\n\n    const NoEntryText = <NoRoleplayLink>\n        <Text>{canCreateRoleplay ? 'No Roleplays Yet' : 'No Roleplays Yet. Only Admins can create them.'}</Text>\n        <Button disabled={!canCreateRoleplay} fontSize={15} style={{ fontWeight: 'bold', cursor: canCreateRoleplay ? 'pointer' : 'default' }} variant=\"transparent\" action={handleCreateRoleplay} type=\"button\" dataTest=\"roleplay-create-new\">Create Roleplay</Button>\n    </NoRoleplayLink>;\n\n    return <MainWrapper subTitle=\"Roleplay AI\" htmlPageTitle=\"Roleplay AI - Practis\" contentSize={false} dataTest=\"roleplays\" subHeader={\n        <Subheader data-test=\"roleplay-subheader\"><div>Collection of AI-powered sales situations</div>\n            <QuestionContainer>\n                <QuestionTooltip\n                    action={() => trackEventWithRoleplay('roleplays_screen_hint')}\n                    text={<TooltipContainer>\n                        <TootlipTitle>Discover a variety of sales situations processed by advanced AI</TootlipTitle>\n                        <TootlipContent> Each situation realistically simulates interactions between salespeople and customers. These roleplays are designed to enhance your sales skills through practical, interactive examples, incorporating the best sales methodologies.</TootlipContent>\n                    </TooltipContainer>}\n                    isHtmlContent={true}\n                    dataTest='roleplay-tooltip'\n                />\n            </QuestionContainer>\n        </Subheader>\n    }>\n        <TableWrapper\n            tableStates={tableStates}\n            data={roleplays?.items}\n            tableRefreshConfigurations={{\n                lastRefreshed: lastRefreshed,\n                refreshData: refreshData,\n                dataTest: 'roleplays-timestamp',\n                buttons: [\n                    {\n                        name: 'Create Roleplay',\n                        icon: <PlusInCircleIcon />,\n                        onPress: handleCreateRoleplay,\n                        dataTest: 'create-roleplay-btn',\n                        disabled: !canCreateRoleplay\n                    },\n                ]\n            }}\n            tableToolsOptions={{\n                pagingOptions: {\n                    totalCount: roleplays?.count,\n                    itemsPerPage: ITEMS_PER_PAGE,\n                    onPageChange: handlePageChange,\n                    searchOrFiltersApplied: false,\n                    dataTest: 'roleplays-paging'\n                },\n                searchInputOptions: {\n                    initialValue: searchParams.searchTerm,\n                    onSearchChange: handleSearchChange,\n                    dataTest: 'roleplays-search',\n                    isSearchInputDisabled:\n                        !roleplays?.items.length &&\n                        !searchParams.searchTerm.length,\n                },\n            }}\n            tableEmptyStateConfigurations={{\n                shouldShowEmptyState:\n                    !isLoading && roleplays?.items?.length === 0,\n                noEntriesOptions: {\n                    icon: SidebarRoleplaysLarge,\n                    text: NoEntryText,\n                    dataTest: 'no-results',\n                },\n                noSearchResultsOptions: {\n                    entityName: 'Roleplays',\n                    dataTest: 'no-roleplays-found',\n                },\n            }}\n            configurations={{\n                columns: [],\n                rowConfig: {\n                    dataTest: 'roleplay-item',\n                    cells: []\n                },\n            }}\n        />\n        {\n            isLoading ?\n                <SkeletonContainer>\n                    <RoleplaySceleton/>\n                </SkeletonContainer> :\n                <Container>\n                    {!!roleplays?.items?.length && roleplays?.items.map((roleplay) => {\n                        return <RoleplayCard data-test=\"roleplay-card\" onClick={(e) => {\n                            e.stopPropagation();\n                            history.push(ROUTES.ROLEPLAYS.SINGLE.replace(\n                                ':roleplayId',\n                                roleplay.id.toString()\n                            ))\n                            trackEventWithRoleplay('roleplay_screen_open_edit');\n                        }} isDotMenuVisible={isDotMenuVisible}>\n                            <Title data-test=\"roleplay-title\">{roleplay.title}</Title>\n                            <Footer>\n                                <NameContainer>\n                                    <OwnerName data-test=\"roleplay-owner-name\">{roleplay?.owner?.firstName + ' ' + roleplay?.owner?.lastName}</OwnerName> • <span data-test=\"roleplay-createdAt\">{dayjs(roleplay.dateCreated).format('MMM D, YY hh:mm A')}\n                                    </span>\n                                </NameContainer>\n                                <div className='dot-container'>\n                                <ActionButton customWidth={200} isHidden={false} dataTest=\"roleplay-item\" customLeft={5}>\n                                    <ActionItem dataTest=\"duplicate-action\" onClick={() => handleDuplicate(roleplay.id, roleplay.title)}>\n                                        Duplicate\n                                    </ActionItem>\n                                    <ActionItem dataTest=\"delete-action\" destructive={true} onClick={(e) => handleDeleteRoleplay(e, roleplay.id)}>\n                                        Delete\n                                    </ActionItem>\n                                </ActionButton>\n                                </div>\n                            </Footer>\n                        </RoleplayCard>\n                    })}\n                </Container>\n        }\n    </MainWrapper>\n}\n\nexport default RoleplaysController;","import { Action } from 'redux';\nimport { SearchableFilterHeaderKey } from './types';\n\nexport enum ACTIONS {\n    SET_FILTER_HEADER_SEARCH_ACTIVE = 'SET_FILTER_HEADER_SEARCH_ACTIVE',\n    SET_FILTER_HEADER_SEARCH_TERM = 'SET_FILTER_HEADER_SEARCH_TERM',\n}\n\nexport type SetFilterHeaderSearchActiveAction = Action<ACTIONS.SET_FILTER_HEADER_SEARCH_ACTIVE> & {\n    key: SearchableFilterHeaderKey;\n    isSearchActive: boolean;\n};\n\nexport const setFilterHeaderSearchActive = (\n    key: SearchableFilterHeaderKey,\n    isSearchActive: boolean\n): SetFilterHeaderSearchActiveAction => ({\n    type: ACTIONS.SET_FILTER_HEADER_SEARCH_ACTIVE,\n    key,\n    isSearchActive,\n});\n\nexport type SetFilterHeaderSearchTermAction = Action<ACTIONS.SET_FILTER_HEADER_SEARCH_TERM> & {\n    key: SearchableFilterHeaderKey;\n    searchTerm: string;\n};\n\nexport const setFilterHeaderSearchTerm = (\n    key: SearchableFilterHeaderKey,\n    searchTerm: string\n): SetFilterHeaderSearchTermAction => ({\n    type: ACTIONS.SET_FILTER_HEADER_SEARCH_TERM,\n    key,\n    searchTerm,\n});\n\n\nexport type SearchableFilterHeaderActions =\n    SetFilterHeaderSearchActiveAction | SetFilterHeaderSearchTermAction;","import Roleplays from './controller';\n\nexport default Roleplays;","export type SearchableFilterHeaderItemState = {\n    isSearchActive: boolean;\n    searchTerm: string;\n}\n\nexport enum SearchableFilterHeaderKey {\n    SINGLE_TEAM = 'SINGLE_TEAM',\n    PRACTIS_SET = 'PRACTIS_SET',\n    MULTIPLE_TEAMS = 'MULTIPLE_TEAMS',\n    LABELS = 'LABELS',\n}\n\nexport type SearchableFilterHeaderState = Record<SearchableFilterHeaderKey, SearchableFilterHeaderItemState | undefined>;","import { Action } from 'redux';\n\nexport enum ACTIONS {\n    SELECT_PRACTIS_SET = 'SELECT_PRACTIS_SET',\n    DISABLE_PRACTIS_SET_FILTER = 'DISABLE_PRACTIS_SET_FILTER'\n}\n\nexport type SelectPractisSetAction = Action<ACTIONS.SELECT_PRACTIS_SET> & {\n    selectedPractisSetId: number | null;\n};\n\nexport const selectPractisSet = (\n    selectedPractisSetId: number | null\n): SelectPractisSetAction => ({\n    type: ACTIONS.SELECT_PRACTIS_SET,\n    selectedPractisSetId,\n});\n\n\nexport type DisablePractisSetFilterAction = Action<ACTIONS.DISABLE_PRACTIS_SET_FILTER> & {\n    isDisabled: boolean;\n};\n\nexport const disablePractisSetFilter = (\n    isDisabled: boolean\n): DisablePractisSetFilterAction => ({\n    type: ACTIONS.DISABLE_PRACTIS_SET_FILTER,\n    isDisabled,\n});\n\nexport type PractisSetFilterActions = SelectPractisSetAction | DisablePractisSetFilterAction;","import { useCallback } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { setFilterHeaderSearchActive, setFilterHeaderSearchTerm } from \"./actions\";\nimport { SearchableFilterHeaderKey } from \"./types\";\n\nexport const useSetFilterHeaderSearchActive = (key: SearchableFilterHeaderKey) => {\n    const dispatch = useDispatch();\n\n    return useCallback((isSearchActive: boolean) => {\n        dispatch(setFilterHeaderSearchActive(key, isSearchActive));\n        if (!isSearchActive) {\n            dispatch(setFilterHeaderSearchTerm(key, ''));\n        }\n    }, [key, dispatch]);\n};\n\nexport const useSetFilterHeaderSearchTerm = (key: SearchableFilterHeaderKey) => {\n    const dispatch = useDispatch();\n\n    return useCallback((searchTerm: string) => {\n        dispatch(setFilterHeaderSearchTerm(key, searchTerm));\n    }, [key, dispatch]);\n};","import { Action } from 'redux';\n\nexport enum ACTIONS {\n    SELECT_SINGLE_TEAM = 'SELECT_SINGLE_TEAM',\n    DISABLE_SINGLE_TEAM_FILTER = 'DISABLE_SINGLE_TEAM_FILTER'\n}\n\nexport type SelectSingleTeamAction = Action<ACTIONS.SELECT_SINGLE_TEAM> & {\n    selectedTeamId: number | null;\n};\n\nexport const selectSingleTeam = (\n    selectedTeamId: number | null\n): SelectSingleTeamAction => ({\n    type: ACTIONS.SELECT_SINGLE_TEAM,\n    selectedTeamId,\n});\n\nexport type DisableSingleTeamFilterAction = Action<ACTIONS.DISABLE_SINGLE_TEAM_FILTER> & {\n    isDisabled: boolean;\n};\n\nexport const disableSingleTeamFilter = (\n    isDisabled: boolean\n): DisableSingleTeamFilterAction => ({\n    type: ACTIONS.DISABLE_SINGLE_TEAM_FILTER,\n    isDisabled,\n});\n\nexport type SingleTeamFilterActions = SelectSingleTeamAction | DisableSingleTeamFilterAction;","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useSetFilterHeaderSearchActive } from '../../../searchable-filter-header/store/services';\nimport { SearchableFilterHeaderKey } from '../../../searchable-filter-header/store/types';\n\nimport { disablePractisSetFilter, selectPractisSet } from './actions';\n\nexport const useSelectPractisSet = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (selectedPractisSetId: number) => {\n            dispatch(selectPractisSet(selectedPractisSetId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useClearSelectedPractisSet = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(selectPractisSet(null));\n    }, [dispatch]);\n};\n\nexport const useDisablePractisSetFilter = () => {\n    const dispatch = useDispatch();\n\n    return useCallback((isDisabled: boolean) => {\n        dispatch(disablePractisSetFilter(isDisabled));\n    }, [dispatch]);\n}\n\nexport const useClearPractisSetFilter = () => {\n    const clearSelectedPractisSet = useClearSelectedPractisSet();\n    const setPractisSetSearchActive = useSetFilterHeaderSearchActive(SearchableFilterHeaderKey.PRACTIS_SET);\n\n    return useCallback(() => {\n        clearSelectedPractisSet();\n        setPractisSetSearchActive(false);\n    }, [clearSelectedPractisSet, setPractisSetSearchActive]);\n};\n","import { SingleTeamFilterState } from './types';\n\nexport const initialSingleTeamFilterState: SingleTeamFilterState = {\n    selectedTeamId: null,\n    isDisabled: false,\n};","import { Reducer } from 'redux';\nimport { useSelector } from 'react-redux';\n\nimport { ACTIONS, SingleTeamFilterActions } from './actions';\nimport { initialSingleTeamFilterState } from './constants';\nimport { SingleTeamFilterState } from './types';\n\nexport const singleTeamFilterReducer: Reducer<\n    SingleTeamFilterState,\n    SingleTeamFilterActions\n> = (state = initialSingleTeamFilterState, action) => {\n    switch (action.type) {\n        case ACTIONS.SELECT_SINGLE_TEAM:\n            return {\n                ...state,\n                selectedTeamId: action.selectedTeamId,\n            };\n        case ACTIONS.DISABLE_SINGLE_TEAM_FILTER:\n            return {\n                ...state,\n                isDisabled: action.isDisabled,\n            }\n\n        default:\n            return state;\n    }\n};\n\nexport const useSingleTeamFilterState = () =>\n    useSelector(state => state.singleTeamFilterReducer);","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useSetFilterHeaderSearchActive } from '../../../searchable-filter-header/store/services';\nimport { SearchableFilterHeaderKey } from '../../../searchable-filter-header/store/types';\n\nimport { disableSingleTeamFilter, selectSingleTeam } from './actions';\n\nexport const useSelectSingleTeam = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (selectedTeamId: number) => {\n            dispatch(selectSingleTeam(selectedTeamId));\n        },\n        [dispatch]\n    );\n};\n\nexport const useClearSelectedTeam = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(selectSingleTeam(null));\n    }, [dispatch]);\n};\n\nexport const useDisableSingleTeamFilter = () => {\n    const dispatch = useDispatch();\n\n    return useCallback((isDisabled: boolean) => {\n        dispatch(disableSingleTeamFilter(isDisabled));\n    }, [dispatch]);\n}\n\nexport const useClearSingleTeamFilter = () => {\n    const clearSelectedSingleTeam = useClearSelectedTeam();\n    const setSingleTeamSearchActive = useSetFilterHeaderSearchActive(SearchableFilterHeaderKey.SINGLE_TEAM);\n\n    return useCallback(() => {\n        clearSelectedSingleTeam();\n        setSingleTeamSearchActive(false);\n    }, [clearSelectedSingleTeam, setSingleTeamSearchActive]);\n};\n","import { useRef, useState, useEffect, useCallback } from \"react\";\n\nconst COUNTDOWN_DATE_KEY = 'COUNTDOWN_DATE';\n\nexport default function useCountdown(from: number, interval: number = 1000) {\n    const [value, setValue] = useState<number | undefined>();\n    const valueInterval: any = useRef();\n\n    /**\n     * @function stop\n     * @description clears interval callbacks, session storage key\n     * and state value (if it's not called from unmount)\n     * @param { boolean } unmount\n     * @returns { void }\n     */\n    const stop = useCallback((unmount = false) => {\n        clearInterval(valueInterval.current);\n        sessionStorage.removeItem(COUNTDOWN_DATE_KEY);\n        if (!unmount) {\n            setValue(undefined);\n        }\n    }, []);\n\n    /**\n     * @function start\n     * @description starts interval callbacks with 1 second interval.\n     * Countdown value is calculated as a difference between \"from\"\n     * and a number of seconds passed from the moment when start function was called.\n     * Start date is stored in session storage in order to have a reliable value\n     * of passed time and to be independent on possible setInterval() issues\n     * @returns { void }\n     */\n    const start = useCallback(() => {\n        setValue(from);\n        sessionStorage.setItem(COUNTDOWN_DATE_KEY, new Date().toString());\n        valueInterval.current = setInterval(\n            () => {\n                const startDateFromStorage = sessionStorage.getItem(COUNTDOWN_DATE_KEY);\n                if (startDateFromStorage) {\n                    const startDate = new Date(startDateFromStorage);\n                    const nowDate = new Date();\n                    const diffInMiliseconds = nowDate.getTime() - startDate.getTime();\n                    const diffInSeconds = Math.round(diffInMiliseconds / 1000);\n                    const value = Math.max(from - diffInSeconds, 0);\n                    setValue(value);\n                } else {\n                    stop();\n                }\n            },\n            interval\n        );\n    }, [from, interval, stop]);\n\n    useEffect(() => {\n        if (typeof value === 'number' && value === 0) {\n            stop();\n        }\n    }, [stop, value]);\n\n    useEffect(() => {\n        return () => {\n            stop(true);\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return { value, start };\n}","import { useCallback, useMemo, useState } from 'react';\nimport { useGenerateReportApi, useGetReportAvailabilityApi } from '../../../api/reports';\nimport { ErrorResult } from '../../../constants/interfaces/ErrorResult';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ReportData } from '../../../api/reports/types';\nimport useCountdown from '../../../helpers/hooks/useCountdown';\nimport { debounce } from 'lodash';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport { isPractisAdminRole } from '../../../constants/enums';\n\n/**\n * @function useGenerateReportService\n * @returns {{\n *    isGenerating: boolean;\n *    generateReport: (reportType: string) => void;\n * }}\n */\nexport function useGenerateReportService() {\n    const { value: remainingTimeout, start: startCountDown } = useCountdown(60);\n    const [isGenerating, setIsGenerating] = useState(false);\n    const profile = useSelector(getProfileState);\n\n    const generateReportApi = useGenerateReportApi();\n    const showMessage = useShowMessage();\n\n    const generateReport = useCallback(\n        (reportType: string, reportData: ReportData) => {\n            setIsGenerating(true);\n            generateReportApi(reportType, reportData)\n                .then(() => {\n                    showMessage(\n                        'The report is being generated. Check your email in a few minutes.',\n                        'success'\n                    );\n                    if (!isPractisAdminRole(profile?.role?.name)) {\n                        startCountDown();\n                    }\n                    setIsGenerating(false);\n                })\n                .catch((error: ErrorResult) => {\n                    setIsGenerating(false);\n                    error?.message && showMessage(error.message, 'error');\n                });\n        },\n        [generateReportApi, profile?.role?.name, showMessage, startCountDown]\n    );\n\n    return { isGenerating, remainingTimeout, generateReport };\n}\n\nconst REPORT_AVAILABILITY_DEBOUNCE_DELAY = 250;\n/**\n * @function useGetReportAvailabilityService\n * @returns {{\n*    isAvailable: boolean;\n*    getReportAvailability: (reportType: string, reportData: ReportData) => void;\n* }}\n*/\nexport function useGetReportAvailabilityService() {\n    const [isAvailable, setIsAvailable] = useState(true);\n    const getReportAvailabilityApi = useGetReportAvailabilityApi();\n    const showMessage = useShowMessage();\n\n    const getReportAvailability = useMemo(() =>\n        debounce((reportType: string, reportData: ReportData) => {\n            getReportAvailabilityApi(reportType, reportData)\n                .then((result) => {\n                    setIsAvailable(result.available);\n                })\n                .catch((error: ErrorResult) => {\n                    error?.message && showMessage(error.message, 'error');\n                });\n        }, REPORT_AVAILABILITY_DEBOUNCE_DELAY),\n        [getReportAvailabilityApi, showMessage]\n    );\n\n    return { isAvailable, getReportAvailability };\n}","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n`;\n\nexport const Buttons = styled.div`\n    display: flex;\n    flex-direction: row;\n    width: 312px;\n    justify-content: space-between;\n`;\n\nexport const InfoText = styled.div`\n    padding-top: 3px;\n    font-size: 11px;\n    line-height: 16px;\n    color: var(--ps-grey-1);\n`;\n\nexport const EmailText = styled.span`\n    font-weight: 600;\n`;","import { Button } from '../Button';\nimport { Container, Buttons, InfoText, EmailText } from './styles';\nimport { ReportingControlPanelViewProps } from './types';\n\nfunction ReportingControlPanelView({\n    isSubmitDisabled,\n    isSubmitLoading,\n    submitText,\n    onSubmit,\n    isClearDisabled,\n    clearText,\n    onClear,\n    userEmail,\n}: ReportingControlPanelViewProps) {\n    return (\n        <Container>\n            <Buttons>\n                <Button\n                    color={isSubmitDisabled ? 'gray' : 'default'}\n                    disabled={isSubmitDisabled}\n                    loading={isSubmitLoading}\n                    loadingSize={24}\n                    loadingColor=\"white\"\n                    label={submitText}\n                    action={onSubmit}\n                    width=\"186px\"\n                    dataTest=\"generate-report-button\"\n                />\n                <Button\n                    color={isClearDisabled ? 'gray' : 'default'}\n                    disabled={isClearDisabled}\n                    label={clearText}\n                    action={() => onClear()}\n                    variant=\"inverse\"\n                    width=\"110px\"\n                    dataTest=\"clear-report-button\"\n                />\n            </Buttons>\n            <InfoText data-test=\"report-email-info\">\n                Report will be sent to <EmailText>{userEmail}</EmailText>\n            </InfoText>\n        </Container>\n    );\n}\n\nexport default ReportingControlPanelView;","import dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { ReportingControlPanelProps } from './types';\nimport ReportingControlPanelView from './view';\n\nfunction ReportingControlPanelController({\n    mode,\n    userEmail,\n    onSubmit,\n    onClear,\n    remainingTimeout,\n}: ReportingControlPanelProps) {\n    const submitText = useMemo(() => {\n        switch (mode) {\n            case 'loading':\n                return '';\n            case 'noData':\n                return 'No data for a report';\n            default:\n                if (mode === 'timeout' && remainingTimeout) {\n                    const time = dayjs()\n                        .startOf('day')\n                        .add(remainingTimeout, 'second')\n                        .format('mm:ss');\n                    return `Generate in ${time}`;\n                }\n                return 'Generate';\n        }\n    }, [mode, remainingTimeout]);\n\n    return (\n        <ReportingControlPanelView\n            isSubmitDisabled={mode !== 'enabled'}\n            isSubmitLoading={mode === 'loading'}\n            submitText={submitText}\n            onSubmit={onSubmit}\n            isClearDisabled={mode === 'disabled'}\n            clearText=\"Clear\"\n            onClear={onClear}\n            userEmail={userEmail}\n        />\n    );\n}\n\nexport default ReportingControlPanelController;","import ReportingControlPanel from './controller';\n\nexport default ReportingControlPanel;","import { useEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n/**\n * @function useQueryParamListener\n * @param { string } paramName\n * @param { Function} callback\n * @returns { void }\n */\nexport default function useQueryParamListener(\n    paramName: string,\n    callback: (paramValue: string | null) => void\n) {\n    const location = useLocation();\n    const paramValueRef = useRef<string | null>(null);\n\n    useEffect(() => {\n        const queryParams = new URLSearchParams(location.search);\n        const paramValue = queryParams.get(paramName);\n\n        if (paramValue !== paramValueRef.current) {\n            paramValueRef.current = paramValue;\n            callback(paramValue);\n        }\n    }, [callback, location.search, paramName]);\n}","import { useCallback } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\n\n\n/**\n * @function useSetQueryParam\n* @returns { CallableFunction }\n */\nexport function useSetQueryParam() {\n    const location = useLocation();\n    const history = useHistory();\n\n    return useCallback(\n        (paramName: string, paramValue: string) => {\n            const queryParams = new URLSearchParams(location.search);\n            queryParams.set(paramName, paramValue);\n\n            // Update the URL with the new query params\n            history.replace({ search: queryParams.toString() });\n        },\n        [history, location.search]\n    );\n}\n\n/**\n * @function useRemoveQueryParam\n* @returns { CallableFunction }\n */\nexport function useRemoveQueryParam() {\n    const location = useLocation();\n    const history = useHistory();\n\n    return useCallback(\n        (paramName: string) => {\n            const queryParams = new URLSearchParams(location.search);\n            queryParams.delete(paramName);\n\n            // Update the URL with the new query params\n            history.replace({ search: queryParams.toString() });\n        },\n        [history, location.search]\n    );\n}\n","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const initialSearchParams: SearchParams = {\n    searchTerm: '',\n    orderBy: { field: 'name', asc: true },\n    limit: 100000,\n    offset: 0,\n    totalCount: 0,\n    numberOfPages: 0,\n    filterByStatus: [],\n};\n\nexport const PRACTIS_SET_QUERY_PARAM_NAME = 'practisSet';","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const NoReportingPractisSets = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 33 32\"\n                className={className}\n                width=\"33\"\n                height=\"32\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M30.5 29.867V12.8c1.104 0 2-.955 2-2.134V2.133C32.5.955 31.605 0 30.5 0h-28C1.395 0 .5.955.5 2.133v8.534c0 1.178.895 2.134 2 2.134v17.066c0 1.177.896 2.133 2 2.133h24c1.105 0 2-.956 2-2.133zm-25 0c-.552 0-1-.478-1-1.067V13.866c0-.588.448-1.064 1-1.064h5v4.265c0 1.179.896 2.133 2 2.133h8c1.105 0 2-.954 2-2.133v-4.265h5c.552 0 1 .476 1 1.064V28.8c0 .59-.448 1.067-1 1.067h-22zM20.5 16v-3.198h-8V16c0 .59.447 1.067 1 1.067h6c.552 0 1-.478 1-1.067zm9-13.867c.552 0 1 .479 1 1.067v6.4c0 .59-.448 1.067-1 1.067h-26c-.553 0-1-.478-1-1.066V3.2c0-.589.448-1.067 1-1.067h26z\" fill=\"#B1C0CB\"/>\n            </svg>\n        );\n    }\n);\n\nexport default NoReportingPractisSets;\n","import styled from 'styled-components';\nimport { SingleTextLine } from '../../../ui/components/Skeleton/styles';\n\nexport const Container = styled.div`\n    width: 100%;\n    height: 40px;\n    border-bottom: 1px solid var(--ps-grey-4);\n    background: var(--ps-grey-3);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n`;\n\nexport const Title = styled.div<{ isDisabled?: boolean }>`\n    padding-left: 24px;\n    font-size: 13px;\n    line-height: 18px;\n    color: ${props => props.isDisabled ? 'var(--ps-grey-1)' : 'var(--ps-black-main)'};\n    font-weight: 800;\n`;\n\nexport const TitleSkeleton = styled(SingleTextLine)`\n    margin-left: 24px;\n    background-color: var(--ps-grey-2);\n`;\n\nexport const SubHeader = styled.div`\n    font-size: 13px;\n    font-weight: normal;\n    color: var(--ps-grey-1);\n    margin-right: 25px;\n`;","import { kebabCase } from 'lodash';\nimport {\n    Container,\n    Title,\n    TitleSkeleton,\n    SubHeader\n} from './styles';\nimport { FilterHeaderProps } from './types';\n\nfunction FilterHeaderView({\n    title,\n    isLoading,\n    isDisabled,\n    subHeader\n}: FilterHeaderProps) {\n    return (\n        <Container>\n            {isLoading ? (\n                <>\n                    <TitleSkeleton width={119} />\n                </>\n            ) : (\n                <>\n                    <Title\n                        isDisabled={isDisabled}\n                        data-test={`${kebabCase(title)}-filter-title`}\n                    >\n                        {title}\n                    </Title>\n                    {subHeader && <SubHeader data-test={`${kebabCase(title)}-filter-subtitle`}>{subHeader}</SubHeader>}\n                </>\n            )}\n        </Container>\n    );\n}\n\nexport default FilterHeaderView;","import { SearchableFilterHeaderKey, SearchableFilterHeaderState } from \"./types\";\n\nexport const initialFilterHeaderState: SearchableFilterHeaderState = {\n    [SearchableFilterHeaderKey.SINGLE_TEAM]: undefined,\n    [SearchableFilterHeaderKey.PRACTIS_SET]: undefined,\n    [SearchableFilterHeaderKey.MULTIPLE_TEAMS]: undefined,\n    [SearchableFilterHeaderKey.LABELS]: undefined,\n}","import { Reducer } from 'redux';\nimport { useSelector } from 'react-redux';\n\nimport { ACTIONS, SearchableFilterHeaderActions } from './actions';\nimport { SearchableFilterHeaderState } from './types';\nimport { initialFilterHeaderState } from './constants';\n\nexport const filterHeaderReducer: Reducer<\n    SearchableFilterHeaderState,\n    SearchableFilterHeaderActions\n> = (state = initialFilterHeaderState, action) => {\n    const stateByKey = state[action.key] ?? {};\n    switch (action.type) {\n        case ACTIONS.SET_FILTER_HEADER_SEARCH_ACTIVE:\n            return {\n                ...state,\n                [action.key]: {\n                    ...stateByKey,\n                    isSearchActive: action.isSearchActive,\n                }\n            };\n        case ACTIONS.SET_FILTER_HEADER_SEARCH_TERM:\n            return {\n                ...state,\n                [action.key]: {\n                    ...stateByKey,\n                    searchTerm: action.searchTerm\n                }\n            }\n\n        default:\n            return state;\n    }\n};\n\nexport const useFilterHeaderState = () =>\n    useSelector(state => state.filterHeader);","import styled from 'styled-components';\nimport { Input } from '../../../../../ui/components/input';\nimport Search from '../../../../../ui/icons/Search';\n\nexport const Container = styled.div`\n    display: flex;\n    align-items: center;\n    height: 100%;\n    flex-grow: 1;\n    overflow: hidden;\n    padding-right: 4px;\n`;\n\nexport const InputWrapper = styled.div`\n    flex: 1;\n`;\n\nexport const StyledInput = styled(Input)<{ ref?: any }>`\n    padding: 0;\n`;\n\nexport const IconContainer = styled.div`\n    width: 14px;\n    height: 100%;\n    margin-left: 24px;\n    margin-right: 9px;\n`;\n\nexport const SearchIcon = styled(Search)`\n    color: var(--ps-grey-1);\n`;\n","import {\n    Container,\n    InputWrapper,\n    StyledInput,\n    IconContainer,\n    SearchIcon,\n} from './styles';\nimport { SearchInputViewProps } from './types';\n\nfunction SearchInputView({\n    value,\n    onChange,\n    onBlur,\n    onKeyDown,\n    inputRef,\n}: SearchInputViewProps) {\n    return (\n        <Container>\n            <IconContainer data-test=\"filter-search-icon\">\n                <SearchIcon />\n            </IconContainer>\n            <InputWrapper>\n                <StyledInput\n                    ref={inputRef}\n                    placeholder=\"Search\"\n                    handleChange={onChange}\n                    value={value}\n                    fontSize=\"13px\"\n                    height=\"24px\"\n                    autoFocus={true}\n                    onKeyDown={onKeyDown}\n                    onBlur={onBlur}\n                    dataTest=\"filter-search-input\"\n                />\n            </InputWrapper>\n        </Container>\n    );\n}\n\nexport default SearchInputView;","import { useCallback, ChangeEvent } from 'react';\nimport SearchInputView from './view';\nimport { SearchInputProps } from './types';\nimport { escPressed } from '../../../../../helpers/functions/key-down-helpers';\n\nfunction SearchInputController({ value, onChange, onExit, inputRef }: SearchInputProps) {\n    const handleChange = useCallback(\n        (e: ChangeEvent<HTMLInputElement>) => {\n            e.persist();\n            const value = e.target.value;\n            onChange(value);\n        },\n        [onChange]\n    );\n\n    /**\n     * @description handles ESC events on input key down\n     * @function handleKeyDown\n     * @param { KeyboardEvent } event\n     * @returns { void }\n     */\n    const handleKeyDown = useCallback(\n        (event: KeyboardEvent) => {\n            const target = event.currentTarget as HTMLInputElement;\n            if (escPressed(event)) {\n                onExit();\n                target.blur();\n            }\n        },\n        [onExit]\n    );\n\n    const handleBlur = useCallback(() => {\n        if (!value) {\n            onExit();\n        }\n    }, [onExit, value]);\n\n    return (\n        <SearchInputView\n            value={value}\n            onChange={handleChange}\n            onBlur={handleBlur}\n            onKeyDown={handleKeyDown}\n            inputRef={inputRef}\n        />\n    );\n}\n\nexport default SearchInputController;","import SearchInput from './controller';\n\nexport default SearchInput;","import styled from 'styled-components';\nimport {\n    SingleTextLine,\n    Icon,\n} from '../../../ui/components/Skeleton/styles';\nimport Search from '../../../ui/icons/Search';\n\nexport const Container = styled.div`\n    width: 100%;\n    height: 40px;\n    border-bottom: 1px solid var(--ps-grey-4);\n    background: var(--ps-grey-3);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n`;\n\nexport const Title = styled.div<{ isDisabled?: boolean }>`\n    padding-left: 24px;\n    font-size: 13px;\n    line-height: 18px;\n    color: ${props => props.isDisabled ? 'var(--ps-grey-1)' : 'var(--ps-black-main)'};\n    font-weight: 800;\n`;\n\nexport const ShowSearch = styled.div`\n    margin-right: 24px;\n    width: 14px;\n    height: 100%;\n`;\n\nexport const SearchIcon = styled(Search)<{ isDisabled?: boolean}>`\n    color: var(${props => props.isDisabled ? \"--ps-grey-2\" : \"--ps-grey-1\"});\n    cursor: ${props => props.isDisabled ? \"default\" : \"pointer\"};\n`;\n\nexport const TitleSkeleton = styled(SingleTextLine)`\n    margin-left: 24px;\n    background-color: var(--ps-grey-2);\n`;\n\nexport const IconSkeleton = styled(Icon)`\n    margin-right: 16px;\n    background-color: var(--ps-grey-2);\n`;\n\nexport const InputContainer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    height: 100%;\n    width: 100%;\n`;\n\nexport const SearchButtons = styled.div`\n    display: flex;\n    justify-content: end;\n    align-items: center;\n    width: 80px;\n`;\n\nexport const ClearButton = styled.div`\n    font-size: 11px;\n    color: var(--ps-blue-main);\n    cursor: pointer;\n`;\n\nexport const ClearSeparator = styled.div`\n    width: 1px;\n    height: 17px;\n    margin: 0 8px;\n    background-color: var(--ps-grey-4);\n`\n\nexport const SearchClose = styled.div`\n    display: flex;\n    flex-basis: 12px;\n    flex-shrink: 0;\n    align-items: center;\n    height: 100%;\n    padding-right: 20px;\n    cursor: pointer;\n    box-sizing: content-box;\n    color: var(--ps-black-main);\n`","import { kebabCase } from 'lodash';\nimport StyledInput from './components/SearchInput';\nimport Close from '../../../ui/icons/Close';\nimport {\n    Container,\n    Title,\n    ShowSearch,\n    SearchIcon,\n    TitleSkeleton,\n    IconSkeleton,\n    InputContainer,\n    SearchButtons,\n    SearchClose,\n    ClearButton,\n    ClearSeparator,\n} from './styles';\nimport { SearchableFilterHeaderViewProps } from './types';\n\nfunction SearchableFilterHeaderView({\n    title,\n    isLoading,\n    hasSearch,\n    isDisabled,\n    disableSearch,\n    showSearchInput,\n    searchTerm,\n    onShowSearch,\n    onHideSearch,\n    onSearch,\n    onClear,\n    inputRef,\n}: SearchableFilterHeaderViewProps) {\n    return (\n        <Container>\n            {showSearchInput ? (\n                <InputContainer>\n                    <StyledInput\n                        inputRef={inputRef}\n                        value={searchTerm}\n                        onChange={onSearch}\n                        onExit={onHideSearch}\n                    />\n                    <SearchButtons>\n                        {!!searchTerm && <>\n                            <ClearButton\n                                onClick={onClear}\n                                data-test=\"filter-search-input-clear\"\n                            >\n                                Clear\n                            </ClearButton>\n                            <ClearSeparator />\n                        </>}\n                        <SearchClose\n                            onClick={onHideSearch}\n                            data-test=\"filter-search-input-close\"\n                        >\n                            <Close type='thin' />\n                        </SearchClose>\n                    </SearchButtons>\n                </InputContainer>\n            ) : isLoading ? (\n                <>\n                    <TitleSkeleton width={119} />\n                    <IconSkeleton size={16} />\n                </>\n            ) : (\n                <>\n                    <Title\n                        isDisabled={isDisabled}\n                        data-test={`${kebabCase(title)}-filter-title`}\n                    >\n                        {title}\n                    </Title>\n                    {hasSearch && (\n                        <ShowSearch onClick={onShowSearch} data-test=\"filter-search-icon\">\n                            <SearchIcon isDisabled={isDisabled || disableSearch} />\n                        </ShowSearch>\n                    )}\n                </>\n            )}\n        </Container>\n    );\n}\n\nexport default SearchableFilterHeaderView;","import { debounce } from 'lodash';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport { SEARCH_INPUT_DEBOUNCE_DELAY } from '../../../constants/variables/component-settings';\nimport { useFocus } from '../../../helpers/hooks/useFocus';\nimport { usePreviousData } from '../../../helpers/hooks/usePreviousData';\nimport { useFilterHeaderState } from './store/reducers';\nimport {\n    useSetFilterHeaderSearchActive,\n    useSetFilterHeaderSearchTerm\n} from './store/services';\nimport { SearchableFilterHeaderProps } from './types';\nimport SearchableFilterHeaderView from './view';\n\nfunction SearchableFilterHeader({\n    storeKey,\n    title,\n    isLoading,\n    hasSearch,\n    isDisabled,\n    disableSearch,\n    onSearch,\n}: SearchableFilterHeaderProps) {\n    const { searchTerm, isSearchActive } = useFilterHeaderState()[storeKey] ?? {};\n    const setSearchActive = useSetFilterHeaderSearchActive(storeKey);\n    const setSearchTerm = useSetFilterHeaderSearchTerm(storeKey);\n    const prevSearchTerm = usePreviousData(searchTerm);\n    const [inputRef, setFocus] = useFocus();\n\n    const handleShowSearch = useCallback(() => {\n        if (hasSearch && !isDisabled && !disableSearch) {\n            setSearchActive(true);\n        }\n    }, [hasSearch, isDisabled, disableSearch, setSearchActive]);\n\n    const handleHideSearch = useCallback(() => {\n        setSearchActive(false);\n    }, [setSearchActive]);\n\n    const handleClear = useCallback(() => {\n        setSearchTerm('');\n        setFocus();\n    }, [setFocus, setSearchTerm]);\n\n    const onSearchDebounced = useMemo(\n        () => debounce(onSearch, SEARCH_INPUT_DEBOUNCE_DELAY),\n        [onSearch]\n    );\n\n    useEffect(() => {\n        if ((!prevSearchTerm && !searchTerm) || prevSearchTerm === searchTerm) return;\n        onSearchDebounced(searchTerm!);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [searchTerm]);\n\n    return (\n        <SearchableFilterHeaderView\n            title={title}\n            isLoading={isLoading}\n            hasSearch={hasSearch}\n            isDisabled={isDisabled}\n            disableSearch={disableSearch}\n            showSearchInput={isSearchActive ?? false}\n            searchTerm={searchTerm ?? ''}\n            onShowSearch={handleShowSearch}\n            onHideSearch={handleHideSearch}\n            onSearch={setSearchTerm}\n            onClear={handleClear}\n            inputRef={inputRef}\n        />\n    );\n}\n\nexport default SearchableFilterHeader;","import SearchableFilterHeader from './controller';\n\nexport default SearchableFilterHeader;","import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n    width: 312px;\n    min-height: 132px;\n    border-radius: 4px;\n    border: solid 1px var(--ps-grey-4);\n`;","import { FilterHeader } from '../filter-header';\nimport SearchableFilterHeader from '../searchable-filter-header';\nimport { SearchableFilterHeaderProps } from '../searchable-filter-header/types';\nimport { Wrapper } from './styles';\nimport { FilterContainerViewProps } from './types';\n\nfunction FilterContainerView(props: FilterContainerViewProps) {\n    const { headerProps, children } = props;\n    const searchableHeaderProps = headerProps as SearchableFilterHeaderProps;\n\n    return (\n        <Wrapper>\n            {searchableHeaderProps.storeKey\n                ? <SearchableFilterHeader {...searchableHeaderProps} />\n                : <FilterHeader {...headerProps} />\n            } {children}\n        </Wrapper>\n    );\n}\n\nexport default FilterContainerView;","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    margin-top: 1px;\n    padding: 5px 24px;\n    max-height: 270px;\n    overflow: auto;\n    overflow-x: hidden;\n`;\n\nexport const SkeletonContainer = styled.div`\n    padding-top: 13px;\n`;\n\nexport const EmptyStateContainer = styled.div`\n    padding-top: 13px;\n`;\n","import { isEmpty } from 'lodash';\n\nimport { EmptyState } from '../../../../ui/components/EmptyStates';\nimport RadioButton from '../../../../ui/components/RadioButton';\nimport { FilterSkeleton } from '../../../../ui/components/Skeleton';\nimport NoReportingPractisSets from '../../../../ui/icons/NoReportingPractisSets';\nimport NoSearchResult from '../../../../ui/icons/NoSearchResult';\nimport { FilterContainer } from '../../filter-container';\nimport { SearchableFilterHeaderKey } from '../../searchable-filter-header/store/types';\nimport {\n    Container,\n    EmptyStateContainer,\n    SkeletonContainer\n} from './styles';\nimport { PractisSetFilterViewProps } from './types';\n\nfunction PractisSetFilterView(props: PractisSetFilterViewProps) {\n    const {\n        practisSetData,\n        loading,\n        isNoSearchResultState,\n        selectedTeamId,\n        selectedPractisSetId,\n        isDisabled,\n        onPractisSetSearch,\n        handleSelectPractisSet,\n    } = props;\n\n    return (\n        <FilterContainer\n            headerProps={{\n                storeKey: SearchableFilterHeaderKey.PRACTIS_SET,\n                title: 'Practis Set',\n                hasSearch: !isEmpty(practisSetData?.items),\n                onSearch: onPractisSetSearch,\n                isLoading: loading,\n                isDisabled: isDisabled,\n            }}\n        >\n            <Container>\n                {loading ? (\n                    <SkeletonContainer><FilterSkeleton /></SkeletonContainer>\n                ) : isEmpty(practisSetData?.items) ? (\n                    <EmptyStateContainer>\n                        <EmptyState\n                            fontSize={11}\n                            icon={\n                                isNoSearchResultState\n                                    ? NoSearchResult\n                                    : NoReportingPractisSets\n                            }\n                            iconStyle={{\n                                width: 32,\n                                height: 32,\n                                marginBottom: 4,\n                            }}\n                            dataTest={'no-practis-sets'}\n                        >\n                            {isNoSearchResultState ? (\n                                'No Search Results'\n                            ) : selectedTeamId ? (\n                                'No Practis Sets yet'\n                            ) : (\n                                <span data-test=\"select-team-to-see-practis-sets\">\n                                    Select the team to see Practis Sets\n                                </span>\n                            )}\n                        </EmptyState>\n                    </EmptyStateContainer>\n                ) : (\n                    practisSetData?.items.map(item => (\n                        <RadioButton\n                            key={item.practisSetId}\n                            handleChange={() =>\n                                handleSelectPractisSet(item.practisSetId)\n                            }\n                            checked={selectedPractisSetId === item.practisSetId}\n                            size={12}\n                            label={item.name}\n                            dataTest=\"practis-set-filter-item\"\n                            disabled={isDisabled}\n                        />\n                    ))\n                )}\n            </Container>\n        </FilterContainer>\n    );\n}\n\nexport default PractisSetFilterView;","import { PractisSetFilterState } from './types';\n\nexport const initialPractisSetFilterState: PractisSetFilterState = {\n    selectedPractisSetId: null,\n    isDisabled: false,\n};","import { Reducer } from 'redux';\nimport { useSelector } from 'react-redux';\n\nimport { ACTIONS, PractisSetFilterActions } from './actions';\nimport { initialPractisSetFilterState } from './constants';\nimport { PractisSetFilterState } from './types';\n\nexport const practisSetFilterReducer: Reducer<\n    PractisSetFilterState,\n    PractisSetFilterActions\n> = (state = initialPractisSetFilterState, action) => {\n    switch (action.type) {\n        case ACTIONS.SELECT_PRACTIS_SET:\n            return {\n                ...state,\n                selectedPractisSetId: action.selectedPractisSetId,\n            };\n        case ACTIONS.DISABLE_PRACTIS_SET_FILTER:\n            return {\n                ...state,\n                isDisabled: action.isDisabled,\n            }\n\n        default:\n            return state;\n    }\n};\n\nexport const usePractisSetFilterState = () =>\n    useSelector(state => state.practisSetFilterReducer);\n","import { useCallback, useEffect, useMemo } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport useQueryParamListener from '../../../../helpers/hooks/useQueryParamListener';\nimport { useSetQueryParam } from '../../../../helpers/hooks/useSetQueryParam';\nimport { useSearchTrainingPractisSets } from '../../../teams/store/services';\nimport { useSingleTeamFilterState } from '../single-team-filter/store/reducers';\nimport { initialSearchParams, PRACTIS_SET_QUERY_PARAM_NAME } from './constants';\nimport {\n    useClearSelectedPractisSet,\n    useSelectPractisSet,\n} from './store/services';\nimport PractisSetFilterView from './view';\nimport { useTrainerPractisSetState } from '../../../teams/store/states';\nimport { usePractisSetFilterState } from './store/reducers';\nimport { usePreviousData } from '../../../../helpers/hooks/usePreviousData';\nimport { useSetFilterHeaderSearchActive } from '../../searchable-filter-header/store/services';\nimport { useFilterHeaderState } from '../../searchable-filter-header/store/reducers';\nimport { SearchableFilterHeaderKey } from '../../searchable-filter-header/store/types';\n\nfunction PractisSetFilterController() {\n    const { selectedTeamId } = useSingleTeamFilterState();\n    const { data, loading } = useTrainerPractisSetState();\n    const prevSelectedTeamId = usePreviousData(selectedTeamId);\n\n    const { selectedPractisSetId, isDisabled } = usePractisSetFilterState();\n    const { searchTerm } = useFilterHeaderState()[SearchableFilterHeaderKey.PRACTIS_SET] ?? {}\n    const setSearchActive = useSetFilterHeaderSearchActive(SearchableFilterHeaderKey.PRACTIS_SET);\n    const clearSelectedPractisSet = useClearSelectedPractisSet();\n    const onSelectPractisSet = useSelectPractisSet();\n    const setQueryParam = useSetQueryParam();\n\n    const isNoSearchResultState = useMemo(\n        () => isEmpty(data?.items) && !!searchTerm && searchTerm.length > 0,\n        [data?.items, searchTerm]\n    );\n\n    const setSelectedPractisSetInStore = useCallback((practisSetId?: number | null) => {\n        if (practisSetId) {\n            onSelectPractisSet(practisSetId);\n        } else {\n            clearSelectedPractisSet();\n        }\n    }, [clearSelectedPractisSet, onSelectPractisSet]);\n\n    const setSelectedPractisSet = useCallback((practisSetId?: number) => {\n        setQueryParam(PRACTIS_SET_QUERY_PARAM_NAME, practisSetId?.toString() ?? '');\n        setSelectedPractisSetInStore(practisSetId);\n    }, [setQueryParam, setSelectedPractisSetInStore]);\n\n    useQueryParamListener(PRACTIS_SET_QUERY_PARAM_NAME, practisSetId => {\n        const id = practisSetId ? +practisSetId : null;\n        const isEqual = (!selectedPractisSetId && !id) || selectedPractisSetId === id;\n        if (!isEqual) {\n            setSelectedPractisSetInStore(id);\n        }\n    });\n\n    const searchTrainingPractisSets = useSearchTrainingPractisSets(\n        (selectedTeamId || 0).toString()\n    );\n\n    const searchByTeamId = useMemo(\n        () => selectedTeamId ? searchTrainingPractisSets : null,\n        [searchTrainingPractisSets, selectedTeamId]\n    );\n\n    const handleSearch = useCallback((searchTerm) => {\n        searchByTeamId?.({\n            ...initialSearchParams,\n            searchTerm,\n        });\n    }, [searchByTeamId]);\n\n    useEffect(() => {\n        if (selectedTeamId) {\n            // do not clear selected practis set on page load (prevSelectedTeamId is empty)\n            // as initially it's set from query parameter\n            if (prevSelectedTeamId) {\n                setSelectedPractisSet(undefined);\n                setSearchActive(false);\n            }\n            searchByTeamId?.(initialSearchParams);\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [selectedTeamId]);\n\n    return (\n        <PractisSetFilterView\n            practisSetData={data}\n            loading={loading}\n            isNoSearchResultState={isNoSearchResultState}\n            selectedTeamId={selectedTeamId}\n            selectedPractisSetId={selectedPractisSetId}\n            isDisabled={isDisabled}\n            onPractisSetSearch={handleSearch}\n            handleSelectPractisSet={setSelectedPractisSet}\n        />\n    );\n}\n\nexport default PractisSetFilterController;","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const initialSearchParams: SearchParams = {\n    searchTerm: '',\n    filters: [],\n    orderBy: null,\n    limit: 100000,\n    offset: 0,\n    totalCount: 0,\n    numberOfPages: 0,\n};\n\nexport const SINGLE_TEAM_QUERY_PARAM_NAME = 'team';","import styled from 'styled-components';\nimport NoSearchResult from '../../../../ui/icons/NoSearchResult';\n\nexport const Container = styled.div`\n    margin-top: 1px;\n    padding: 5px 24px;\n    max-height: 270px;\n    overflow: auto;\n`;\n\nexport const SkeletonContainer = styled.div`\n    padding-top: 13px;\n`;\n\nexport const EmptyStateContainer = styled.div`\n    padding-top: 13px;\n`;\n\nexport const StyledNoSearchResultIcon = styled(NoSearchResult)`\n    width: 32px !important;\n    font-size: 32px !important;\n    margin: 0 !important;\n`;","import { isEmpty } from 'lodash';\nimport { EmptyState } from '../../../../ui/components/EmptyStates';\n\nimport RadioButton from '../../../../ui/components/RadioButton';\nimport { FilterSkeleton } from '../../../../ui/components/Skeleton';\nimport NoSearchResult from '../../../../ui/icons/NoSearchResult';\nimport { FilterContainer } from '../../filter-container';\nimport { SearchableFilterHeaderKey } from '../../searchable-filter-header/store/types';\nimport {\n    Container,\n    SkeletonContainer,\n    EmptyStateContainer\n} from './styles';\nimport { SingleSelectTeamFilterViewProps } from './types';\n\nfunction SingleSelectTeamFilterView({\n    selectedTeamId, isLoading, myTeams, isDisabled, onTeamSearch, onTeamSelect\n}: SingleSelectTeamFilterViewProps) {\n    return (\n        <FilterContainer\n            headerProps={{\n                storeKey: SearchableFilterHeaderKey.SINGLE_TEAM,\n                title: 'Team',\n                hasSearch: true,\n                onSearch: onTeamSearch,\n                isLoading,\n                isDisabled\n            }}\n        >\n            <Container>\n                {isLoading ? (\n                    <SkeletonContainer><FilterSkeleton /></SkeletonContainer>\n                ) : isEmpty(myTeams?.items) ? (\n                    <EmptyStateContainer>\n                        <EmptyState\n                            fontSize={11}\n                            icon={NoSearchResult}\n                            iconStyle={{\n                                width: 32,\n                                height: 32,\n                                marginBottom: 4,\n                            }}\n                            dataTest=\"no-teams\"\n                        >\n                            No Search Results\n                        </EmptyState>\n                    </EmptyStateContainer>\n                ) : (\n                    myTeams?.items.map(item => (\n                        <RadioButton\n                            key={item.id}\n                            handleChange={() => onTeamSelect(item.id!)}\n                            checked={selectedTeamId === item.id}\n                            size={12}\n                            label={item.name}\n                            dataTest=\"team-filter-item\"\n                            disabled={isDisabled}\n                        />\n                    ))\n                )}\n            </Container>\n        </FilterContainer>\n    );\n}\n\nexport default SingleSelectTeamFilterView;","import { useCallback, useEffect } from 'react';\n\nimport useQueryParamListener from '../../../../helpers/hooks/useQueryParamListener';\nimport { useSetQueryParam } from '../../../../helpers/hooks/useSetQueryParam';\n\nimport { useSearchTeamsService } from '../../../teams/store/services';\nimport { useTeamsState } from '../../../teams/store/states';\nimport { initialSearchParams, SINGLE_TEAM_QUERY_PARAM_NAME } from './constants';\nimport { useSingleTeamFilterState } from './store/reducers';\nimport { useClearSelectedTeam, useSelectSingleTeam } from './store/services';\nimport SingleSelectTeamFilterView from './view';\n\nfunction SingleSelectTeamFilterController() {\n    const searchTeams = useSearchTeamsService();\n    const selectSingeTeam = useSelectSingleTeam();\n    const clearSelectedTeam = useClearSelectedTeam();\n    const setQueryParam = useSetQueryParam();\n\n    const { loading, myTeams } = useTeamsState();\n    const { selectedTeamId, isDisabled } = useSingleTeamFilterState();\n\n    const setSelectedTeamInStore = useCallback((teamId?: number | null) => {\n        if (teamId) {\n            selectSingeTeam(teamId);\n        } else {\n            clearSelectedTeam();\n        }\n    }, [clearSelectedTeam, selectSingeTeam]);\n\n    const setSelectedTeam = useCallback((teamId?: number) => {\n        setQueryParam(SINGLE_TEAM_QUERY_PARAM_NAME, teamId?.toString() ?? '');\n        setSelectedTeamInStore(teamId);\n    }, [setQueryParam, setSelectedTeamInStore]);\n\n    useQueryParamListener(SINGLE_TEAM_QUERY_PARAM_NAME, teamId => {\n        const id = teamId ? +teamId : null;\n        const isEqual = (!selectedTeamId && !id) || selectedTeamId === id;\n        if (!isEqual) {\n            setSelectedTeamInStore(id);\n        }\n    });\n\n    const handleTeamSearch = useCallback((searchTerm: string) => {\n        searchTeams({\n            ...initialSearchParams,\n            searchTerm,\n        });\n    }, [searchTeams]);\n\n    useEffect(() => {\n        searchTeams(initialSearchParams);\n    }, [searchTeams]);\n\n    return (\n        <SingleSelectTeamFilterView\n            selectedTeamId={selectedTeamId}\n            isLoading={loading}\n            myTeams={myTeams}\n            isDisabled={isDisabled}\n            onTeamSearch={handleTeamSearch}\n            onTeamSelect={setSelectedTeam}\n        />\n    );\n}\n\nexport default SingleSelectTeamFilterController;","import { Action } from 'redux';\n\nexport enum ACTIONS {\n    SELECT_MULTIPLE_TEAMS = 'SELECT_MULTIPLE_TEAMS',\n    DISABLE_MULTIPLE_TEAMS_FILTER = 'DISABLE_MULTIPLE_TEAMS_FILTER'\n}\n\nexport type SelectMultipleTeamsAction = Action<ACTIONS.SELECT_MULTIPLE_TEAMS> & {\n    teamIds: number[] | null;\n};\n\nexport const selectMultipleTeams = (\n    teamIds: number[] | null\n): SelectMultipleTeamsAction => ({\n    type: ACTIONS.SELECT_MULTIPLE_TEAMS,\n    teamIds,\n});\n\nexport type DisableMultipleTeamsFilterAction = Action<ACTIONS.DISABLE_MULTIPLE_TEAMS_FILTER> & {\n    isDisabled: boolean;\n};\n\nexport const disableMultipleTeamsFilter = (\n    isDisabled: boolean\n): DisableMultipleTeamsFilterAction => ({\n    type: ACTIONS.DISABLE_MULTIPLE_TEAMS_FILTER,\n    isDisabled,\n});\n\nexport type MultipleTeamsFilterActions = SelectMultipleTeamsAction | DisableMultipleTeamsFilterAction;","import { SearchParams } from '../../../../constants/interfaces/filters';\n\nexport const initialSearchParams: SearchParams = {\n    searchTerm: '',\n    filters: [],\n    orderBy: null,\n    limit: 100000,\n    offset: 0,\n    totalCount: 0,\n    numberOfPages: 0,\n};\n\nexport const TEAMS_QUERY_PARAM_NAME = 'teams';","import { MultipleTeamsFilterState } from './types';\n\nexport const initialMultipleTeamsFilterState: MultipleTeamsFilterState = {\n    selectedTeamIds: null,\n    isDisabled: false,\n};","import { Reducer } from 'redux';\nimport { useSelector } from 'react-redux';\n\nimport { ACTIONS, MultipleTeamsFilterActions } from './actions';\nimport { initialMultipleTeamsFilterState } from './constants';\nimport { MultipleTeamsFilterState } from './types';\n\nexport const multipleTeamsFilterReducer: Reducer<\n    MultipleTeamsFilterState,\n    MultipleTeamsFilterActions\n> = (state = initialMultipleTeamsFilterState, action) => {\n    switch (action.type) {\n        case ACTIONS.SELECT_MULTIPLE_TEAMS:\n            return {\n                ...state,\n                selectedTeamIds: action.teamIds,\n            };\n        case ACTIONS.DISABLE_MULTIPLE_TEAMS_FILTER:\n            return {\n                ...state,\n                isDisabled: action.isDisabled,\n            }\n        default:\n            return state;\n    }\n};\n\nexport const useMultipleTeamsFilterState = () =>\n    useSelector(state => state.multipleTeamsFilter);","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useSetFilterHeaderSearchActive } from '../../../searchable-filter-header/store/services';\nimport { SearchableFilterHeaderKey } from '../../../searchable-filter-header/store/types';\nimport {\n    disableMultipleTeamsFilter,\n    selectMultipleTeams,\n} from './actions';\n\nexport const useSelectMultipleTeams = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (selectedTeamIds: number[]) => {\n            dispatch(selectMultipleTeams(selectedTeamIds));\n        },\n        [dispatch]\n    );\n};\n\nexport const useClearMultipleTeams = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        () => {\n            dispatch(selectMultipleTeams([]));\n        },\n        [dispatch]\n    );\n};\n\nexport const useDisableMultipleTeamsFilter = () => {\n    const dispatch = useDispatch();\n\n    return useCallback((isDisabled: boolean) => {\n        dispatch(disableMultipleTeamsFilter(isDisabled));\n    }, [dispatch]);\n}\n\nexport const useClearMultipleTeamsFilter = () => {\n    const clearMultipleTeams = useClearMultipleTeams();\n    const setMultipleTeamsSearchActive = useSetFilterHeaderSearchActive(SearchableFilterHeaderKey.MULTIPLE_TEAMS);\n\n    return useCallback(() => {\n        clearMultipleTeams();\n        setMultipleTeamsSearchActive(false);\n    }, [clearMultipleTeams, setMultipleTeamsSearchActive]);\n};\n","import styled from 'styled-components';\nimport Checkbox from '../../../../ui/components/Checkbox';\n\nexport const Container = styled.div`\n    padding: 0 4px 16px 4px;\n`;\n\nexport const SkeletonContainer = styled.div`\n    padding: 16px 20px 0 20px;\n`;\n\nexport const EmptyStateContainer = styled.div`\n    padding-top: 19px;\n`;\n\nexport const CounterContainer = styled.div`\n    font-size: 11px;\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    padding: 4px 20px 4px 20px;\n`;\n\nexport const SelectionCounter = styled.div`\n    color: var(--ps-grey-1);\n    font-weight: 500;\n`;\n\nexport const ToggleAllSelection = styled.span<{ isDisabled: boolean }>`\n    cursor: ${props => props.isDisabled ? 'default' : 'pointer'};\n    color: ${props => props.isDisabled ? 'var(--ps-grey-2)' : 'var(--ps-blue-main)'};\n    font-weight: ${props => props.isDisabled ? '400' : '500'};\n`;\n\nexport const ListContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    height: auto;\n    max-height: 266px;\n    overflow: auto;\n    padding: 0 20px;\n`;\n\nexport const StyledCheckbox = styled(Checkbox)`\n    padding: 4px 0;\n`","import { isEmpty } from 'lodash';\nimport { Variables } from '../../../../theme/variables';\nimport { EmptyState } from '../../../../ui/components/EmptyStates';\nimport { FilterSkeleton } from '../../../../ui/components/Skeleton';\nimport NoSearchResult from '../../../../ui/icons/NoSearchResult';\nimport { FilterContainer } from '../../filter-container';\nimport { SearchableFilterHeaderKey } from '../../searchable-filter-header/store/types';\nimport {\n    Container,\n    SkeletonContainer,\n    EmptyStateContainer,\n    ListContainer,\n    StyledCheckbox,\n    CounterContainer,\n    SelectionCounter,\n    ToggleAllSelection,\n} from './styles';\nimport { MultipleSelectTeamsFilterViewProps } from './types';\nimport { pluralize } from '../../../../helpers/functions/pluralize';\n\nfunction MultipleSelectTeamsFilterView({\n    loading, myTeams, selectedTeamIds, isDisabled, onTeamSearch, onTeamToggle, onAllToggle\n}: MultipleSelectTeamsFilterViewProps) {\n    const isAllSelected = selectedTeamIds?.length === myTeams?.count;\n    return (\n        <FilterContainer\n            headerProps={{\n                storeKey: SearchableFilterHeaderKey.MULTIPLE_TEAMS,\n                title: 'Teams',\n                hasSearch: true,\n                onSearch: onTeamSearch,\n                isLoading: loading,\n                isDisabled,\n            }}\n        >\n            <Container>\n                {loading ? (\n                    <SkeletonContainer>\n                        <FilterSkeleton />\n                    </SkeletonContainer>\n                ) : isEmpty(myTeams?.items) ? (\n                    <EmptyStateContainer>\n                        <EmptyState\n                            fontSize={11}\n                            icon={NoSearchResult}\n                            iconStyle={{\n                                width: 32,\n                                height: 32,\n                                marginBottom: 4,\n                            }}\n                            dataTest=\"no-teams\"\n                        >\n                            No Search Results\n                        </EmptyState>\n                    </EmptyStateContainer>\n                ) : (\n                    <>\n                        <CounterContainer>\n                            <SelectionCounter data-test=\"teams-selection-counter\">\n                                {selectedTeamIds?.length\n                                    ? `${pluralize(\n                                          selectedTeamIds.length,\n                                          'item'\n                                      )} selected`\n                                    : 'No Items selected'}\n                            </SelectionCounter>\n                            <ToggleAllSelection\n                                onClick={onAllToggle}\n                                data-test={\n                                    isAllSelected\n                                        ? 'teams-unselect-all'\n                                        : 'teams-select-all'\n                                }\n                                isDisabled={isDisabled}\n                            >\n                                {isAllSelected ? 'Unselect All' : 'Select All'}\n                            </ToggleAllSelection>\n                        </CounterContainer>\n                        <ListContainer>\n                            {myTeams?.items.map(item => {\n                                const isSelected =\n                                    selectedTeamIds?.includes(item.id!) ??\n                                    false;\n                                return (\n                                    <StyledCheckbox\n                                        key={item.id}\n                                        handleChange={() =>\n                                            onTeamToggle(item.id!)\n                                        }\n                                        checked={isSelected}\n                                        size={12}\n                                        label={item.name}\n                                        fontColor={isDisabled ? Variables.Colors.steelGrey : Variables.Colors.black}\n                                        labelStyles={{\n                                            fontWeight: isSelected\n                                                ? 'bold'\n                                                : 'normal',\n                                        }}\n                                        dataTest=\"team-filter-item-checkbox\"\n                                        disabled={isDisabled}\n                                        disabledCheckedBackground={Variables.Colors.cloudyBlue}\n                                    />\n                                );\n                            })}\n                        </ListContainer>\n                    </>\n                )}\n            </Container>\n        </FilterContainer>\n    );\n}\n\nexport default MultipleSelectTeamsFilterView;","import { useCallback, useEffect } from 'react';\n\nimport { useSearchTeamsService } from '../../../teams/store/services';\nimport { useTeamsState } from '../../../teams/store/states';\nimport { initialSearchParams, TEAMS_QUERY_PARAM_NAME } from './constants';\nimport { useMultipleTeamsFilterState } from './store/reducers';\nimport {\n    useClearMultipleTeams,\n    useSelectMultipleTeams,\n} from './store/services';\nimport useQueryParamListener from '../../../../helpers/hooks/useQueryParamListener';\nimport { useSetQueryParam } from '../../../../helpers/hooks/useSetQueryParam';\nimport MultipleSelectTeamsFilterView from './view';\nimport { isEqual } from 'lodash';\n\nfunction MultipleSelectTeamsFilterController() {\n    const searchTeams = useSearchTeamsService();\n    const selectMultipleTeams = useSelectMultipleTeams();\n    const clearMultipleTeams = useClearMultipleTeams();\n    const { loading, myTeams } = useTeamsState();\n    const { selectedTeamIds, isDisabled } = useMultipleTeamsFilterState();\n    const setQueryParam = useSetQueryParam();\n\n    const setSelectedTeamsInStore = useCallback((teamIds: number[]) => {\n        if (teamIds.length) {\n            selectMultipleTeams(teamIds);\n        } else {\n            clearMultipleTeams();\n        }\n    }, [clearMultipleTeams, selectMultipleTeams]);\n\n    const setSelectedTeams = useCallback((teamIds: number[]) => {\n        const paramValue = teamIds.join(',');\n        setQueryParam(TEAMS_QUERY_PARAM_NAME, paramValue);\n        setSelectedTeamsInStore(teamIds);\n    }, [setQueryParam, setSelectedTeamsInStore]);\n\n    const handleTeamSearch = useCallback(\n        (searchTerm: string) => {\n            searchTeams({ ...initialSearchParams, searchTerm });\n        },\n        [searchTeams]\n    );\n\n    const handleTeamToggle = useCallback(\n        (teamId: number) => {\n            const teamIds = selectedTeamIds ?? [];\n            const newTeamIds = teamIds.includes(teamId)\n                ? teamIds.filter(id => id !== teamId)\n                : teamIds.concat(teamId);\n            setSelectedTeams(newTeamIds);\n        },\n        [selectedTeamIds, setSelectedTeams]\n    );\n\n    const handleAllToggle = useCallback(() => {\n        if (isDisabled) return;\n        if (selectedTeamIds && selectedTeamIds?.length === myTeams?.count) {\n            setSelectedTeams([]);\n        } else if (myTeams) {\n            setSelectedTeams(myTeams.items.map(item => item.id!));\n        }\n    }, [isDisabled, myTeams, selectedTeamIds, setSelectedTeams]);\n\n    useQueryParamListener(TEAMS_QUERY_PARAM_NAME, teamIds => {\n        const ids = teamIds?.length ? teamIds.split(',').map(id => Number(id)) : [];\n        if (!isEqual(ids, selectedTeamIds)) {\n            setSelectedTeamsInStore(ids);\n        }\n    });\n\n    useEffect(() => {\n        searchTeams(initialSearchParams);\n    }, [searchTeams]);\n\n    return (\n        <MultipleSelectTeamsFilterView\n            loading={loading}\n            myTeams={myTeams}\n            selectedTeamIds={selectedTeamIds}\n            isDisabled={isDisabled}\n            onTeamSearch={handleTeamSearch}\n            onTeamToggle={handleTeamToggle}\n            onAllToggle={handleAllToggle}\n        />\n    );\n}\n\nexport default MultipleSelectTeamsFilterController;","import { Action } from 'redux';\n\nexport enum ACTIONS {\n    DISABLE_LABELS_FILTER = 'DISABLE_LABELS_FILTER'\n}\n\nexport type DisableLabelsFilterAction = Action<ACTIONS.DISABLE_LABELS_FILTER> & {\n    isDisabled: boolean;\n};\n\nexport const disableLabelsFilter = (\n    isDisabled: boolean\n): DisableLabelsFilterAction => ({\n    type: ACTIONS.DISABLE_LABELS_FILTER,\n    isDisabled,\n});\n\nexport type LablesFilterActions = DisableLabelsFilterAction;","export const LABELS_QUERY_PARAM_NAME = 'labels';","import { useSelector } from \"react-redux\";\nimport { compose, Reducer } from \"redux\";\nimport { withLabelsInitialState, withLabelsReducer } from \"../../../../portableLabels/store/hors/withLabels\";\nimport { ACTIONS, LablesFilterActions } from \"./actions\";\nimport { LabelsFilterState } from \"./types\";\n\nconst labelsFilterBaseReducer: Reducer<LabelsFilterState, any> = (\n    state = withLabelsInitialState({ isDisabled: false }, 'labelsFilter'),\n    action: LablesFilterActions\n): LabelsFilterState => {\n    switch (action.type) {\n        case ACTIONS.DISABLE_LABELS_FILTER:\n            return {\n                ...state,\n                isDisabled: action.isDisabled,\n            }\n        default:\n            return state;\n    }\n};\n\nexport const labelsFilterReducer = compose<Reducer<LabelsFilterState, any>>(\n    withLabelsReducer({ reducerName: 'labelsFilter' })\n)(labelsFilterBaseReducer);\n\nexport const useLabelsFilterState = () =>\n    useSelector(state => state.labelsFilter);","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    padding: 0 4px 16px 4px;\n`;\n\nexport const SkeletonContainer = styled.div`\n    padding: 16px 20px 0 20px;\n`;\n\nexport const EmptyStateContainer = styled.div`\n    padding-top: 19px;\n`;\n\nexport const CounterContainer = styled.div`\n    font-size: 11px;\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    padding: 4px 20px;\n`;\n\nexport const SelectionCounter = styled.div`\n    color: var(--ps-grey-1);\n    font-weight: 500;\n`;\n\nexport const ToggleAllSelection = styled.span<{ isDisabled: boolean }>`\n    cursor: ${props => props.isDisabled ? 'default' : 'pointer'};\n    color: ${props => props.isDisabled ? 'var(--ps-grey-2)' : 'var(--ps-blue-main)'};\n    font-weight: ${props => props.isDisabled ? '400' : '500'};\n`;\n\nexport const ListContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    height: auto;\n    max-height: 266px;\n    overflow: auto;\n    padding: 0 20px;\n`;","import styled from 'styled-components';\nimport Checkbox from '../../../../../../ui/components/Checkbox';\n\nexport const ChildContainer = styled.div`\n    margin-left: 15px;\n    width: calc(100% - 15px);\n`;\n\nexport const StyledCheckbox = styled(Checkbox)`\n    height: 100%;\n`;\n\nexport const Container = styled.div`\n    padding: 4px 0;\n    display: flex;\n    align-items: center;\n    width: 100%;\n`;\n\nexport const ArrowContainer = styled.div`\n    width: 8px;\n    margin-right: 9px;\n    cursor: pointer;\n`;\n\nexport const CollapseArrow = styled.div`\n    height: 8px;\n    display: flex;\n    color: var(--ps-grey-2)\n`;\n\nexport const NameInput = styled.input<{ isSelected: boolean, isDisabled: boolean, hasChildren: boolean }>`\n    color: ${props => props.isDisabled ? 'var(--ps-grey-1)' : 'var(--ps-black-main)'};\n    font-size: 13px;\n    font-weight: ${props => props.isSelected ? 'bold' : 'normal'};\n    text-overflow: ellipsis;\n    margin-left: 8px;\n    border: 0;\n    white-space: nowrap;\n    cursor: ${props => props.hasChildren ? 'pointer' : 'default'};\n    width: 100%;\n`;\n","import { Variables } from '../../../../../../theme/variables';\nimport TriangleDown from '../../../../../../ui/icons/TriangleDown';\nimport TriangleRight from '../../../../../../ui/icons/TriangleRight';\nimport {\n    Container,\n    StyledCheckbox,\n    ArrowContainer,\n    CollapseArrow,\n    NameInput,\n    ChildContainer,\n} from './styles';\nimport { LabelsFilterItemViewProps } from './types';\n\nfunction LabelsFilterItemView({\n    label,\n    hasChildren,\n    children,\n    isSelected,\n    isPartiallySelected,\n    isOpen,\n    isDisabled,\n    onToggle,\n    onToggleCollapse,\n}: LabelsFilterItemViewProps) {\n    return (\n        <>\n            <Container\n                onClick={e => {\n                    e.stopPropagation();\n                    onToggleCollapse(label.id);\n                }}\n                data-test=\"label-filter-item\"\n            >\n                <ArrowContainer>\n                    {hasChildren && (\n                        <CollapseArrow data-test={`label-filter-item-${isOpen ? 'expanded' : 'collapsed'}-arrow`}>\n                            {isOpen ? (\n                                <TriangleDown />\n                            ) : (\n                                <TriangleRight />\n                            )}\n                        </CollapseArrow>\n                    )}\n                </ArrowContainer>\n                <StyledCheckbox\n                    checked={isSelected || isPartiallySelected}\n                    partial={isPartiallySelected}\n                    handleChange={onToggle}\n                    size={12}\n                    border=\"var(--ps-grey-2)\"\n                    dataTest=\"label-filter-item-checkbox\"\n                    disabled={isDisabled}\n                    disabledCheckedBackground={Variables.Colors.cloudyBlue}\n                />\n                <NameInput\n                    isSelected={isSelected || isPartiallySelected}\n                    isDisabled={isDisabled}\n                    hasChildren={hasChildren}\n                    readOnly={true}\n                    value={label.name}\n                    title={label.name}\n                    data-test=\"label-filter-item-name\"\n                />\n            </Container>\n            {!!children && <ChildContainer>{children}</ChildContainer>}\n        </>\n    );\n}\n\nexport default LabelsFilterItemView;\n","import { useHandleSelectLabels } from '../../../../../labels/tools';\nimport LabelsFilterItemView from './view'\nimport { LabelsFilterItemProps } from './types';\nimport { useCallback } from 'react';\n\nfunction LabelsFilterItemController({\n    label,\n    allLabels,\n    openLabels,\n    selectedLabels,\n    isDisabled,\n    onToggleCollapse,\n    onSelect,\n}: LabelsFilterItemProps) {\n    const handleSelectLabels = useHandleSelectLabels();\n\n    const isSelected = selectedLabels.includes(label.id);\n    const isPartiallySelected = selectedLabels.includes(-label.id);\n    const isOpen = openLabels.includes(label.id);\n    const hasChildren = !!label.children && label.children.length > 0;\n\n    const handleToggle = useCallback(() => {\n        onSelect(\n            handleSelectLabels(label, selectedLabels, allLabels)\n        );\n    }, [allLabels, handleSelectLabels, label, selectedLabels, onSelect]);\n\n    return (\n        <>\n            <LabelsFilterItemView\n                label={label}\n                hasChildren={hasChildren}\n                isSelected={isSelected}\n                isPartiallySelected={isPartiallySelected}\n                isOpen={isOpen}\n                isDisabled={isDisabled}\n                onToggle={handleToggle}\n                onToggleCollapse={onToggleCollapse}\n            >\n                {hasChildren && isOpen && (\n                    label.children!.map((childLabel) => (\n                        <LabelsFilterItemController\n                            key={childLabel.id}\n                            label={childLabel}\n                            allLabels={allLabels}\n                            openLabels={openLabels}\n                            selectedLabels={selectedLabels}\n                            onToggleCollapse={onToggleCollapse}\n                            onSelect={onSelect}\n                            isDisabled={isDisabled}\n                        />\n                    ))\n                )}\n            </LabelsFilterItemView>\n        </>\n    );\n}\n\nexport default LabelsFilterItemController;","import { isEmpty } from 'lodash';\nimport { EmptyState } from '../../../../ui/components/EmptyStates';\nimport { FilterSkeleton } from '../../../../ui/components/Skeleton';\nimport NoSearchResult from '../../../../ui/icons/NoSearchResult';\nimport { FilterContainer } from '../../filter-container';\nimport { LabelsFilterViewProps } from './types';\nimport {\n    Container,\n    SkeletonContainer,\n    EmptyStateContainer,\n    ListContainer,\n    CounterContainer,\n    SelectionCounter,\n    ToggleAllSelection,\n} from './styles';\nimport { LabelsFilterItem } from './components/labels-filter-item';\nimport NoLabels from '../../../../ui/icons/NoLabels';\nimport { pluralize } from '../../../../helpers/functions/pluralize';\nimport { SearchableFilterHeaderKey } from '../../searchable-filter-header/store/types';\n\nfunction LabelsFilterView({\n    loading,\n    labels,\n    allLabels,\n    openLabels,\n    selectedLabels,\n    isAllSelected,\n    isInSearch,\n    isDisabled,\n    onToggleCollapse,\n    onSelect,\n    onToggleAll,\n    onSearch,\n}: LabelsFilterViewProps) {\n    return (\n        <FilterContainer\n            headerProps={{\n                storeKey: SearchableFilterHeaderKey.LABELS,\n                title: 'Labels',\n                hasSearch: true,\n                isDisabled,\n                disableSearch: isEmpty(labels) && !isInSearch,\n                onSearch: onSearch,\n                isLoading: loading,\n            }}\n        >\n            <Container>\n                {loading ? (\n                    <SkeletonContainer>\n                        <FilterSkeleton />\n                    </SkeletonContainer>\n                ) : isEmpty(labels) ? (\n                    <EmptyStateContainer>\n                        <EmptyState\n                            fontSize={11}\n                            icon={isInSearch ? NoSearchResult : NoLabels}\n                            iconStyle={{\n                                width: 32,\n                                height: 32,\n                                marginBottom: 4,\n                            }}\n                            dataTest=\"no-labels\"\n                        >\n                            {isInSearch ? 'No Search Results' : 'No Labels yet'}\n                        </EmptyState>\n                    </EmptyStateContainer>\n                ) : (\n                    <>\n                        <CounterContainer>\n                            <SelectionCounter data-test=\"labels-selection-counter\">\n                                {selectedLabels?.length\n                                    ? `${pluralize(\n                                          selectedLabels.length,\n                                          'item'\n                                      )} selected`\n                                    : 'No Items selected'}\n                            </SelectionCounter>\n                            <ToggleAllSelection\n                                onClick={onToggleAll}\n                                data-test={\n                                    isAllSelected\n                                        ? 'labels-unselect-all'\n                                        : 'labels-select-all'\n                                }\n                                isDisabled={isDisabled}\n                            >\n                                {isAllSelected ? 'Unselect All' : 'Select All'}\n                            </ToggleAllSelection>\n                        </CounterContainer>\n                        <ListContainer>\n                            {labels.map(label => {\n                                return (\n                                    <LabelsFilterItem\n                                        allLabels={allLabels}\n                                        key={label.id}\n                                        label={label}\n                                        openLabels={openLabels}\n                                        selectedLabels={selectedLabels}\n                                        isDisabled={isDisabled}\n                                        onSelect={onSelect}\n                                        onToggleCollapse={onToggleCollapse}\n                                    />\n                                );\n                            })}\n                        </ListContainer>\n                    </>\n                )}\n            </Container>\n        </FilterContainer>\n    );\n}\n\nexport default LabelsFilterView;","import { useCallback, useMemo, useState } from 'react';\nimport { compose } from 'redux';\nimport { Label } from '../../../../constants/interfaces/Label';\nimport { listToTree } from '../../../../helpers/functions/list-to-tree';\nimport { treeToArray } from '../../../../helpers/functions/tree-to-list';\nimport useQueryParamListener from '../../../../helpers/hooks/useQueryParamListener';\nimport { useSetQueryParam } from '../../../../helpers/hooks/useSetQueryParam';\nimport { filterLabels, sortLabels } from '../../../labels/tools';\nimport {\n    useResetCollapseAllLabels,\n    useSelectLabels,\n    useToggleCollapseAllLabels,\n    useToggleCollapseLabel,\n} from '../../../portableLabels/store/hors/withLabels/services';\n import { useLabelsState } from '../../../portableLabels/store/hors/withLabels/states';\n import { usePortableLabelsState } from '../../../portableLabels/store/states';\nimport { useFilterHeaderState } from '../../searchable-filter-header/store/reducers';\nimport { SearchableFilterHeaderKey } from '../../searchable-filter-header/store/types';\nimport { LABELS_QUERY_PARAM_NAME } from './constants';\nimport { useLabelsFilterState } from './store/reducers';\nimport LabelsFilterView from './view';\nimport { isEqual } from 'lodash';\n\nfunction LabelsFilterController() {\n    const { selected: selectedLabels, collapsed: openLabels } = useLabelsState();\n    const { isDisabled } = useLabelsFilterState();\n    const { data, loading } = usePortableLabelsState();\n    const { searchTerm } = useFilterHeaderState()[SearchableFilterHeaderKey.LABELS] ?? {};\n    const toggleCollapse = useToggleCollapseLabel();\n    const toggleCollapseAll = useToggleCollapseAllLabels();\n    const resetCollapsed = useResetCollapseAllLabels()  \n    const select = useSelectLabels();\n    const setQueryParam = useSetQueryParam();\n\n    const [processedIds, setProcessedIds] = useState<number[]>([]);\n\n    const processedLabels = useMemo(() => {\n        const result = compose<Label[]>(\n            filterLabels(searchTerm ?? ''),\n            sortLabels\n        )(listToTree(data?.items));\n\n        if (result.length > 0) {\n            const filteredAndSortedLabelsArray = treeToArray(result);\n            const processedDataIds = filteredAndSortedLabelsArray.map((item: any) => item.id!)\n            setProcessedIds(processedDataIds);\n        }\n\n        return result;\n    }, [data?.items, searchTerm]);\n\n    const isAllSelected = selectedLabels.length === processedIds.length;\n    const isInSearch = !!searchTerm && searchTerm.length > 0;\n\n    const setSelectedLabels = useCallback((labelIds: number[]) => {\n        const paramValue = labelIds.join(',');\n        setQueryParam(LABELS_QUERY_PARAM_NAME, paramValue);\n        select(labelIds);\n    }, [select, setQueryParam]);\n\n    const handleToggleAll = useCallback(() => {\n        if (isDisabled) return;\n\n        if (isAllSelected) {\n            resetCollapsed();\n            setSelectedLabels([]);\n        } else {\n            if (searchTerm) {\n                setSelectedLabels(processedIds);\n            }\n            else {\n                setSelectedLabels(processedIds);\n            }\n        }\n    }, [isDisabled, isAllSelected, resetCollapsed, setSelectedLabels, searchTerm, processedIds]);\n\n    const handleSearch = useCallback((term: string) => {\n        if (term) {\n            toggleCollapseAll();\n        }\n    }, [toggleCollapseAll]);\n\n    useQueryParamListener(LABELS_QUERY_PARAM_NAME, labelIds => {\n        const ids = labelIds?.length ? labelIds.split(',').map(id => Number(id)) : []\n        if (!isEqual(selectedLabels, ids)) {\n            select(ids);\n        }\n    });\n\n    return (\n        <LabelsFilterView\n            loading={loading}\n            labels={processedLabels}\n            allLabels={data.items}\n            openLabels={openLabels}\n            selectedLabels={selectedLabels}\n            isAllSelected={isAllSelected}\n            isInSearch={isInSearch}\n            isDisabled={isDisabled}\n            onToggleCollapse={toggleCollapse}\n            onSelect={setSelectedLabels}\n            onToggleAll={handleToggleAll}\n            onSearch={handleSearch}\n        />\n    );\n}\n\nexport default LabelsFilterController;","import { Action } from 'redux';\n\nexport enum ACTIONS {\n    SELECT_YEAR = 'SELECT_YEAR',\n    SELECT_MONTH = 'SELECT_MONTH',\n    CLEAR_YEAR_AND_MONTH = 'CLEAR_YEAR_AND_MONTH',\n    DISABLE_MONTH_FILTER = 'DISABLE_MONTH_FILTER'\n}\n\nexport type SelectYearAction = Action<ACTIONS.SELECT_YEAR> & {\n    year: number;\n};\n\nexport const selectYear = (\n    year: number\n): SelectYearAction => ({\n    type: ACTIONS.SELECT_YEAR,\n    year,\n});\n\nexport type SelectMonthAction = Action<ACTIONS.SELECT_MONTH> & {\n    year: number;\n    month: number;\n};\n\nexport const selectMonth = (\n    year: number,\n    month: number\n): SelectMonthAction => ({\n    type: ACTIONS.SELECT_MONTH,\n    year,\n    month\n});\n\nexport type ClearYearAndMonthAction = Action<ACTIONS.CLEAR_YEAR_AND_MONTH> & {};\n\nexport const clearYearAndMonth = (\n): ClearYearAndMonthAction => ({\n    type: ACTIONS.CLEAR_YEAR_AND_MONTH,\n});\n\nexport type DisableMonthFilterAction = Action<ACTIONS.DISABLE_MONTH_FILTER> & {\n    isDisabled: boolean;\n};\n\nexport const disableMonthFilter = (\n    isDisabled: boolean\n): DisableMonthFilterAction => ({\n    type: ACTIONS.DISABLE_MONTH_FILTER,\n    isDisabled,\n});\n\nexport type MonthFilterActions = SelectYearAction\n    | SelectMonthAction\n    | ClearYearAndMonthAction\n    | DisableMonthFilterAction;","import { Reducer } from 'redux';\nimport { useSelector } from 'react-redux';\n\nimport { ACTIONS, MonthFilterActions } from './actions';\nimport { MonthFilterState } from './types';\n\nexport const monthFilterReducer: Reducer<\n    MonthFilterState,\n    MonthFilterActions\n> = (state = { isDisabled: false }, action) => {\n    switch (action.type) {\n        case ACTIONS.SELECT_YEAR:\n            return {\n                ...state,\n                currentYear: action.year,\n            };\n        case ACTIONS.SELECT_MONTH:\n            return {\n                ...state,\n                selectedMonth: action.month,\n                selectedYear: action.year,\n            };\n        case ACTIONS.CLEAR_YEAR_AND_MONTH:\n            return {\n                ...state,\n                currentYear: undefined,\n                selectedMonth: undefined,\n                selectedYear: undefined,\n            };\n        case ACTIONS.DISABLE_MONTH_FILTER:\n            return {\n                ...state,\n                isDisabled: action.isDisabled,\n            }\n        default:\n            return state;\n    }\n};\n\nexport const useMonthFilterState = () =>\n    useSelector(state => state.monthFilter);\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport {\n    selectYear,\n    selectMonth,\n    clearYearAndMonth,\n    disableMonthFilter\n} from './actions';\n\nexport const useSelectYear = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (year: number) => {\n            dispatch(selectYear(year));\n        },\n        [dispatch]\n    );\n};\n\nexport const useSelectMonth = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (year: number, month: number) => {\n            dispatch(selectMonth(year, month));\n        },\n        [dispatch]\n    );\n};\n\nexport const useClearYearAndMonth = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(clearYearAndMonth());\n    }, [dispatch]);\n};\n\nexport const useDisableMonthFilter = () => {\n    const dispatch = useDispatch();\n\n    return useCallback((isDisabled: boolean) => {\n        dispatch(disableMonthFilter(isDisabled));\n    }, [dispatch]);\n}","import styled from 'styled-components';\n\nexport const Container = styled.div<{\n    isDisabled: boolean;\n    isSelected: boolean;\n}>`\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    width: 63px;\n    height: 36px;\n    color: ${props => \n        props.isSelected\n            ? 'var(--ps-white-1)'\n            : props.isDisabled\n                ? 'var(--ps-grey-2)'\n                : 'var(--ps-black-main)'\n    };\n    border-radius: 2px;\n    cursor: ${props => props.isDisabled ? 'default' : 'pointer'};\n    background: ${props => \n        props.isSelected\n            ? (props.isDisabled ? 'var(--ps-grey-2)' : 'var(--ps-blue-main)')\n            : 'var(--ps-white-1)'\n    };\n\n    &:hover {\n        ${props => !props.isDisabled && !props.isSelected ? 'background: var(--ps-grey-3);' : ''}\n    }\n`;\n\nexport const Underline = styled.div<{\n    isDisabled: boolean;\n    isSelected: boolean;\n}>`\n    width: 27px;\n    height: 2px;\n    margin: 2px 0 0;\n    background: ${props =>\n        props.isSelected\n            ? 'var(--ps-white-1)'\n            : (props.isDisabled ? 'var(--ps-grey-2)' : 'var(--ps-black-main)')\n    };\n    position: absolute;\n    bottom: 5px;\n`;","import {\n    Container,\n    Underline,\n} from './styles';\nimport { MonthItemViewProps } from './types';\n\nfunction MonthItemView({\n    title, isDisabled, isSelected, isCurrent, onSelect\n}: MonthItemViewProps) {\n    return (\n        <Container\n            isDisabled={isDisabled}\n            isSelected={isSelected}\n            onClick={onSelect}\n            data-test={\n                isSelected\n                    ? \"selected-month\"\n                    : isCurrent\n                        ? \"current-month\"\n                        : \"month-item\"\n            }\n        >\n            {title}\n            {isCurrent && <Underline\n                isSelected={isSelected}\n                isDisabled={isDisabled}\n                data-text=\"current-month-underline\"\n            />}\n        </Container>\n    );\n}\n\nexport default MonthItemView;","export const MONTHS = [\n    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n];","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n    justify-content: center;\n    width: 265px;\n`;","import { MonthItem } from '../month-item';\nimport { MONTHS } from './constants';\nimport { Container } from './styles';\nimport { MonthSelectorViewProps } from './types';\n\nfunction MonthSelectorView({\n    isDisabledMonth,\n    isSelectedMonth,\n    isCurrentMonth,\n    onSelectMonth,\n}: MonthSelectorViewProps) {\n    return (\n        <Container>\n            {MONTHS.map((title, index) => (\n                <MonthItem\n                    title={title}\n                    isDisabled={isDisabledMonth(index)}\n                    isSelected={isSelectedMonth(index)}\n                    onSelect={() => onSelectMonth(index)}\n                    isCurrent={isCurrentMonth(index)}\n                />\n            ))}\n        </Container>\n    );\n}\n\nexport default MonthSelectorView;","import { useCallback, useMemo } from \"react\";\nimport { MonthSelectorProps } from \"./types\";\nimport MonthSelectorView from \"./view\";\n\nfunction MonthSelector({\n    selectedYear,\n    selectedMonth,\n    currentYear,\n    isDisabled,\n    onSelect\n}: MonthSelectorProps) {\n    const presentYear = useMemo(() => new Date().getFullYear(), []);\n    const presentMonth = useMemo(() => new Date().getMonth(), []);\n\n    const isDisabledMonth = useCallback((month: number) => {\n        return currentYear > presentYear || (currentYear === presentYear && month > presentMonth) || isDisabled;\n    }, [currentYear, isDisabled, presentMonth, presentYear]);\n\n    const isSelectedMonth = useCallback((month: number) => {\n        return month === selectedMonth && currentYear === selectedYear;\n    }, [currentYear, selectedMonth, selectedYear]);\n\n    const isCurrentMonth = useCallback((month: number) => {\n        return month === presentMonth && currentYear === presentYear;\n    }, [presentMonth, currentYear, presentYear]);\n\n    const handleSelectMonth = useCallback((month: number) => {\n        if (!isDisabledMonth(month)) {\n            onSelect(month);\n        }\n    }, [isDisabledMonth, onSelect]);\n    \n    return (\n        <MonthSelectorView\n            isDisabledMonth={isDisabledMonth}\n            isSelectedMonth={isSelectedMonth}\n            isCurrentMonth={isCurrentMonth}\n            onSelectMonth={handleSelectMonth}\n        />\n    );\n}\n\nexport default MonthSelector;","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const YearLeftArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"17\"\n                viewBox=\"0 0 16 17\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path d=\"m11 14.5-6-6 6-6\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n            </svg>\n        );\n    }\n);\n\nexport default YearLeftArrow;\n","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const YearRightArrow = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                className={className}\n                width=\"16\"\n                height=\"17\"\n                viewBox=\"0 0 16 17\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n            >\n                <path d=\"m5 3 6 6-6 6\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n            </svg>\n        );\n    }\n);\n\nexport default YearRightArrow;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n`;\n\nexport const ArrowContainer = styled.div<{ isAvailable: boolean }>`\n    display: flex;\n    cursor: ${props => props.isAvailable ? 'pointer' : 'default'};\n    color: ${props => props.isAvailable ? 'var(--ps-blue-main)' : 'var(--ps-grey-2)'};\n`\n\nexport const Year = styled.div<{ isDisabled: boolean }>`\n    font-size: 18px;\n    font-weight: bold;\n    color: ${props => props.isDisabled ? 'var(--ps-grey-2)' : 'var(--ps-black-main)'};\n    padding: 0 12px;\n`;","import YearLeftArrow from '../../../../../../ui/icons/YearLeftArrow';\nimport YearRightArrow from '../../../../../../ui/icons/YearRightArrow';\nimport {\n    Container,\n    ArrowContainer,\n    Year,\n} from './styles';\nimport { YearSelectorViewProps } from './types';\n\nfunction YearSelectorView({\n    selectedYear,\n    isNextAvailable,\n    isPrevAvailable,\n    isDisabled,\n    onNext,\n    onPrev\n}: YearSelectorViewProps) {\n    return (\n        <Container>\n            <ArrowContainer\n                isAvailable={isPrevAvailable}\n                onClick={onPrev}\n                data-test=\"prev-year-button\"\n            >\n                <YearLeftArrow />\n            </ArrowContainer>\n            <Year data-test=\"current-year-text\" isDisabled={isDisabled}>{selectedYear}</Year>\n            <ArrowContainer\n                isAvailable={isNextAvailable}\n                onClick={onNext}\n                data-test=\"next-year-button\"\n            >\n                <YearRightArrow />\n            </ArrowContainer>\n        </Container>\n    );\n}\n\nexport default YearSelectorView;","import { useCallback, useMemo } from 'react';\nimport { YearSelectorProps } from './types';\nimport YearSelectorView from './view';\n\nfunction YearSelector({\n    selectedYear,\n    minYear,\n    isDisabled,\n    onChange,\n}: YearSelectorProps) {\n    const presentYear = useMemo(() => new Date().getFullYear(), []);\n    const isNextAvailable = selectedYear < presentYear && !isDisabled;\n    const isPrevAvailable = selectedYear >= minYear && !isDisabled;\n\n    const handlePrev = useCallback(() => {\n        if (isPrevAvailable) {\n            onChange(selectedYear - 1);\n        }\n    }, [isPrevAvailable, onChange, selectedYear]);\n\n    const handleNext = useCallback(() => {\n        if (isNextAvailable) {\n            onChange(selectedYear + 1);\n        }\n    }, [isNextAvailable, onChange, selectedYear]);\n    \n    return (\n        <YearSelectorView\n            selectedYear={selectedYear}\n            isNextAvailable={isNextAvailable}\n            isPrevAvailable={isPrevAvailable}\n            isDisabled={isDisabled}\n            onPrev={handlePrev}\n            onNext={handleNext}\n        />\n    );\n}\n\nexport default YearSelector;","export const MIN_MONTH_FILTER_YEAR = 2015;\nexport const MONTH_DATE_QUERY_PARAM_NAME = 'date';","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    padding-top: 15px;\n    padding-bottom: 16px;\n`;\n\nexport const MonthSelectorContainer = styled.div`\n    padding-top: 12px;\n`;","import { FilterContainer } from '../../filter-container';\nimport { MonthSelector } from './components/month-selector';\nimport { YearSelector } from './components/year-selector';\nimport { MIN_MONTH_FILTER_YEAR } from './constants';\nimport {\n    Container,\n    MonthSelectorContainer,\n} from './styles';\nimport { MonthFilterViewProps } from './types';\n\nfunction MonthFilterView({\n    selectedMonth,\n    selectedYear,\n    currentYear,\n    isDisabled,\n    onSelectYear,\n    onSelectMonth,\n}: MonthFilterViewProps) {\n    return (\n        <FilterContainer\n            headerProps={{\n                title: 'Month',\n                isDisabled\n            }}\n        >\n            <Container>\n                <YearSelector\n                    selectedYear={currentYear}\n                    minYear={MIN_MONTH_FILTER_YEAR}\n                    isDisabled={isDisabled}\n                    onChange={onSelectYear}\n                />\n                <MonthSelectorContainer>\n                    <MonthSelector\n                        selectedYear={selectedYear}\n                        selectedMonth={selectedMonth}\n                        currentYear={currentYear}\n                        isDisabled={isDisabled}\n                        onSelect={onSelectMonth}\n                    />\n                </MonthSelectorContainer>\n            </Container>\n        </FilterContainer>\n    );\n}\n\nexport default MonthFilterView;","import { useCallback, useMemo } from \"react\";\nimport { useMonthFilterState } from \"./store/reducers\";\nimport { useSelectMonth, useSelectYear } from \"./store/services\";\nimport MonthFilterView from \"./view\";\nimport { useSetQueryParam } from \"../../../../helpers/hooks/useSetQueryParam\";\nimport { MONTH_DATE_QUERY_PARAM_NAME } from \"./constants\";\nimport useQueryParamListener from \"../../../../helpers/hooks/useQueryParamListener\";\nimport dayjs from \"dayjs\";\n\nfunction MonthFilter() {\n    const { selectedYear, selectedMonth, currentYear, isDisabled } = useMonthFilterState();\n    const selectYear = useSelectYear();\n    const selectMonth = useSelectMonth();\n    const setQueryParam = useSetQueryParam();\n\n    const presentYear = useMemo(() => new Date().getFullYear(), []);\n    const currentOrPresentYear = currentYear ?? selectedYear ?? presentYear;\n\n    const handleSelectMonth = useCallback((month) => {\n        setQueryParam(\n            MONTH_DATE_QUERY_PARAM_NAME,\n            dayjs(new Date(currentOrPresentYear, month, 1)).format('YYYY-MM-DD')\n        );\n        selectMonth(currentOrPresentYear, month);\n    }, [currentOrPresentYear, selectMonth, setQueryParam]);\n\n    useQueryParamListener(MONTH_DATE_QUERY_PARAM_NAME, value => {\n        if (value) {\n            const date = dayjs(value);\n            if (date.isValid() && (date.year() !== selectedYear || date.month() !== selectedMonth)) {\n                selectMonth(date.year(), date.month());\n            }\n        }\n    })\n    \n    return (\n        <MonthFilterView\n            selectedYear={selectedYear}\n            selectedMonth={selectedMonth}\n            currentYear={currentOrPresentYear}\n            isDisabled={isDisabled}\n            onSelectYear={selectYear}\n            onSelectMonth={handleSelectMonth}\n        />\n    );\n}\n\nexport default MonthFilter;","import { Action } from 'redux';\nimport { DateRangeType } from '../types';\n\nexport enum ACTIONS {\n    SELECT_DATE_RANGE = 'SELECT_DATE_RANGE',\n    CLEAR_DATE_RANGE = 'CLEAR_DATE_RANGE',\n}\n\nexport type SelectDateRangeAction = Action<ACTIONS.SELECT_DATE_RANGE> & {\n    dateRange?: DateRangeType;\n};\n\nexport const selectDateRange = (\n    dateRange: DateRangeType\n): SelectDateRangeAction => ({\n    type: ACTIONS.SELECT_DATE_RANGE,\n    dateRange,\n});\n\nexport type ClearDateRangeAction = Action<ACTIONS.CLEAR_DATE_RANGE> & {};\n\nexport const clearDateRange = (\n): ClearDateRangeAction => ({\n    type: ACTIONS.CLEAR_DATE_RANGE,\n});\n\nexport type DateRangeFilterActions = SelectDateRangeAction | ClearDateRangeAction;","import { Reducer } from 'redux';\nimport { useSelector } from 'react-redux';\n\nimport { ACTIONS, DateRangeFilterActions } from './actions';\nimport { DateRangeFilterState } from './types';\n\nexport const dateRangeFilterReducer: Reducer<\n    DateRangeFilterState,\n    DateRangeFilterActions\n> = (state = {}, action) => {\n    switch (action.type) {\n        case ACTIONS.SELECT_DATE_RANGE:\n            return {\n                ...state,\n                dateRange: action.dateRange,\n            };\n        case ACTIONS.CLEAR_DATE_RANGE:\n            return {\n                ...state,\n                dateRange: undefined,\n            };\n        default:\n            return state;\n    }\n};\n\nexport const useDateRangeState = () =>\n    useSelector(state => state.dateRange);\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { DateRangeType } from '../types';\n\nimport {selectDateRange, clearDateRange} from './actions';\n\nexport const useSelectDateRange = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(\n        (dateRange: DateRangeType) => {\n            dispatch(selectDateRange(dateRange));\n        },\n        [dispatch]\n    );\n};\n\nexport const useResetDateRange = () => {\n    const dispatch = useDispatch();\n\n    return useCallback(() => {\n        dispatch(clearDateRange());\n    }, [dispatch]);\n};\n","import styled from 'styled-components';\n\nexport const StyledCalendarSection = styled.div`\n    width: 100%;\n    padding: 0 18px 0 18px;\n`;\n\nexport const StyledCalendarContainer = styled.div`\n    display: flex;\n    align-items: start;\n    flex-direction: column;\n\n    width: 310px;\n    min-height: 326px;\n    padding-top: 25px;\n\n    border-radius: 4px;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    background: var(--ps-white-1);\n\n    .react-calendar__navigation .react-calendar__navigation__label {\n        font-size: 18px;\n        padding-left: 14px;\n        padding-right: 14px;\n        width: 200px;\n    }\n\n    .react-calendar__navigation__arrow react-calendar__navigation__prev-button, .react-calendar__navigation__arrow react-calendar__navigation__next-button {\n        width: 6px;\n        height: 12px;    \n    }\n\n    .react-calendar__month-view__weekdays .react-calendar__month-view__weekdays__weekday {\n        font-size: 15px;\n        font-weight: 800;\n    }\n\n    .react-calendar__month-view__days .react-calendar__month-view__days__day {\n        font-size: 15px;\n        abbr {\n            color: var(--ps-black-main);\n        }\n    }\n\n    .react-calendar__tile.react-calendar__tile--now.react-calendar__month-view__days__day {\n        abbr {\n            color: var(--ps-black-main);\n            border-bottom: 2px solid  var(--ps-black-main);\n            width: 24px;\n            height: 20px;\n            background: none;\n        }\n    }\n\n    .react-calendar__tile.react-calendar__tile--now.react-calendar__month-view__days__day.react-calendar__tile--rangeEnd {\n        background: var(--ps-blue-main);\n        abbr {\n            color: var(--ps-white-1);\n            border-bottom: 2px solid var(--ps-white-1)\n        };\n    }\n\n    .react-calendar__month-view__days .react-calendar__month-view__days__day:disabled {\n        background: none;\n        abbr {\n            color: var(--ps-grey-2);\n        }\n    }\n\n    .react-calendar__month-view__days .react-calendar__tile--range {\n        abbr {\n            color: var(--ps-white-1);\n        }\n    }\n`;\n\nexport const ClearText = styled.div<{isDisabled: boolean}>`\n    margin-bottom: 20px;\n    font-size: 13px;\n    font-weight: 500;\n    cursor: ${({isDisabled}) => isDisabled ? 'default': 'pointer'};\n    color: ${({isDisabled}) => isDisabled ? 'var(--ps-grey-2)': 'var(--ps-blue-main)'};\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-left: 25px;\n    width: 52px;\n`;","import { CustomCalendar } from \"../../../../ui/components/Calendar\";\nimport { FilterContainer } from \"../../filter-container\";\nimport { ClearText, StyledCalendarContainer, StyledCalendarSection } from './styles';\nimport { TrashBin } from '../../../../ui/icons/TrashBin';\nimport { DateFilterViewProps } from './types';\nimport dayjs from \"dayjs\";\n\nfunction DateFilterView({\n    dateRange,\n    handleSelectDate,\n    isDisabled,\n    resetDate\n}: DateFilterViewProps) {\n    const subHeader = dateRange?.start && dateRange?.end ? `${dayjs(new Date(dateRange.start)).format('MM/DD/YY')} - ${dayjs(new Date(dateRange.end)).format('MM/DD/YY')}` : 'MM/DD/YY – MM/DD/YY';\n    \n    return <FilterContainer\n        headerProps={{\n            title: 'Date Range',\n            subHeader\n        }}>\n        <StyledCalendarContainer>\n            <StyledCalendarSection>\n                <CustomCalendar\n                    value={dateRange || { start: null, end: null }}\n                    handleChange={handleSelectDate}\n                    selectRange={true}\n                    restrictPast={false}\n                    restrictFuture={true}\n                />\n            </StyledCalendarSection>\n            <ClearText\n                onClick={(e) => {\n                    if (isDisabled) return;\n                    e.stopPropagation();\n                    resetDate();\n                }}\n                isDisabled={isDisabled}\n                data-test=\"date-range-filter-clear\"\n            >\n                <TrashBin />Clear\n            </ClearText>\n        </StyledCalendarContainer>\n    </FilterContainer>\n}\n\nexport default DateFilterView;","import { useCallback } from \"react\";\nimport { useRemoveQueryParam, useSetQueryParam } from \"../../../../helpers/hooks/useSetQueryParam\";\nimport dayjs from \"dayjs\";\nimport { DATE_RANGE_PARAM_NAME } from \"./constants\";\nimport { useDateRangeState } from \"./store/reducers\";\nimport { useResetDateRange, useSelectDateRange } from \"./store/services\";\nimport useQueryParamListener from \"../../../../helpers/hooks/useQueryParamListener\";\nimport DateFilterView from \"./view\";\nimport { DateRangeType } from \"./types\";\nimport { isEqual } from \"lodash\";\n\nfunction DateRangeFilter() {\n    const { dateRange } = useDateRangeState();\n    const selectDateRange = useSelectDateRange();\n    const resetReduxDateRange = useResetDateRange();\n    const setQueryParam = useSetQueryParam();\n    const resetDateRange = useRemoveQueryParam();\n\n    const handleSelectDate = useCallback((date: DateRangeType) => {\n        setQueryParam(\n            DATE_RANGE_PARAM_NAME,\n            `${dayjs(date.start!).format('YYYY-MM-DD')},${dayjs(date.end!).format('YYYY-MM-DD')}`,\n        );\n        selectDateRange(date);\n    }, [selectDateRange, setQueryParam]);\n\n    const resetDate = useCallback(() => {\n        resetReduxDateRange();\n        resetDateRange(DATE_RANGE_PARAM_NAME);\n    }, [resetReduxDateRange, resetDateRange]);\n\n    const isDisabled = !(dateRange?.start || dateRange?.end);\n    useQueryParamListener(DATE_RANGE_PARAM_NAME, value => {\n        if (value) {\n            const [start, end] = value.split(',');\n            const startDate = dayjs(start).toDate();\n            const endDate = dayjs(end).endOf('d').toDate();\n            if (!isEqual(startDate, dateRange?.start) || !isEqual(endDate, dateRange?.end)) {\n                selectDateRange({ start: startDate, end: endDate });\n            }\n        }\n    })\n\n    return (\n        <DateFilterView dateRange={dateRange} resetDate={resetDate} handleSelectDate={handleSelectDate} isDisabled={isDisabled} />\n    );\n}\n\nexport default DateRangeFilter;","import { PractisSetFilter } from './practis-set-filter';\nimport { SingleSelectTeamFilter } from './single-team-filter';\nimport { MultipleSelectTeamsFilter } from './multiple-teams-filter';\nimport {\n    DynamicFilterComponentListType,\n    DynamicFilterControllerProps,\n} from './types';\nimport { LabelsFilter } from './labels-filter';\nimport { MonthFilter } from './month-filter';\nimport { DateFilter } from './date-filter';\n\nconst DynamicFilterComponentList: DynamicFilterComponentListType = {\n    SINGLE_SELECT_TEAM: <SingleSelectTeamFilter />,\n    MULTIPLE_SELECT_TEAMS: <MultipleSelectTeamsFilter />,\n    PRACTIS_SET: <PractisSetFilter />,\n    LABELS: <LabelsFilter />,\n    MONTH: <MonthFilter />,\n    DATE: <DateFilter />\n};\n\nfunction DynamicFilterController(props: DynamicFilterControllerProps) {\n    const { filterType } = props;\n\n    return (\n        DynamicFilterComponentList[filterType] || (\n            <div>[DEV]: Please define a correct filter type!</div>\n        )\n    );\n}\n\nexport default DynamicFilterController;","import styled from 'styled-components';\n\nexport const Wrapper = styled.div<{ headerHeight: string }>`\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    width: 360px;\n    height: calc(100vh - ${props => props.headerHeight});\n    box-shadow: 0 10px 10px 0 rgba(0, 0, 0, 0.12);\n    background-color: var(--ps-white-1);\n`;\n\nexport const DynamicFiltersContainer = styled.div`\n    padding: 24px 24px 0 24px;\n    height: 100%;\n    overflow-y: auto;\n    overflow-x: hidden;\n`;\n\nexport const DynamicFilterWrapper = styled.div`\n    margin-bottom: 12px;\n`;\n\nexport const StyledDivider = styled.hr`\n    margin-bottom: 12px;\n    background-color: var(--ps-grey-4);\n    width: 100%;\n    height: 1px;\n    border: none;\n`;\n\nexport const ControlPanelContainer = styled.div`\n    padding: 0 24px 12px 24px;\n`;","import ReportingControlPanel from '../../../ui/components/ReportingControlPanel';\nimport { DynamicFilter } from '../dynamic-filter';\nimport {\n    Wrapper,\n    DynamicFiltersContainer,\n    DynamicFilterWrapper,\n    StyledDivider,\n    ControlPanelContainer,\n} from './styles';\nimport { FiltersSidebarViewProps } from './types';\n\nfunction FiltersSidebarView(props: FiltersSidebarViewProps) {\n    const {\n        filtersConfig,\n        onGenerateReport,\n        onClearFilters,\n        controlPanelMode,\n        userEmail,\n        remainingTimeout,\n        headerHeight,\n    } = props;\n\n    return (\n        <Wrapper headerHeight={headerHeight}>\n            <DynamicFiltersContainer>\n                {filtersConfig.map(({ filterType }, index) => (\n                    <DynamicFilterWrapper key={index}>\n                        <DynamicFilter filterType={filterType} />\n                    </DynamicFilterWrapper>\n                ))}\n            </DynamicFiltersContainer>\n            <div>\n                <StyledDivider />\n                <ControlPanelContainer>\n                    <ReportingControlPanel\n                        mode={controlPanelMode}\n                        userEmail={userEmail}\n                        onSubmit={onGenerateReport}\n                        onClear={onClearFilters}\n                        remainingTimeout={remainingTimeout}\n                    />\n                </ControlPanelContainer>\n            </div>\n        </Wrapper>\n    );\n}\n\nexport default FiltersSidebarView;","import { useSelector } from 'react-redux';\n\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport { FiltersSidebarControllerProps } from './types';\nimport FiltersSidebarView from './view';\n\nfunction FiltersSidebarController(props: FiltersSidebarControllerProps) {\n    const {\n        filtersConfig,\n        controlPanelMode,\n        onClearFilters,\n        onGenerateReport,\n        remainingTimeout,\n        headerHeight,\n    } = props;\n    const meProfile = useSelector(getProfileState);\n\n    return (\n        <FiltersSidebarView\n            filtersConfig={filtersConfig}\n            onGenerateReport={onGenerateReport}\n            onClearFilters={onClearFilters}\n            userEmail={meProfile?.email || ''}\n            controlPanelMode={controlPanelMode}\n            remainingTimeout={remainingTimeout}\n            headerHeight={headerHeight}\n        />\n    );\n}\n\nexport default FiltersSidebarController;","import { SidebarFiltersConfig } from '../../../features/filters/filters-sidebar/types';\n\nexport const PractisSetSummaryReportFiltersConfig: SidebarFiltersConfig[] = [\n    {\n        filterType: 'SINGLE_SELECT_TEAM',\n    },\n    {\n        filterType: 'PRACTIS_SET',\n    },\n];","import styled from 'styled-components';\n\nexport const PractisSetSummaryReportSubHeader = styled.div`\n    font-size: 13px;\n    color: var(--ps-black-main);\n`;","import { FiltersSidebar } from '../../../features/filters/filters-sidebar';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { PractisSetSummaryReportFiltersConfig } from './constants';\nimport { PractisSetSummaryReportSubHeader } from './styles';\nimport { PractisSetSummaryReportViewProps } from './types';\n\nfunction PractisSetSummaryReportView(props: PractisSetSummaryReportViewProps) {\n    const {\n        onClearFilters,\n        onGenerateReport,\n        controlPanelMode,\n        remainingTimeout,\n    } = props;\n\n    return (\n        <MainWrapper\n            title=\"Reports\"\n            subTitle=\"Practis Set Summary\"\n            subHeader={\n                <PractisSetSummaryReportSubHeader data-test=\"practis-set-summary-page-description\">\n                    Understand progress for a specific Practis Set.\n                </PractisSetSummaryReportSubHeader>\n            }\n            htmlPageTitle=\"Reports - Practis\"\n            useGoBack\n            headerMinHeight=\"124px\"\n            headerPadding=\"0 24px\"\n            contentPadding=\"0\"\n            isScrollable={false}\n            contentSize={false}\n            dataTest=\"practis-set-summary\"\n        >\n            <FiltersSidebar\n                filtersConfig={PractisSetSummaryReportFiltersConfig}\n                onClearFilters={onClearFilters}\n                onGenerateReport={onGenerateReport}\n                controlPanelMode={controlPanelMode}\n                remainingTimeout={remainingTimeout}\n                headerHeight=\"124px\"\n            />\n        </MainWrapper>\n    );\n}\n\nexport default PractisSetSummaryReportView;","import { useCallback, useEffect, useMemo } from 'react';\nimport { useHistory } from '../../../tools/router';\nimport { isEmpty } from 'lodash';\n\nimport { ReportType } from '../../../constants/interfaces/ReportItem';\nimport { useClearPractisSetFilter, useDisablePractisSetFilter } from '../../../features/filters/dynamic-filter/practis-set-filter/store/services';\nimport { useSingleTeamFilterState } from '../../../features/filters/dynamic-filter/single-team-filter/store/reducers';\nimport { useClearSingleTeamFilter, useDisableSingleTeamFilter } from '../../../features/filters/dynamic-filter/single-team-filter/store/services';\nimport { useGenerateReportService } from '../../../features/filters/filters-sidebar/services';\nimport { useClearTrainerPractisSet } from '../../../features/teams/store/services';\nimport { useTrainerPractisSetState } from '../../../features/teams/store/states';\nimport { ReportingControlPanelMode } from '../../../ui/components/ReportingControlPanel/types';\nimport PractisSetSummaryReportView from './view';\nimport { usePractisSetFilterState } from '../../../features/filters/dynamic-filter/practis-set-filter/store/reducers';\nimport ROUTES from '../../../routes/routes';\n\nfunction PractisSetSummaryReportController() {\n    const { isGenerating, remainingTimeout, generateReport } =\n        useGenerateReportService();\n    const clearTrainerPractisSetData = useClearTrainerPractisSet();\n    const clearSingleTeamFilter = useClearSingleTeamFilter();\n    const disableSingleTeamFilter = useDisableSingleTeamFilter();\n    const clearPractisSetFilter = useClearPractisSetFilter();\n    const disablePractisSetFilter = useDisablePractisSetFilter();\n    const { selectedTeamId } = useSingleTeamFilterState();\n    const { selectedPractisSetId } = usePractisSetFilterState();\n    const { data } = useTrainerPractisSetState();\n    const history = useHistory();\n    \n    const onClearFilters = useCallback(\n        (isCalledFromUnmount?: boolean) => {\n            Promise.resolve().then(() => {\n                clearTrainerPractisSetData();\n                clearSingleTeamFilter();\n                clearPractisSetFilter();\n            });\n            \n            if (!isCalledFromUnmount) {\n                history.replace(ROUTES.REPORTS.PRACTIS_SET_SUMMARY_REPORT);\n            }\n        },\n        [clearTrainerPractisSetData, clearSingleTeamFilter, clearPractisSetFilter, history]\n    );\n\n    const controlPanelMode: ReportingControlPanelMode = useMemo(() => {\n        const statusMap = {\n            timeout: () => remainingTimeout,\n            disabled: () => !selectedTeamId || !selectedPractisSetId,\n            loading: () => isGenerating,\n            noData: () => isEmpty(data?.items),\n        };\n\n        for (const [status, condition] of Object.entries(statusMap)) {\n            if (condition()) {\n                return status as ReportingControlPanelMode;\n            }\n        }\n\n        return 'enabled';\n    }, [\n        remainingTimeout,\n        selectedTeamId,\n        selectedPractisSetId,\n        isGenerating,\n        data?.items,\n    ]);\n\n    const handleGeneratePractisSetSummaryReport = useCallback(() => {\n        if (selectedTeamId && selectedPractisSetId) {\n            generateReport(ReportType.PRACTIS_SET_SUMMARY, {\n                team: selectedTeamId,\n                practisSet: selectedPractisSetId,\n            });\n        }\n    }, [generateReport, selectedPractisSetId, selectedTeamId]);\n\n    useEffect(() => {\n        clearTrainerPractisSetData();\n\n        return () => {\n            onClearFilters(true);\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        disableSingleTeamFilter(isGenerating);\n        disablePractisSetFilter(isGenerating);\n    }, [disablePractisSetFilter, disableSingleTeamFilter, isGenerating]);\n\n    return (\n        <PractisSetSummaryReportView\n            onClearFilters={onClearFilters}\n            onGenerateReport={handleGeneratePractisSetSummaryReport}\n            controlPanelMode={controlPanelMode}\n            remainingTimeout={remainingTimeout}\n        />\n    );\n}\n\nexport default PractisSetSummaryReportController;","import { SidebarFiltersConfig } from '../../../features/filters/filters-sidebar/types';\n\nexport const UserActivityReportFiltersConfig: SidebarFiltersConfig[] = [\n    {\n        filterType: 'MULTIPLE_SELECT_TEAMS',\n    },\n    {\n        filterType: 'LABELS',\n    }\n];","import styled from 'styled-components';\n\nexport const SubHeader = styled.div`\n    font-size: 13px;\n    color: var(--ps-black-main);\n`;","import { FiltersSidebar } from '../../../features/filters/filters-sidebar';\nimport ROUTES from '../../../routes/routes';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { UserActivityReportFiltersConfig } from './constants';\nimport { SubHeader } from './styles';\nimport { UserActivityReportViewProps } from './types';\n\nfunction UserActivityReportView({\n    onClearFilters, onGenerateReport, controlPanelMode, remainingTimeout\n}: UserActivityReportViewProps) {\n    return (\n        <MainWrapper\n            title=\"Reports\"\n            subTitle=\"User Activity\"\n            subHeader={\n                <SubHeader data-test=\"user-activity-report-page-description\">\n                    Understand your team(s) progress on all their Practis Sets.\n                </SubHeader>\n            }\n            htmlPageTitle=\"Reports - Practis\"\n            goBackUrl={ROUTES.REPORTS.LIST_OF_REPORTS}\n            headerPadding=\"0 24px\"\n            headerMinHeight=\"124px\"\n            contentPadding=\"0\"\n            isScrollable={false}\n            contentSize={false}\n            dataTest=\"user-activity-report\"\n        >\n            <FiltersSidebar\n                filtersConfig={UserActivityReportFiltersConfig}\n                onClearFilters={onClearFilters}\n                onGenerateReport={onGenerateReport}\n                controlPanelMode={controlPanelMode}\n                remainingTimeout={remainingTimeout}\n                headerHeight=\"124px\"\n            />\n        </MainWrapper>\n    );\n}\n\nexport default UserActivityReportView;","import { useCallback } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useSelectLabels } from \"../../../../portableLabels/store/hors/withLabels/services\";\nimport { useSetFilterHeaderSearchActive } from \"../../../searchable-filter-header/store/services\";\nimport { SearchableFilterHeaderKey } from \"../../../searchable-filter-header/store/types\";\nimport { disableLabelsFilter } from \"./actions\";\n\nexport const useClearLabelsFilter = () => {\n    const selectLabels = useSelectLabels();\n    const setLabelsSearchActive = useSetFilterHeaderSearchActive(SearchableFilterHeaderKey.LABELS);\n\n    return useCallback(() => {\n        selectLabels([]);\n        setLabelsSearchActive(false);\n    }, [selectLabels, setLabelsSearchActive]);\n};\n\nexport const useDisableLabelsFilter = () => {\n    const dispatch = useDispatch();\n\n    return useCallback((isDisabled: boolean) => {\n        dispatch(disableLabelsFilter(isDisabled));\n    }, [dispatch]);\n}","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { useMultipleTeamsFilterState } from '../../../features/filters/dynamic-filter/multiple-teams-filter/store/reducers';\nimport { useGenerateReportService, useGetReportAvailabilityService } from '../../../features/filters/filters-sidebar/services';\nimport { ReportingControlPanelMode } from '../../../ui/components/ReportingControlPanel/types';\nimport UserActivityReportView from './view';\nimport { useTeamsState } from '../../../features/teams/store/states';\nimport { usePortableLabelsState } from '../../../features/portableLabels/store/states';\nimport { useLabelsState } from '../../../features/portableLabels/store/hors/withLabels/states';\nimport { WithLabelsContext } from '../../../features/portableLabels';\nimport { ReportType } from '../../../constants/interfaces/ReportItem';\nimport { useHistory } from '../../../tools/router';\nimport ROUTES from '../../../routes/routes';\nimport { useClearMultipleTeamsFilter, useDisableMultipleTeamsFilter } from '../../../features/filters/dynamic-filter/multiple-teams-filter/store/services';\nimport { useClearLabelsFilter, useDisableLabelsFilter } from '../../../features/filters/dynamic-filter/labels-filter/store/services';\n\nfunction UserActivityReportController() {\n    const { isGenerating, remainingTimeout, generateReport } = useGenerateReportService();\n    const { isAvailable, getReportAvailability } = useGetReportAvailabilityService();\n    const { selectedTeamIds } = useMultipleTeamsFilterState();\n    const { loading: isTeamsLoading } = useTeamsState();\n    const { loading: isLabelsLoading } = usePortableLabelsState();\n    const { selected: selectedLabels } = useLabelsState();\n    const clearMultipleTeamsFilter = useClearMultipleTeamsFilter();\n    const disableMultipleTeamsFilter = useDisableMultipleTeamsFilter();\n    const clearLabelsFilter = useClearLabelsFilter();\n    const disableLabelsFilter = useDisableLabelsFilter();\n    const history = useHistory();\n\n    const handleClearFilters = useCallback(() => {\n        clearMultipleTeamsFilter();\n        clearLabelsFilter();\n        history.replace(ROUTES.REPORTS.USER_ACTIVITY_REPORT);\n    }, [clearLabelsFilter, clearMultipleTeamsFilter, history]);\n\n    const controlPanelMode: ReportingControlPanelMode = useMemo(() => {\n        if (remainingTimeout) {\n            return 'timeout';\n        }\n        \n        if (isTeamsLoading || isLabelsLoading || isGenerating) {\n            return 'loading';\n        }\n\n        if (!selectedTeamIds?.length && !selectedLabels.length) {\n            return 'disabled';\n        }\n\n        if (!isAvailable) {\n            return 'noData';\n        }\n\n        return 'enabled';\n    }, [remainingTimeout, isTeamsLoading, isLabelsLoading, isGenerating, selectedTeamIds?.length, selectedLabels.length, isAvailable]);\n\n    const getReportParams = useCallback(() => {\n        if (!selectedTeamIds?.length && !selectedLabels?.length) return;\n        return {\n            teams: selectedTeamIds ?? [],\n            labels: selectedLabels?.length\n                        ? selectedLabels.filter(id => id > 0)\n                        : selectedLabels\n        }\n    }, [selectedLabels, selectedTeamIds]);\n\n    const handleGenerateReport = useCallback(() => {\n        const params = getReportParams();\n        if (params) {\n            generateReport(ReportType.USERS_ACTIVITY, params);\n        }\n    }, [generateReport, getReportParams]);\n\n    useEffect(() => {\n        return () => {\n            clearMultipleTeamsFilter();\n            clearLabelsFilter();\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        const params = getReportParams();\n        if (params) {\n            getReportAvailability(ReportType.USERS_ACTIVITY, params);\n        }\n    }, [getReportAvailability, getReportParams]);\n\n    useEffect(() => {\n        disableMultipleTeamsFilter(isGenerating);\n        disableLabelsFilter(isGenerating);\n    }, [disableLabelsFilter, disableMultipleTeamsFilter, isGenerating]);\n\n    return (\n        <UserActivityReportView\n            onClearFilters={handleClearFilters}\n            onGenerateReport={handleGenerateReport}\n            controlPanelMode={controlPanelMode}\n            remainingTimeout={remainingTimeout}\n        />\n    );\n}\n\nfunction UserActivityReportWithLabelsContext() {\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'labelsFilter' }}>\n            <UserActivityReportController />\n        </WithLabelsContext.Provider>\n    );\n}\n\nexport default UserActivityReportWithLabelsContext;","import { SidebarFiltersConfig } from '../../../features/filters/filters-sidebar/types';\n\nexport const TeamLeaderActivityReportFiltersConfig: SidebarFiltersConfig[] = [\n    {\n        filterType: 'MULTIPLE_SELECT_TEAMS',\n    },\n    {\n        filterType: 'LABELS',\n    },\n    {\n        filterType: 'DATE',\n    }\n];","import styled from 'styled-components';\n\nexport const SubHeader = styled.div`\n    font-size: 13px;\n    color: var(--ps-black-main);\n`;","import { FiltersSidebar } from '../../../features/filters/filters-sidebar';\nimport ROUTES from '../../../routes/routes';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { TeamLeaderActivityReportFiltersConfig } from './constants';\nimport { SubHeader } from './styles';\nimport { TeamLeaderActivityReportViewProps } from './types';\n\nfunction TeamLeaderActivityReportView({\n    onClearFilters, onGenerateReport, controlPanelMode, remainingTimeout\n}: TeamLeaderActivityReportViewProps) {\n    return (\n        <MainWrapper\n            title=\"Reports\"\n            subTitle=\"Team Leader Engagement\"\n            subHeader={\n                <SubHeader data-test=\"team-leader-report-page-description\">\n                    How engaged are Team Leaders in their learner's training.\n                </SubHeader>\n            }\n            htmlPageTitle=\"Reports - Practis\"\n            goBackUrl={ROUTES.REPORTS.LIST_OF_REPORTS}\n            headerPadding=\"0 24px\"\n            headerMinHeight=\"124px\"\n            contentPadding=\"0\"\n            isScrollable={false}\n            contentSize={false}\n            dataTest=\"team-leader-report\"\n        >\n            <FiltersSidebar\n                filtersConfig={TeamLeaderActivityReportFiltersConfig}\n                onClearFilters={onClearFilters}\n                onGenerateReport={onGenerateReport}\n                controlPanelMode={controlPanelMode}\n                remainingTimeout={remainingTimeout}\n                headerHeight=\"124px\"\n            />\n        </MainWrapper>\n    );\n}\n\nexport default TeamLeaderActivityReportView;","import { SidebarFiltersConfig } from '../../../features/filters/filters-sidebar/types';\n\nexport const DATE_FORMAT = 'YYYY-MM-DD';\n\nexport const BillingReportFiltersConfig: SidebarFiltersConfig[] = [\n    {\n        filterType: 'MONTH',\n    }\n];","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { useMultipleTeamsFilterState } from '../../../features/filters/dynamic-filter/multiple-teams-filter/store/reducers';\nimport { useGenerateReportService, useGetReportAvailabilityService } from '../../../features/filters/filters-sidebar/services';\nimport { ReportingControlPanelMode } from '../../../ui/components/ReportingControlPanel/types';\nimport TeamLeaderActivityReportView from './view';\nimport { useTeamsState } from '../../../features/teams/store/states';\nimport { usePortableLabelsState } from '../../../features/portableLabels/store/states';\nimport { useLabelsState } from '../../../features/portableLabels/store/hors/withLabels/states';\nimport { WithLabelsContext } from '../../../features/portableLabels';\nimport { ReportType } from '../../../constants/interfaces/ReportItem';\nimport { useHistory } from '../../../tools/router';\nimport ROUTES from '../../../routes/routes';\nimport { useClearMultipleTeamsFilter, useDisableMultipleTeamsFilter } from '../../../features/filters/dynamic-filter/multiple-teams-filter/store/services';\nimport { useClearLabelsFilter, useDisableLabelsFilter } from '../../../features/filters/dynamic-filter/labels-filter/store/services';\nimport { useDateRangeState } from '../../../features/filters/dynamic-filter/date-filter/store/reducers';\nimport { useResetDateRange } from '../../../features/filters/dynamic-filter/date-filter/store/services';\nimport { DATE_FORMAT } from '../BillingReport/constants';\nimport dayjs from 'dayjs';\n\nfunction TeamLeaderActivityReportController() {\n    const { isGenerating, remainingTimeout, generateReport } = useGenerateReportService();\n    const { isAvailable, getReportAvailability } = useGetReportAvailabilityService();\n    const { selectedTeamIds } = useMultipleTeamsFilterState();\n    const { loading: isTeamsLoading } = useTeamsState();\n    const { loading: isLabelsLoading } = usePortableLabelsState();\n    const { selected: selectedLabels } = useLabelsState();\n    const { dateRange } = useDateRangeState();\n    const clearMultipleTeamsFilter = useClearMultipleTeamsFilter();\n    const disableMultipleTeamsFilter = useDisableMultipleTeamsFilter();\n    const clearLabelsFilter = useClearLabelsFilter();\n    const clearDateRangeFilter = useResetDateRange();\n    const disableLabelsFilter = useDisableLabelsFilter();\n    const history = useHistory();\n\n    const isDisabled = (!selectedTeamIds?.length && !selectedLabels.length)\n        || !(dateRange?.start && dateRange?.end);\n\n    const handleClearFilters = useCallback(() => {\n        clearMultipleTeamsFilter();\n        clearLabelsFilter();\n        clearDateRangeFilter()\n        history.replace(ROUTES.REPORTS.TEAM_LEADER_ACTIVITY_REPORT);\n    }, [clearLabelsFilter, clearMultipleTeamsFilter, clearDateRangeFilter, history]);\n\n    const controlPanelMode: ReportingControlPanelMode = useMemo(() => {\n        if (remainingTimeout) {\n            return 'timeout';\n        }\n        \n        if (isTeamsLoading || isLabelsLoading || isGenerating) {\n            return 'loading';\n        }\n\n        if (isDisabled) {\n            return 'disabled';\n        }\n\n        if (!isAvailable) {\n            return 'noData';\n        }\n\n        return 'enabled';\n    }, [remainingTimeout, isTeamsLoading, isLabelsLoading, isGenerating, isDisabled, isAvailable]);\n\n    const getReportParams = useCallback(() => {\n        if (isDisabled) return;\n        return {\n            teams: selectedTeamIds ?? [],\n            labels: selectedLabels?.length\n                        ? selectedLabels.filter(id => id > 0)\n                        : selectedLabels,\n            dateStart: dateRange?.start && dayjs(new Date(dateRange?.start)).format(DATE_FORMAT),\n            dateEnd: dateRange?.end && dayjs(new Date(dateRange?.end)).format(DATE_FORMAT)\n        }\n    }, [selectedLabels, selectedTeamIds, dateRange, isDisabled]);\n\n    const handleGenerateReport = useCallback(() => {\n        const params = getReportParams();\n        if (params) {\n            generateReport(ReportType.TEAM_LEADER_ACTIVITY, params);\n        }\n    }, [generateReport, getReportParams]);\n\n    useEffect(() => {\n        return () => {\n            clearMultipleTeamsFilter();\n            clearLabelsFilter();\n            clearDateRangeFilter();\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        const params = getReportParams();\n        if (params) {\n            getReportAvailability(ReportType.TEAM_LEADER_ACTIVITY, params);\n        }\n    }, [getReportAvailability, getReportParams]);\n\n    useEffect(() => {\n        disableMultipleTeamsFilter(isGenerating);\n        disableLabelsFilter(isGenerating);\n    }, [disableLabelsFilter, disableMultipleTeamsFilter, isGenerating]);\n\n    return (\n        <TeamLeaderActivityReportView\n            onClearFilters={handleClearFilters}\n            onGenerateReport={handleGenerateReport}\n            controlPanelMode={controlPanelMode}\n            remainingTimeout={remainingTimeout}\n        />\n    );\n}\n\nfunction UserActivityReportWithLabelsContext() {\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'labelsFilter' }}>\n            <TeamLeaderActivityReportController />\n        </WithLabelsContext.Provider>\n    );\n}\n\nexport default UserActivityReportWithLabelsContext;","import styled from 'styled-components';\n\nexport const SubHeader = styled.div`\n    font-size: 13px;\n    color: var(--ps-black-main);\n`;","import { FiltersSidebar } from '../../../features/filters/filters-sidebar';\nimport ROUTES from '../../../routes/routes';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { BillingReportFiltersConfig } from './constants';\nimport { SubHeader } from './styles';\nimport { BillingReportViewProps } from './types';\n\nfunction BillingReportView({\n    onClearFilters, onGenerateReport, controlPanelMode, remainingTimeout\n}: BillingReportViewProps) {\n    return (\n        <MainWrapper\n            title=\"Reports\"\n            subTitle=\"Billing Report\"\n            subHeader={\n                <SubHeader data-test=\"billing-report-page-description\">\n                    Generate a list of monthly active users on the platform.\n                </SubHeader>\n            }\n            htmlPageTitle=\"Reports - Practis\"\n            goBackUrl={ROUTES.REPORTS.LIST_OF_REPORTS}\n            headerPadding=\"0 24px\"\n            headerMinHeight=\"124px\"\n            contentPadding=\"0\"\n            isScrollable={false}\n            contentSize={false}\n            dataTest=\"billing-report\"\n        >\n            <FiltersSidebar\n                filtersConfig={BillingReportFiltersConfig}\n                onClearFilters={onClearFilters}\n                onGenerateReport={onGenerateReport}\n                controlPanelMode={controlPanelMode}\n                remainingTimeout={remainingTimeout}\n                headerHeight=\"124px\"\n            />\n        </MainWrapper>\n    );\n}\n\nexport default BillingReportView;","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { useGenerateReportService, useGetReportAvailabilityService } from '../../../features/filters/filters-sidebar/services';\nimport { ReportingControlPanelMode } from '../../../ui/components/ReportingControlPanel/types';\nimport BillingReportView from './view';\nimport { ReportType } from '../../../constants/interfaces/ReportItem';\nimport { useHistory } from '../../../tools/router';\nimport ROUTES from '../../../routes/routes';\nimport { useMonthFilterState } from '../../../features/filters/dynamic-filter/month-filter/store/reducers';\nimport { useClearYearAndMonth, useDisableMonthFilter } from '../../../features/filters/dynamic-filter/month-filter/store/services';\nimport { useSelector } from 'react-redux';\nimport { getCompanyState } from '../../CompanySettings/store/reducers';\nimport dayjs from 'dayjs';\nimport { DATE_FORMAT } from './constants';\n\nfunction BillingReportController() {\n    const { isGenerating, remainingTimeout, generateReport } = useGenerateReportService();\n    const { isAvailable, getReportAvailability } = useGetReportAvailabilityService();\n    const { selectedYear, selectedMonth } = useMonthFilterState();\n    const clearYearAndMonth = useClearYearAndMonth();\n    const disableMonthFilter = useDisableMonthFilter();\n    const company = useSelector(getCompanyState);\n    const history = useHistory();\n\n    const handleClearFilters = useCallback(() => {\n        clearYearAndMonth();\n        history.replace(ROUTES.REPORTS.BILLING_REPORT);\n    }, [clearYearAndMonth, history]);\n\n    const controlPanelMode: ReportingControlPanelMode = useMemo(() => {\n        if (remainingTimeout) {\n            return 'timeout';\n        }\n        \n        if (isGenerating) {\n            return 'loading';\n        }\n\n        if (typeof selectedMonth === 'undefined') {\n            return 'disabled';\n        }\n\n        if (!isAvailable) {\n            return 'noData';\n        }\n\n        return 'enabled';\n    }, [remainingTimeout, isGenerating, selectedMonth, isAvailable]);\n\n    const getReportParams = useCallback(() => {\n        if (typeof selectedMonth === 'undefined') return;\n        const dateStart = dayjs(new Date(selectedYear!, selectedMonth, 1));\n        const dateEnd = dateStart.add(1, 'month');\n        if (!company?.id) return;\n        return {\n            companyId: company.id,\n            dateStart: dateStart.format(DATE_FORMAT),\n            dateEnd: dateEnd.format(DATE_FORMAT),\n        };\n    }, [company?.id, selectedMonth, selectedYear]);\n\n    const handleGenerateReport = useCallback(() => {\n        const params = getReportParams();\n        if (params) {\n            generateReport(ReportType.BILLING, params);\n        }\n    }, [generateReport, getReportParams]);\n\n    useEffect(() => {\n        return () => {\n            clearYearAndMonth()\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        const params = getReportParams();\n        if (params) {\n            getReportAvailability(ReportType.BILLING, params);\n        }\n    }, [getReportAvailability, getReportParams]);\n\n    useEffect(() => {\n        disableMonthFilter(isGenerating);\n    }, [disableMonthFilter, isGenerating]);\n\n    return (\n        <BillingReportView\n            onClearFilters={handleClearFilters}\n            onGenerateReport={handleGenerateReport}\n            controlPanelMode={controlPanelMode}\n            remainingTimeout={remainingTimeout}\n        />\n    );\n}\n\nexport default BillingReportController;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const DetailsNav = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#fh3wk325da)\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.5 14.25c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25v12.5zM1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.75.75 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.75.75 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75h-3zM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75zM3.75 6a.75.75 0 0 0 0 1.5h.5a.75.75 0 0 0 0-1.5h-.5zM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75zM7.75 9a.75.75 0 0 0 0 1.5h.5a.75.75 0 0 0 0-1.5h-.5zM7 6.75A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75zM7.75 3a.75.75 0 0 0 0 1.5h.5a.75.75 0 0 0 0-1.5h-.5z\" fill=\"currentColor\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"fh3wk325da\">\n                        <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default DetailsNav;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Seats = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.441 3.5a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-3.5 2A3.5 3.5 0 1 1 7.84 8.05a5.507 5.507 0 0 1 3.034 4.083.75.75 0 1 1-1.482.235 4.001 4.001 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.043 8.05 3.49 3.49 0 0 1 1.941 5.5zm9-1.5a.75.75 0 1 0 0 1.5 1.5 1.5 0 0 1 .666 2.844.75.75 0 0 0-.416.672v.352a.75.75 0 0 0 .574.73c1.2.29 2.162 1.2 2.522 2.372a.75.75 0 1 0 1.434-.44 5.01 5.01 0 0 0-2.56-3.012A3 3 0 0 0 10.941 4z\" fill=\"currentColor\"/>\n            </svg>\n        );\n    }\n);\n\nexport default Seats;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const LogoNav = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#shsp2nykna)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"currentColor\">\n                    <path d=\"M0 14.25C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0 0 16 14.25V1.75A1.75 1.75 0 0 0 14.25 0H1.75A1.75 1.75 0 0 0 0 1.75v12.5zm1.75.25a.25.25 0 0 1-.25-.25V1.75a.25.25 0 0 1 .25-.25h12.5a.25.25 0 0 1 .25.25v12.5a.25.25 0 0 1-.25.25H1.75z\"/>\n                    <path d=\"M4 7.18C4 4.873 5.79 3 8 3s4 1.872 4 4.18c0 2.31-1.79 4.182-4 4.182H6.022L4 13.108V7.18zm6.013-.004c0-1.19-.913-2.154-2.038-2.154-1.126 0-2.039.964-2.039 2.154v2.155h2.039c1.114 0 2.02-.946 2.037-2.12v-.035z\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"shsp2nykna\">\n                        <path fill=\"#fff\" transform=\"rotate(-90 8 8)\" d=\"M0 0h16v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default LogoNav;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Voice = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width=\"100%\"\n                height=\"100%\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <g clip-path=\"url(#7jt8yiv5ra)\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"m4.852.878 2.852 4.888a.25.25 0 0 1-.147.366l-2.807.802V8.25H.25V9a4.759 4.759 0 0 0 3.18 4.487A4.269 4.269 0 0 1 1 14.25v1.5c1.797 0 3.51-.848 4.592-2.288a.757.757 0 0 0-.606-1.212 3.246 3.246 0 0 1-3.149-2.5H6.25V8.066l1.719-.491a1.75 1.75 0 0 0 1.03-2.565L6.15.122 4.851.878zM1 2.5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0zm9.508 8.163c0-1.018-.32-1.959-.864-2.731l1.227-.864a6.225 6.225 0 0 1 1.137 3.595c0 1.51-.537 2.897-1.43 3.978l-1.156-.955a4.727 4.727 0 0 0 1.086-3.023zm1.379-4.231c.63.896 1.62 2.327 1.62 4.231 0 2.257-.86 3.482-1.585 4.36l1.156.955c.847-1.025 1.93-2.579 1.93-5.315 0-2.405-1.248-4.177-1.882-5.076l-.013-.019-1.226.864z\" fill=\"currentColor\"/>\n                </g>\n                <defs>\n                    <clipPath id=\"7jt8yiv5ra\">\n                        <path fill=\"#fff\" transform=\"matrix(-1 0 0 1 15 0)\" d=\"M0 0h15v16H0z\"/>\n                    </clipPath>\n                </defs>\n            </svg>\n        );\n    }\n);\n\nexport default Voice;\n","import { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const ModalTitle = styled.div`\n    padding: 8px 50px 8px 24px;\n    font-size: 18px;\n    font-weight: 800;\n    color: var(--ps-black-main);\n`;\n\nexport const CompanyName = styled.span`\n    font-weight: 400;\n`;\n\nexport const ModalContent = styled.div`\n    display: flex;\n    flex-direction: row;\n    min-height: 215px;\n`;\n\nexport const ModalSidebar = styled.div`\n    width: 190px;\n    background-color: var(--ps-grey-3);\n    border-right: 1px solid var(--ps-grey-4);\n    border-bottom-left-radius: 8px;\n`;\n\nexport const NavigationItem = styled(NavLink)`\n    margin-top: 18px;\n    padding-left: 24px;\n    height: 24px;\n    display: flex;\n    align-items: center;\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    display: flex;\n    text-decoration: none;\n    position: relative;\n\n    &:first-child {\n        margin-top: 24px;\n    }\n\n    &.is-active {\n        font-weight: bold;\n        color: var(--ps-black-main);\n\n        &::before {\n            width: 4px;\n            height: 24px;\n            background: var(--ps-black-main);\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            border-radius: 0 10px 10px 0;\n        }\n\n        div {\n            color: var(--ps-black-main);\n        }\n    }\n`;\n\nexport const NavigationIcon = styled.div`\n    width: 16px;\n    height: 16px;\n    color: var(--ps-grey-1);\n    margin-right: 12px;\n`;\n\nexport const TabContent = styled.div`\n    width: 600px;\n    min-height: 630px;\n`;","import { Form } from 'formik';\nimport styled from 'styled-components';\n\nexport const StyledForm = styled(Form)`\n    height: 100%;\n`;\n\nexport const Content = styled.div`\n    height: calc(100% - 65px);\n    padding: 24px;\n    box-sizing: border-box;\n`;\n\nexport const FieldContainer = styled.div`\n    height: 84px;\n    width: 400px;\n\n    & input:disabled {\n        color: var(--ps-grey-1);\n    }\n\n    .company-select {\n        width: 400px;\n        border: solid 1px var(--ps-grey-3);\n\n        &.company-select-open {\n            border: solid 1px var(--ps-grey-2);\n        }\n\n        .company-select-input > div {\n            color: var(--ps-black-main);\n        }\n\n        .content-area {\n            padding: 8px 0;\n\n            > div {\n                padding: 5px 12px;\n                border-radius: 0;\n                margin-bottom: 0;\n                min-height: auto;\n                font-weight: 400;\n\n                &.selected-item {\n                    color: var(--ps-white-1);\n                    background: var(--ps-blue-main);\n                }\n\n                &:hover {\n                    color: var(--ps-white-1);\n                    background: var(--ps-blue-main);\n                }\n            }\n        }\n    }\n\n    .company-select-label {\n        left: 12px;\n    }\n\n    .company-select-arrow {\n        right: 12px;\n    }\n\n    .company-select-input {\n        padding: 0 12px;\n    }\n`;\n\nexport const FieldName = styled.div`\n    font-size: 13px;\n    font-weight: 800;\n    color: var(--ps-black-main);\n    padding-bottom: 4px;\n`;\n\nexport const Footer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    border-top: 1px solid var(--ps-grey-4);\n    align-items: center;\n    padding-right: 24px;\n    height: 64px;\n`;","import * as Yup from 'yup';\n\nexport const COMPANY_NAME_MAX_LENGTH = 80;\n\nexport const MAX_LENGTH_EXCEEDED_TEXT = 'Character limit reached'\n\nexport const ValidationSchema = Yup.object().shape({\n    name: Yup.string()\n        .required('Company name is required')\n        .max(COMPANY_NAME_MAX_LENGTH, MAX_LENGTH_EXCEEDED_TEXT),\n});\n\nexport const NAME_ALREADY_EXISTS_ERROR = 'Entity \"company:name\" already exists';\n\nexport const API_ERROR_MESSAGE = {\n    [NAME_ALREADY_EXISTS_ERROR]: 'The company name is taken',\n}\n\nexport const NO_ACCOUNT_OWNER_TEXT = 'No Account Owner';","import styled from 'styled-components';\n\nexport const StyledFormikField = styled.div`\n    width: 100%;\n    flex: 1;\n`;\n\nexport const StyledErrorContainer = styled.div`\n    color: ${props => props.theme.Colors.coral};\n    font-weight: 500;\n    font-size: 13px;\n    padding: 8px 5px 0 27px;\n`;\n","import { getIn } from 'formik';\n\nimport PractisSelect from '../Select/Select';\nimport { StyledErrorContainer, StyledFormikField } from './style';\nimport { SelectProps } from './type';\n\nconst FormikSelect = ({\n    form,\n    field,\n    items,\n    label,\n    disabled,\n    height,\n    fontSize,\n    dataTest,\n    ...props\n}: SelectProps) => {\n    let errorContent;\n    const error = getIn(form.errors, field.name);\n    const touch = getIn(form.touched, field.name);\n\n    errorContent = touch && error && (\n        <StyledErrorContainer>{error}</StyledErrorContainer>\n    );\n\n    return (\n        <StyledFormikField data-test={dataTest}>\n            <PractisSelect\n                {...field}\n                field={field}\n                items={items}\n                label={label}\n                disabled={disabled}\n                height={height}\n                fontSize={fontSize}\n                error={touch && error}\n                dataTest={dataTest}\n                {...props}\n            />\n            {errorContent}\n        </StyledFormikField>\n    );\n};\n\nexport default FormikSelect;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    position: relative;\n`;\n\nexport const Input = styled.input<{ counter?: number, showError: boolean, suffix?: string }>`\n    width: 100%;\n    height: 40px;\n    padding: 11px 12px;\n    padding-right: ${props => props.suffix ? `${8 + props.suffix.length * 8.4}px` : '12px'};\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-black-main);\n    border-radius: 4px;\n    border: solid 1px ${props => props.showError ? 'var(--ps-red-main)' : 'var(--ps-grey-3)'};\n    background-color: var(--ps-grey-3);\n    box-sizing: border-box;\n\n    &:focus {\n        border: solid 1px ${props => props.showError ? 'var(--ps-red-main)' : 'var(--ps-grey-2)'};\n        ${props => typeof props.counter === 'number'\n            ? `padding-right: ${props.suffix\n                ? `${4 + (props.counter.toString().length + props.suffix.length) * 8.4}px`\n                : `${15 + (props.counter.toString().length) * 8.4}px`\n                };`\n            : ''\n        }\n\n        & + div > div {\n            display: block;\n        }\n    }\n\n    &:disabled {\n        color: var(--ps-grey-2);\n    }\n`;\n\nexport const SuffixContainer = styled.div`\n    display: flex;\n    flex-direction: row;\n    position: absolute;\n    right: 0;\n    top: 0;\n`;\n\nexport const Counter = styled.div<{ isMaxLengthExceeded: boolean, hasSuffix: boolean }>`\n    display: none;\n    margin-top: 11px;\n    margin-right: ${props => props.hasSuffix ? '8px' : '12px'};\n    font-size: 13px;\n    color: ${props => props.isMaxLengthExceeded ? 'var(--ps-red-main)' : 'var(--ps-grey-1)'};\n`;\n\nexport const Suffix = styled.div<{ isMaxLengthExceeded: boolean }>`\n    margin-top: 8px;\n    margin-right: 8px;\n    height: 24px;\n    padding: 3px 0 3px 8px;\n    font-size: 13px;\n    line-height: 18px;\n    color: var(--ps-grey-1);\n    border-left: 1px solid ${props => props.isMaxLengthExceeded ? 'var(--ps-red-main)' : 'var(--ps-grey-2)'};\n`;\n\nexport const Label = styled.div`\n    color: var(--ps-grey-1);\n    font-size: 11px;\n    line-height: 16px;\n    font-weight: 500;\n`;\n\nexport const Error = styled.div`\n    color: var(--ps-red-main);\n    font-size: 11px;\n    line-height: 16px;\n    font-weight: 500;\n`;","import { kebabCase } from 'lodash';\n\nexport const encodeStringForAttribute = (value: string, maxLenght: number = 35, maxWords: number = 6) => {\n    const encodedValue = kebabCase(value);\n    if (encodedValue.length <= maxLenght) {\n        return encodedValue;\n    }\n    const words = encodedValue.split('-');\n    return words.slice(0, maxWords).join('-');\n}","import {\n    Container,\n    Input,\n    Counter,\n    Suffix,\n    Label,\n    Error,\n    SuffixContainer,\n} from './styles';\nimport { encodeStringForAttribute } from './tools';\nimport { CustomizedInputViewProps } from './types';\n\nfunction CustomizedInputView({\n    field,\n    inputRef,\n    remainingLength,\n    isMaxLengthExceeded,\n    suffix,\n    label,\n    showError,\n    error,\n    disabled,\n    onChange,\n    dataTest,\n}: CustomizedInputViewProps) {\n    const hasCounter = typeof remainingLength === 'number';\n    return (\n        <Container>\n            <Input\n                {...field}\n                ref={inputRef}\n                counter={remainingLength}\n                suffix={suffix}\n                showError={showError}\n                disabled={disabled}\n                onChange={onChange}\n                data-test={dataTest && `${dataTest}-input`}\n            />\n            <SuffixContainer>\n                {hasCounter && <Counter\n                    isMaxLengthExceeded={isMaxLengthExceeded}\n                    hasSuffix={!!suffix}\n                    data-test={dataTest && `${dataTest}-counter`}\n                >\n                    {remainingLength}\n                </Counter>\n                }\n                {suffix && (\n                    <Suffix\n                        isMaxLengthExceeded={isMaxLengthExceeded}\n                        data-test={dataTest && `${dataTest}-suffix`}\n                    >\n                        {suffix}\n                    </Suffix>\n                )}\n            </SuffixContainer>\n            {showError && (\n                <Error data-test={`${encodeStringForAttribute(error)}-error`}>{error}</Error>\n            )}\n            {label && !showError && (\n                <Label data-test={dataTest && `${dataTest}-label`}>{label}</Label>\n            )}\n        </Container>\n    );\n}\n\nexport default CustomizedInputView;","import { getIn } from 'formik'\nimport { ChangeEvent, useCallback, useEffect, useRef } from 'react';\nimport { CustomizedInputProps } from './types';\nimport CustomizedInputView from './view';\n\nfunction CustomizedInput({\n    form,\n    field,\n    maxLength,\n    autoFocus,\n    suffix,\n    label,\n    disabled,\n    transformValue,\n    dataTest,\n}: CustomizedInputProps) {\n    const error = getIn(form.errors, field.name);\n    const isTouched = !!getIn(form.touched, field.name);\n    const remainingLength = maxLength ? Math.max(maxLength - field.value?.length, 0) : undefined;\n    const isMaxLengthExceeded = !!maxLength && maxLength < field.value?.length;\n    const showError = (isTouched || isMaxLengthExceeded) && !!error;\n    const inputRef = useRef<HTMLInputElement>(null);\n\n    const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n        const targetValue = e.target?.value;\n        const value = transformValue ? transformValue(targetValue) : targetValue;\n        form.setFieldValue(field.name, value);\n    }, [field.name, form, transformValue]);\n\n    useEffect(() => {\n        if (autoFocus && inputRef.current) {\n            inputRef.current.focus();\n        }\n    }, [autoFocus]);\n\n    return (\n        <CustomizedInputView\n            remainingLength={remainingLength}\n            field={field}\n            inputRef={inputRef}\n            suffix={suffix}\n            label={label}\n            isMaxLengthExceeded={isMaxLengthExceeded}\n            showError={showError}\n            error={error}\n            disabled={disabled}\n            onChange={handleChange}\n            dataTest={dataTest}\n        />\n    );\n}\n\nexport default CustomizedInput;","import { Field, Formik } from 'formik';\nimport {\n    StyledForm,\n    FieldContainer,\n    FieldName,\n    Footer,\n    Content,\n} from './styles';\nimport { Button } from '../../../../ui/components/Button';\nimport { CompanyDetailsViewProps, CompanyDetailsFormValues } from './types';\nimport { ValidationSchema } from './constants';\nimport { FormikSelect } from '../../../../ui/components/FormikSelect';\nimport { CustomizedInput } from '../../../../ui/components/CustomizedInput';\n\nfunction CompanyDetailsView({\n    formRef,\n    initialValues,\n    companyAdminItems,\n    onSubmit,\n    onApiResultValidation,\n}: CompanyDetailsViewProps) {\n    return (\n        <Formik<CompanyDetailsFormValues>\n            ref={formRef}\n            initialValues={initialValues}\n            onSubmit={onSubmit}\n            validationSchema={ValidationSchema}\n            validate={onApiResultValidation}\n        >\n            {({ values, dirty, isValid, isSubmitting, handleChange }) => {\n                return (\n                    <StyledForm>\n                        <Content>\n                            <FieldContainer>\n                                <FieldName data-test=\"company-name-title\">Name</FieldName>\n                                <Field\n                                    name=\"name\"\n                                    component={CustomizedInput}\n                                    maxLength={80}\n                                    height=\"40px\"\n                                    disabled={isSubmitting}\n                                    dataTest=\"company-name-input\"\n                                />\n                            </FieldContainer>\n                            <FieldContainer>\n                                <FieldName data-test=\"workspace-url-title\">Workspace URL</FieldName>\n                                <Field\n                                    name=\"workspaceUrl\"\n                                    component={CustomizedInput}\n                                    height=\"40px\"\n                                    disabled={true}\n                                    dataTest=\"workspace-url-input\"\n                                />\n                            </FieldContainer>\n                            <FieldContainer>\n                                <FieldName data-test=\"account-owner-title\">Account Owner</FieldName>\n                                <Field\n                                    type=\"text\"\n                                    items={companyAdminItems}\n                                    value={values.ownerId}\n                                    component={FormikSelect}\n                                    onChange={handleChange}\n                                    height={40}\n                                    variant=\"outlined\"\n                                    name=\"ownerId\"\n                                    className=\"company-select\"\n                                    dataTest=\"account-owner-dropdown\"\n                                />\n                            </FieldContainer>\n                        </Content>\n                        <Footer>\n                            <Button\n                                width=\"130px\"\n                                height=\"40px\"\n                                disabled={!dirty || !isValid || isSubmitting}\n                                loadingColor=\"white\"\n                                loadingSize={24}\n                                loading={isSubmitting}\n                                dataTest=\"apply-button\"\n                            >\n                                Apply\n                            </Button>\n                        </Footer>\n                    </StyledForm>\n                );\n            }}\n        </Formik>\n    )\n}\n\nexport default CompanyDetailsView;","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport CompanyDetailsView from './view';\nimport { ApiValidationError, CompanyAdminSelectItem, CompanyDetailsFormValues, CompanyDetailsProps } from './types';\nimport { useClearCompanyAdmins, useGetCompanyAdmins } from '../../store/services';\nimport { useUserRolesState } from '../../../../features/roles/store/states';\nimport { useLoadUserRolesService } from '../../../../features/roles/store/services';\nimport { useCompanyAdminsState } from '../../store/states';\nimport { useUpdateCompanyNameApi, useSetCompanyOwnerApi } from '../../../../api';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { API_ERROR_MESSAGE, NAME_ALREADY_EXISTS_ERROR, NO_ACCOUNT_OWNER_TEXT } from './constants';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\n\nfunction CompanyDetails({ company, onCompanyUpdate }: CompanyDetailsProps) {\n    const formRef = useRef<any>(null);\n    const [nameApiError, setNameApiError] = useState<ApiValidationError | undefined>();\n    const companyAdmins = useCompanyAdminsState().data;\n    const getCompanyAdmins = useGetCompanyAdmins();\n    const userRoles = useUserRolesState();\n    const loadUserRoles = useLoadUserRolesService();\n    const updateCompanyNameApi = useUpdateCompanyNameApi();\n    const setCompanyOwnerApi = useSetCompanyOwnerApi();\n    const clearCompanyAdmins = useClearCompanyAdmins();\n    const showMessage = useShowMessage();\n\n    const companyAdminItems = useMemo(() => {\n        if (!companyAdmins) return;\n        const emptyItem = { name: NO_ACCOUNT_OWNER_TEXT, value: null } as CompanyAdminSelectItem;\n        const mainItems = companyAdmins.map(admin => ({\n            name: admin.firstName + ' ' + admin.lastName,\n            value: admin.id,\n        }));\n        return [emptyItem].concat(mainItems);\n    }, [companyAdmins]);\n\n    const initialValues = useMemo(() => {\n        return {\n            name: company.name,\n            workspaceUrl: company.subdomain ? `${company.subdomain}.gopractis.com` : '',\n            ownerId: !!company.owner?.id && !!companyAdminItems?.find(item => item.value === company.owner!.id)\n                ? company.owner.id\n                : null\n        } as CompanyDetailsFormValues\n    }, [company.name, company.owner, company.subdomain, companyAdminItems]);\n\n    const handleApiResultValidation = useCallback((values: CompanyDetailsFormValues) => {\n        const errors: Record<string, string> = {};\n        if (values.name === nameApiError?.paramValue) {\n            errors.name = nameApiError.error;\n        }\n        return errors;\n    }, [nameApiError]);\n\n    const handleError = useCallback((e: ErrorResult, values: CompanyDetailsFormValues) => {\n        switch(e.message) {\n            case NAME_ALREADY_EXISTS_ERROR:\n                setNameApiError({\n                    paramValue: values.name,\n                    error: API_ERROR_MESSAGE[NAME_ALREADY_EXISTS_ERROR]\n                });\n                break;\n            default:\n                showMessage(e.message, 'error');\n                break;\n        }\n        formRef.current.setSubmitting(false);\n        formRef.current.validateForm();\n    }, [showMessage]);\n\n    const handleSubmit = useCallback((values: CompanyDetailsFormValues) => {\n        const companyNamePromise = company.name?.toLowerCase() !== values.name.toLowerCase()\n            ? updateCompanyNameApi(company.id!, values.name)\n            : Promise.resolve();\n        companyNamePromise\n            .then(() => {\n                const isOwnerChanged = !!company.owner?.id\n                    ? company.owner?.id !== values.ownerId\n                    : !!values.ownerId;\n                const ownerPromise = isOwnerChanged\n                    ? setCompanyOwnerApi(company.id!, values.ownerId!)\n                    : Promise.resolve();\n                ownerPromise\n                    .then(() => {\n                        formRef.current.setSubmitting(false);\n                        formRef.current.resetForm(values);\n                        onCompanyUpdate();\n                    })\n                    .catch((e: ErrorResult) => {\n                        handleError(e, values);\n                    });\n            })\n            .catch((e: ErrorResult) => {\n                handleError(e, values);\n            });\n    }, [company, handleError, onCompanyUpdate, updateCompanyNameApi, setCompanyOwnerApi]);\n\n    useEffect(() => {\n        if (!userRoles?.list?.length) {\n            loadUserRoles();\n        }\n    }, [userRoles?.list?.length, loadUserRoles]);\n\n    useEffect(() => {\n        if (userRoles?.list?.length) {\n            getCompanyAdmins(userRoles.list, company.id!);\n        }\n    }, [getCompanyAdmins, company.id, userRoles?.list]);\n\n    useEffect(() => {\n        formRef.current.resetForm(initialValues);\n    }, [initialValues]);\n\n    useEffect(() => {\n        return () => {\n            clearCompanyAdmins();\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    return (\n        <CompanyDetailsView\n            formRef={formRef}\n            initialValues={initialValues}\n            companyAdminItems={companyAdminItems}\n            onSubmit={handleSubmit}\n            onApiResultValidation={handleApiResultValidation}\n        />\n    )\n}\n\nexport default CompanyDetails;","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    padding: 24px;\n    width: 440px;\n`;\n\nexport const TipText = styled.div`\n    padding-top: 8px;\n    color: var(--ps-black-main);\n    font-size: 13px;\n`;\n\nexport const Buttons = styled.div`\n    padding-top: 24px;\n    width: 330px;\n    display: flex;\n    justify-content: space-between;\n`;\n","import styled from 'styled-components';\n\nexport const Counts = styled.div`\n    font-size: 13px;\n    color: var(--ps-grey-1);\n`;","import Skeleton from '@material-ui/lab/Skeleton';\nimport { CompanyUserStatsInfoViewProps } from './types';\nimport {\n    Counts\n} from './styles';\nimport CompanyUserStatsTextView from '../CompanyUserStatsText/view';\n\nfunction CompanyUserStatsInfoView({\n    userStats\n}: CompanyUserStatsInfoViewProps) {\n    return (\n        <>\n            {userStats ? (<>\n                <CompanyUserStatsTextView\n                    userStats={userStats}\n                    showUnlimited={true}\n                    style={{ fontSize: '15px', fontWeight: 'bolder', color: 'var(--ps-black-main)', height: 'auto' }}\n                />\n                <Counts>\n                    <span data-test=\"registered-users-count\">{userStats.registered} Registered</span>&nbsp;•&nbsp;\n                    <span data-test=\"pending-users-count\">{userStats.pending} Pending Registration</span>&nbsp;•&nbsp;\n                    <span data-test=\"deactivated-users-count\">{userStats.deactivated} Deactivated</span>\n                </Counts>\n            </>) : (<>\n                <Skeleton\n                    variant=\"text\"\n                    style={{ background: 'var(--ps-grey-3)' }}\n                    width={170}\n                    height={20}\n                />\n                <Skeleton\n                    variant=\"text\"\n                    style={{ background: 'var(--ps-grey-3)' }}\n                    width={320}\n                    height={20}\n                />\n            </>)}\n        </>\n    );\n}\n\nexport default CompanyUserStatsInfoView;","import { useEffect } from 'react';\nimport { useGetCompanyUserStatsService } from '../../../pages/CompanySettings/store/services';\nimport { useCompanyUserStatsState } from '../../../pages/CompanySettings/store/states';\nimport { CompanyUserStatsInfoProps } from './types';\nimport CompanyUserStatsInfoView from './view';\n\nfunction CompanyUserStatsInfo({\n    companyId,\n}: CompanyUserStatsInfoProps) {\n    const userStatsState = useCompanyUserStatsState();\n    const getCompanyUserStats = useGetCompanyUserStatsService();\n\n    useEffect(() => {\n        getCompanyUserStats(companyId);\n    }, [companyId, getCompanyUserStats]);\n\n    return (\n        <CompanyUserStatsInfoView\n            userStats={userStatsState.data}\n        />\n    );\n}\n\nexport default CompanyUserStatsInfo;","import { CompanyUserLimitViewProps } from './types';\nimport { Buttons, Container, TipText } from './styles';\nimport { CompanyUserStatsInfo } from '../../../../ui/components/CompanyUserStatsInfo';\nimport { Button } from '../../../../ui/components/Button';\n\nfunction CompanyUserLimitView({\n    companyId,\n    onRequestLimitChange,\n    onManageInvitations,\n}: CompanyUserLimitViewProps) {\n    return (\n        <Container>\n            <CompanyUserStatsInfo companyId={companyId} />\n            <TipText data-test=\"limit-tip\">\n                💡 <b>Quick tip:</b> You may be able to find unaccepted invitations and revoke them, which will free up some seats.\n            </TipText>\n            <Buttons>\n                <Button\n                    height=\"40px\"\n                    action={onRequestLimitChange}\n                    dataTest=\"request-limit-change-button\"\n                >\n                    Request Limit Change\n                </Button>\n                <Button\n                    height=\"40px\"\n                    variant=\"inverse\"\n                    action={onManageInvitations}\n                    dataTest=\"manage-invitations-button\"\n                >\n                    Manage Invitations\n                </Button>\n            </Buttons>\n        </Container>\n    );\n}\n\nexport default CompanyUserLimitView;","import { useCallback } from 'react';\nimport { CompanyUserLimitProps } from './types';\nimport CompanyUserLimitView from './view';\nimport { useHistory } from '../../../../tools/router';\nimport { useSelector } from 'react-redux';\nimport { getProfileState } from '../../../UserProfile/store/reducers';\nimport ROUTES from '../../../../routes/routes';\nimport { sendEmail } from '../../../../helpers/functions/email-helpers';\n\nfunction CompanyUserLimit({\n    company\n}: CompanyUserLimitProps) {\n    const history = useHistory();\n    const profile = useSelector(getProfileState);\n\n    const handleRequestLimitChange = useCallback(() => {\n        if (!profile) return;\n        sendEmail(\n            `Licensed seats limit change request from ${profile.firstName} ${profile.lastName} at ${company.name}`\n        );\n    }, [company, profile]);\n\n    const handleManageInvitations = useCallback(() => {\n        history.push(ROUTES.INVITATIONS);\n    }, [history]);\n\n    return (\n        <CompanyUserLimitView\n            companyId={company.id!}\n            onRequestLimitChange={handleRequestLimitChange}\n            onManageInvitations={handleManageInvitations}\n        />\n    );\n}\n\nexport default CompanyUserLimit;","import styled from 'styled-components';\nimport { makeStyles } from '@material-ui/core';\n\nexport const Container = styled.div<{ hasFooter: boolean }>`\n    display: flex;\n    justify-content: center;\n    flex-wrap: wrap;\n    flex-direction: column;\n    align-items: center;\n    height: ${props => props.hasFooter ? 'calc(100% - 65px)' : '100%'};\n`;\n\nexport const InfoText = styled.div`\n  font-family: Manrope;\n  font-size: 13px;\n  font-weight: normal;\n  margin-right: 30px;\n`;\n\nexport const LinkInfo = styled.a`\nfont-family: Manrope;\n  font-size: 13px;\n  font-weight: normal;\n  font-stretch: normal;\n  color: var(--ps-blue-main);\n  text-decoration: none;\n  margin-right: 34px;\n`;\n\nexport const useStyles = makeStyles(() => ({\n    companyLogoUploader: {\n        marginBottom: '60px'\n    }\n}));\n\n\nexport const Footer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    border-top: 1px solid var(--ps-grey-4);\n    padding: 23px 5px 0 5px;\n    width: 100%;\n    height: 64px;\n    align-items: center;\n    padding: 0 24px 0 0;\n    box-sizing: border-box;\n`;\n\nexport const NextButton = styled.div`\n    width: 40px;\n    height: 40px;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: center;\n    border-radius: 4px;\n    border: 1px solid var(--ps-blue-main);\n    margin-left: 16px;\n    cursor: pointer;\n`;\n\nexport const NextButtonIcon = styled.div`\n    width: 9px;\n    height: 14px;\n    color: var(--ps-blue-main);\n    position: relative;\n    display: flex;\n`;\n\nexport const Wrapper = styled.div`\n  width: 100%;\n  display: flex;\n  height: 100%;\n  justify-content: center;\n  align-items: center;\n  flex-direction: column;\n  justify-content: space-between;\n`;","import { ImageUploader } from '../../../../ui/components/ImageUploader';\nimport { Container, InfoText, LinkInfo, useStyles } from './styles';\nimport { MAX_COMPANY_LOGO_SIZE } from './constants';\nimport { CompanyUpdateLogoViewProps } from './types';\nimport {\n    Footer,\n    NextButton,\n    NextButtonIcon,\n    Wrapper\n} from './styles';\nimport ArrowRight from '../../../../ui/icons/ArrowRight';\n\nfunction CompanyUpdateLogoView({\n    company,\n    showGuidelines,\n    isInProgress,\n    onNext,\n    setProfileImage,\n    deleteLogo\n} : CompanyUpdateLogoViewProps ) {\n    const classes = useStyles();\n    const hasFooter = !!onNext;\n\n    return <Wrapper>\n        <Container hasFooter={hasFooter}>\n            <ImageUploader\n                setProfileImage={setProfileImage}\n                initialImage={company?.logoUrl}\n                placeHolder={company?.name?.charAt(0).toUpperCase() || ''}\n                dataTest=\"company-logo\"\n                className={classes.companyLogoUploader}\n                maxImageSize={MAX_COMPANY_LOGO_SIZE}\n                onFileDelete={deleteLogo}\n                rectStyled={true}\n                isInProgress={isInProgress}\n            />\n            <InfoText data-test=\"company-logo-info\">\n                PNG, JPG, JPEG • Less than 2 MB\n            </InfoText>\n            {showGuidelines &&\n                <LinkInfo\n                    href=\"https://docs.google.com/document/d/11TjuZ2KiHSpqstobHeAfp9OhOMOa6gpkMAbGcHvU1aY/edit?pli=1\"\n                    target=\"_blank\"\n                    data-test=\"company-logo-guidelines\"\n                >\n                    Guidelines\n                </LinkInfo>\n            }\n        </Container>\n        {hasFooter && (\n            <Footer>\n                <NextButton onClick={onNext} data-test=\"next-button\">\n                    <NextButtonIcon><ArrowRight /></NextButtonIcon>\n                </NextButton>\n            </Footer>\n        )}\n    </Wrapper>\n}\n\nexport default CompanyUpdateLogoView;","export const MAX_COMPANY_LOGO_SIZE = 2097152","import { CompanyUpdateLogoProps } from './types';\nimport { useDeleteCompanyLogoApi } from '../../../../api';\nimport CompanyUpdateLogoView from './view';\nimport { useUploadLogoService } from '../../store/services';\nimport { useCallback, useEffect, useState } from 'react';\n\nfunction CompanyUpdateLogo({\n    company,\n    showGuidelines,\n    onNext,\n    onCompanyUpdate\n} : CompanyUpdateLogoProps) {\n    const [isInProgress, setIsInProgress] = useState(false);\n    const uploadCompanyLogo = useUploadLogoService();\n    const deleteCompanyLogo = useDeleteCompanyLogoApi();\n\n    const setProfileImage = useCallback((image: File) => {\n        if (!company?.id) return;\n        setIsInProgress(true);\n        uploadCompanyLogo(company.id, image)\n            .then(onCompanyUpdate);\n    }, [company?.id, onCompanyUpdate, uploadCompanyLogo]);\n\n    const deleteLogo = useCallback(() => {\n        if (!company?.id) return;\n        setIsInProgress(true);\n        deleteCompanyLogo(company?.id)\n            .then(onCompanyUpdate);\n    }, [company?.id, deleteCompanyLogo, onCompanyUpdate]);\n\n    useEffect(() => {\n        setIsInProgress(false);\n    }, [company]);\n\n    return <CompanyUpdateLogoView\n        company={company}\n        showGuidelines={showGuidelines}\n        isInProgress={isInProgress}\n        deleteLogo={deleteLogo}\n        setProfileImage={setProfileImage}\n        onNext={onNext}\n    />;\n}\n\nexport default CompanyUpdateLogo;","import { VoiceSettingsRole } from '../../../../constants/interfaces/CompanyVoiceSettings';\nimport { VoiceSettingsSelectItem } from './types';\n\nexport const DEFAULT_CUSTOMER_SAMPLE_TEXT = 'Hello can you help me with something? I bought these wireless headphones online last week. Sound is horrible. Total disappointment. Just want someone to set me up with a quality pair of headphones.';\nexport const DEFAULT_REP_SAMPLE_TEXT = 'Sorry to hear that. The headphone market is so saturated these days. It can be really difficult to make an informed decision. Especially when buying online. I can help. These are the new headphones by InTunes. Everybody loves these!';\n\nexport const RoleItems: VoiceSettingsSelectItem<VoiceSettingsRole>[] = [\n    {\n        name: 'Customer',\n        value: 'customer'\n    },\n    {\n        name: 'Representative',\n        value: 'representative'\n    }\n];","import { Form } from 'formik';\nimport styled from 'styled-components';\n\nexport const StyledForm = styled(Form)`\n    height: 100%;\n`;\n\nexport const Content = styled.div`\n    width: 400px;\n    height: 498px;\n    margin: 24px 24px 43px 24px;\n    box-sizing: border-box;\n`;\n\nexport const FieldContainer = styled.div`\n    height: 78px;\n\n    .company-select {\n        width: 400px;\n        border: solid 1px var(--ps-grey-3);\n\n        &.company-select-open {\n            border: solid 1px var(--ps-grey-2);\n        }\n\n        .company-select-input > div {\n            color: var(--ps-black-main);\n        }\n\n        .company-select-input > div[disabled] {\n            color: var(--ps-grey-2);\n        }\n\n        .content-area {\n            padding: 8px 0;\n\n            > div {\n                padding: 5px 12px;\n                border-radius: 0;\n                margin-bottom: 0;\n                min-height: auto;\n                font-weight: 400;\n\n                &.selected-item {\n                    color: var(--ps-white-1);\n                    background: var(--ps-blue-main);\n                }\n\n                &:hover {\n                    color: var(--ps-white-1);\n                    background: var(--ps-blue-main);\n                }\n            }\n        }\n    }\n\n    .company-select-label {\n        left: 12px;\n    }\n\n    .company-select-arrow {\n        right: 12px;\n    }\n\n    .company-select-input {\n        padding: 0 12px;\n    }\n`;\n\nexport const FieldName = styled.div`\n    font-size: 13px;\n    font-weight: 800;\n    color: var(--ps-black-main);\n    padding-bottom: 4px;\n    display: flex;\n    flex-direction: row;\n`;\n\nexport const Footer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    border-top: 1px solid var(--ps-grey-4);\n    align-items: center;\n    padding-right: 24px;\n    height: 64px;\n`;","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport InputRange from 'react-input-range';\nimport { Variables } from '../../../../theme/variables';\nimport { countDecimals } from '../../../../helpers/functions/count-decimals';\n\nexport interface Range {\n    max: number;\n    min: number;\n}\n\nconst RangeSliderContainer = styled.div<{ color: string; disabled?: boolean }>`\n    margin-bottom: 24px;\n    font-family: 'Manrope';\n    .input-range {\n        height: 1rem;\n        position: relative;\n        width: 100%;\n    }\n    .input-range__slider {\n        appearance: none;\n        border-radius: 100%;\n        cursor: pointer;\n        display: block;\n        height: 16px;\n        width: 16px;\n        margin-left: -8px;\n        margin-top: -9px;\n        outline: none;\n        position: absolute;\n        top: 50%;\n        transition: transform 0.3s ease-out, box-shadow 0.3s ease-out;\n    }\n    .input-range__slider:active {\n        transform: scale(1.05);\n    }\n    .input-range__slider:focus {\n        box-shadow: 0 0 0 5px rgba(63, 81, 181, 0.2);\n    }\n    .input-range--disabled .input-range__slider {\n        background: #cccccc;\n        border: 1px solid #cccccc;\n        box-shadow: none;\n        transform: none;\n    }\n\n    .input-range__slider-container {\n        transition: left 0.3s ease-out;\n    }\n\n    .input-range__label {\n        color: #aaaaaa;\n        font-family: 'Helvetica Neue', san-serif;\n        font-size: 0.8rem;\n        transform: translateZ(0);\n        white-space: nowrap;\n    }\n\n    .input-range__label--min,\n    .input-range__label--max {\n        bottom: -1.4rem;\n        position: absolute;\n    }\n\n    .input-range__label--min {\n        left: 0;\n        span {\n            left: 0;\n        }\n    }\n\n    .input-range__label--max {\n        right: 0;\n        span {\n            left: 0 !important;\n        }\n    }\n\n    .input-range__label--value {\n        position: absolute;\n        top: -1.8rem;\n    }\n\n    .input-range__label-container {\n        left: -50%;\n        position: relative;\n        color: ${props => props.theme.Colors.steelGrey};\n        font-size: 11px;\n        font-family: 'Manrope';\n    }\n    .input-range__label--max .input-range__label-container {\n        left: 50%;\n    }\n\n    .input-range__track {\n        background: #eeeeee;\n        border-radius: 0.3rem;\n        cursor: pointer;\n        display: block;\n        height: 1px;\n        position: relative;\n        transition: left 0.3s ease-out, width 0.3s ease-out;\n    }\n    .input-range--disabled .input-range__track {\n        background: #eeeeee;\n    }\n\n    .input-range__track--background {\n        left: 0;\n        margin-top: -0.15rem;\n        position: absolute;\n        right: 0;\n        top: 50%;\n    }\n\n    .input-range__track--active {\n        background: #3f51b5;\n    }\n\n    && .input-range__track--active {\n        background: ${props =>\n            props.disabled ? Variables.Colors.cloudyBlue : props.color};\n    }\n\n    && .input-range__slider {\n        background: ${props =>\n            props.disabled ? Variables.Colors.cloudyBlue : '#e4f2fb'};\n        border: 1px solid\n            ${props =>\n                props.disabled ? Variables.Colors.cloudyBlue : props.color};\n    }\n`;\n\nconst Label = styled.div`\n    font-size: 13px;\n    color: ${Variables.Colors.steelGrey};\n    margin-bottom: 23px;\n`;\n\nexport const RangeInput: FC<{\n    min: number;\n    max: number;\n    value: number | { min: number; max: number };\n    onChange: (value: number | Range) => void;\n    step?: number;\n    color?: string;\n    label?: string;\n    disabled?: boolean;\n    formatLabel?: (value: number, type: string) => string;\n    dataTest?: string;\n}> = ({\n    min,\n    max,\n    value,\n    onChange,\n    color,\n    label,\n    step,\n    disabled,\n    formatLabel,\n    dataTest,\n}) => {\n    const decimals = step ? countDecimals(step) : 0;\n    return (\n        <RangeSliderContainer\n            disabled={disabled}\n            color={color ? color : Variables.Colors.darkSkyBlue}\n        >\n            {label && <Label data-test={dataTest && `${dataTest}-label`}>{label}</Label>}\n            <span data-test={dataTest && `${dataTest}-slider`}>\n                <InputRange\n                    disabled={disabled}\n                    maxValue={max}\n                    minValue={min}\n                    onChange={onChange}\n                    value={value}\n                    step={step}\n                    draggableTrack={false}\n                    formatLabel={formatLabel ?? (value => `${value.toFixed(decimals)}`)}\n                />\n            </span>\n        </RangeSliderContainer>\n    );\n};\n","export const countDecimals = function(value: number) {\n    if (Math.floor(value) === value) return 0;\n    return value.toString().split('.')[1].length || 0;\n};\n","export const formatStabilityLabel = (value: number, type: string) => {\n    switch(type) {\n        case 'min':\n            return 'More variable';\n        case 'max':\n            return 'More stable';\n        default:\n            return '';\n    }\n};\n\nexport const formatSimilarityLabel = (value: number, type: string) => {\n    switch(type) {\n        case 'min':\n            return 'Low';\n        case 'max':\n            return 'High';\n        default:\n            return '';\n    }\n};","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const Sound = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, width, height }, ref) => {\n        return (\n            <svg\n                ref={ref}\n                viewBox=\"0 0 16 16\"\n                className={className}\n                width={width ?? 16}\n                height={height ?? 16}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            >\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.563 2.069A.75.75 0 0 1 8 2.75v10.5a.75.75 0 0 1-1.238.57L3.472 11H1.75A1.75 1.75 0 0 1 0 9.25v-2.5C0 5.784.784 5 1.75 5h1.723l3.289-2.82a.75.75 0 0 1 .801-.111zM6.5 4.38 4.238 6.319a.75.75 0 0 1-.488.181h-2a.25.25 0 0 0-.25.25v2.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .488.18L6.5 11.62V4.38zm6.096-2.038a.75.75 0 0 1 1.06 0 8 8 0 0 1 0 11.314.75.75 0 0 1-1.06-1.06 6.5 6.5 0 0 0 0-9.193.75.75 0 0 1 0-1.06v-.001zm-1.06 2.121a.75.75 0 1 0-1.061 1.061 3.5 3.5 0 0 1 0 4.95.75.75 0 1 0 1.06 1.06 5 5 0 0 0 0-7.07l.001-.001z\" fill=\"currentColor\"/>\n            </svg>\n        );\n    }\n);\n\nexport default Sound;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ isFocused: boolean }>`\n    position: relative;\n\n    .voice-sample-textbox {\n        border-radius: 4px;\n        padding: 7px 11px;\n        background: var(--ps-grey-3);\n        border: 1px solid ${props => props.isFocused ? 'var(--ps-grey-2)' : 'var(--ps-grey-3)'};\n\n        textarea {\n            padding: 0;\n            min-height: 108px;\n            font-size: 13px;\n            line-height: 18px!important;\n            background: transparent!important;;\n\n            &:disabled {\n                color: var(--ps-grey-2);\n            }\n        }\n    }\n`;\n\nexport const PlayButton = styled.div<{ isActive: boolean }>`\n    position: absolute;\n    left: 12px;\n    bottom: 8px;\n    color: ${props => props.isActive ? 'var(--ps-blue-main)' : 'var(--ps-grey-2)'};\n    cursor: ${props => props.isActive && props.onClick ? 'pointer' : 'default'};\n    display: flex;\n    align-items: center;\n\n    span {\n        padding-left: 4px;\n    }\n`","import { Variables } from '../../../../../../theme/variables';\nimport { Loading } from '../../../../../../ui/components/LoadingCopmonent';\nimport TextAreaPlaceholderBox from '../../../../../../ui/components/TextAreaPlaceholderBox/TextAreaPlaceholderBox';\nimport Sound from '../../../../../../ui/icons/Sound';\nimport StopCircle from '../../../../../../ui/icons/StopCircle';\nimport { Container, PlayButton } from './styles';\nimport { VoiceSampleTextViewProps } from './types';\n\nfunction VoiceSampleTextView({\n    value,\n    isFocused,\n    canPlay,\n    status,\n    blobUrl,\n    audioRef,\n    dataTest,\n    onChange,\n    setIsFocused,\n    onAudioLoaded,\n    onPlay,\n    onStop,\n}: VoiceSampleTextViewProps) {\n    return (\n        <Container isFocused={isFocused}>\n            <TextAreaPlaceholderBox\n                max={250}\n                maxRows={6}\n                minHeight=\"140px\"\n                placeholder=\"Type or paste text here. The model works best on longer fragments.\"\n                value={value}\n                className=\"voice-sample-textbox\"\n                counterColor={Variables.Colors.cloudyBlue}\n                disabled={status !== 'stopped'}\n                onChange={e => onChange(e.target.value)}\n                onFocus={() => setIsFocused(true)}\n                onBlur={() => setIsFocused(false)}\n                dataTest={dataTest}\n            />\n            {status === 'stopped' && <>\n                <PlayButton\n                    isActive={canPlay}\n                    onClick={onPlay}\n                    data-test={dataTest && `${dataTest}-listen`}\n                >\n                    <Sound /><span>Listen</span>\n                </PlayButton>\n            </>}\n            {status === 'generating' && <>\n                <PlayButton\n                    isActive={true}\n                    data-test={dataTest && `${dataTest}-generating`}\n                >\n                    <Loading size={16} /><span>Generating...</span>\n                </PlayButton>\n            </>}\n            {status === 'playing' && <>\n                <PlayButton\n                    isActive={true}\n                    onClick={onStop}\n                    data-test={dataTest && `${dataTest}-stop`}\n                >\n                    <StopCircle /><span>Stop</span>\n                </PlayButton>\n            </>}\n            <audio\n                src={blobUrl}\n                ref={audioRef}\n                onLoadedData={onAudioLoaded}\n                onEnded={onStop}\n            />\n        </Container>\n    )\n}\n\nexport default VoiceSampleTextView;","import { useCallback, useEffect, useState, useRef } from 'react'\nimport { VoiceSampleStatus, VoiceSampleTextProps } from './types';\nimport VoiceSampleTextView from './view';\nimport { generateAudioWithElevenLabs } from '../../../../../../services/ElevenLabs';\n\nfunction VoiceSampleText({\n    settings,\n    initialValue,\n    isDisabled,\n    dataTest,\n    onAction,\n}: VoiceSampleTextProps) {\n    const [isFocused, setIsFocused] = useState(false);\n    const [value, setValue] = useState<string | undefined>();\n    const [status, setStatus] = useState<VoiceSampleStatus>('stopped');\n    const [blobUrl, setBlobUrl] = useState<string | undefined>();\n    const audioRef = useRef<HTMLAudioElement>(null);\n\n    const resultValue = value ?? initialValue;\n    const canPlay = resultValue.trim().length > 0 && !isDisabled;\n\n    /**\n     * @function handleStop\n     * @description stops audio play and sets stopped status\n     * @returns { void }\n     */\n    const handleStop = useCallback(() => {\n        audioRef.current!.pause();\n        audioRef.current!.currentTime = 0;\n        setStatus('stopped');\n    }, []);\n\n    /**\n     * @function handleChange\n     * @description stores new value in the state and resets audio data\n     * @param { string } val\n     * @returns { void }\n     */\n    const handleChange = useCallback((val: string) => {\n        setValue(val);\n        handleStop();\n        setBlobUrl(undefined);\n    }, [handleStop]);\n\n    /**\n     * @function handleAudioLoaded\n     * @description plays audio and sets playing status\n     * @returns { void }\n     */\n    const handleAudioLoaded = useCallback(() => {\n        audioRef.current!.play();\n        setStatus('playing');\n    }, []);\n\n    /**\n     * @function handlePlay\n     * @description if audio is already generated, plays it. otherwise, it sends a request to generate a new audio and then plays it\n     * @returns { void }\n     */\n    const handlePlay = useCallback(() => {\n        if (!canPlay) return;\n        if (blobUrl) {\n            handleAudioLoaded();\n        } else {\n            setStatus('generating');\n            generateAudioWithElevenLabs({\n                text: resultValue,\n                stability: settings.stability,\n                similarityBoost: settings.similarity,\n                voiceId: settings.voice\n            }).then(blob => {\n                const url = URL.createObjectURL(blob);\n                setBlobUrl(url);\n            });\n        }\n    }, [canPlay, blobUrl, handleAudioLoaded, resultValue, settings]);\n\n    useEffect(() => {\n        onAction(status !== 'stopped');\n    }, [onAction, status]);\n\n    useEffect(() => {\n        handleStop();\n        setBlobUrl(undefined);\n    }, [handleStop, settings]);\n\n    return (\n        <VoiceSampleTextView\n            value={resultValue}\n            isFocused={isFocused}\n            canPlay={canPlay}\n            status={status}\n            blobUrl={blobUrl}\n            audioRef={audioRef}\n            dataTest={dataTest}\n            onChange={handleChange}\n            setIsFocused={setIsFocused}\n            onAudioLoaded={handleAudioLoaded}\n            onPlay={handlePlay}\n            onStop={handleStop}\n        />\n    )\n}\n\nexport default VoiceSampleText;","import { ChangeEvent } from 'react'\nimport { upperFirst } from 'lodash';\nimport { PartialVoiceSettingsViewProps } from './types';\nimport {\n    AdvancedFieldContainer,\n    AdvancedSettingsHeader,\n    AdvancedSettingsTitle,\n    FieldContainer,\n    FieldName,\n    QuestionContainer,\n    ResetButton,\n    SampleTextContainer,\n    TooltipContainer,\n    TootlipContent,\n    TootlipTitle,\n} from './styles';\nimport { Field } from 'formik';\nimport { FormikSelect } from '../../../../../../ui/components/FormikSelect';\nimport { QuestionTooltip } from '../../../../../../ui/components/Tooltip/QuestionTooltip';\nimport { RangeInput } from '../../../../../../ui/components/RangeInput';\nimport { formatSimilarityLabel, formatStabilityLabel } from './helpers';\nimport { VoiceSampleText } from '../VoiceSampleText';\n\nfunction PartialVoiceSettingsView({\n    role,\n    voiceItems,\n    values,\n    initialSampleText,\n    isDisabled,\n    canReset,\n    getFieldName,\n    setFieldValue,\n    onReset,\n    onSampleAction,\n}: PartialVoiceSettingsViewProps) {\n    return (\n        <>\n            <FieldContainer>\n                <FieldName data-test=\"voice-title\">\n                    {upperFirst(role)}'s Voice\n                </FieldName>\n                <Field\n                    items={voiceItems}\n                    value={values.voice}\n                    component={FormikSelect}\n                    onChange={(e: ChangeEvent<HTMLInputElement>) => setFieldValue(getFieldName('voice'), e.target.value)}\n                    height={40}\n                    variant=\"outlined\"\n                    name={getFieldName('voice')}\n                    className=\"company-select\"\n                    disabled={isDisabled}\n                    dataTest=\"voice-dropdown\"\n                />\n            </FieldContainer>\n            <AdvancedSettingsHeader>\n                <AdvancedSettingsTitle data-test=\"advanced-settings-title\">\n                    ADVANCED VOICE SETTINGS\n                </AdvancedSettingsTitle>\n                <ResetButton\n                    isActive={canReset}\n                    onClick={onReset}\n                    data-test=\"to-default-button\"\n                >\n                    To Default\n                </ResetButton>\n            </AdvancedSettingsHeader>\n            <AdvancedFieldContainer>\n                <FieldName>\n                    <span data-test=\"stability-title\">Stability</span>\n                    <QuestionContainer>\n                        <QuestionTooltip\n                            text={<TooltipContainer>\n                                <TootlipTitle>More variable</TootlipTitle>\n                                <TootlipContent>Increasing variability can make speech more expressive with output varying between re-generations. It can also lead to instabilities.</TootlipContent>\n                                <TootlipTitle>More stable</TootlipTitle>\n                                <TootlipContent>Increasing stability will make the voice more consistent between re-generations, but it can also make it sounds a bit monotone. On longer text fragments we recommend lowering this value.</TootlipContent>\n                            </TooltipContainer>}\n                            isHtmlContent={true}\n                            dataTest='stability-tooltip'\n                        />\n                    </QuestionContainer>\n                </FieldName>\n                <RangeInput\n                    min={0}\n                    max={1}\n                    value={values.stability}\n                    onChange={value => setFieldValue(getFieldName('stability'), value as number)}\n                    step={0.01}\n                    disabled={isDisabled}\n                    dataTest=\"stability-slider\"\n                    formatLabel={formatStabilityLabel}\n                />\n            </AdvancedFieldContainer>\n            <AdvancedFieldContainer>\n                <FieldName>\n                    <span data-test=\"similarity-title\">Clarity + Similarity Enhancement</span>\n                    <QuestionContainer>\n                        <QuestionTooltip\n                            text={<TooltipContainer>\n                                <TootlipTitle>Low</TootlipTitle>\n                                <TootlipContent>Low values are recommended if background artifacts are present in generated speech.</TootlipContent>\n                                <TootlipTitle>High</TootlipTitle>\n                                <TootlipContent>It boosts overall voice clarity and target speaker similarity. Very high values can cause artifacts, so adjusting this setting to find the optimal value is encouraged.</TootlipContent>\n                            </TooltipContainer>}\n                            isHtmlContent={true}\n                            dataTest='similarity-tooltip'\n                        />\n                    </QuestionContainer>\n                </FieldName>\n                <RangeInput\n                    min={0}\n                    max={1}\n                    value={values.similarity}\n                    onChange={value => setFieldValue(getFieldName('similarity'), value as number)}\n                    step={0.01}\n                    disabled={isDisabled}\n                    dataTest=\"similarity-slider\"\n                    formatLabel={formatSimilarityLabel}\n                />\n            </AdvancedFieldContainer>\n            <SampleTextContainer>\n                <FieldName data-test=\"sample-text-title\">Sample Text</FieldName>\n                <VoiceSampleText\n                    settings={values}\n                    initialValue={initialSampleText}\n                    isDisabled={isDisabled}\n                    dataTest=\"sample-text-input\"\n                    onAction={onSampleAction}\n                />\n            </SampleTextContainer>\n        </>\n    )\n}\n\nexport default PartialVoiceSettingsView;","import { useCallback, useMemo } from 'react';\nimport { PartialVoiceSettingsProps } from './types';\nimport PartialVoiceSettingsView from './view';\nimport { VoiceSettingsSelectItem } from '../../types';\nimport { DEFAULT_CUSTOMER_VOICE_ID, DEFAULT_REP_VOICE_ID } from '../../../../../../features/textToSpeech/constants';\n\nfunction PartialVoiceSettings({\n    role,\n    voices,\n    defaultSimilarity,\n    defaultStability,\n    initialSampleText,\n    values,\n    isDisabled,\n    setFieldValue,\n    onSampleAction,\n}: PartialVoiceSettingsProps) {\n    const canReset = !isDisabled\n        && (values.similarity !== defaultSimilarity\n            || values.stability !== defaultStability);\n    const defaultVoiceId = role === 'customer' ? DEFAULT_CUSTOMER_VOICE_ID : DEFAULT_REP_VOICE_ID;\n\n    const voiceItems = useMemo(() => {\n        return voices\n            .map(voice => {\n                return {\n                    name: voice.name + (voice.voice_id === defaultVoiceId ? ' (Default)' : ''),\n                    value: voice.voice_id\n                } as VoiceSettingsSelectItem<string>\n            })\n            .sort((item1, item2) => {\n                if (item1.value === defaultVoiceId) {\n                    return -1;\n                }\n                if (item2.value === defaultVoiceId) {\n                    return 1;\n                }\n                return item1.name >= item2.name ? 1 : -1\n            });\n    }, [defaultVoiceId, voices]);\n\n    /**\n     * @function getFieldName\n     * @description builds form field name based on current role\n     * @param { string } name\n     * @returns { boolean }\n     */\n    const getFieldName = useCallback(\n        (name: string) => `${role}.${name}`,\n        [role]\n    );\n\n    /**\n     * @function handleReset\n     * @description sets advanced fields to default values if reset is available\n     * @returns { void }\n     */\n    const handleReset = useCallback(() => {\n        if (!canReset) return;\n        setFieldValue(getFieldName('stability'), defaultStability);\n        setFieldValue(getFieldName('similarity'), defaultSimilarity);\n    }, [canReset, defaultSimilarity, defaultStability, getFieldName, setFieldValue]);\n\n    return (\n        <PartialVoiceSettingsView\n            role={role}\n            voiceItems={voiceItems}\n            values={values}\n            initialSampleText={initialSampleText}\n            isDisabled={isDisabled}\n            canReset={canReset}\n            getFieldName={getFieldName}\n            setFieldValue={setFieldValue}\n            onReset={handleReset}\n            onSampleAction={onSampleAction}\n        />\n    );\n}\n\nexport default PartialVoiceSettings;","import Skeleton from '@material-ui/lab/Skeleton';\nimport styled from 'styled-components';\n\nexport const StyledSkeleton = styled(Skeleton)`\n    background: var(--ps-grey-4);\n    border-radius: 0!important;\n    height: 8px!important;\n    transform: none!important;\n`;\n\nexport const InputSkeleton = styled.div<{ padding: string }>`\n    background: var(--ps-grey-3);\n    padding: ${props => props.padding};\n`;\n\nexport const TwoElementsContainer = styled.div<{ padding: string }>`\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: space-between;\n    padding: ${props => props.padding};\n`;","import {\n    InputSkeleton,\n    StyledSkeleton,\n    TwoElementsContainer\n} from './styles';\n\nfunction VoiceSettingsSkeleton() {\n    return (\n        <>\n            <StyledSkeleton\n                width={38}\n                style={{ marginTop: '7px', marginBottom: '8px' }}\n            />\n            <InputSkeleton padding=\"17px 12px 15px 12px\">\n                <StyledSkeleton width={114} />\n            </InputSkeleton>\n            <TwoElementsContainer padding=\"23px 0 0 0\">\n                <StyledSkeleton width={163} />\n                <StyledSkeleton width={62} />\n            </TwoElementsContainer>\n            <StyledSkeleton\n                width={77}\n                style={{ marginTop: '18px' }}\n            />\n            <StyledSkeleton\n                width={400}\n                style={{ marginTop: '12px' }}\n            />\n            <StyledSkeleton\n                width={123}\n                style={{ marginTop: '40px' }}\n            />\n            <StyledSkeleton\n                width={400}\n                style={{ marginTop: '12px' }}\n            />\n            <StyledSkeleton\n                width={77}\n                style={{ marginTop: '49px', marginBottom: '8px' }}\n            />\n            <InputSkeleton padding=\"14px 12px 12px 12px\">\n                <StyledSkeleton width={376} />\n                <StyledSkeleton\n                    width={348}\n                    style={{ marginTop: '10px' }}\n                />\n                <StyledSkeleton\n                    width={265}\n                    style={{ marginTop: '10px' }}\n                />\n                <TwoElementsContainer padding=\"70px 0 0 0\">\n                    <StyledSkeleton width={58} />\n                    <StyledSkeleton width={58} />\n                </TwoElementsContainer>\n            </InputSkeleton>\n        </>\n    );\n}\n\nexport default VoiceSettingsSkeleton;","import { ChangeEvent } from 'react'\nimport { Formik } from 'formik';\nimport { CompanyVoiceFormValues, CompanyVoiceViewProps } from './types';\nimport { DEFAULT_CUSTOMER_SAMPLE_TEXT, DEFAULT_REP_SAMPLE_TEXT, RoleItems } from './constants';\nimport { Button } from '../../../../ui/components/Button';\nimport Select from '../../../../ui/components/Select/Select';\nimport {\n    Content,\n    FieldContainer,\n    FieldName,\n    Footer,\n    StyledForm,\n} from './styles';\nimport { PartiaVoiceSettings } from './components/PartialVoiceSettings';\nimport { VoiceSettingsSkeleton } from './components/VoiceSettingsSkeleton';\nimport { VoiceSettingsRole } from '../../../../constants/interfaces/CompanyVoiceSettings';\nimport {\n    DEFAULT_CUSTOMER_VOICE_SIMILARITY,\n    DEFAULT_CUSTOMER_VOICE_STABILITY,\n    DEFAULT_REP_VOICE_SIMILARITY,\n    DEFAULT_REP_VOICE_STABILITY\n} from '../../../../features/textToSpeech/constants';\n\nfunction CompanyVoiceView({\n    formRef,\n    role,\n    voices,\n    initialFormValues,\n    canChange,\n    isLoading,\n    onChangeRole,\n    onSampleAction,\n    onSubmit,\n}: CompanyVoiceViewProps) {\n    return (\n        <Formik<CompanyVoiceFormValues>\n            ref={formRef}\n            initialValues={initialFormValues}\n            onSubmit={onSubmit}\n        >\n            {({ values, dirty, isValid, isSubmitting, setFieldValue }) => {\n                return (\n                    <StyledForm>\n                        <Content>\n                            <FieldContainer>\n                                <FieldName data-test=\"role-title\">Role</FieldName>\n                                <Select\n                                    items={RoleItems}\n                                    value={role}\n                                    height={40}\n                                    onChange={(e: ChangeEvent<HTMLInputElement>) => onChangeRole(e.target.value as VoiceSettingsRole)}\n                                    className=\"company-select\"\n                                    disabled={!canChange || isSubmitting}\n                                    dataTest=\"role-dropdown\"\n                                />\n                            </FieldContainer>\n                            {isLoading && <VoiceSettingsSkeleton />}\n                            {!isLoading && (\n                                <>\n                                    <div style={{ display: role === 'customer' ? 'block' : 'none' }}>\n                                        <PartiaVoiceSettings\n                                            role={role}\n                                            voices={voices}\n                                            defaultSimilarity={DEFAULT_CUSTOMER_VOICE_SIMILARITY}\n                                            defaultStability={DEFAULT_CUSTOMER_VOICE_STABILITY}\n                                            initialSampleText={DEFAULT_CUSTOMER_SAMPLE_TEXT}\n                                            values={values.customer}\n                                            isDisabled={!canChange || isSubmitting}\n                                            setFieldValue={setFieldValue}\n                                            onSampleAction={onSampleAction}\n                                        />\n                                    </div>\n                                    <div style={{ display: role === 'representative' ? 'block' : 'none' }}>\n                                        <PartiaVoiceSettings\n                                            role={role}\n                                            voices={voices}\n                                            defaultSimilarity={DEFAULT_REP_VOICE_SIMILARITY}\n                                            defaultStability={DEFAULT_REP_VOICE_STABILITY}\n                                            initialSampleText={DEFAULT_REP_SAMPLE_TEXT}\n                                            values={values.representative}\n                                            isDisabled={!canChange || isSubmitting}\n                                            setFieldValue={setFieldValue}\n                                            onSampleAction={onSampleAction}\n                                        />\n                                    </div>\n                                </>\n                            )}\n                        </Content>\n                        <Footer>\n                            <Button\n                                width=\"130px\"\n                                height=\"40px\"\n                                disabled={!dirty || !isValid || isSubmitting}\n                                loadingColor=\"white\"\n                                loadingSize={24}\n                                loading={isSubmitting}\n                                dataTest=\"apply-button\"\n                            >\n                                Apply\n                            </Button>\n                        </Footer>\n                    </StyledForm>\n                );\n            }}\n        </Formik>\n    );\n}\n\nexport default CompanyVoiceView;","import { useEffect, useState, useRef, useCallback, useMemo } from 'react';\nimport CompanyVoiceView from './view';\nimport { getElevenLabsVoices } from '../../../../services/ElevenLabs';\nimport { CompanyVoiceFormValues, CompanyVoiceProps } from './types';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { useSetCompanyVoiceSettingsApi } from '../../../../api';\nimport { CompanyVoiceSettings, VoiceSettingsRole } from '../../../../constants/interfaces/CompanyVoiceSettings';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { useCompanyVoiceSettingsState } from '../../store/states';\nimport { useLoadVoiceSettingsService } from '../../store/services';\nimport { getTextToSpeechSettingsOrDefault } from '../../../../features/textToSpeech/helpers';\nimport { VoiceData } from '../../../../services/ElevenLabs/types';\n\nfunction CompanyVoice({ companyId }: CompanyVoiceProps) {\n    const [role, setRole] = useState<VoiceSettingsRole>('customer');\n    const [voices, setVoices] = useState<VoiceData[]>([]);\n    const { data: voiceSettings, loading } = useCompanyVoiceSettingsState();\n    const loadVoiceSettings = useLoadVoiceSettingsService();\n   const [isSampleInProgress, setIsSampleInProgress] = useState(false);\n    const formRef = useRef<any>(null);\n    const showMessage = useShowMessage();\n    const setCompanyVoiceSettingsApi = useSetCompanyVoiceSettingsApi();\n\n    const initialFormValues = useMemo((): CompanyVoiceFormValues => {\n        const settingsOrDefault = getTextToSpeechSettingsOrDefault(voiceSettings);\n        return {\n            customer: {\n                voice: settingsOrDefault.customer.voiceId,\n                stability: settingsOrDefault.customer.stability,\n                similarity: settingsOrDefault.customer.similarityBoost,\n            },\n            representative: {\n                voice: settingsOrDefault.representative.voiceId,\n                stability: settingsOrDefault.representative.stability,\n                similarity: settingsOrDefault.representative.similarityBoost,\n            }\n        };\n    }, [voiceSettings]);\n\n    const handleChangeRole = useCallback((role: VoiceSettingsRole) => {\n        setRole(role);\n    }, []);\n\n    /**\n     * @function handleSubmit\n     * @description transforms form values to API data, sends API request to save voice settings and resets form with current values\n     * @param { CompanyVoiceFormValues } values\n     * @returns { void }\n     */\n    const handleSubmit = useCallback((values: CompanyVoiceFormValues) => {\n        const data: CompanyVoiceSettings[] = [{\n            companyId,\n            role: 'customer',\n            voiceId: values.customer.voice,\n            stability: values.customer.stability,\n            similarityBoost: values.customer.similarity,\n            style: 0\n        }, {\n            companyId,\n            role: 'representative',\n            voiceId: values.representative.voice,\n            stability: values.representative.stability,\n            similarityBoost: values.representative.similarity,\n            style: 0\n        }];\n        return setCompanyVoiceSettingsApi(data)\n            .then(() => {\n                formRef.current.resetForm(values);\n                formRef.current.setSubmitting(false);\n            })\n            .catch((e: ErrorResult) => {\n                showMessage(e.message, 'error');\n                formRef.current.setSubmitting(false);\n            });\n    }, [companyId, setCompanyVoiceSettingsApi, showMessage]);\n    \n    useEffect(() => {\n        loadVoiceSettings(companyId);\n        getElevenLabsVoices()\n            .then(response => {\n                setVoices(response.voices);\n            })\n            .catch(e => {\n                showMessage('Voices loading error', 'error');\n            });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        formRef.current.resetForm(initialFormValues);\n    }, [initialFormValues]);\n\n    return (\n        <CompanyVoiceView\n            formRef={formRef}\n            role={role}\n            voices={voices}\n            initialFormValues={initialFormValues}\n            canChange={!isSampleInProgress}\n            isLoading={loading}\n            onChangeRole={handleChangeRole}\n            onSampleAction={setIsSampleInProgress}\n            onSubmit={handleSubmit}\n        />\n    )\n}\n\nexport default CompanyVoice;","import { Switch } from 'react-router-dom';\nimport PrivateRoute from '../../routes/PrivateRouter';\nimport { ModalWithCross } from '../../ui/components/ModalWithCross';\nimport DetailsNav from '../../ui/icons/DetailsNav';\nimport Seats from '../../ui/icons/Seats';\nimport LogoNav from '../../ui/icons/LogoNav';\nimport Voice from '../../ui/icons/Voice';\nimport ROUTES from '../../routes/routes';\nimport { CompanySettingsViewProps } from './types';\nimport {\n    CompanyName,\n    ModalContent,\n    ModalSidebar,\n    ModalTitle,\n    NavigationIcon,\n    NavigationItem,\n    TabContent\n} from './styles';\nimport { CompanyDetails } from './components/CompanyDetails';\nimport { CompanyUserLimit } from './components/CompanyUserLimit';\nimport { CompanyUpdateLogo } from './components/CompanyUpdateLogo';\nimport { CompanyVoice } from './components/CompanyVoice';\n\nfunction CompanySettingsView({\n    company,\n    onClose,\n    onCompanyUpdate,\n    createNavigationDescriptor,\n}: CompanySettingsViewProps) {\n    const isCompanyLoaded = !!company?.id;\n\n    return (\n        <ModalWithCross\n            titleContent={\n                <ModalTitle>\n                    <span data-test=\"company-settings-modal-title\">Company Settings</span>\n                    {isCompanyLoaded &&\n                        <CompanyName>\n                            &nbsp;•&nbsp;\n                            <span data-test=\"company-name-modal-title\">{company!.name}</span>\n                        </CompanyName>\n                    }\n                </ModalTitle>\n            }\n            onClose={onClose}\n            width={790}\n            dataTest=\"company-settings-modal\"\n        >\n            <ModalContent>\n                <ModalSidebar>\n                    <NavigationItem\n                        to={createNavigationDescriptor(ROUTES.COMPANY_SETTINGS.ROOT)}\n                        activeClassName={'is-active'}\n                        exact\n                        data-test=\"details-tab\"\n                    >\n                        <NavigationIcon><DetailsNav /></NavigationIcon>\n                        Details\n                    </NavigationItem>\n                    <NavigationItem\n                        to={createNavigationDescriptor(ROUTES.COMPANY_SETTINGS.LOGO)}\n                        activeClassName={'is-active'}\n                        data-test=\"logo-tab\"\n                    >\n                        <NavigationIcon><LogoNav /></NavigationIcon>\n                        Logo\n                    </NavigationItem>\n                    <NavigationItem\n                        to={createNavigationDescriptor(ROUTES.COMPANY_SETTINGS.USER_LIMIT)}\n                        activeClassName={'is-active'}\n                        data-test=\"licensed-seats-tab\"\n                    >\n                        <NavigationIcon><Seats /></NavigationIcon>\n                        Licensed Seats\n                    </NavigationItem>\n                    <NavigationItem\n                        to={createNavigationDescriptor(ROUTES.COMPANY_SETTINGS.VOICE)}\n                        activeClassName={'is-active'}\n                        data-test=\"voice-tab\"\n                    >\n                        <NavigationIcon><Voice /></NavigationIcon>\n                        AI Voice\n                    </NavigationItem>\n                </ModalSidebar>\n                <TabContent>\n                    <Switch>\n                        <PrivateRoute\n                            path={ROUTES.COMPANY_SETTINGS.ROOT}\n                            exact\n                        >\n                            {isCompanyLoaded &&\n                                <CompanyDetails\n                                    company={company!}\n                                    onCompanyUpdate={onCompanyUpdate}\n                                />\n                            }\n                        </PrivateRoute>\n                        <PrivateRoute\n                            path={ROUTES.COMPANY_SETTINGS.LOGO}\n                            exact\n                        >\n                            {isCompanyLoaded &&\n                                <CompanyUpdateLogo\n                                    company={company!}\n                                    onCompanyUpdate={onCompanyUpdate}\n                                />\n                            }\n                        </PrivateRoute>\n                        <PrivateRoute\n                            path={ROUTES.COMPANY_SETTINGS.USER_LIMIT}\n                            exact\n                        >\n                            {isCompanyLoaded && (\n                                <CompanyUserLimit\n                                    company={company!}\n                                />\n                            )}\n                        </PrivateRoute>\n                        <PrivateRoute\n                            path={ROUTES.COMPANY_SETTINGS.VOICE}\n                            exact\n                        >\n                            {isCompanyLoaded && (\n                                <CompanyVoice\n                                    companyId={company!.id!}\n                                />\n                            )}\n                        </PrivateRoute>\n                    </Switch>\n                </TabContent>\n            </ModalContent>\n        </ModalWithCross>\n    );\n}\n\nexport default CompanySettingsView;","import { useHistory } from '../../tools/router';\nimport { useCallback, useEffect } from 'react';\nimport { CompanySettingsProps } from './types';\nimport CompanySettingsView from './view';\nimport { useSelector } from 'react-redux';\nimport { getCompanyState } from './store/reducers';\nimport { useGetCompanyService } from './store/services';\nimport { getProfileState } from '../UserProfile/store/reducers';\n\nfunction CompanySettings({\n    closeGoingBack,\n    closePath,\n}: CompanySettingsProps) {\n    const company = useSelector(getCompanyState);\n    const profile = useSelector(getProfileState);\n    const getCompany = useGetCompanyService();\n    const history = useHistory();\n    const prevLocation = history.location.state?.prevLocation ?? history.location.state?.background;\n\n    const handleClose = useCallback(() => {\n        if (closeGoingBack && prevLocation) {\n            history.replace(prevLocation.pathname);\n        } else {\n            history.replace(closePath);\n        }\n    }, [closeGoingBack, closePath, history, prevLocation]);\n\n    const createNavigationDescriptor = useCallback((route: string) => {\n        return {\n            pathname: route,\n            state: { background: prevLocation },\n        }\n    }, [prevLocation]);\n\n    const loadCompany = useCallback(\n        () => getCompany(profile!.companyId),\n        [getCompany, profile]\n    );\n\n    useEffect(() => {\n        if (profile?.companyId) {\n            loadCompany();\n        }\n    }, [getCompany, loadCompany, profile?.companyId]);\n\n    return (\n        <CompanySettingsView\n            company={company}\n            onCompanyUpdate={loadCompany}\n            onClose={handleClose}\n            createNavigationDescriptor={createNavigationDescriptor}\n        />\n    )\n}\n\nexport default CompanySettings;","import { SidebarFiltersConfig } from '../../../features/filters/filters-sidebar/types';\n\nexport const TrainingTimeReportFiltersConfig: SidebarFiltersConfig[] = [\n    {\n        filterType: 'MULTIPLE_SELECT_TEAMS',\n    },\n    {\n        filterType: 'LABELS',\n    },\n    {\n        filterType: 'DATE',\n    }\n];","import styled from 'styled-components';\n\nexport const SubHeader = styled.div`\n    font-size: 13px;\n    color: var(--ps-black-main);\n`;","import { FiltersSidebar } from '../../../features/filters/filters-sidebar';\nimport ROUTES from '../../../routes/routes';\nimport MainWrapper from '../../../ui/wrapper/MainWrapper/MainWrapper';\nimport { TrainingTimeReportFiltersConfig } from './constants';\nimport { SubHeader } from './styles';\nimport { TrainingTimeReportViewProps } from './types';\n\nfunction TrainingTimeReportView({\n    onClearFilters, onGenerateReport, controlPanelMode, remainingTimeout\n}: TrainingTimeReportViewProps) {\n    return (\n        <MainWrapper\n            title=\"Reports\"\n            subTitle=\"Training Time Report\"\n            subHeader={\n                <SubHeader data-test=\"training-time-report-page-description\">\n                    Tracking overall training time by learners by date range.\n                </SubHeader>\n            }\n            htmlPageTitle=\"Reports - Practis\"\n            goBackUrl={ROUTES.REPORTS.LIST_OF_REPORTS}\n            headerPadding=\"0 24px\"\n            headerMinHeight=\"124px\"\n            contentPadding=\"0\"\n            isScrollable={false}\n            contentSize={false}\n            dataTest=\"training-time-report\"\n        >\n            <FiltersSidebar\n                filtersConfig={TrainingTimeReportFiltersConfig}\n                onClearFilters={onClearFilters}\n                onGenerateReport={onGenerateReport}\n                controlPanelMode={controlPanelMode}\n                remainingTimeout={remainingTimeout}\n                headerHeight=\"124px\"\n            />\n        </MainWrapper>\n    );\n}\n\nexport default TrainingTimeReportView;","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { useMultipleTeamsFilterState } from '../../../features/filters/dynamic-filter/multiple-teams-filter/store/reducers';\nimport { useGenerateReportService, useGetReportAvailabilityService } from '../../../features/filters/filters-sidebar/services';\nimport { ReportingControlPanelMode } from '../../../ui/components/ReportingControlPanel/types';\nimport TrainingTimeReportView from './view';\nimport { useTeamsState } from '../../../features/teams/store/states';\nimport { usePortableLabelsState } from '../../../features/portableLabels/store/states';\nimport { useLabelsState } from '../../../features/portableLabels/store/hors/withLabels/states';\nimport { WithLabelsContext } from '../../../features/portableLabels';\nimport { ReportType } from '../../../constants/interfaces/ReportItem';\nimport { useHistory } from '../../../tools/router';\nimport ROUTES from '../../../routes/routes';\nimport { useClearMultipleTeamsFilter, useDisableMultipleTeamsFilter } from '../../../features/filters/dynamic-filter/multiple-teams-filter/store/services';\nimport { useClearLabelsFilter, useDisableLabelsFilter } from '../../../features/filters/dynamic-filter/labels-filter/store/services';\nimport { useDateRangeState } from '../../../features/filters/dynamic-filter/date-filter/store/reducers';\nimport { useResetDateRange } from '../../../features/filters/dynamic-filter/date-filter/store/services';\nimport { DATE_FORMAT } from '../BillingReport/constants';\nimport dayjs from 'dayjs';\n\nfunction TrainingTimeReportController() {\n    const { isGenerating, remainingTimeout, generateReport } = useGenerateReportService();\n    const { isAvailable, getReportAvailability } = useGetReportAvailabilityService();\n    const { selectedTeamIds } = useMultipleTeamsFilterState();\n    const { loading: isTeamsLoading } = useTeamsState();\n    const { loading: isLabelsLoading } = usePortableLabelsState();\n    const { selected: selectedLabels } = useLabelsState();\n    const { dateRange } = useDateRangeState();\n    const clearMultipleTeamsFilter = useClearMultipleTeamsFilter();\n    const disableMultipleTeamsFilter = useDisableMultipleTeamsFilter();\n    const clearLabelsFilter = useClearLabelsFilter();\n    const clearDateRangeFilter = useResetDateRange();\n    const disableLabelsFilter = useDisableLabelsFilter();\n    const history = useHistory();\n\n    const isDisabled = (!selectedTeamIds?.length && !selectedLabels.length)\n        || !(dateRange?.start && dateRange?.end);\n\n    const handleClearFilters = useCallback(() => {\n        clearMultipleTeamsFilter();\n        clearLabelsFilter();\n        clearDateRangeFilter()\n        history.replace(ROUTES.REPORTS.TRAINING_TIME_REPORT);\n    }, [clearLabelsFilter, clearMultipleTeamsFilter, clearDateRangeFilter, history]);\n\n    const controlPanelMode: ReportingControlPanelMode = useMemo(() => {\n        if (remainingTimeout) {\n            return 'timeout';\n        }\n        \n        if (isTeamsLoading || isLabelsLoading || isGenerating) {\n            return 'loading';\n        }\n\n        if (isDisabled) {\n            return 'disabled';\n        }\n\n        if (!isAvailable) {\n            return 'noData';\n        }\n\n        return 'enabled';\n    }, [remainingTimeout, isTeamsLoading, isLabelsLoading, isGenerating, isDisabled, isAvailable]);\n\n    const getReportParams = useCallback(() => {\n        if (isDisabled) return;\n        return {\n            teams: selectedTeamIds ?? [],\n            labels: selectedLabels?.length\n                        ? selectedLabels.filter(id => id > 0)\n                        : selectedLabels,\n            dateStart: dateRange?.start && dayjs(new Date(dateRange?.start)).format(DATE_FORMAT),\n            dateEnd: dateRange?.end && dayjs(new Date(dateRange?.end)).format(DATE_FORMAT)\n        }\n    }, [selectedLabels, selectedTeamIds, dateRange, isDisabled]);\n\n    const handleGenerateReport = useCallback(() => {\n        const params = getReportParams();\n        if (params) {\n            generateReport(ReportType.TRAINING_TIME, params);\n        }\n    }, [generateReport, getReportParams]);\n\n    useEffect(() => {\n        return () => {\n            clearMultipleTeamsFilter();\n            clearLabelsFilter();\n            clearDateRangeFilter();\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    useEffect(() => {\n        const params = getReportParams();\n        if (params) {\n            getReportAvailability(ReportType.TRAINING_TIME, params);\n        }\n    }, [getReportAvailability, getReportParams]);\n\n    useEffect(() => {\n        disableMultipleTeamsFilter(isGenerating);\n        disableLabelsFilter(isGenerating);\n    }, [disableLabelsFilter, disableMultipleTeamsFilter, isGenerating]);\n\n    return (\n        <TrainingTimeReportView\n            onClearFilters={handleClearFilters}\n            onGenerateReport={handleGenerateReport}\n            controlPanelMode={controlPanelMode}\n            remainingTimeout={remainingTimeout}\n        />\n    );\n}\n\nfunction TrainingTimeReportWithLabelsContext() {\n    return (\n        <WithLabelsContext.Provider value={{ reducerName: 'labelsFilter' }}>\n            <TrainingTimeReportController />\n        </WithLabelsContext.Provider>\n    );\n}\n\nexport default TrainingTimeReportWithLabelsContext;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ObjectiveIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clip-path=\"url(#iyfsdcj2ra)\" fill=\"#6D7F8C\">\n        <path d=\"M7.678 7.438a1.876 1.876 0 0 0-2.681 1.69c0 1.034.84 1.875 1.874 1.875a1.876 1.876 0 0 0 1.69-2.681l2.004-2.004h2.499L16 3.382l-2.875-.507L12.618 0 9.682 2.936v2.499L7.678 7.438zm-.807 2.316a.625.625 0 1 1 .001-1.251.625.625 0 0 1-.001 1.25zm4.06-6.3.874-.874.242 1.373 1.373.242-.874.874h-1.615V3.454z\"/>\n        <path d=\"M12.274 7.567A5.628 5.628 0 0 1 6.87 14.75 5.626 5.626 0 0 1 1.249 9.13a5.628 5.628 0 0 1 7.183-5.402v-1.29A6.879 6.879 0 0 0 0 9.128a6.874 6.874 0 0 0 6.87 6.87 6.879 6.879 0 0 0 6.872-6.87 6.84 6.84 0 0 0-.182-1.562h-1.286z\"/>\n        <path d=\"M6.87 6.005c.15 0 .298.011.442.032L8.34 5.01a4.377 4.377 0 0 0-5.84 4.118 4.377 4.377 0 0 0 4.371 4.373A4.377 4.377 0 0 0 10.99 7.66L9.962 8.687a3.127 3.127 0 0 1-3.092 3.565 3.127 3.127 0 0 1-3.123-3.124A3.127 3.127 0 0 1 6.87 6.005z\"/>\n    </g>\n    <defs>\n        <clipPath id=\"iyfsdcj2ra\">\n            <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n        </clipPath>\n    </defs>\n</svg> );\n    }\n);\n\nexport default ObjectiveIcon;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ObjectiveIconActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <g clip-path=\"url(#8xe4jq1bga)\" fill=\"#212121\">\n            <path d=\"M7.678 7.438a1.876 1.876 0 0 0-2.681 1.69c0 1.034.84 1.875 1.873 1.875a1.876 1.876 0 0 0 1.691-2.681l2.004-2.004h2.498L16 3.382l-2.874-.507L12.618 0 9.68 2.936v2.499L7.678 7.438zM6.87 9.754a.625.625 0 1 1 .002-1.251.625.625 0 0 1-.002 1.25zm4.06-6.3.874-.874.243 1.373 1.372.242-.873.874H10.93V3.454z\"/>\n            <path d=\"M12.274 7.567A5.628 5.628 0 0 1 6.87 14.75 5.626 5.626 0 0 1 1.249 9.13a5.628 5.628 0 0 1 7.183-5.402v-1.29A6.879 6.879 0 0 0 0 9.128a6.874 6.874 0 0 0 6.87 6.87 6.879 6.879 0 0 0 6.872-6.87 6.84 6.84 0 0 0-.182-1.562h-1.286z\"/>\n            <path d=\"M6.87 6.005c.15 0 .298.011.443.032L8.339 5.01A4.377 4.377 0 0 0 2.5 9.128a4.377 4.377 0 0 0 4.372 4.373 4.377 4.377 0 0 0 4.118-5.841L9.963 8.687a3.127 3.127 0 0 1-3.092 3.565 3.127 3.127 0 0 1-3.123-3.124A3.127 3.127 0 0 1 6.87 6.005z\"/>\n        </g>\n        <defs>\n            <clipPath id=\"8xe4jq1bga\">\n                <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n            </clipPath>\n        </defs>\n    </svg> );\n    }\n);\n\nexport default ObjectiveIconActive;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ProductIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clip-path=\"url(#o8m0jnx73a)\">\n        <path d=\"M12.33 3.75A4.382 4.382 0 0 0 8 0a4.382 4.382 0 0 0-4.33 3.75H1.125v10.375C1.125 15.159 1.966 16 3 16h10a1.877 1.877 0 0 0 1.875-1.875V3.75H12.33zM8 1.25a3.13 3.13 0 0 1 3.062 2.5H4.938A3.13 3.13 0 0 1 8 1.25zm5.625 12.875c0 .345-.28.625-.625.625H3a.626.626 0 0 1-.625-.625V5h11.25v9.125zM8 12.5c2.36 0 4.375-2.17 4.375-5v-.625h-1.25V7.5c0 2.068-1.402 3.75-3.125 3.75S4.875 9.568 4.875 7.5v-.625h-1.25V7.5c0 2.84 2.023 5 4.375 5z\" fill=\"#6D7F8C\"/>\n    </g>\n    <defs>\n        <clipPath id=\"o8m0jnx73a\">\n            <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n        </clipPath>\n    </defs>\n</svg> );\n    }\n);\n\nexport default ProductIcon;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ProductIconActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (\n            <svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clip-path=\"url(#jnibpiuuwa)\">\n        <path d=\"M12.33 3.75A4.382 4.382 0 0 0 8 0a4.382 4.382 0 0 0-4.33 3.75H1.125v10.375C1.125 15.159 1.966 16 3 16h10a1.877 1.877 0 0 0 1.875-1.875V3.75H12.33zM8 1.25a3.13 3.13 0 0 1 3.062 2.5H4.938A3.13 3.13 0 0 1 8 1.25zm5.625 12.875c0 .345-.28.625-.625.625H3a.626.626 0 0 1-.625-.625V5h11.25v9.125zM8 12.5c2.36 0 4.375-2.17 4.375-5v-.625h-1.25V7.5c0 2.068-1.402 3.75-3.125 3.75S4.875 9.568 4.875 7.5v-.625h-1.25V7.5c0 2.84 2.023 5 4.375 5z\" fill=\"#212121\"/>\n    </g>\n    <defs>\n        <clipPath id=\"jnibpiuuwa\">\n            <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n        </clipPath>\n    </defs>\n</svg>);\n    }\n);\n\nexport default ProductIconActive;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ProspectIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clip-path=\"url(#k19nog47na)\">\n        <path d=\"M13.657 10.343a7.97 7.97 0 0 0-3.04-1.907 4.623 4.623 0 0 0 2.008-3.811A4.63 4.63 0 0 0 8 0a4.63 4.63 0 0 0-4.625 4.625c0 1.58.796 2.977 2.008 3.811a7.968 7.968 0 0 0-3.04 1.907A7.947 7.947 0 0 0 0 16h1.25a6.751 6.751 0 0 1 3.159-5.713l1.638 1.97 1.328-1.12V16h1.25v-4.877l1.365 1.131 1.614-1.959A6.751 6.751 0 0 1 14.75 16H16a7.948 7.948 0 0 0-2.343-5.657zm-7.454.147-.65-.781a6.704 6.704 0 0 1 2.113-.45L6.203 10.49zM4.625 4.625A3.379 3.379 0 0 1 8 1.25a3.379 3.379 0 0 1 3.375 3.375A3.379 3.379 0 0 1 8 8a3.379 3.379 0 0 1-3.375-3.375zm5.197 5.867-1.49-1.234a6.705 6.705 0 0 1 2.13.457l-.64.777z\" fill=\"#6D7F8C\"/>\n    </g>\n    <defs>\n        <clipPath id=\"k19nog47na\">\n            <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n        </clipPath>\n    </defs>\n</svg>);\n    }\n);\n\nexport default ProspectIcon;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const ProspectIconActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <g clip-path=\"url(#6ru8l4o1ha)\">\n            <path d=\"M13.657 10.343a7.97 7.97 0 0 0-3.04-1.907 4.623 4.623 0 0 0 2.008-3.811A4.63 4.63 0 0 0 8 0a4.63 4.63 0 0 0-4.625 4.625c0 1.58.796 2.977 2.008 3.811a7.968 7.968 0 0 0-3.04 1.907A7.947 7.947 0 0 0 0 16h1.25a6.751 6.751 0 0 1 3.159-5.713l1.638 1.97 1.328-1.12V16h1.25v-4.877l1.365 1.131 1.614-1.959A6.751 6.751 0 0 1 14.75 16H16a7.948 7.948 0 0 0-2.343-5.657zm-7.454.147-.65-.781a6.704 6.704 0 0 1 2.113-.45L6.203 10.49zM4.625 4.625A3.379 3.379 0 0 1 8 1.25a3.379 3.379 0 0 1 3.375 3.375A3.379 3.379 0 0 1 8 8a3.379 3.379 0 0 1-3.375-3.375zm5.197 5.867-1.49-1.234a6.705 6.705 0 0 1 2.13.457l-.64.777z\" fill=\"#212121\"/>\n        </g>\n        <defs>\n            <clipPath id=\"6ru8l4o1ha\">\n                <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n            </clipPath>\n        </defs>\n    </svg>);\n    }\n);\n\nexport default ProspectIconActive;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SituationIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clip-path=\"url(#40w8w2vhfa)\">\n        <path d=\"M4.375 1.875a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0zM.625 5.938v1.937h5V5.937c0-.862-.7-1.562-1.563-1.562H2.188c-.862 0-1.562.7-1.562 1.563zM12.875.625h-2.25a2.5 2.5 0 0 0-2.5 2.5v2.5h4.75a2.5 2.5 0 0 0 0-5zm0 7.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zm-2.5 5.313v1.937h5v-1.938c0-.862-.7-1.562-1.563-1.562h-1.874c-.863 0-1.563.7-1.563 1.563zm-9.75-.563a2.5 2.5 0 0 0 2.5 2.5h4.75v-2.5a2.5 2.5 0 0 0-2.5-2.5h-2.25a2.5 2.5 0 0 0-2.5 2.5z\" stroke=\"#6D7F8C\" stroke-width=\"1.3\" stroke-miterlimit=\"10\"/>\n    </g>\n    <defs>\n        <clipPath id=\"40w8w2vhfa\">\n            <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n        </clipPath>\n    </defs>\n</svg>);\n    }\n);\n\nexport default SituationIcon;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SituationIconActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className }, ref) => {\n        return (<svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <g clip-path=\"url(#r9v6jdbmua)\">\n            <path d=\"M4.375 1.875a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0zM.625 5.938v1.937h5V5.937c0-.862-.7-1.562-1.563-1.562H2.188c-.862 0-1.562.7-1.562 1.563zM12.875.625h-2.25a2.5 2.5 0 0 0-2.5 2.5v2.5h4.75a2.5 2.5 0 0 0 0-5zm0 7.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zm-2.5 5.313v1.937h5v-1.938c0-.862-.7-1.562-1.563-1.562h-1.874c-.863 0-1.563.7-1.563 1.563zm-9.75-.563a2.5 2.5 0 0 0 2.5 2.5h4.75v-2.5a2.5 2.5 0 0 0-2.5-2.5h-2.25a2.5 2.5 0 0 0-2.5 2.5z\" stroke=\"#212121\" stroke-width=\"1.3\" stroke-miterlimit=\"10\"/>\n        </g>\n        <defs>\n            <clipPath id=\"r9v6jdbmua\">\n                <path fill=\"#fff\" d=\"M0 0h16v16H0z\"/>\n            </clipPath>\n        </defs>\n    </svg>);\n    }\n);\n\nexport default SituationIconActive;","export const SalesMethologies = [{\n    name: \"None (default)\",\n    value: 'null'\n},{\n    name: \"Focuses on teaching, tailoring, and taking control. Challenge the customer's thinking by offering unique insights and pushing them out of their comfort zone. Best for complex sales environments where customers are well-informed.\",\n    value: 'The Challenger Sale',\n}, {\n    name: \"Emphasizes building a relationship as a trusted advisor. Uses a non-traditional approach by avoiding hard selling and instead encourages the customer to discover their own needs through guided questioning. Suitable for creating long-term customer relationships.\",\n    value: 'Sandler Sales Training'\n}, {\n    name: \"Centers around four types of questions — Situation, Problem, Implication, Need-payoff. Aims to lead the customer through a discovery process, identifying and understanding their problems and the impact of solving these. Effective for high-value, consultative sales.\",\n    value: 'SPIN Selling'\n}, {\n    name: \"Focuses on understanding and managing complex sales processes. This methodology involves identifying key decision-makers, understanding customer organization, and strategically aligning sales efforts. Ideal for B2B sales with multiple stakeholders.\",\n    value: 'Miller-Heiman'\n}, {\n    name: \"Based on the principle of diagnosing the customer's needs and then offering the best solution. Involves active listening, problem identification, and addressing specific pain points with tailored solutions. Suitable for selling products or services that require customization to client needs.\",\n    value: 'Solution Selling'\n}]","import styled from 'styled-components';\n\nexport const Container = styled.div`\n    padding: 0 24px 24px 24px;\n\n    .sales-method-select {\n        border: 0px;\n\n        .sales-method-select-input {\n            width: calc(100% - 10px);\n            div {\n                color: var(--ps-black-1);\n                text-overflow: ellipsis;\n                overflow: hidden;\n            }\n        }\n        .content-area {\n            padding: 0px\n        }\n        .selected-item, .content-area > div  {\n            padding: 8px;\n            margin: 0px;\n            border-radius: 0px;\n            display: inline-block;\n            font-size: 15px;\n            width: 100%;\n\n            .bold-text {\n                color: var(--ps-grey-1);\n\n                b {\n                    color: var(--ps-black-1)\n                }\n            }\n        }\n\n        .selected-item, .content-area > div:hover {\n            background: var(--ps-blue-main);\n\n            .bold-text {\n                color: var(--ps-white-1) !important;\n                b {\n                    color: var(--ps-white-1) !important;\n                }\n\n            }\n        }\n    }\n`;\n\nexport const Title = styled.div`\n    display: flex;\n    justify-content: space-between;\n    font-size: 13px;\n    font-weight: 600;\n    margin-bottom: 5px;\n`;\n\nexport const TitleContainer = styled.div`\n    display: flex;\n`;\n","import { Field, Formik } from \"formik\";\nimport { ChangeEvent } from \"react\";\nimport { FormikSelect } from \"../../../../ui/components/FormikSelect\";\nimport { QuestionTooltip } from \"../../../../ui/components/Tooltip/QuestionTooltip\";\nimport { QuestionContainer, TooltipContainer, TootlipContent } from \"../../../CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/styles\";\nimport useGoogleAnalyticsWithRoleplay from \"../../GoogleAnalytics\";\nimport { SalesMethologies } from \"./constants\";\nimport { Container, Title, TitleContainer } from \"./styles\";\nimport { AiParamTexboxProps } from \"./types\";\n\nfunction AIParamSelect({ title, tooltip, onChange, value, dataTest, isEditMode, analyticsKey }: AiParamTexboxProps) {\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n\n    return <Container>\n        <Title>\n            <TitleContainer data-test={`${dataTest}-title`}>\n                {title}\n                <QuestionContainer>\n                    <QuestionTooltip\n                        position=\"top\"\n                        action={() => trackEventWithRoleplay(`${analyticsKey}_hint`)}\n                        text={<TooltipContainer>\n                            <TootlipContent>{tooltip}</TootlipContent>\n                        </TooltipContainer>}\n                        isHtmlContent={true}\n                        dataTest={`${dataTest}-tooltip`}\n                    />\n                </QuestionContainer>\n            </TitleContainer>\n        </Title>\n        {!isEditMode ?\n            <div className=\"bold-text\" data-test={dataTest + '-text'}><b>{value !== 'null' ? value + ':' : SalesMethologies.find((item) => value === item.value)?.name}</b> {value !== 'null' && SalesMethologies.find((item) => value === item.value)?.name}</div>\n            :\n            <Formik\n                initialValues={{ method: '' }}\n                onSubmit={() => {}}\n            >\n                <Field\n                    items={SalesMethologies}\n                    value={value}\n                    component={FormikSelect}\n                    onChange={(e: ChangeEvent<HTMLInputElement>) => onChange(e.target.value)}\n                    height={40}\n                    variant=\"outlined\"\n                    name={'method'}\n                    className=\"sales-method-select\"\n                    dataTest={`${dataTest}-dropdown`}\n                    menuPosition='top'\n                    customMenuItem={(item: { value: string, name: string }) => <div className=\"bold-text\"><b>{item.value !== 'null' ? item.value + ':' : item.name}</b> {item.value !== 'null' && item.name}</div>}\n                />\n            </Formik>\n        }\n\n    </Container>\n}\n\nexport default AIParamSelect;","import AIParamSelect from './controller';\n\nexport default AIParamSelect;","import styled from 'styled-components';\n\nexport const Container = styled.div<{ isFocused: boolean }>`\n    padding: 0 24px 24px 24px;\n    \n    .rolename-textbox {\n        border-radius: 4px;\n        padding: 7px 11px;\n        background: var(--ps-grey-3);\n        border: 1px solid ${props => props.isFocused ? 'var(--ps-grey-2)' : 'var(--ps-grey-3)'};\n\n        textarea {\n            padding: 0;\n            min-height: 140px;\n            font-size: 15px;\n            line-height: 18px !important;\n            background: transparent !important;\n\n            &:disabled {\n                color: var(--ps-grey-2);\n            }\n            \n            ::placeholder {\n                color: var(--ps-grey-22) !important;\n            }\n        }\n    }\n\n    .rolename-textbox.warning {\n        border: 1px solid var(--ps-red-main);\n    }\n`;\n\nexport const Title = styled.div`\n    display: flex;\n    justify-content: space-between;\n    font-size: 13px;\n    font-weight: 600;\n    margin-bottom: 8px;\n`;\n\nexport const TitleContainer = styled.div`\n    display: inline-block;\n`;\n\nexport const RequiredText = styled.span`\n    color: var(--ps-grey-1)\n`;\n\nexport const TextAreaContainer = styled.div `\n    cursor: pointer;\n`\n\nexport const ParamsContainer = styled.div<{isDisabled?: boolean}>`\n    position: relative;\n    cursor: pointer;\n    ${props => props.isDisabled && 'pointer-events: none;'}\n    :hover {\n        .pencil-container {\n            visibility: visible\n        }\n    }\n`\n\nexport const TextContainer = styled.div<{isEmpty: boolean}>`\n    max-width: 472px;\n    font-family: Manrope;\n    font-size: 15px;\n    font-weight: normal;\n    line-height: 1.33;\n    text-align: left;\n    color: ${props => !props.isEmpty ? 'var(--ps-black-1)' : 'var(--ps-grey-2)'};\n`;\n\nexport const WarningText = styled.span`\n    color: var(--ps-red-main);\n    font-size: 11px;\n`;","import { useEffect, useState } from \"react\";\nimport TextAreaPlaceholderBox from \"../../../../ui/components/TextAreaPlaceholderBox/TextAreaPlaceholderBox\";\nimport { QuestionTooltip } from \"../../../../ui/components/Tooltip/QuestionTooltip\";\nimport { QuestionContainer, TooltipContainer, TootlipContent } from \"../../../CompanySettings/components/CompanyVoice/components/PartialVoiceSettings/styles\";\nimport useGoogleAnalyticsWithRoleplay from \"../../GoogleAnalytics\";\nimport { Container, TextContainer, RequiredText, ParamsContainer, TextAreaContainer, Title, TitleContainer, WarningText } from \"./styles\";\nimport { AiParamTexboxProps } from \"./types\";\n\nfunction AIParamTextbox({ title, placeholder, isRequired, isInvalid, tooltip, onChange, value, autoFocus, dataTest, isEditMode, onFocus, isDisabled, analyticsKey }: AiParamTexboxProps) {\n    const [isFocused, setIsFocused] = useState(false);\n    const [warningText, setWarningText] = useState('');\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n    const max = 500;\n\n    useEffect(() => {\n        setWarningText(isInvalid ? 'This field can’t be empty' :  '' )\n    }, [isInvalid]);\n\n    return <Container isFocused={isFocused}>\n        <Title>\n            <TitleContainer data-test={`${dataTest}-title`}>\n                <span>{title}\n                {isRequired &&\n                    <RequiredText data-test={`${dataTest}-required`}>\n                        {` (required)`}\n                    </RequiredText>}</span>\n                <QuestionContainer>\n                    <QuestionTooltip\n                        action={() => trackEventWithRoleplay(`${analyticsKey}_hint`)}\n                        text={<TooltipContainer>\n                            <TootlipContent>{tooltip}</TootlipContent>\n                        </TooltipContainer>}\n                        isHtmlContent={true}\n                        dataTest={`${dataTest}-tooltip`}\n                    />\n                </QuestionContainer>\n            </TitleContainer>\n        </Title>\n        {!isEditMode ? <TextContainer isEmpty={!value} data-test={dataTest + '-text'}>{value ? value : 'Not specified. Click the Edit Context to change it.'}</TextContainer> : <ParamsContainer isDisabled={isDisabled}>\n            <TextAreaContainer>\n                <TextAreaPlaceholderBox\n                    max={max}\n                    maxRows={10}\n                    minHeight=\"140px\"\n                    placeholder={placeholder}\n                    value={value}\n                    className={`rolename-textbox ${!!warningText ? 'warning' : ''}`}\n                    onChange={e => {\n                        if (e.target.value === '' || e.target.value.length === max) {\n                            isRequired && e.target.value === '' && setWarningText('This field can’t be empty'); \n                            e.target.value.length === max && setWarningText('Character limit reached'); \n                        } else {\n                            setWarningText('');\n                        }\n                        \n                        onChange(e.target.value);\n                    }}\n                    onBlur={() => setIsFocused(false)}\n                    onFocus={(e) => {\n                            let val = e.target.value;\n                            e.target.value = '';\n                            e.target.value = val;\n                            onFocus?.(e);\n                            setIsFocused(true)\n                    }}\n                    dataTest={`${dataTest}-textbox`}\n                    autoFocus={autoFocus}\n                    counterPosition=\"left\"\n                    key=\"rolename-focus\"\n                    counterWarningText={!!warningText ? <WarningText> • {warningText} </WarningText> : undefined}\n                />\n            </TextAreaContainer>\n        </ParamsContainer>}\n    </Container>\n}\n\nexport default AIParamTextbox;","\n\nimport AIParamSelect from \"../AIParamSelect\";\nimport AIParamTextbox from \"../AIParamTextbox/controller\";\nimport { AiParamsProps } from \"./types\"\n\nfunction ObjectiveAiParam({ handleChange, roleplayData, isEditMode, autoFocus, analyticsKey }: AiParamsProps) {\n    return <>\n        <AIParamTextbox title=\"Describe the objective you want the Salesperson to achieve in this situation\"\n         tooltip=\"Provide a clear and specific goal for the salesperson in this scenario. This could be closing a deal, scheduling a follow-up meeting, introducing a new product, or addressing a client's concern. The more precise your objective, the more tailored the AI-generated script will be.\"\n            isRequired={false}\n            isEditMode={isEditMode}\n            placeholder=\"For example: Salesperson should convince the homeowner to subscribe to Eco-friendly Lawn Care Package. Emphasize its affordability, efficiency, and how it aligns with their desire for a beautiful garden with minimal environmental impact. Address their budget concerns by highlighting the long-term cost-effectiveness and proven results of this package, overcoming their resistance to new solutions.\"\n            onChange={(val) => handleChange('objectiveRep', val)}\n            value={roleplayData?.objectiveRep} autoFocus={autoFocus}\n            analyticsKey={`${analyticsKey}_goal`}\n            dataTest=\"rep-objective\" />\n        <AIParamTextbox title=\"List key recommendations, tactics, or nuances the Salesperson should consider\"\n            tooltip=\"Detail any specific strategies, communication styles, or persuasive tactics that the salesperson should use in this situation. Consider the customer's personality, preferences, and potential objections.\"\n            isRequired={false}\n            isEditMode={isEditMode}\n            analyticsKey={`${analyticsKey}_nuances`}\n            placeholder=\"For example: Highlight the time-saving and expertise aspects of the Eco-friendly Lawn Care Package, appealing to the homeowner's need for convenience. Use empathetic communication to acknowledge their budget concerns, suggesting the long-term savings of the package. Avoid aggressive sales tactics; instead, use testimonials or case studies to build trust and demonstrate the effectiveness and value of the service.\"\n            onChange={(val) => handleChange('objectiveNuances', val)} value={roleplayData?.objectiveNuances} dataTest=\"nuances\" />\n        <AIParamSelect title=\"Choose a sales methodology\"\n            tooltip=\"Select a sales approach that aligns with the situation. Each methodology has unique principles and tactics that can be more effective depending on the customer's needs, decision-making style, and the nature of the product or service being offered.\"\n            onChange={(val) => handleChange('salesMethod', val)}\n            value={roleplayData?.salesMethod}\n            dataTest=\"sales-method\" \n            analyticsKey={`${analyticsKey}_method`}\n            isEditMode={isEditMode}\n            />\n    </>\n}\n\nexport default ObjectiveAiParam","import AIParamTextbox from \"../AIParamTextbox/controller\"\nimport { AiParamsProps } from \"./types\"\n\nfunction ProductAiParam({ handleChange, roleplayData, emptyRequiredProps, isEditMode, autoFocus, analyticsKey }: AiParamsProps) {\n    return <AIParamTextbox title=\"Describe the product or service, highlighting its features, price, unique selling points\" tooltip=\"Provide a concise description of the product or service, focusing on its key features, pricing, and unique selling points.\" isRequired={true} isEditMode={isEditMode}\n        isInvalid={emptyRequiredProps?.includes('product')}\n        analyticsKey={`${analyticsKey}_product`}\n        placeholder=\"For example: Eco-friendly Lawn Care Package. Priced at $150 per month, this comprehensive service includes bi-weekly lawn mowing, seasonal fertilization, and organic weed control. Emphasizing sustainability and efficiency, this package offers long-term garden health with minimal environmental impact, designed to fit within a modest budget.\"\n        onChange={(val) => handleChange('product', val)} value={roleplayData?.product} autoFocus={autoFocus} dataTest=\"product\"></AIParamTextbox>\n}\n\nexport default ProductAiParam","import AIParamTextbox from \"../AIParamTextbox/controller\"\nimport { AiParamsProps } from \"./types\"\n\nfunction ProspectAiParam({ handleChange, roleplayData, isEditMode, emptyRequiredProps, autoFocus, analyticsKey }: AiParamsProps) {\n    return <AIParamTextbox title=\"Describe the customer's profile and characteristics\" tooltip=\"Provide a detailed description of the customer, including their personality, behavior, and any relevant background information, so AI can tailor the Roleplay to realistic Customer responses.\"\n            isRequired={true}\n            isEditMode={isEditMode}\n            analyticsKey={`${analyticsKey}_customer`}\n            placeholder=\"For example: A middle-aged homeowner passionate about gardening, yet lacking the time and expertise for regular maintenance. They are friendly but are constrained by a tight budget. The homeowner is cautious in decision-making and prefers cost-effective, proven solutions for yard and garden maintenance, showing some resistance to change and innovation.\"\n            onChange={(val) => handleChange('prospect', val)}\n            isInvalid={emptyRequiredProps?.includes('prospect')}\n            value={roleplayData?.prospect} autoFocus={autoFocus} dataTest=\"prospect\"\n        />\n    \n}\n\nexport default ProspectAiParam","import AIParamTextbox from \"../AIParamTextbox/controller\"\nimport { AiParamsProps } from \"./types\"\n\nfunction SituationAiParam({ handleChange, roleplayData, isEditMode, emptyRequiredProps, autoFocus, analyticsKey }: AiParamsProps) {\n    return <AIParamTextbox title=\"Describe the sales situation you want to explore\" tooltip=\"Provide a brief overview of the situation you're interested in. Include key elements like the overall setting and sales environment. This description will shape the AI-generated Roleplay, creating a tailored sales simulation for your practice.\"\n        isRequired={true}\n        isEditMode={isEditMode}\n        analyticsKey={`${analyticsKey}_situation`}\n        isInvalid={emptyRequiredProps?.includes('situation')}\n        placeholder=\"For example: A homeowner wants to improve their yard and garden. A salesperson from a local landscaping company visits their home to assess the area and provide expert advice. They discuss various options for lawn care, garden maintenance, and the best equipment and services to create a beautiful and thriving outdoor space.\"\n        onChange={(val) => handleChange('situation', val)} value={roleplayData?.situation} autoFocus={autoFocus} dataTest=\"situation\"></AIParamTextbox>\n}\n\nexport default SituationAiParam","import ObjectiveIcon from \"../../../ui/icons/ObjectiveIcon\";\nimport ObjectiveIconActive from \"../../../ui/icons/ObjectiveIconActive\";\nimport ProductIcon from \"../../../ui/icons/ProductIcon\";\nimport ProductIconActive from \"../../../ui/icons/ProductIconActive\";\nimport ProspectIcon from \"../../../ui/icons/ProspectIcon\";\nimport ProspectIconActive from \"../../../ui/icons/ProspectIconActive\";\nimport SituationIcon from \"../../../ui/icons/SitationIcon\";\nimport SituationIconActive from \"../../../ui/icons/SitationIconActive\";\nimport ObjectiveAiParam from \"../components/AiParamsComponents/Objective\";\nimport ProductAiParam from \"../components/AiParamsComponents/ProductService\";\nimport ProspectAiParam from \"../components/AiParamsComponents/Prospect\";\nimport SituationAiParam from \"../components/AiParamsComponents/Situation\";\nimport { RolePlayContextParams, RoleplayRouteTypes } from \"./types\";\n\nexport const RouteSettings: {\n    text: string;\n    icon: any;\n    iconActive: any;\n    name: RoleplayRouteTypes\n}[] = [\n        {\n            text: \"Situation\",\n            icon: SituationIcon,\n            iconActive: SituationIconActive,\n            name: 'situation'\n        },\n        {\n            text: \"Customer\",\n            icon: ProspectIcon,\n            iconActive: ProspectIconActive,\n            name: 'prospect'\n        },\n        {\n            text: \"Product\",\n            icon: ProductIcon,\n            iconActive: ProductIconActive,\n            name: \"product\"\n        },\n        {\n            text: \"Approach\",\n            icon: ObjectiveIcon,\n            iconActive: ObjectiveIconActive,\n            name: \"objective\"\n        }\n    ]\n\nexport const routeComponents = {\n    'situation': SituationAiParam,\n    'prospect': ProspectAiParam,\n    \"product\": ProductAiParam,\n    \"objective\": ObjectiveAiParam,\n}\n\nexport const initialRolePlayData = {\n    title: 'Untitled',\n    salesMethod: 'null',\n    'situation': '',\n    'prospect': '',\n    \"product\": '',\n    'objectiveRep': '',\n    'objectiveNuances': ''\n}\n\n// keys for google analytics\nexport const keysForGA = {\n    'salesMethod': 'method',\n    'situation': 'situation',\n    'prospect': 'customer',\n    \"product\": 'product',\n    'objectiveRep': 'goal',\n    'objectiveNuances': 'nuances'\n}\n\nexport const requiredContextParams: RolePlayContextParams[] = ['situation', 'prospect', 'product']","import styled from 'styled-components';\n\nexport const ModalContent = styled.div`\n    display: flex;\n    flex-direction: row;\n    min-height: 215px;\n`;\n\nexport const ModalSidebar = styled.div`\n    display: flex;\n    justify-content: space-between;\n    flex-direction: column;\n    background-color: var(--ps-grey-3);\n    width: 190px;\n    background-color: var(--ps-grey-3);\n    border-right: 1px solid var(--ps-grey-4);\n    border-bottom-left-radius: 8px;\n`;\n\nexport const NavigationItem = styled.div<{ isActive: boolean }>`\n    margin-top: 18px;\n    padding-left: 24px;\n    height: 24px;\n    display: flex;\n    align-items: center;\n    font-size: 13px;\n    color: ${props => props.isActive ? 'var(--ps-black-main)' :  'var(--ps-grey-1)'};\n    display: flex;\n    text-decoration: none;\n    position: relative;\n    font-weight: bold;\n    cursor: pointer;\n\n    &:first-child {\n        margin-top: 24px;\n    }\n\n    &:hover {\n        color: var(--ps-black-main);\n        & .act-icon {\n            display: block;\n        }\n        & .icon {\n            display: none;\n        }\n    }\n\n    .act-icon {\n        display: none\n    }\n\n    .icon {\n        display: block;\n    }\n\n    ${props => props.isActive && `&::before {\n        width: 4px;\n        height: 24px;\n        background: var(--ps-black-main);\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        border-radius: 0 10px 10px 0;\n    } \n    \n    .act-icon {\n        display: block;\n    }\n    .icon {\n        display: none;\n    }\n    `}\n`;\n\nexport const NavigationIcon = styled.div`\n    width: 16px;\n    height: 16px;\n    color: var(--ps-black-main);\n    margin-right: 12px;\n`;\n\nexport const TabContent = styled.div`\n    width: 627px;\n    min-height: 636px;\n    padding-top: 24px;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n`;\n\nexport const Title = styled.div`\n    font-size: 15px;\n`;\n\nexport const Footer = styled.div`\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    border-top: 1px solid var(--ps-grey-4);\n    padding: 23px 5px 0 5px;\n    width: 100%;\n    box-sizing: border-box;\n    height: 64px;\n    align-items: center;\n    padding: 0 24px 0 0;\n`;","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useCreateRoleplayApi } from '../../../api/roleplay';\nimport ROUTES from '../../../routes/routes';\nimport { useHistory } from '../../../tools/router';\nimport { Button } from '../../../ui/components/Button';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ModalWithCross } from '../../../ui/components/ModalWithCross';\nimport { ModalTitle } from '../../../ui/components/ModalWithCross/styles';\nimport useGoogleAnalyticsWithRoleplay from '../GoogleAnalytics';\nimport { initialRolePlayData, keysForGA, requiredContextParams, routeComponents, RouteSettings } from './constants';\nimport { Footer, ModalContent, ModalSidebar, NavigationIcon, NavigationItem, TabContent, Title } from './styles';\nimport { RolePlayContextParams, RoleplayCreateProps, RoleplayData, RoleplayRouteTypes } from './types';\n\nfunction RoleplayCreate({\n    closeGoingBack,\n    closePath\n}: RoleplayCreateProps) {\n    const [activePage, setActivePage] = useState<RoleplayRouteTypes>('situation');\n    const [roleplayData, setRoleplayData] = useState<RoleplayData>(initialRolePlayData);\n    const [emptyRequiredProps, setEmptyRequiredProps] = useState<RolePlayContextParams[]>();\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n    const infoPanel = localStorage.getItem('infoPanel');\n\n    const history = useHistory();\n    const showMessage = useShowMessage();\n\n    const createRoleplay = useCreateRoleplayApi();\n    const prevLocation = history.location.state?.prevLocation ?? history.location.state?.background;\n    const handleChange = (key: RolePlayContextParams, value: string) => {\n        setRoleplayData(roleplayData ? { ...roleplayData, [key]: value } : { [key]: value })\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    useEffect(() => trackEventWithRoleplay('context_wizard_screen_open'), []);\n\n    const routes = Object.keys(routeComponents);\n    const handleClose = useCallback(() => {\n        if (closeGoingBack && prevLocation) {\n            history.replace(prevLocation.pathname);\n        } else {\n            history.replace(closePath);\n        }\n        trackEventWithRoleplay('context_wizard_screen_close');\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [closeGoingBack, closePath, history, prevLocation]);\n\n    const isValidForm = () => {\n        const arr: RolePlayContextParams[] = [];\n        requiredContextParams.forEach((item) => {\n            if (item === activePage && roleplayData?.[item] === '') {\n                arr.push(item)\n            }\n        });\n\n        if (arr?.length) {\n            setEmptyRequiredProps(arr?.length ? arr : undefined);\n            return false;\n        } else {\n            setEmptyRequiredProps(undefined);\n        }\n        return true;\n    }\n\n    const handlePrevNext = (step: number) => {\n        if (!isValidForm()) {\n            return;\n        }\n\n        const index = routes.indexOf(activePage);\n        setActivePage(routes[index + step] as RoleplayRouteTypes);\n    }\n\n    const saveRolePlay = () => {\n        roleplayData && createRoleplay(roleplayData).then((roleplay) => {\n            showMessage('Roleplay has been created', 'success');\n\n            trackEventWithRoleplay('context_wizard_screen_create');\n            trackEventWithRoleplay('roleplay_screen_open_new');\n\n            roleplayData && Object.entries(roleplayData).forEach(([key, value]) => {\n                if (value !== initialRolePlayData[key as keyof typeof initialRolePlayData]) {\n                    const keyGA = keysForGA[key as keyof typeof keysForGA];\n                    keyGA && trackEventWithRoleplay(`context_wizard_screen_${keyGA}_filled`);\n                }\n            });\n\n            history.push(`${ROUTES.ROLEPLAYS.SINGLE.replace(\n                ':roleplayId',\n                roleplay.id.toString()\n            )}`)\n            infoPanel === null && localStorage.setItem(\n                'infoPanel',\n                'true'\n            );\n        }).catch((e) => {\n            showMessage(e.message, 'error');\n        });\n    }\n\n    const Component = useMemo(() => routeComponents[activePage], [activePage]);\n\n    return (<ModalWithCross\n        titleContent={\n            <ModalTitle>\n                <Title data-test=\"roleplay-create-modal-title\">New Roleplay AI</Title>\n            </ModalTitle>\n        }\n        onClose={handleClose}\n        width={790}\n        dataTest=\"roleplay-create-modal\"\n    >\n        <ModalContent>\n            <ModalSidebar>\n                <div>\n                    {RouteSettings.map((route) => {\n                        const isActive = activePage === route.name;\n                        return <NavigationItem\n                            data-test={`${route.name}-tab`}\n                            onClick={() => {\n                                if (!isValidForm()) {\n                                    return;\n                                }\n                                setActivePage(route.name);\n                            }}\n                            isActive={isActive}\n                            key={route.name}\n                        >\n                            <NavigationIcon><route.iconActive className=\"act-icon\" /><route.icon className=\"icon\" /></NavigationIcon>\n                            {route.text}\n                        </NavigationItem>\n                    })}\n                </div>\n            </ModalSidebar>\n            <TabContent>\n                <Component handleChange={handleChange} roleplayData={roleplayData} autoFocus={true} isEditMode={true} emptyRequiredProps={emptyRequiredProps} analyticsKey={'context_wizard_screen'} />\n                <Footer>\n                    {routes.indexOf(activePage) !== 0 && <Button\n                        width=\"130px\"\n                        height=\"40px\"\n                        loadingColor=\"white\"\n                        loadingSize={24}\n                        dataTest=\"previous-button\"\n                        variant='inverse'\n                        style={{ marginRight: '10px' }}\n                        action={() => handlePrevNext(-1)}\n                    >\n                        Previous\n                    </Button>}\n                    {routes.indexOf(activePage) < routes.length - 1 && <Button\n                        width=\"130px\"\n                        height=\"40px\"\n                        loadingColor=\"white\"\n                        loadingSize={24}\n                        dataTest=\"next-button\"\n                        action={() => handlePrevNext(1)}\n                    >\n                        Next\n                    </Button>}\n                    {routes.indexOf(activePage) === routes.length - 1 && <Button\n                        width=\"130px\"\n                        height=\"40px\"\n                        loadingColor=\"white\"\n                        loadingSize={24}\n                        dataTest=\"create-button\"\n                        action={saveRolePlay}\n                    >\n                        Create\n                    </Button>}\n                </Footer>\n            </TabContent>\n        </ModalContent>\n    </ModalWithCross>)\n}\n\nexport default RoleplayCreate;","import RoleplayCreate from './controller';\n\nexport default RoleplayCreate;","import { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const InfoIcon = forwardRef<SVGSVGElement, IconProps>(\n    () => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <g clip-path=\"url(#92d0cvhvka)\">\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zM0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm6.5-.25A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75zM8 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\" fill=\"#24292E\" />\n            </g>\n            <defs>\n                <clipPath id=\"92d0cvhvka\">\n                    <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n                </clipPath>\n            </defs>\n        </svg>\n        );\n    }\n);","import { useEffect, useRef, useState } from 'react';\nimport { getConfig } from '../../../tools/config';\n\ninterface WebSocketHook {\n  sendMessage: (message: Message) => void;\n  closeConnection: () => void;\n  response: string;\n}\n\ntype Message = {\n    event: 'authenticate' | 'watch',\n    data: string\n}\n\nconst useWebSocket = (): WebSocketHook => {\n  const [response, setResponse] = useState<string>('');\n  const socketRef = useRef<WebSocket | null>(null);\n  const currentConnection = useRef<number | null>(null);\n\n  const config = getConfig();\n  const url = config.API_SOCKET_ENDPOINT;\n\n  const createWebSocket = () => {\n    const newSocket = new WebSocket(url);\n    socketRef.current = newSocket;\n\n    newSocket.addEventListener('open', () => {\n      setResponse('opened');\n      if (currentConnection.current !== null) {\n        currentConnection.current = null;\n      }\n    });\n\n    newSocket.addEventListener('message', (event) => {\n      setResponse(event.data);\n    });\n\n    newSocket.addEventListener('close', (event) => {\n      if (!currentConnection.current) {\n        currentConnection.current = 1\n          createWebSocket();\n      }\n    });\n  };\n\n  const closeConnection = () => {\n    if (currentConnection.current !== null) {\n      currentConnection.current = null;\n    }\n    if (socketRef.current !== null) {\n      socketRef.current.close();\n    }\n  }\n\n  useEffect(() => {\n    createWebSocket();\n\n    return () => {\n      closeConnection()\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const sendMessage = (message: Message) => {\n    if (socketRef.current && socketRef.current.readyState === WebSocket.OPEN) {\n      socketRef.current.send(JSON.stringify(message));\n    }\n  };\n\n  return { sendMessage, response, closeConnection };\n};\n\nexport default useWebSocket;\n\n","import styled from 'styled-components';\nimport AvatarPlaceholder from '../../../ui/components/AvatarPlaceholder/AvatarPlaceholder';\nimport { Button } from '../../../ui/components/Button';\n\nexport const HeaderContainer = styled.div`\n    height: 68px;\n    display: flex;\n    justify-content: start;\n    border-bottom: 1px solid var(--ps-grey-4);\n    align-items: start;\n    padding-left: 24px;\n`;\n\nexport const Header = styled.div`\n    display: flex;\n    flex-direction: column;\n    margin-top: 12px;\n`;\n\nexport const Title = styled.div`\n    font-size: 20px;\n    font-weight: 800;\n    line-height: 1.4;\n    display: flex;\n    align-items: center;\n`;\n\nexport const SubTitle = styled.div`\n  font-size: 18px;\n  font-weight: 800;\n  padding-left: 24px;\n`;\n\nexport const BodyContainer = styled.div`\n    width: 100%;\n    display: flex;\n`;\n\nexport const ContextContainer = styled.div<{ fullHeight: boolean }>`\n    width: 528px;\n    height: calc(100vh - ${props => props.fullHeight ? 68 : 156}px);\n    border-right: 1px solid var(--ps-grey-4);\n    padding-top: 24px;\n    overflow-y: hidden; \n`;\n\nexport const ParamsContainer = styled.div`\n    height: calc(100vh - 180px);\n    overflow-y: scroll;\n`;\n\nexport const ContentContainer = styled.div<{ fullHeight: boolean }>`\n    height: calc(100vh - ${props => props.fullHeight ? 68 : 152}px);\n    display: flex;\n    justify-content: start;\n    align-items: center;\n    flex-direction: column;\n    width: calc(100% - 528px);\n`;\n\nexport const IconContainer = styled.div`\n    width: 12px;\n    height: 12px;\n    margin-right: 20px;\n    cursor: pointer;\n    margin-top: 17px;\n`;\n\nexport const NoEntryContainer = styled.div`\n    color: var(--ps-grey-2);\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    margin: auto;\n`;\n\nexport const IconCountainer = styled.div<{ isDisabled: boolean }>`\n    margin-left: 10px;\n    cursor: ${props => props.isDisabled ? 'default' : 'pointer'};\n`;\n\nexport const ModalBody = styled.div`\n    padding: 35px;\n    display: flex;\n    flex-direction: column;\n    align-items: self-end;\n`;\n\nexport const ModalText = styled.div`\n font-size: 13px;\n color: var(--ps-grey-1);\n margin-bottom: 32px;\n`;\n\nexport const ModalHeader = styled.div`\n    font-size: 20px;\n    font-weight: 800;\n    font-stretch: normal;\n    margin-bottom: 16px;\n    width: 100%;\n`\n\nexport const Footer = styled.div`\n    height: 84px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n`;\n\n\nexport const ButtonContainer = styled.div`\n    height: 88px;\n    width: 100%;\n    padding: 24px;\n    display: flex;\n    justify-content: start;\n    align-items: center;\n\n    button {\n        margin-right: 16px;\n    }\n\n    .action-button-element {\n        padding-left: 16px;\n    }\n`\n\nexport const InfoText = styled.div`\n    font-size: 15px;\n        margin-left: 8px;\n        line-height: 1.33;\n`;\n\nexport const Container = styled.div`\n    width: 100%;\n    position: relative;\n    overflow: hidden;\n`;\n\nexport const ContentPanelContainer = styled.div<{height?: number}>`\n    width: 100%;\n    position: relative;\n    overflow: scroll;\n    height : ${props => props.height ? `calc(100% - ${props.height + 20}px)` : `calc(100% - 104px)`}\n`\n\nexport const BtnCont = styled.div`\n    display: flex; \n    justify-content: end;\n`;\n\nexport const Contentbox = styled.div`\n    padding: 17px 40px;\n    background: var(--ps-grey-3);\n    border-bottom: 1px solid var(--ps-grey-4);\n    justify-content: center;\n    display: flex;\n`;\n\nexport const ContentBoxContainer = styled.div`\n    width: 580px;\n`;\n\nexport const ContentItem = styled.div`\n    display: flex;\n    margin-bottom: 18px;\n    &.error-item { flex-direction: column }\n\n    .avatar-logo, .customer-logo {\n        max-width: 32px;\n        min-width: 32px;\n        height: 32px;\n        margin-right: 12px;\n    }\n\n    .avatar-logo.no-border {\n        border: 0px;\n    }\n\n    .command-author-pic {\n        font-weight: normal;\n    }\n`;\n\nexport const Img = styled(AvatarPlaceholder)`\n    max-width: 32px;\n    height: 32px;\n    border-radius: 4px;\n    margin-right: 12px;\n    border: 1px solid var(--ps-gey-4)\n`;\n\nexport const TextBox = styled.div`\n    display: flex;\n`;\n\nexport const Author = styled.div`\n    font-size: 15px;\n    font-weight: 800;\n`;\n\nexport const Message = styled.p`\n    font-size: 15px;\n    max-width: 600px;\n    min-width: 100px;\n    margin: 0px;\n    white-space: pre-line;\n\n    b {\n        font-weight: 600;\n    }\n`;\n\nexport const Sendbox = styled.div`\n    min-height: 100px;\n    padding: 8px 40px;\n    display: flex;\n    justify-content: center;\n    position: fixed;\n    bottom: 0px;\n    background: white;\n    right: 0px;\n    width: calc(100% - 776px);\n`;\n\nexport const SendBoxContainer = styled.div`\n    display: flex;\n    flex-direction: column;\n    justify-content: start;\n    width: 580px;\n`;\n\nexport const DateText = styled.div`\n    color: var(--ps-grey-1);\n    margin-bottom: 8px;\n    font-size: 11px;\n    font-weight: 500;\n`;\n\nexport const BtnContainer = styled.div`\n    display: flex;\n    justify-content: flex-end;\n    padding-right: 10px;\n`;\n\nexport const PlayButton = styled.div<{ isDisabled: boolean }>`\n    width: 36px;\n    height: 36px;\n    margin-right: 10px;\n    border-radius: 50%;\n    border: 3px solid ${props => props.isDisabled ? 'var(--ps-grey-2) ' : 'var(--ps-blue-main) '}; \n    cursor: ${props => !props.isDisabled && 'pointer'};\n    \n    .play-btn {\n        color: ${props => props.isDisabled ? 'var(--ps-grey-2) ' : 'var(--ps-blue-main) '}; ;\n        width: 12px;\n        margin-left: 11px;\n}`;\n\nexport const SpinnerContainer = styled.div`\n    width: 36px;\n    height: 36px;\n    position: relative;\n    margin-right: 10px;\n\n    .MuiCircularProgress-colorPrimary {\n        color: var(--ps-blue-main);\n    }\n\n    .spinner-icn {\n        position: absolute;\n        top: 9px;\n        left: 8px;\n    }\n`;\n\n\nexport const StopIcon = styled.div`\n    width: 12px;\n    height: 12px;\n    background: var(--ps-blue-main);\n    margin: 9px auto;\n    cursor: pointer;\n`;\n\nexport const MenuButton = styled.div<{ isDisabled?: boolean }>`\n    height: 36px;\n    margin-right: 10px;\n    border-radius: 50%;\n    background: ${props => props.isDisabled ? 'var(--ps-grey-2) ' : 'var(--ps-blue-main) '}; ;\n    min-width: 36px;\n    margin-left: ${props => props.isDisabled ? '0px' : '20px'};\n\n    .dots-btn {\n        rotate: 90deg;\n        width: 19px;\n        color: var(--ps-white-1);\n        margin-left: 9px;\n    }\n}`;\n\nexport const RoleplayMenuDots = styled(Button)<{ isDisabled?: boolean }>`\n    max-width: 40px;\n    padding: 0px;\n    .dots-btn {\n        rotate: 90deg;\n        width: 20px;\n        height: 20px;\n    }\n`;\n\nexport const RegenerateBtn = styled.div<{ isDisabled?: boolean }>`\n    font-size: 13px;\n    font-weight: 500;\n    color: ${props => props.isDisabled ? 'var(--ps-grey-2)' : 'var(--ps-blue-main)'};\n    display: flex;\n    align-items: center;\n    justify-content: end;\n\n    svg {\n        margin-right: 4px;\n    }\n\n    cursor: ${props => props.isDisabled ? 'default' : 'pointer'};\n`;\n\nexport const CommandContainer = styled.div`\n    margin-top: 23px;\n    border-bottom: 1px solid var(--ps-grey-4);\n    display: flex;\n    justify-content: center;\n    padding: 0px 40px;\n`;\n\nexport const CommandBox = styled.div`\n    width: 580px;\n`;  \n\nexport const ErrorContainer = styled.div`\n    padding: 17px 41px;\n    background-color: rgba(236, 81, 61, 0.1);\n    border-bottom: 1px solid var(--ps-grey-4);\n    display: flex;\n    justify-content: center;\n    \n    .error-icon {\n        margin-right: 10px;\n        margin-top: 5px;\n        max-width: 32px;\n        min-width: 32px;\n    }\n`;\n\nexport const ErrorBox = styled.div`\n    width: 580px;\n`;\n\nexport const WarningBtnContainer = styled.div`\n    display: flex;\n    margin-right: 12px;\n    margin-top: 12px;\n\n    button:disabled  {\n        background: rgb(236, 81, 61, 0.4) !important;\n    }\n\n    button.inverse:disabled {\n        div {\n            border: 1px solid rgb(236, 81, 61, 0.4) !important;;\n        }\n        box-shadow: none;\n        color: rgb(236, 81, 61, 0.4) !important;;\n        background: transparent !important;\n    }\n`;\n\nexport const BlueDot = styled.span`\n    width: 12px;\n    height: 12px;\n    border-radius: 33px;\n    background-color: var(--ps-blue-main);\n    display: inline-block;\n    margin-left: 5px;\n\n    @keyframes pulse {\n        0% {\n            opacity: 0;\n        }\n        100% {\n            opacity: 1;\n        }\n    }\n\n    animation: pulse 0.8s infinite;\n`;\n\nexport const StopGenIcon = styled.div<{ isDisabled?: boolean }>`\n    width: 16px;\n    height: 16px;\n    margin: 1px 4px 1px 0;\n    border: 2px solid ${props => props.isDisabled ? 'var(--ps-grey-2) ' : 'var(--ps-blue-main) '}; \n    border-radius: 50%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    div {\n        width: 6px;\n        height: 6px;\n        background: ${props => props.isDisabled ? 'var(--ps-grey-2) ' : 'var(--ps-blue-main) '}; ;\n        \n        border-radius: 1px;\n    }\n`","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SendActive = forwardRef<SVGSVGElement, IconProps>(\n    ({className, dataTest}) => {\n        return (\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" className={className} data-test={dataTest}>\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"m3.333 2.1 18.438 9.219a.92.92 0 0 1 0 1.645L3.333 22.183c-.733.366-1.543-.336-1.284-1.113l2.67-8.009h7.663a.92.92 0 0 0 0-1.839H4.72L2.05 3.213C1.79 2.436 2.6 1.733 3.333 2.1z\" fill=\"#4AA9E2\" />\n            </svg>);\n    }\n);\n\nexport default SendActive;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const SendIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({className, dataTest}) => {\n        return (\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" className={className} data-test={dataTest}>\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"m3.333 2.1 18.438 9.219a.92.92 0 0 1 0 1.645L3.333 22.183c-.733.366-1.543-.336-1.284-1.113l2.67-8.009h7.663a.92.92 0 0 0 0-1.839H4.72L2.05 3.213C1.79 2.436 2.6 1.733 3.333 2.1z\" fill=\"#B1C0CB\" />\n            </svg>);\n    }\n);\n\nexport default SendIcon;\n","import React, { ChangeEventHandler, FocusEventHandler, FC, KeyboardEvent } from 'react';\nimport styled from 'styled-components';\nimport { Textarea } from '../../../../ui/components/Textarea/Textarea';\nimport { Cross } from '../../../../ui/icons/Cross';\nimport { Check } from '@material-ui/icons';\nimport { Button } from '../../../../ui/components/Button';\nimport SendActive from '../../../../ui/icons/SendActive';\nimport SendIcon from '../../../../ui/icons/SendIcon';\n\nconst StyledFormikField = styled.div`\n    margin-top: 10px;\n`;\n\nconst WarningText = styled.div`\n    display: inline;\n    color: var(--ps-red-main);\n`;\n\nconst StledTextareaContainer = styled.div<{\n    isWarning?: boolean;\n    width?: string;\n    disabled?: boolean\n}>`\n    position: relative;\n    border-radius: 4px;\n    padding: 4px;\n    display: flex;\n    align-items: center;\n    width: ${props => props.width || 'auto'};\n    min-height: 40px;\n    padding: 8px 8px 8px 12px;\n    border-radius: 4px;\n    border: 1px solid ${props => props.disabled ? 'none' : (!props.isWarning ? 'var(--ps-grey-2)' : 'var(--ps-red-main)')};\n    background: ${props => props.disabled ? 'var(--ps-grey-3)' : 'none'};\n\n    .cross-button {\n        width: 28px;\n        height: 24px;\n        padding: 0px;\n        min-width: unset;\n    }\n`;\n\nexport const CrossContainer = styled.div`\n    width: 10px;\n    height: 16px\n`;\n\nexport const BtnContainer = styled.div`\n    margin-right: 8px\n`;\n\nexport const CheckContainer = styled.div`\n    svg {\n        width: 16px;\n        margin-top: 3px;\n    }\n`;\n\nexport const SendContainer = styled.div`\n    height: 24px;\n\n    .send-btn {\n        color: var(--ps-blue-main);\n    }\n\n    .send-btn.active {\n        cursor: pointer;\n    }\n`;\n\nconst StyledTextarea = styled(Textarea) <{\n    fontSize?: string;\n    fontWeight?: number;\n    minHeight?: string;\n    disabled?: boolean;\n}>`\n    min-height: ${props => props.minHeight};\n    color: ${props => props.disabled  && 'var(--ps-grey-2)'};\n    &:disabled {\n        background: transparent !important;\n    }\n    &::placeholder {\n        font-size: '15px';\n        font-weight: 600;\n        font-weight: normal;\n        font-stretch: normal;\n        font-style: normal;\n        line-height: normal;\n        letter-spacing: normal;\n    }\n`;\n\nconst StyledCounter = styled.div<{disabled?: boolean}>`\n    text-align: left;\n    color: var(--ps-grey-10);\n    font-size: 11px;\n    margin-left: 12px;\n\n    visibility: ${props => props.disabled ? 'hidden' : 'visible'}\n`;\n\nexport const TextInputWithButtons: FC<{\n    value?: string;\n    field?: any;\n    form?: { touched: any; errors: any };\n    name?: string;\n    onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n    onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n    onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n    onKeyDown?: (e: KeyboardEvent<HTMLTextAreaElement>) => void;\n    max?: number;\n    width?: string;\n    background?: string;\n    color?: string;\n    disabled?: boolean;\n    placeholder?: string;\n    autoFocus?: boolean;\n    readOnly?: boolean;\n    padding?: string;\n    fontSize?: string;\n    minRows?: number;\n    maxRows?: number;\n    borderRadius?: string;\n    placeholderFontWeight?: number;\n    minHeight?: string;\n    counterColor?: string;\n    textAreaMinHeight?: string;\n    dataTest?: string;\n    className?: string;\n    onClose?: () => void;\n    onApply?: () => void;\n    isRequired?: boolean\n}> = ({\n    field,\n    value,\n    disabled,\n    max,\n    autoFocus,\n    onChange,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    placeholder,\n    readOnly,\n    minRows,\n    placeholderFontWeight,\n    textAreaMinHeight,\n    dataTest,\n    className,\n    onClose,\n    onApply,\n    isRequired,\n    maxRows,\n    width\n}) => {\n        const TextAreaStyles = {\n            flex: 1,\n            lineHeight: 1.13,\n            letterSpacing: '0.4px',\n            fontSize: '15px',\n        };\n\n        const isLimitReached = value?.length === max;\n\n        return (\n            <StyledFormikField>\n                <StledTextareaContainer\n                    className={className}\n                    isWarning={isLimitReached || isRequired}\n                    data-test={`${dataTest}-container`}\n                    width={width}\n                    disabled={disabled}\n                >\n                    <StyledTextarea\n                        value={value}\n                        styles={TextAreaStyles}\n                        {...field}\n                        placeholder={placeholder}\n                        max={max}\n                        onChange={onChange}\n                        onFocus={\n                            (e) => {\n                                let val = e.target.value;\n                                e.target.value = '';\n                                e.target.value = val;\n                                onFocus?.(e);\n                            }\n                        }\n                        onBlur={onBlur}\n                        disabled={disabled}\n                        autoFocus={autoFocus}\n                        readOnly={readOnly}\n                        fontSize={'15px'}\n                        minRows={minRows}\n                        maxRows={maxRows || 1}\n                        fontWeight={placeholderFontWeight}\n                        minHeight={textAreaMinHeight}\n                        dataTest={dataTest}\n                        onKeyDown={onKeyDown}\n                    />\n                    {!!onClose ? <>\n                        <BtnContainer>\n                            <Button variant='inverse' className='cross-button' action={onClose} dataTest={`${dataTest}-close-icon`}>\n                                <CrossContainer><Cross /></CrossContainer>\n                            </Button>\n                        </BtnContainer>\n                        <Button action={onApply} variant=\"primary\" className='cross-button' dataTest={`${dataTest}-apply-icon`} ><CheckContainer><Check /></CheckContainer></Button>\n                    </> :\n                        <>{\n                            disabled || value === ''  ?\n                                <SendContainer><SendIcon className='send-btn' dataTest={`${dataTest}-send-icon`} /></SendContainer> :\n                                <SendContainer onClick={onApply}><SendActive className='send-btn active' dataTest={`${dataTest}-send-icon`} /></SendContainer>\n                        }\n                        </>\n                    }\n                </StledTextareaContainer>\n                {max &&  (\n                    <StyledCounter data-test={dataTest && `${dataTest}-counter`} disabled={disabled}>\n                        {value ? value.length : '0'}/{max}\n                        {isLimitReached &&\n                            <>\n                                <span data-test={`${dataTest}-text-dot`}>•</span>\n                                <WarningText data-test={`${dataTest}-warming-text`}> Character limit reached</WarningText>\n                            </>\n                        }\n                        {\n                            isRequired &&\n                            <>\n                                <span data-test={`${dataTest}-text-dot`}>•</span>\n                                <WarningText data-test={`${dataTest}-required-text`}> Title required</WarningText>\n                            </>\n                        }\n                    </StyledCounter>\n                )}\n            </StyledFormikField>\n        );\n    };\n\nexport default TextInputWithButtons;\n","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const RefreshCircle = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" data-test={dataTest}>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 2.5a5.487 5.487 0 0 0-4.131 1.869l1.204 1.204A.25.25 0 0 1 4.896 6H1.25A.25.25 0 0 1 1 5.75V2.104a.25.25 0 0 1 .427-.177l1.38 1.38A7.001 7.001 0 0 1 14.929 7h-1.52A5.502 5.502 0 0 0 8 2.5zM1.07 9a7.001 7.001 0 0 0 12.123 3.693l1.38 1.38a.25.25 0 0 0 .427-.177V10.25a.25.25 0 0 0-.25-.25h-3.646a.25.25 0 0 0-.177.427l1.204 1.204A5.502 5.502 0 0 1 2.591 9H1.07z\" fill=\"#4AA9E2\"/>\n</svg>);\n    }\n);\n\nexport default RefreshCircle;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const WarningIcon = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, dataTest }) => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" className={className} data-test={dataTest}>\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.046.327C9.255.117 9.539 0 9.835 0h12.33c.296 0 .58.118.79.327l8.718 8.719c.21.209.327.493.327.789v12.33c0 .296-.118.58-.327.79l-8.719 8.718c-.209.21-.493.327-.789.327H9.835c-.296 0-.58-.118-.79-.327L.328 22.954A1.116 1.116 0 0 1 0 22.165V9.835c0-.296.118-.58.327-.79L9.046.328z\" fill=\"#EC513D\" />\n            <path d=\"M16 8.559c.617 0 1.116.5 1.116 1.116v6.697a1.116 1.116 0 1 1-2.232 0V9.675c0-.617.5-1.116 1.116-1.116zM16 23.442a1.488 1.488 0 1 0 0-2.977 1.488 1.488 0 0 0 0 2.977z\" fill=\"#fff\" />\n        </svg>);\n    }\n);\n\nexport default WarningIcon;\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Roleplay } from '../../../../constants/interfaces/Roleplay';\n\nexport interface RoleplayState {\n    data?: Roleplay;\n    isLoading: boolean;\n    error?: string;\n}\n\nexport type RoleplayStateSelector = (state: any) => RoleplayState;\n\nexport const RoleplayStateSelectorContext = React.createContext<RoleplayStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useRoleplayState(): RoleplayState {\n    return useSelector(useContext(RoleplayStateSelectorContext));\n}\n","export const commandTexts = {\n    situation: 'Situation',\n    prospect: 'Customer',\n    product: 'Product',\n    objectiveRep: 'Objective',\n    objectiveNuances: 'Nuances & Tactics',\n    salesMethod: 'Sales Methodology'\n}\n\nexport const commandPattern = /Change\\s(Situation|Customer|Product|Objective|Nuances & Tactics|Sales Methodology)\\sto:/g\n\nexport const formatConversationToClipboard = (title: string, conversation: Array<{ role: string, text: string }>, summary: string): string => {\n    const formattedConversation = conversation.map(({ role, text }) => `[${role.toUpperCase()}] ${text}`).join('\\n\\n');\n    const formattedRoleplay = `${title}\\n---\\n${formattedConversation}\\n---\\n${summary}`;\n    return formattedRoleplay;\n}\n\n\nexport function downloadTxtFile(text: string, filename: string) {\n    const blob = new Blob([text], { type: 'text/plain' });\n    const url = URL.createObjectURL(blob);\n  \n    const link = document.createElement('a');\n  \n    link.href = url;\n    link.download = filename;\n    document.body.appendChild(link);\n  \n    link.click();\n  \n    document.body.removeChild(link);\n  \n    URL.revokeObjectURL(url);\n}\n\n  ","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const CustomerAvatar = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" data-test={dataTest} className={className}>\n            <rect width=\"32\" height=\"32\" rx=\"4\" fill=\"#B1C0CB\" />\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.481 25H23.52c.828-1.274.498-3.823-.33-4.673-.384-.395-3.407-1.18-4.8-1.527 1.498-1.167 2.41-3.322 2.41-5.377C20.8 10.428 19.928 8 16 8c-3.93 0-4.802 2.428-4.802 5.423 0 2.06.917 4.222 2.423 5.387-1.426.348-4.403 1.113-4.8 1.517-.835.85-1.172 3.399-.339 4.673zm9.118-5.206c2.006.48 4.36 1.137 4.906 1.43.343.44.641 1.839.426 2.716H9.07c-.217-.877.088-2.28.436-2.717.539-.294 2.88-.941 4.895-1.414v-1.696c-1.338-.906-2.132-2.878-2.132-4.67 0-2.421.622-4.385 3.73-4.385 3.11 0 3.731 1.964 3.731 4.385 0 1.79-.792 3.76-2.13 4.667v1.684z\" fill=\"#fff\" />\n        </svg>\n        );\n    }\n);\n\nexport default CustomerAvatar;","import SidebarRoleplaysLarge from \"../../../../ui/icons/SidebarRoleplaysLarge\";\nimport { NoEntryContainer } from \"../../RoleplayPage/styles\";\nimport { Text } from \"../../RoleplaysList/styles\";\n\nfunction ContentLoading() {\n    return <NoEntryContainer data-test=\"roleplay-loading-container\">\n        <SidebarRoleplaysLarge dataTest=\"roleplay-loading-icon\" />\n        <Text data-test=\"roleplay-loading-text\">Loading Roleplays...</Text>\n    </NoEntryContainer>\n}\n\nexport default ContentLoading;","import { Roleplay } from \"../../../../constants/interfaces/Roleplay\";\n\nexport enum ACTIONS {\n    GET_ROLEPLAY_START = 'GET_ROLEPLAY_START',\n    GET_ROLEPLAY_SUCCESS = 'GET_ROLEPLAY_SUCCESS',\n    GET_ROLEPLAY_FAILURE = 'GET_ROLEPLAY_FAILURE',\n    UPDATE_ROLEPLAY_START = 'UPDATE_ROLEPLAY_START',\n    UPDATE_ROLEPLAY_SUCCESS = 'UPDATE_ROLEPLAY_SUCCESS',\n    UPDATE_ROLEPLAY_FAILURE = 'UPDATE_ROLEPLAY_FAILURE',\n    CLEAR_ROLEPLAY = 'CLEAR_ROLEPLAY'\n}\n\nexport function getRoleplayStart() {\n    return {\n        type: ACTIONS.GET_ROLEPLAY_START as ACTIONS.GET_ROLEPLAY_START,\n    };\n}\n\nexport function getRoleplaySuccess(data: Roleplay) {\n    return {\n        type: ACTIONS.GET_ROLEPLAY_SUCCESS as ACTIONS.GET_ROLEPLAY_SUCCESS,\n        data\n    };\n}\n\nexport function getRoleplayFailure(error: string) {\n    return {\n        type: ACTIONS.GET_ROLEPLAY_FAILURE as ACTIONS.GET_ROLEPLAY_FAILURE,\n        error\n    };\n}\n\nexport function updateRoleplayStart() {\n    return {\n        type: ACTIONS.UPDATE_ROLEPLAY_START as ACTIONS.UPDATE_ROLEPLAY_START,\n    };\n}\n\nexport function updateRoleplaySuccess(data: Roleplay) {\n    return {\n        type: ACTIONS.UPDATE_ROLEPLAY_SUCCESS as ACTIONS.UPDATE_ROLEPLAY_SUCCESS,\n        data\n    };\n}\n\nexport function updateRoleplayFailure(error: string) {\n    return {\n        type: ACTIONS.UPDATE_ROLEPLAY_FAILURE as ACTIONS.UPDATE_ROLEPLAY_FAILURE,\n        error\n    };\n}\n\nexport function clearRoleplay() {\n    return {\n        type: ACTIONS.CLEAR_ROLEPLAY as ACTIONS.CLEAR_ROLEPLAY,\n    };\n}","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const RefreshCircleDisabled = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" data-test={dataTest}>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 2.5a5.487 5.487 0 0 0-4.131 1.869l1.204 1.204A.25.25 0 0 1 4.896 6H1.25A.25.25 0 0 1 1 5.75V2.104a.25.25 0 0 1 .427-.177l1.38 1.38A7.001 7.001 0 0 1 14.929 7h-1.52A5.502 5.502 0 0 0 8 2.5zM1.07 9a7.001 7.001 0 0 0 12.123 3.693l1.38 1.38a.25.25 0 0 0 .427-.177V10.25a.25.25 0 0 0-.25-.25h-3.646a.25.25 0 0 0-.177.427l1.204 1.204A5.502 5.502 0 0 1 2.591 9H1.07z\" fill=\"#B1C0CB\"/>\n</svg>);\n    }\n);\n\nexport default RefreshCircleDisabled;","import { useDispatch } from 'react-redux'\nimport { useCallback } from 'react';\nimport { useCreateCommandRoleplayApi, useGetRoleplayApi, useGetRoleplayContentApi, useUpdateRoleplayApi } from '../../../../api/roleplay';\nimport { useShowMessage } from '../../../../ui/components/ErrorMessages/ErrorMessages';\nimport { ConversationItem, Roleplay } from '../../../../constants/interfaces/Roleplay';\nimport {\n    getRoleplayStart,\n    getRoleplaySuccess,\n    getRoleplayFailure,\n    updateRoleplayStart,\n    updateRoleplaySuccess,\n    updateRoleplayFailure,\n    clearRoleplay,\n} from './actions';\nimport { ErrorResult } from '../../../../constants/interfaces/ErrorResult';\nimport { RoleplayData } from '../../CreateRoleplay/types';\nimport { commandTexts } from '../constants';\nimport { useCompanyVoiceSettingsState } from '../../../CompanySettings/store/states';\nimport { getTextToSpeechSettingsOrDefault } from '../../../../features/textToSpeech/helpers';\nimport { useTextToSpeechService } from '../../../../features/textToSpeech/store/services';\n\n/**\n * @function useGetRoleplayService\n * @returns { CallableFunction }\n */\nexport const useGetRoleplayService = () => {\n    const dispatch = useDispatch();\n    const getRoleplayApi = useGetRoleplayApi();\n    const showMessage = useShowMessage();\n    const getRoleplayContent = useGetRoleplayContentApi();\n\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback((roleplayId) => {\n        dispatch(getRoleplayStart());\n        return getRoleplayApi(roleplayId)\n            .then((data: Roleplay) => {\n                if (data) {\n                    getRoleplayContent(roleplayId).then((content) => {\n                        const rp = { ...data, content: content || null }\n                        dispatch(getRoleplaySuccess(rp));\n                    })\n                }\n            })\n            .catch((error: ErrorResult) => {\n                dispatch(getRoleplayFailure(error.message));\n                showMessage(error.message, 'error');\n            });\n    }, [dispatch, getRoleplayApi, showMessage, getRoleplayContent]);\n}\n\n\nexport const useUpdateRoleplayService = () => {\n    const dispatch = useDispatch();\n    const updateRoleplayApi = useUpdateRoleplayApi();\n    const showMessage = useShowMessage();\n    const createCommand = useCreateCommandRoleplayApi()\n\n    return useCallback(\n        (roleplayId, roleplay, keys?: RoleplayData, type?) => {\n            dispatch(updateRoleplayStart());\n            const rp = {\n                title: roleplay.title,\n                salesMethod: roleplay.salesMethod,\n                'situation': roleplay.situation,\n                'prospect': roleplay.prospect,\n                \"product\": roleplay.product,\n                'objectiveRep': roleplay.objectiveRep,\n                'objectiveNuances': roleplay.objectiveNuances\n            }\n            return updateRoleplayApi(roleplayId, rp)\n                .then(data => {\n                    dispatch(updateRoleplaySuccess({ ...roleplay, ...data }))\n\n                    if (type === 'command') {\n                        let str = '';\n                        if (keys) {\n                            str = Object.entries(keys).reduce((acc, [key, value]) => {\n                                const keyStr = commandTexts[key as keyof typeof commandTexts];\n                                return acc + `Change ${keyStr} to: ${value && value !== 'null' ? value : 'N/A'} \\n`;\n                            }, '');\n                        }\n\n                        createCommand({ roleplayId, text: str });\n                    }\n                    return data;\n                })\n                .catch((error: ErrorResult) => {\n                    dispatch(updateRoleplayFailure(error.message));\n                    showMessage(error.message, 'error');\n                });\n        },\n        [dispatch, showMessage, updateRoleplayApi, createCommand]\n    );\n};\n\n/**\n * @function useClearRoleplayService\n * @returns { CallableFunction }\n */\nexport const useClearRoleplayService = () => {\n    const dispatch = useDispatch();\n    /**\n     * @function callbackFunction\n     * @returns { Promise }\n     */\n    return useCallback(() => {\n        dispatch(clearRoleplay());\n    }, [dispatch]);\n}\n\nexport const useGenerateAudioForRoleplay = () => {\n    const voiceSettings = useCompanyVoiceSettingsState().data;\n    const textToSpeech = useTextToSpeechService();\n    const settings = getTextToSpeechSettingsOrDefault(voiceSettings)\n    return useCallback(async (lines: ConversationItem[]) => {\n        const reportedLines = [];\n        for (let line of lines) {\n            const lineSettings = line.role === 'prospect'\n                ? settings.customer\n                : settings.representative;\n\n            reportedLines.push(await textToSpeech(\n                line.text,\n                lineSettings,\n                { feature: 'scenario', itemId: lines.indexOf(line) }\n            ))\n        }\n        return reportedLines;\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [settings])\n}","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const LoadingAudio = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow, dataTest }, ref) => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" data-test={dataTest} className={className}>\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.002 18h.002a.761.761 0 0 0 .771-.75V2.75a.761.761 0 0 0-.771-.75.76.76 0 0 0-.772.75v14.5a.76.76 0 0 0 .77.75zM6.657 5.75A.76.76 0 0 0 5.886 5a.76.76 0 0 0-.772.75v8.5c0 .414.346.75.772.75a.76.76 0 0 0 .771-.75v-8.5zm-4.114 3A.761.761 0 0 0 1.77 8 .76.76 0 0 0 1 8.75v2.5c0 .414.345.75.771.75a.761.761 0 0 0 .772-.75v-2.5zm10.804 5.5c0 .414.345.75.771.75a.761.761 0 0 0 .771-.75v-8.5a.761.761 0 0 0-.77-.75.76.76 0 0 0-.772.75v8.5zm4.114-3c0 .414.345.75.771.75a.761.761 0 0 0 .772-.75v-2.5a.76.76 0 0 0-.772-.75.761.761 0 0 0-.771.75v2.5z\" fill=\"#4AA9E2\" />\n        </svg>\n        );\n    }\n);\n\nexport default LoadingAudio;","import { Author, ContentPanelContainer, DateText, Contentbox, ErrorContainer, ErrorBox, ContentBoxContainer, SendBoxContainer, CommandBox, RegenerateBtn, BtnContainer, PlayButton, ContentItem, Img, Message, BtnCont, Sendbox, TextBox, MenuButton, CommandContainer, NoEntryContainer, WarningBtnContainer, BlueDot, StopIcon, StopGenIcon, SpinnerContainer } from \"../styles\";\nimport dayjs from \"dayjs\";\nimport { ActionButton, ActionItem } from \"../../../../ui/components/ActionButton\";\nimport PlayIcon from \"../../../../ui/icons/PlayIcon\";\nimport Dots from \"../../../../ui/icons/Dots\";\nimport TextInputWithButtons from \"../../components/TextInputWithButtons/TextInputWithButtons\";\nimport RefreshCircle from \"../../../../ui/icons/RefreshCircle\";\nimport { KeyboardEvent, ReactElement, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useCreateCommandRoleplayApi, useRegenerateRoleplayApi } from \"../../../../api/roleplay\";\nimport { getProfileState } from \"../../../UserProfile/store/reducers\";\nimport { useSelector } from \"react-redux\";\nimport { Button } from \"../../../../ui/components/Button\";\nimport WarningIcon from \"../../../../ui/icons/WarningIcon\";\nimport { useHistory } from \"../../../../tools/router\";\nimport ROUTES from \"../../../../routes/routes\";\nimport { useRoleplayState } from \"../store/states\";\nimport NamePlaceholder from '../../../../ui/components/AvatarPlaceholder';\nimport { getCompanyState } from \"../../../CompanySettings/store/reducers\";\nimport SidebarRoleplaysLarge from \"../../../../ui/icons/SidebarRoleplaysLarge\";\nimport { Text } from \"../../RoleplaysList/styles\";\nimport { commandPattern, downloadTxtFile, formatConversationToClipboard } from \"../constants\";\nimport CustomerAvatar from \"../../../../ui/icons/CustomerAvatar\";\nimport ContentLoading from \"../../components/Skeletons/ContentLoading\";\nimport { ContentItem as ContentItemType, ConversationItem } from \"../../../../constants/interfaces/Roleplay\";\nimport RefreshCircleDisabled from \"../../../../ui/icons/RefreshCircleDisables\";\nimport { useShowMessage } from \"../../../../ui/components/ErrorMessages/ErrorMessages\";\nimport { copyTextToClipboard } from '../../../../helpers/functions/copy-to-clipboard';\nimport { useGenerateAudioForRoleplay } from \"../store/services\";\nimport LoadingAudio from \"../../../../ui/icons/LoadingAudio\";\nimport { CircularProgress } from \"@material-ui/core\";\nimport { useLoadVoiceSettingsService } from \"../../../CompanySettings/store/services\";\nimport { isTeamLeader } from \"../../../../constants/enums\";\nimport useGoogleAnalyticsWithRoleplay from \"../../GoogleAnalytics\";\n\nfunction ContentPanel({ isGenerating, contentData, revertCommand, isDisabled, stopIsDisabled }: { isGenerating: boolean, contentData?: ContentItemType[], revertCommand: (isStop?: boolean) => void, isDisabled?: boolean, stopIsDisabled?: boolean }) {\n    const { data: roleplay, isLoading } = useRoleplayState();\n\n    const sendCommand = useCreateCommandRoleplayApi();\n    const regenerateRoleplayApi = useRegenerateRoleplayApi();\n    const generateAudio = useGenerateAudioForRoleplay();\n    const history = useHistory();\n    const [message, setMessage] = useState('');\n    const profile = useSelector(getProfileState);\n    const messagesContainerRef = useRef<HTMLDivElement>(null);\n    const audioRef = useRef<HTMLAudioElement | null>(null);\n    const lastItemRef = useRef<HTMLDivElement>(null);\n    const observedDivRef = useRef<HTMLDivElement>(null);\n    const [observedHeight, setObservedHeight] = useState<number>(0);\n    const [userScrolled, setUserScrolled] = useState(false);\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n\n    const handleUserScroll = useCallback(() => {\n        if (messagesContainerRef.current) {\n            const container = messagesContainerRef.current;\n            const lastItem = lastItemRef.current;\n\n            if (container && lastItem) {\n                const containerBottom = container.scrollTop + container.clientHeight;\n                const lastItemBottom = lastItem.offsetTop + lastItem.clientHeight;\n\n                const isAtBottom = lastItemBottom - 10 <= containerBottom;\n\n                isGenerating ? setUserScrolled(!isAtBottom) : setUserScrolled(false);\n            }\n        }\n    }, [isGenerating]);\n\n    const roleplayId = useMemo(() => roleplay?.id, [roleplay]);\n    const company = useSelector(getCompanyState);\n    const showMessage = useShowMessage();\n    const [audioFiles, setAudioFiles] = useState<{ [id: number]: Blob[] } | null>(null);\n    const [audioStatus, setAudioStatus] = useState<{ id: number, status: string, currentAudio?: HTMLAudioElement } | null>(null);\n    const loadVoiceSettings = useLoadVoiceSettingsService();\n    const handleLoadVoiceSettings = useCallback(\n        () => profile?.companyId && !isTeamLeader(profile.role?.name) && loadVoiceSettings(profile?.companyId),\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [loadVoiceSettings, profile?.companyId]\n    );\n\n    const sendCustomCommand = () => {\n        roleplay?.id && sendCommand({ roleplayId: roleplay.id.toString(), text: message }).then(() => {\n            setMessage('');\n            trackEventWithRoleplay('roleplay_screen_instruction_sent_manually', { CharacterLimit: message.length });\n        })\n    }\n\n    const isOwner = useMemo(() => {\n        return roleplay?.owner.id === profile?.id\n    }, [\n        profile?.id, roleplay?.owner.id\n    ])\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    useEffect(() => { handleLoadVoiceSettings() }, [isOwner]);\n\n    useEffect(() => {return () => {\n        audioRef.current?.pause()\n    }}, [])\n\n\n    const handleKeyDownChange = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n        if (e.key === 'Enter' && !e.shiftKey) {\n            e.preventDefault();\n            sendCustomCommand();\n        }\n    }\n\n    const regenerateRoleplay = (isRetry?: boolean) => {\n        roleplay?.id && regenerateRoleplayApi({ roleplayId: roleplay.id.toString() });\n        isRetry ? trackEventWithRoleplay('roleplay_screen_error_retry') : trackEventWithRoleplay('roleplay_screen_regenerate');\n    }\n\n    const copyClipboard = (roleplayConversation: ContentItemType) => {\n        const roleplayText = roleplay ? formatConversationToClipboard(roleplay?.title, roleplayConversation.conversation, roleplayConversation?.summary || '') : ''\n        const copy: 'silent' | boolean = copyTextToClipboard(roleplayText);\n        trackEventWithRoleplay('roleplay_screen_copy_clipboard');\n        if (copy !== 'silent') {\n            if (copy) {\n                showMessage(\n                    'Copied to the clipboard',\n                    'success'\n                );\n            } else {\n                showMessage('Could not copy to clipboard', 'error');\n            }\n        }\n    }\n\n    const downloadFile = (roleplayConversation: ContentItemType) => {\n        const roleplayText = roleplay ? formatConversationToClipboard(roleplay?.title, roleplayConversation.conversation, roleplayConversation?.summary || '') : '';\n        downloadTxtFile(roleplayText, `Roleplay - ${roleplay?.title}`);\n        showMessage('Saved as File', \"success\");\n        trackEventWithRoleplay('roleplay_screen_save_file');\n    }\n\n    const playAudio = useCallback((conversation: ConversationItem[], conversationId: number) => {\n        stopAudioPlaying();\n        trackEventWithRoleplay('roleplay_screen_audio_playback');\n        if (audioFiles?.[conversationId]) {\n            setAudioStatus({ id: conversationId, status: 'playing' })\n            playAudioBlobs(audioFiles?.[conversationId]);\n        } else {\n            setAudioStatus({ id: conversationId, status: 'generating' })\n            generateAudio(conversation).then((data) => {\n                setAudioFiles((oldState) => ({ ...oldState, [conversationId]: data }));\n                setAudioStatus({ id: conversationId, status: 'playing' })\n                playAudioBlobs(data);\n            })\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [generateAudio, audioFiles, audioStatus])\n\n    const playAudioBlobs = useCallback((blobs: Blob[], currentAudioIndex = 0) => {\n        if (currentAudioIndex >= blobs.length) {\n            setAudioStatus(null);\n            return;\n        }\n\n        const audioBlob = blobs[currentAudioIndex];\n        const audioUrl = URL.createObjectURL(audioBlob);\n        const audio = new Audio(audioUrl);\n        audio.preload = 'metadata';\n        audioRef.current = audio;\n        \n        audio.play().then(() => setAudioStatus((oldState) => (oldState && { ...oldState, currentAudio: audio }))).catch(error => console.error('Error playing audio:', error));\n\n        audio.onended = () => {\n            URL.revokeObjectURL(audioUrl);\n            playAudioBlobs(blobs, currentAudioIndex + 1);\n        };\n    }, []);\n\n    const stopAudioPlaying = () => {\n        if (audioStatus?.status === 'playing') {\n            if (audioStatus.currentAudio) {\n                audioStatus.currentAudio.pause();\n            }\n            setAudioStatus(null);\n        }\n    }\n\n    const getHighlightedText = (text: string) => {\n        const splitText = text.replace(commandPattern, '%%').split('%%').filter((val) => val);\n        const matches = text.match(commandPattern);\n        if (!matches) return [<>{text}</>];\n\n        const elements: ReactElement[] = [];\n        splitText.forEach((part: string, index: number) => {\n            matches && elements.push(<b key={index}>{matches[index]}</b>);\n            elements.push(<>{part}</>);\n        });\n\n        return elements;\n    };\n\n    useEffect(() => {\n        if (!isLoading && contentData?.length && !userScrolled && messagesContainerRef.current) {\n            const lastItem = lastItemRef.current;\n            if (lastItem) {\n                const topPosition = lastItem.offsetTop;\n                messagesContainerRef.current.scrollTo({ top: topPosition, behavior: 'smooth' });\n                setUserScrolled(false)\n            }\n        }\n    }, [isLoading, contentData, userScrolled]);\n\n    useEffect(() => {\n        const observedDiv = observedDivRef.current;\n\n        const resizeObserver = new ResizeObserver(entries => {\n            for (let entry of entries) {\n                setObservedHeight(entry.contentRect.height);\n            }\n        });\n\n        if (observedDiv) {\n            resizeObserver.observe(observedDiv);\n        }\n\n        return () => {\n            if (observedDiv) {\n                resizeObserver.unobserve(observedDiv);\n            }\n        };\n    }, [message]);\n\n    return roleplay && !contentData?.length ?\n        <NoEntryContainer>\n            <SidebarRoleplaysLarge dataTest=\"roleplay-icon\" />\n            <Text data-test=\"no-roleplay-text\">No Roleplays Yet</Text>\n        </NoEntryContainer>\n        : <>\n            {isLoading ? <ContentLoading /> :\n                <ContentPanelContainer ref={messagesContainerRef} height={!isOwner ? -20 : observedHeight} onScroll={handleUserScroll}>\n                    <div>\n                        {contentData && contentData?.map((contentItem) => {\n                            if (contentItem.type === 'conversation' && contentItem.conversation.length) {\n                                return <Contentbox data-test=\"conversation-container\" key={contentItem.id}>\n                                    <ContentBoxContainer>\n                                    <DateText data-test=\"conversation-date\">{dayjs(contentItem.createdAt).format('MMM D, YY hh:mm A')}</DateText>\n                                    {contentItem.conversation?.map((item, index) => {\n                                        return <ContentItem>\n                                            {\n                                                item.role === 'salesperson' ?\n                                                    <NamePlaceholder\n                                                        image={company.logo || company.logoUrl}\n                                                        name={company.name}\n                                                        dataTest={`salesperson-company-logo`}\n                                                        className={`avatar-logo ${(company.logo || company.logoUrl) && 'no-border'}`}\n                                                    /> :\n                                                    <CustomerAvatar\n                                                        dataTest={`customer-pic`}\n                                                        className=\"customer-logo\"\n                                                    />\n                                            }\n                                            <div>\n                                                <Author data-test={`${item.role}-title`}>\n                                                    {item.role === 'prospect' ? 'Customer ' : 'Salesperson'}\n                                                </Author>\n                                                <Message data-test={`${item.role}-text`}>\n                                                    {item.text}\n                                                    {!contentItem.isFinished && index === contentItem.conversation.length - 1 && <BlueDot />}\n                                                </Message>\n                                            </div>\n                                        </ContentItem>\n                                    })}\n                                    {contentItem.isFinished && <BtnContainer>\n                                        {audioStatus?.id !== contentItem.id && <PlayButton data-test=\"play-btn\" isDisabled={!isOwner} onClick={() => isOwner && playAudio(contentItem.conversation, contentItem.id)}><PlayIcon className=\"play-btn\" /></PlayButton>}\n                                        {audioStatus?.id === contentItem.id && audioStatus?.status === 'playing' && <PlayButton data-test=\"stop-btn\" isDisabled={!isOwner} onClick={stopAudioPlaying}><StopIcon /></PlayButton>}\n                                        {audioStatus?.id === contentItem.id && audioStatus?.status === 'generating' && <SpinnerContainer data-test=\"Loading-btn\" onClick={stopAudioPlaying}><CircularProgress\n                                            size={36}\n                                        /><LoadingAudio className=\"spinner-icn\" /></SpinnerContainer>}\n                                        {!isOwner ?\n                                            <MenuButton isDisabled={!isOwner}><Dots className=\"dots-btn\" dataTest=\"dots-menu\" /></MenuButton>\n                                            : <ActionButton customWidth={200} isHidden={false} dataTest=\"roleplay-menu\" button={<MenuButton><Dots className=\"dots-btn\" dataTest=\"dots-menu\" /></MenuButton>}>\n                                                <ActionItem dataTest=\"challenge-action\" onClick={() => {\n                                                    history.push(`${ROUTES.LIBRARY_SETTINGS.CHALLENGES.SINGLE.replace(\n                                                        ':challengeId',\n                                                        'new'\n                                                    )}?roleplayId=${roleplayId}&contentId=${contentItem.id.toString()}`)\n                                                    trackEventWithRoleplay('roleplay_screen_create_challenge');\n                                                }}>\n                                                    Create Challenge\n                                                </ActionItem>\n                                                <ActionItem dataTest=\"scenario-action\" onClick={() => {\n                                                    history.push(`${ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE.replace(\n                                                        ':scenarioId',\n                                                        'new'\n                                                    )}?roleplayId=${roleplayId}&contentId=${contentItem.id.toString()}`)\n                                                    trackEventWithRoleplay('roleplay_screen_create_scenario');\n                                                }} >\n                                                    Create Scenario\n                                                </ActionItem>\n                                                <ActionItem dataTest=\"save-file-action\" onClick={() => downloadFile(contentItem)}>\n                                                    Save as File\n                                                </ActionItem>\n                                                <ActionItem dataTest=\"copy-action\" onClick={() => copyClipboard(contentItem)} >\n                                                    Copy to Clipboard\n                                                </ActionItem>\n                                            </ActionButton>\n                                        }\n                                    </BtnContainer>}\n                                    </ContentBoxContainer>\n                                </Contentbox>\n                            }\n                            if (contentItem.type === 'command') {\n                                return <CommandContainer data-test=\"command-container\" key={contentItem.id}>\n                                    <CommandBox>\n                                    <DateText data-test=\"command-date\">{dayjs(contentItem.createdAt).format('MMM D, YY hh:mm A')}</DateText>\n                                    <ContentItem>\n                                        <Img\n                                            profile={roleplay?.owner}\n                                            loading={isLoading}\n                                            size=\"default\"\n                                            dataTest=\"command-author-pic\"\n                                            className=\"command-author-pic\"\n                                        />\n                                        <div>\n                                            <Author data-test=\"command-author-name\">\n                                                {roleplay?.owner.firstName + ' ' + roleplay?.owner.lastName}\n                                            </Author>\n                                            <Message data-test=\"command-text\">\n                                                {getHighlightedText(contentItem.text)}\n                                            </Message>\n                                        </div>\n                                    </ContentItem>\n                                    </CommandBox>\n                                </CommandContainer>\n                            }\n                            if (contentItem.type === 'error') {\n                                return <ErrorContainer data-test=\"command-container\" key={contentItem.id}>\n                                    <ErrorBox>\n                                    <DateText data-test=\"error-date\" >{dayjs(contentItem.createdAt).format('MMM D, YY hh:mm A')}</DateText>\n                                    <TextBox>\n                                        <WarningIcon dataTest=\"error-icon\" className=\"error-icon\"></WarningIcon>\n                                        <ContentItem className=\"error-item\">\n                                            <div>\n                                                <Author data-test=\"error-title\">\n                                                    Roleplay Generation Error\n                                                </Author>\n                                                <Message data-test=\"error-text\">\n                                                    An error occurred while generating the Roleplay, please try again in a few seconds.\n                                                </Message>\n                                            </div>\n                                            <WarningBtnContainer>\n                                                <Button color={'warning'} disabled={!isOwner} width=\"140px\" dataTest=\"retry-btn\" className=\"retry-btn\" action={() => regenerateRoleplay(true)}>Try again</Button>\n                                                <Button color={'warning-inverse'} variant='inverse' disabled={!isOwner} width=\"140px\" dataTest=\"revert-btn\" className=\"revert-btn\" style={{ marginLeft: '12px' }} action={() => revertCommand()}>Revert</Button>\n                                            </WarningBtnContainer>\n                                        </ContentItem>\n                                    </TextBox>\n                                    </ErrorBox>\n                                </ErrorContainer>\n                            }\n                            return <></>\n                        })}\n                        <div ref={lastItemRef}></div>\n                    </div>\n\n                    {isOwner && <Sendbox ref={observedDivRef}>\n                        <SendBoxContainer>\n                        {isGenerating ?\n                            <BtnCont>\n                                <RegenerateBtn isDisabled={stopIsDisabled} data-test=\"stop-generation-btn\" onClick={() => {isGenerating && !stopIsDisabled && revertCommand(true)}}><StopGenIcon data-test=\"stop-generation-icon\" isDisabled={stopIsDisabled}><div /></StopGenIcon>Stop generating</RegenerateBtn>\n                            </BtnCont>\n                            :\n                            <BtnCont>\n                                <RegenerateBtn isDisabled={isDisabled} data-test=\"regenerate-btn\" onClick={() => !isGenerating && !isDisabled && regenerateRoleplay()}>{isDisabled ? <RefreshCircleDisabled dataTest=\"regenerate-icon\" /> : <RefreshCircle dataTest=\"regenerate-icon\" />} Regenerate</RegenerateBtn>\n                            </BtnCont>\n                        }\n                        <TextInputWithButtons max={500} disabled={isDisabled} maxRows={7} value={message} textAreaMinHeight={'25px'} onChange={(e) => setMessage(e.target.value)} onKeyDown={handleKeyDownChange} dataTest=\"command\" onApply={sendCustomCommand} placeholder=\"Tell Roleplay AI what to do...\" />\n                        </SendBoxContainer>\n                    </Sendbox>}\n                </ContentPanelContainer>\n            }\n        </>\n}\n\nexport default ContentPanel","import { LineSkeleton, BodySkeletonContainer } from \"./styles\";\nconst bodyLineWidths = [\n    {\n        headerWidth: 72,\n        subHeaderWidth: 137,\n        lineWidths: [448,327,177]\n    },\n    {\n        headerWidth: 149,\n        subHeaderWidth: 84,\n        lineWidths: [327,448,291]\n    },\n    {\n        headerWidth: 109,\n        subHeaderWidth: 95,\n        lineWidths: [282,219,342]\n    }\n];\n\nfunction BodySkeleton() {\n    return <>{bodyLineWidths.map(({headerWidth, subHeaderWidth, lineWidths}, index) => {\n        return <BodySkeletonContainer key={index} data-test=\"roleplay-context-skeleton\" >\n            <LineSkeleton width={headerWidth} height={12} data-test=\"roleplay-context-skeleton-line\" />\n            <LineSkeleton width={subHeaderWidth} height={8} marginTop={'17px'} data-test=\"roleplay-context-skeleton-line\"/>\n                {\n                    lineWidths.map((width, index) => <LineSkeleton width={width} height={8} key={index} data-test=\"roleplay-context-skeleton-line\"/>)\n                }\n            </BodySkeletonContainer>\n    })}</>\n}\n\nexport default BodySkeleton;","import ObjectiveAiParam from \"../../components/AiParamsComponents/Objective\";\nimport ProductAiParam from \"../../components/AiParamsComponents/ProductService\";\nimport ProspectAiParam from \"../../components/AiParamsComponents/Prospect\";\nimport SituationAiParam from \"../../components/AiParamsComponents/Situation\";\nimport BodySkeleton from \"../../components/Skeletons/BodySkeleton\";\nimport { RolePlayContextParams, RoleplayData } from \"../../CreateRoleplay/types\";\nimport { useRoleplayState } from \"../store/states\";\nimport { ParamsContainer, SubTitle } from \"../styles\";\n\nfunction ContextPanel({ emptyRequiredProps, isEditMode, handleChange, rpdata } : { emptyRequiredProps?: RolePlayContextParams[], isEditMode: boolean, handleChange: (key: RolePlayContextParams, value: string) => void; rpdata: RoleplayData }) {\n    const { isLoading } = useRoleplayState();\n    return <ParamsContainer>\n        {\n            isLoading ? <BodySkeleton /> : <>\n                <SubTitle data-test=\"sitation-title\">Situation</SubTitle>\n                <SituationAiParam handleChange={handleChange} roleplayData={rpdata} isEditMode={isEditMode} autoFocus={true}  emptyRequiredProps={emptyRequiredProps} analyticsKey={'roleplay_screen'}/>\n                <SubTitle data-test=\"prospect-title\" >Customer</SubTitle>\n                <ProspectAiParam handleChange={handleChange} roleplayData={rpdata} isEditMode={isEditMode} emptyRequiredProps={emptyRequiredProps} analyticsKey={'roleplay_screen'}/>\n                <SubTitle data-test=\"product-title\" >Product</SubTitle>\n                <ProductAiParam handleChange={handleChange} roleplayData={rpdata} isEditMode={isEditMode} emptyRequiredProps={emptyRequiredProps} analyticsKey={'roleplay_screen'}/>\n                <SubTitle data-test=\"objective-title\" >Approach</SubTitle>\n                <ObjectiveAiParam handleChange={handleChange} roleplayData={rpdata} isEditMode={isEditMode} analyticsKey={'roleplay_screen'}/>\n            </>\n        }\n    </ParamsContainer>\n}\n\nexport default ContextPanel;","import React, { forwardRef } from 'react';\nimport { IconProps } from './types';\n\nexport const PencilIconActive = forwardRef<SVGSVGElement, IconProps>(\n    ({ className, shadow }, ref) => {\n        return (<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.085a1.75 1.75 0 0 1 0 2.475l-8.61 8.61c-.21.21-.47.363-.756.445l-3.25.929a.75.75 0 0 1-.928-.927l.929-3.251a1.75 1.75 0 0 1 .445-.757l8.61-8.61zm1.414 1.06a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354l-1.086-1.086zM11.189 6.25 9.75 4.81l-6.286 6.287a.25.25 0 0 0-.064.108l-.558 1.953 1.953-.558a.249.249 0 0 0 .108-.064l6.286-6.286z\" fill=\"#4AA9E2\"/>\n</svg>\n        );\n    }\n);\n\nexport default PencilIconActive;\n","import { RoundSkeleton } from \"../../../../ui/components/Skeleton/styles\";\nimport { LineSkeleton, HeaderSkeletonContainer, LineContainer } from \"./styles\";\n\nfunction HeaderSkeleton() {\n    return <HeaderSkeletonContainer data-test=\"roleplay-header-skeleton\">\n        <LineContainer>\n            <LineSkeleton width={146} height={12} data-test=\"roleplay-header-skeleton-line\" />\n            <RoundSkeleton width={12} height={12} data-test=\"roleplay-header-skeleton-round\"/>\n        </LineContainer>\n        <LineSkeleton width={117} height={8} data-test=\"roleplay-header-skeleton-line\"/>\n    </HeaderSkeletonContainer>\n\n}\n\nexport default HeaderSkeleton;","import dayjs from \"dayjs\";\nimport { useState } from \"react\";\nimport ROUTES from \"../../../../routes/routes\";\nimport { useHistory } from \"../../../../tools/router\";\nimport TextInputWithButtons from \"../../components/TextInputWithButtons/TextInputWithButtons\";\nimport BackArrow from \"../../../../ui/icons/BackArrow\";\nimport PencilIcon from \"../../../../ui/icons/PencilIcon\";\nimport PencilIconActive from \"../../../../ui/icons/PencilIconActive\";\nimport { NameContainer, OwnerName } from \"../../RoleplaysList/styles\";\nimport { useUpdateRoleplayService } from \"../store/services\";\nimport { useRoleplayState } from \"../store/states\";\nimport { Header, HeaderContainer, IconContainer, IconCountainer, Title } from \"../styles\";\nimport HeaderSkeleton from \"../../components/Skeletons/HeaderSkeleton\";\nimport useGoogleAnalyticsWithRoleplay from \"../../GoogleAnalytics\";\n\nfunction RoleplayHeader({ isDisabled }: { isDisabled: boolean }) {\n    const history = useHistory();\n    const { data: roleplay, isLoading } = useRoleplayState();\n    const updateRoleplay = useUpdateRoleplayService();\n    const [editmode, setEditMode] = useState<{ [key: string]: string }>({});\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n\n    const closeEditMode = () => {\n        setEditMode({});\n    }\n\n    const handleNameChange = () => {\n        roleplay && editmode['title'] && updateRoleplay(roleplay?.id.toString(), {\n            ...roleplay,\n            title: editmode['title'],\n        }).then(() => {\n            closeEditMode();\n            trackEventWithRoleplay('roleplay_screen_title_updated');\n        });\n    }\n\n    const isRequiredTitle = editmode['title'] === '';\n    \n    return <HeaderContainer>{editmode['title'] === undefined ?\n        <>\n            <IconContainer onClick={() => {\n                history.push(ROUTES.ROLEPLAYS.LIST_OF_ROLEPLAYS)\n            }} data-test=\"back-button\"><BackArrow /></IconContainer>\n            {\n                isLoading ? <HeaderSkeleton /> : <Header>\n                <Title>\n                    <span data-test=\"roleplay-title\">{roleplay?.title}</span>\n                    <IconCountainer onClick={() => !isDisabled && roleplay?.title && setEditMode({ 'title': roleplay?.title })} isDisabled={isDisabled} data-test={`rename-edit-icon`}>\n                        {!isDisabled ? <PencilIconActive /> : <PencilIcon />}\n                    </IconCountainer>\n                </Title>\n                <NameContainer>\n                    {roleplay &&\n                        <><OwnerName data-test=\"roleplay-owner-name\">\n                            {roleplay?.owner?.firstName + ' ' + roleplay?.owner?.lastName}\n                        </OwnerName> •\n                            <span data-test=\"roleplay-createdAt\">{dayjs(roleplay?.dateCreated).format('MMM D, YY hh:mm A')}</span></>\n                    }\n                </NameContainer>\n            </Header>\n            }\n            \n        </>\n        :\n        <TextInputWithButtons width={'681px'} max={80} value={editmode['title']} onChange={(e) => setEditMode({ 'title': e.target.value })} autoFocus={true} onClose={closeEditMode} onApply={handleNameChange} dataTest=\"rename\" isRequired={isRequiredTitle} />\n    }</HeaderContainer>\n}\n\nexport default RoleplayHeader;","import { Button } from \"../../../../ui/components/Button\"\nimport { ModalWithCross } from \"../../../../ui/components/ModalWithCross\"\nimport { ModalBody, ModalHeader, ModalText } from \"../styles\"\n\nfunction RoleplayInfoModal({onClose, dataTest} : {dataTest: string, onClose: () => void} ) {\n\n    return <ModalWithCross\n        onClose={() => {}}\n        width={400}\n        dataTest={dataTest}\n        hideCross={true}\n    >\n        <ModalBody data-test=\"modal-body\">\n            <ModalHeader data-test=\"modal-header\">Disclaimer: Roleplay AI</ModalHeader>\n            <ModalText data-test=\"modal-text\">Please note, these roleplays are generated by AI and may contain inaccuracies or misleading information. The Roleplay AI is continuously learning and enhancing, aiming to provide more realistic and effective sales situations over time.</ModalText>\n            <Button variant=\"primary\" action={onClose} dataTest=\"got-it-button\">Got it</Button>\n        </ModalBody>\n    </ModalWithCross>\n}\n\nexport default RoleplayInfoModal;","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\nimport { useDuplicateRoleplayApi, useGenerateRoleplayApi, useGetRoleplayContentApi, useResetRoleplayApi, useRevertRoleplayApi } from \"../../../api/roleplay\";\nimport { isAdminRole, isPractisAdminRole } from \"../../../constants/enums\";\nimport { ContentItem } from \"../../../constants/interfaces/Roleplay\";\nimport useHtmlPageTitle from \"../../../helpers/hooks/useHtmlPageTitle\";\nimport ROUTES from \"../../../routes/routes\";\nimport { generateCopyOfEntityName } from \"../../../services/GeneralBulkActionServices/helpers\";\nimport { useHistory } from \"../../../tools/router\";\nimport { ActionButton, ActionItem } from \"../../../ui/components/ActionButton\";\nimport { Button } from \"../../../ui/components/Button\";\nimport { useShowMessage } from \"../../../ui/components/ErrorMessages/ErrorMessages\";\nimport { useShowConfirmModalDialog } from \"../../../ui/components/ModalDialogs/store/actions\";\nimport Dots from \"../../../ui/icons/Dots\";\nimport { InfoIcon } from \"../../../ui/icons/InfoIcon\";\nimport MainWrapper from \"../../../ui/wrapper/MainWrapper/MainWrapper\";\nimport { getProfileState } from \"../../UserProfile/store/reducers\";\nimport { initialRolePlayData, keysForGA, requiredContextParams } from \"../CreateRoleplay/constants\";\nimport { RolePlayContextParams, RoleplayData } from \"../CreateRoleplay/types\";\nimport useGoogleAnalyticsWithRoleplay from \"../GoogleAnalytics\";\nimport useWebSocket from \"../websocketV2/service\";\nimport ContentPanel from \"./components/ContentPanel\";\nimport ContextPanel from \"./components/ContextPanel\";\nimport RoleplayHeader from \"./components/RoleplayHeader\";\nimport RoleplayInfoModal from \"./components/RoleplayInfoModal\";\nimport { useClearRoleplayService, useGetRoleplayService, useUpdateRoleplayService } from \"./store/services\";\nimport { useRoleplayState } from \"./store/states\";\nimport { BodyContainer, Container, ContentContainer, ContextContainer, Footer, InfoText, ButtonContainer, RoleplayMenuDots } from \"./styles\";\n\nfunction RoleplayPage() {\n    const { roleplayId }: { roleplayId: string } = useParams();\n    const getRoleplay = useGetRoleplayService();\n    const getRoleplayContent = useGetRoleplayContentApi();\n    const clearRoleplay = useClearRoleplayService();\n    const duplicateRoleplay = useDuplicateRoleplayApi();\n    const showMessage = useShowMessage();\n    const generateRoleplay = useGenerateRoleplayApi();\n    const resetRoleplayApi = useResetRoleplayApi();\n    const [emptyRequiredProps, setEmptyRequiredProps] = useState<RolePlayContextParams[]>();\n    const updateRoleplay = useUpdateRoleplayService();\n    const showConfirmationModalDialog = useShowConfirmModalDialog();\n    const { response, sendMessage, closeConnection } = useWebSocket();\n    const token = localStorage.getItem('token');\n    const [isEditMode, setIsEditMode] = useState(false);\n    useHtmlPageTitle('Roleplay AI');\n    const infoPanel = localStorage.getItem('infoPanel');\n\n    const [isGenerating, setIsGenerating] = useState<boolean>(false);\n    const [isLastError, setLastError] = useState<boolean>(false);\n    const [stopIsDisabled, setStopIsDisabled] = useState<boolean>(false);\n    const [actionSent, setActionSent] = useState<boolean>(false);\n    const [contentData, setContentData] = useState<ContentItem[]>();\n    const history = useHistory();\n    const trackEventWithRoleplay = useGoogleAnalyticsWithRoleplay();\n\n    const [showInfoPanel, setShowInfoPanel] = useState<boolean>(false);\n    const profile = useSelector(getProfileState);\n    const revertRoleplayApi = useRevertRoleplayApi();\n    const [edittedRoleplay, setEdittedRoleplay] = useState<RoleplayData | null>({} || null);\n\n    const handleChange = (key: RolePlayContextParams, value: string) => {\n        setEdittedRoleplay({ ...edittedRoleplay, [key]: value });\n    }\n\n    const { data: roleplay, isLoading } = useRoleplayState();\n\n    useEffect(() => {\n        infoPanel === 'true' && setShowInfoPanel(true)\n    }, [infoPanel])\n\n    const isOwner = useMemo(() => {\n        return roleplay?.owner.id === profile?.id;\n    }, [profile?.id, roleplay?.owner.id]);\n\n    useEffect(() => {\n        if (!actionSent && !!profile?.id && !!roleplay?.owner.id && profile?.id !== roleplay?.owner.id) {\n            trackEventWithRoleplay('roleplay_screen_open_read_only');\n            setActionSent(true);\n        } \n    }, [isOwner, trackEventWithRoleplay, profile?.id, roleplay?.owner.id, actionSent])\n\n    const hasContent = useMemo(() => {\n        return !!contentData?.length\n    }, [\n        contentData\n    ])\n\n    const getContent = useCallback(() => {\n        getRoleplayContent({ roleplayId }).then((content) => {\n            if (content) {\n                setContentData(content);\n                if (content.length && content[content.length - 1].type === 'error') {\n                    setLastError(true);\n                    setIsGenerating(false);\n                } else {\n                    setLastError(false);\n                }\n            }\n        })\n    }, [roleplayId, setLastError, getRoleplayContent])\n\n    useEffect(() => {\n        isLastError && trackEventWithRoleplay('roleplay_screen_generate_error');\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isLastError])\n\n    const isAdmin = useMemo(() => {\n        return isAdminRole(profile?.role?.name) || isPractisAdminRole(profile?.role?.name)\n    }, [profile?.role?.name])\n\n    useEffect(() => {\n        getRoleplay({ roleplayId });\n        getContent();\n         // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [roleplayId, getRoleplay]);\n\n    const handleDuplicate = () => {\n        roleplay && duplicateRoleplay({\n            roleplayId: roleplay.id.toString(),\n            title: generateCopyOfEntityName(roleplay.title)\n        }).then((roleplay) => {\n            trackEventWithRoleplay('roleplay_screen_duplicate');\n            showMessage('Roleplay has been duplicated', 'success');\n            history.replace(`${ROUTES.ROLEPLAYS.SINGLE.replace(\n                ':roleplayId',\n                roleplay.id.toString()\n            )}`)\n            infoPanel === null && localStorage.setItem(\n                'infoPanel',\n                'true'\n            );\n        })\n    };\n\n    const generateFirstRoleplay = useCallback(() => {\n        roleplay?.id && generateRoleplay({ roleplayId: roleplay.id.toString() });\n        trackEventWithRoleplay('roleplay_screen_generate');\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [setEmptyRequiredProps, generateRoleplay, roleplay, showMessage])\n\n    const resetRoleplay = () => {\n        showDiscardModal();\n    }\n\n    const revertCommand = useCallback((isStop?: boolean) => {\n        setStopIsDisabled(true);\n        isStop ? trackEventWithRoleplay('roleplay_screen_stop_generation'): trackEventWithRoleplay('roleplay_screen_error_revert');\n        roleplay?.id && revertRoleplayApi({ roleplayId: roleplay.id.toString() }).then(() => {\n            getContent();\n            setIsGenerating(false);\n            setStopIsDisabled(false);\n        })\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [roleplay?.id, revertRoleplayApi])\n\n    const showDiscardModal = useCallback(\n        () => {\n            showConfirmationModalDialog({\n                modalTitle: 'Reset Roleplay?',\n                description:\n                    'It will permanently delete all history of generated replays and custom instructions while keeping your context intact.',\n                confirmButtonText: 'Reset',\n                cancelButtonText: 'Cancel',\n                onConfirm: () => {\n                    roleplay?.id && resetRoleplayApi({ roleplayId: roleplay.id.toString() }).then(() => {\n                        getContent();\n                        trackEventWithRoleplay('roleplay_screen_reset');\n                    })\n                },\n                dataTest: 'reset-roleplay'\n            });\n        },\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        [showConfirmationModalDialog, resetRoleplayApi, roleplay, getRoleplay]\n    );\n\n    useEffect(() => {\n        if (response === 'opened' && roleplayId && isOwner) {\n            token && sendMessage({ event: 'authenticate', data: token });\n        } else {\n            try {\n                const socketResponse = JSON.parse(response);\n                if (socketResponse.type === 'auth') {\n                    sendMessage({\n                        \"event\": \"watch\",\n                        \"data\": `roleplay:${roleplayId}`\n                    })\n                }\n                if (socketResponse.type === 'roleplay.content') {\n                    const dataItem = socketResponse.data;\n                    if (dataItem.type === 'conversation') {\n                        setIsGenerating(!dataItem.isFinished)\n                    }\n                    if (dataItem.type === 'conversation' && dataItem.isFinished) {\n                        trackEventWithRoleplay('roleplay_screen_script_generated');\n                    }\n                    if (dataItem.type === 'error') {\n                        setLastError(true);\n                        setIsGenerating(false);\n                    }\n                    setContentData((prevState) => {\n                        const updatedConversation = [...(prevState || [])];\n\n                        const existingItemIndex = prevState ? prevState.findIndex((item) => {\n                            return item.id === dataItem.id\n                        }) : -1;\n                        if (existingItemIndex !== -1) {\n                            updatedConversation[existingItemIndex] = dataItem;\n                        } else {\n                            updatedConversation.push(dataItem);\n                        }\n                        return updatedConversation;\n                    });\n\n                }\n            } catch (e) {}\n        }\n         // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [response, token, roleplayId, setContentData, setLastError, setIsGenerating, isOwner]);\n\n    useEffect(() => {\n        return () => {\n            clearRoleplay();\n            closeConnection();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [])\n\n    const saveChanges = () => {\n        if (edittedRoleplay) {\n            const arr: RolePlayContextParams[] = [];\n            requiredContextParams.forEach((item) => {\n                if ({ ...roleplay, ...edittedRoleplay }?.[item] === '') {\n                    arr.push(item)\n                }\n            })\n            if (arr?.length) {\n                setEmptyRequiredProps(arr?.length ? arr : undefined)\n                showMessage('One or more required fields are missing', 'error')\n            } else {\n                setEmptyRequiredProps(undefined);\n\n                edittedRoleplay && Object.entries(edittedRoleplay).forEach(([key, value]) => {\n                    if (value !== initialRolePlayData[key as keyof typeof initialRolePlayData]) {\n                        const keyGA = keysForGA[key as keyof typeof keysForGA];\n                        keyGA && trackEventWithRoleplay(`roleplay_screen_${keyGA}_updated`);\n                    }\n                });\n\n                updateRoleplay(roleplay?.id, { ...roleplay, ...edittedRoleplay }, edittedRoleplay, hasContent ? 'command' : undefined).then(() => {\n                    cancelChanges();\n                });\n                trackEventWithRoleplay('roleplay_screen_save_context');\n                hasContent && trackEventWithRoleplay('roleplay_screen_instruction_sent_auto', {CharacterLimit: Object.values(edittedRoleplay).join('').length});\n            }\n        } else {\n            cancelChanges();\n        }\n    }\n\n    const cancelChanges = () => {\n        setIsEditMode(false);\n        setEdittedRoleplay(null);\n        setEmptyRequiredProps(undefined);\n    }\n\n    return <MainWrapper subTitle=\"Roleplay AI\" contentSize={false} dataTest=\"roleplay\" hideHeader contentPadding=\"0px\" marginBottom=\"0px\">\n        <Container>\n            <RoleplayHeader isDisabled={!isOwner || isGenerating || isEditMode} />\n            <BodyContainer>\n                <ContextContainer fullHeight={isLoading || isOwner}>\n                    <ContextPanel emptyRequiredProps={emptyRequiredProps} rpdata={{ ...roleplay, ...edittedRoleplay }} isEditMode={isEditMode} handleChange={handleChange} />\n                    {roleplay && <ButtonContainer>\n                        {\n                            isEditMode ?\n                                <>\n                                    <Button width=\"140px\" action={saveChanges} dataTest=\"save-button\">\n                                        Save\n                                    </Button>\n                                    <Button dataTest=\"cancel-button\" width=\"140px\" variant='inverse' action={() => {trackEventWithRoleplay('roleplay_screen_cancel_context'); cancelChanges()}}>\n                                        Cancel\n                                    </Button>\n                                </> :\n                                <>\n                                    {!hasContent &&\n                                        <Button width=\"164px\" action={generateFirstRoleplay} dataTest=\"generate-button\">\n                                            Generate Roleplay\n                                        </Button>\n                                    }\n                                    <Button dataTest=\"edit-context-button\" width=\"140px\" disabled={isGenerating || isLastError} variant='inverse' action={() => {trackEventWithRoleplay('roleplay_screen_edit_context'); setIsEditMode(true)}}>\n                                        Edit Context\n                                    </Button>\n                                    {hasContent &&\n                                        <ActionButton isDisabled={isGenerating || isLastError} customWidth={200} placement={'bottom-start'} isHidden={false} dataTest=\"roleplay-menu\" customLeft={1} button={<RoleplayMenuDots disabled={isGenerating || isLastError} dataTest=\"roleplay-action-dots\" width=\"40px\" variant='inverse'><Dots className=\"dots-btn\" dataTest=\"dots-menu\" /></RoleplayMenuDots>}>\n                                            <ActionItem dataTest=\"reset-button\" onClick={resetRoleplay} destructive={true}>\n                                                Reset\n                                            </ActionItem>\n                                        </ActionButton>\n                                    }\n                                </>\n                        }\n                    </ButtonContainer>}\n                </ContextContainer>\n                <ContentContainer fullHeight={isLoading || isOwner}>\n                    <ContentPanel isDisabled={isGenerating || isLastError || isEditMode} isGenerating={isGenerating} contentData={contentData} revertCommand={revertCommand} stopIsDisabled={stopIsDisabled} />\n                </ContentContainer>\n            </BodyContainer>\n            {roleplay && !isOwner && <Footer>\n                {\n                    !isAdmin && <>\n                        <InfoIcon dataTest=\"info-icon\" />\n                        <InfoText data-test=\"info-text\">\n                            Roleplay is in view-only mode. You need the Admin rights to edit it.</InfoText>\n                    </>\n                }\n                {\n                    isAdmin &&\n                    <Button action={handleDuplicate} width=\"164px\" dataTest=\"duplicate-button\">\n                        Duplicate to edit\n                    </Button>\n                }\n            </Footer>}\n        </Container>\n        {\n            showInfoPanel && <RoleplayInfoModal dataTest=\"roleplay-info-modal\" onClose={() => {\n                setShowInfoPanel(false);\n                trackEventWithRoleplay('roleplay_screen_disclaimer');\n                localStorage.setItem(\n                    'infoPanel',\n                    'false'\n                )\n            }} />\n        }\n    </MainWrapper >\n}\n\nexport default RoleplayPage;","import RoleplayPage from './controller';\n\nexport default RoleplayPage;","import React, { useCallback, useEffect } from 'react';\nimport { History } from 'history';\n\nimport ROUTES from '../../../routes/routes';\nimport { UrlBuilder, useUrlBuilder } from '../../../tools/url/UrlBuilder';\nimport { useHistory } from '../../../tools/router';\nimport {\n    setAuthToken,\n    redirectAfterLogin,\n} from '../../../helpers/functions/auth-helpers';\nimport LoginAuthWrapper from '../../../ui/wrapper/LoginAuthWrapper';\nimport { UserV2 } from '../../../constants/interfaces/User';\nimport useHtmlPageTitle from '../../../helpers/hooks/useHtmlPageTitle';\nimport { useAuthZeroTokenTypeApi } from '../../../api';\nimport { useShowMessage } from '../../../ui/components/ErrorMessages/ErrorMessages';\n\nconst qs = require('query-string');\n\nconst Auth0Callback = () => {\n    const history: History<any> = useHistory();\n    const from = history.location.state?.from as Location;\n    const showMessage = useShowMessage();\n    const authZeroTokenTypeApi = useAuthZeroTokenTypeApi();\n    const urlBuilder = useUrlBuilder();\n    /**\n     * @function handleRedirectToLoginPage\n     * @returns { void }\n     */\n    const handleRedirectToLoginPage = useCallback(() => {\n        history.push(ROUTES.AUTH_PAGES.LOGIN);\n    }, [history]);\n\n    const handleAccessToken = (accessToken: any, urlBuilder: UrlBuilder) => {\n        authZeroTokenTypeApi({ token: accessToken })\n            .then((response: { user: UserV2; token: string }) => {\n                const user = response.user;\n                setAuthToken(user, response.token);\n                redirectAfterLogin(\n                    history,\n                    urlBuilder,\n                    user,\n                    response.token,\n                    from,\n                );\n                // }\n            })\n            .catch(() => {\n                showMessage('Account doesn’t exist, or you don’t have access', 'error');\n                handleRedirectToLoginPage();\n            });\n\n    };\n\n    useEffect(() => {\n        const hash = window.location.hash;\n        const accessToken = qs.parse(hash).access_token ?? null;\n        if (accessToken) {\n            handleAccessToken(accessToken, urlBuilder);\n        } else {\n            showMessage('Account doesn’t exist, or you don’t have access', 'error');\n            handleRedirectToLoginPage();\n        }\n    }, [handleRedirectToLoginPage, urlBuilder]);\n\n    useHtmlPageTitle('Auth0 Callback');\n\n    return (\n        <LoginAuthWrapper contentWidth={324} heightToShowScroll={500}>\n            <div />\n        </LoginAuthWrapper>\n    );\n};\n\nexport default Auth0Callback;","import { useEffect } from 'react';\r\nimport { Route, Switch, useLocation, Redirect } from 'react-router-dom';\r\nimport { isEqual } from 'lodash';\r\n\r\nimport './assets/styles/fonts.css';\r\nimport ErrorMessages from './ui/components/ErrorMessages/ErrorMessages';\r\nimport ForgotPassword from './pages/Auth/ForgotPassword';\r\nimport Login from './pages/Auth/Login/Login';\r\nimport LogOut from './pages/Auth/LogOut/LogOut';\r\nimport InternalLogin from './pages/Auth/InternalLogin/InternalLogin';\r\nimport { Register } from './pages/Auth/Register';\r\nimport { Registration } from './pages/Auth/Registration';\r\nimport ResetPassword from './pages/Auth/ResetPassword';\r\nimport HealthPage from './pages/Health/Health';\r\nimport UserProfile from './pages/UserProfile/UserProfile';\r\nimport ROUTES from './routes/routes';\r\nimport PrivateRoute from './routes/PrivateRouter';\r\nimport NotFoundPage from './pages/NotFoud/NotFound';\r\nimport LandingPage from './pages/LandingPage/LandingPage';\r\nimport Progress from './features/teams/pages/Training/Progress';\r\nimport { useLocations } from './tools/router';\r\nimport NewUserContainer from './pages/ActionPages/NewUser/pages/NewUser';\r\nimport NewScenario from './pages/ActionPages/NewScenario/NewScenario';\r\nimport PractisSets from './pages/ActionPages/PractisSets/PractisSets';\r\nimport Library from './features/library/pages/Library';\r\nimport TermsPage from './pages/Terms/Terms';\r\nimport PrivacyPage from './pages/Privacy/Privacy';\r\nimport SupportPage from './pages/Support/Support';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getProfileState } from './pages/UserProfile/store/reducers';\r\nimport InvitationsContainer from './features/users/pages/Invitations/Invitations';\r\nimport UsersContainer from './features/users/pages/Users/Users';\r\nimport EditChallenge from './features/challenges/pages/EditChallenge';\r\nimport InjectNewRelic from './features/newRelic/index';\r\nimport ChallengeSubmissions from './features/submissions/pages/ChallengeSubmissions';\r\nimport AccuracyTests from './features/submissions/pages/AccuracyTests'\r\nimport Submissions from './features/submissions/pages/Submissions';\r\nimport SubmissionDetails from './features/submissions/pages/SubmissionDetails';\r\nimport TraineeLogin from './pages/Auth/TraineeLogin/TraineeLogin';\r\nimport PerformanceContainer from './features/users/pages/Performance/Performance';\r\nimport PublicRoute from './routes/PublicRouter';\r\nimport CompanyLogsContainer from './features/logs/pages/Logs';\r\nimport MobileNumberLogin from './pages/Auth/MobileNumberLogin/MobileNumberLogin';\r\nimport VerifyMobileNumber from './pages/Auth/VerifyMobileNumber';\r\nimport Telepromter from './features/telepromter/pages';\r\nimport DraftsContainer from './features/users/pages/Drafts/Drafts';\r\nimport CompanyAiAssessmentContainer from './features/assessment-logs/pages/AiAssessment';\r\nimport TeamsContainer from './features/teams/pages/ListOfTeams/ListOfTeams';\r\nimport { OverdueLearners } from './features/teams/pages/OverdueLearners';\r\nimport ManageTeamContainer from './features/teams/pages/ManageTeam/ManageTeam';\r\nimport CreateTeam from './features/teams/pages/CreateTeam';\r\nimport PractisSetReportContainer from './features/teams/pages/Training/PractisSetReport';\r\nimport { ScenarioRepsContainer } from './features/teams/pages/Training/ScenarioReps';\r\nimport TraineeQuickAssignmentContainer from './features/teams/pages/Training/TraineeQuickAssignment';\r\nimport TraineeInvitationContainer from './features/teams/pages/Training/TraineeInvitation';\r\nimport { PlaybackScreen } from './ui/components/PlaybackVideo';\r\nimport ProgressPage from './features/socketProgress(api1)/progresspage';\r\nimport { getSearchState } from './features/searchState/store/reducer';\r\nimport { deleteSearchState, setSecondarySearchState } from './features/searchState/store/actions';\r\nimport { checkChildrenKeys } from './features/searchState/helpers';\r\nimport { SEARCH_STATE } from './features/searchState/constants';\r\nimport { deleteSecondarySearchState } from './features/searchState/store/actions';\r\nimport { generateColorVariables } from './ui/variables/generate-variables';\r\nimport { useRedirectToPhoneVerification } from './helpers/hooks/useRedirectToPhoneVerification';\r\nimport Onboarding from './pages/Auth/Onboarding';\r\nimport InvalidInvite from './pages/Auth/InvalidInvite';\r\nimport AddMobileNumber from './pages/Auth/AddMobileNumber';\r\nimport TraineeSplash from './pages/Auth/TraineeSplash';\r\nimport BrokenSharedLink from './ui/components/BrokenSharedLink';\r\nimport { TeamsPage } from './features/teams/pages';\r\nimport { ModalDialogs } from './ui/components/ModalDialogs';\r\nimport OldAccuracyTest from './pages/OldSubmission/OldAccuracyTest';\r\nimport OldChallenge from './pages/OldSubmission/OldChallenge';\r\nimport Storage from './services/Storage';\r\nimport { storageKeys } from './constants/variables/general';\r\nimport { PractisWebMode } from './constants/enums';\r\nimport Reports from './pages/Reports';\r\nimport Roleplays from './pages/Roleplays/RoleplaysList';\r\nimport { PractisSetSummaryReport } from './pages/Reports/PractisSetSummaryReport';\r\nimport { UserActivityReport } from './pages/Reports/UserActivityReport';\r\nimport { TeamLeaderActivityReport } from './pages/Reports/TeamLeaderActivityReport';\r\nimport { BillingReport } from './pages/Reports/BillingReport';\r\nimport { CompanySettings } from './pages/CompanySettings';\r\nimport { TrainingTimeReport } from './pages/Reports/TrainingTimeReport';\r\nimport RoleplayCreate from './pages/Roleplays/CreateRoleplay';\r\nimport RoleplayPage from './pages/Roleplays/RoleplayPage';\r\nimport Auth0Callback from './pages/Auth/Auth0Callback/Auth0Callback';\r\n\r\nconst App: React.FC = () => {\r\n    let { rootLocation, modalLocation } = useLocations();\r\n    const user = useSelector(getProfileState, isEqual);\r\n    const searchState = useSelector(getSearchState, isEqual);\r\n    const location = useLocation();\r\n    const dispatch = useDispatch();\r\n    const redirectToPhoneVerification = useRedirectToPhoneVerification();\r\n    const mobileDeepLinkRoutes = Object.keys(ROUTES.MOBILE_DEEP_LINKS);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            searchState.key === SEARCH_STATE.TEAMS.name ||\r\n            searchState.key === SEARCH_STATE.TRAINING.name\r\n        ) {\r\n            const keyName =\r\n                searchState.key === SEARCH_STATE.TEAMS.name\r\n                    ? SEARCH_STATE.TEAMS.name\r\n                    : SEARCH_STATE.TRAINING.name;\r\n            dispatch(setSecondarySearchState(keyName, searchState.params));\r\n        }\r\n\r\n        if (\r\n            !location.pathname.includes(SEARCH_STATE.MEMBERS.name) &&\r\n            !location.pathname.includes(SEARCH_STATE.TEAMS.name)\r\n        ) {\r\n            dispatch(deleteSecondarySearchState());\r\n        }\r\n\r\n        if (!checkChildrenKeys(location.pathname, searchState?.childrenKeys)) {\r\n            dispatch(deleteSearchState());\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [dispatch, location.pathname]);\r\n\r\n    useEffect(() => {\r\n        generateColorVariables();\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        if (user?.id && !user?.phoneNumberVerified) {\r\n            redirectToPhoneVerification({ user }, true);\r\n        }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [user?.id, redirectToPhoneVerification])\r\n\r\n\r\n    useEffect(() => {\r\n        Storage.set(storageKeys.PRACTIS_WEB, PractisWebMode['WEB_PORTAL']);\r\n    }, []);\r\n    \r\n    return (\r\n        <div>\r\n            <ProgressPage />\r\n            <InjectNewRelic />\r\n            <Switch location={rootLocation}>\r\n                <PublicRoute\r\n                    path={ROUTES.AUTH_PAGES.LOGIN}\r\n                    exact\r\n                    component={Login}\r\n                />\r\n                <PublicRoute\r\n                    path={ROUTES.AUTH_PAGES.INTERNAL_LOGIN}\r\n                    exact\r\n                    component={InternalLogin}\r\n                />\r\n                <PublicRoute\r\n                    path={ROUTES.AUTH_PAGES.AUTH0_CALLBACK}\r\n                    exact\r\n                    component={Auth0Callback}\r\n                />\r\n                <PublicRoute\r\n                    path={ROUTES.AUTH_PAGES.MOBILE_NUMBER_LOGIN}\r\n                    exact\r\n                    component={MobileNumberLogin}\r\n                />\r\n                <PublicRoute\r\n                    path={ROUTES.AUTH_PAGES.MOBILE_NUMBER_VERIFY}\r\n                    exact\r\n                    component={VerifyMobileNumber}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.TRAINEE_LOGIN}\r\n                    exact\r\n                    component={TraineeLogin}\r\n                />\r\n                <Route path={ROUTES.AUTH_PAGES.LOGOUT} component={LogOut} />\r\n                <Route path={ROUTES.AUTH_PAGES.REGISTER} component={Register} />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.REGISTRATION}\r\n                    component={Registration}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.FORGOT_PASSWORD}\r\n                    exact\r\n                    component={ForgotPassword}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.RESET_PASSWORD}\r\n                    exact\r\n                    component={ResetPassword}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.ONBOARDING}\r\n                    component={Onboarding}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.INVALID_INVITE}\r\n                    component={InvalidInvite}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.ADD_MOBILE_NUMBER}\r\n                    component={AddMobileNumber}\r\n                />\r\n                <Route\r\n                    path={ROUTES.AUTH_PAGES.TRAINEE_SPLASH}\r\n                    component={TraineeSplash}\r\n                />\r\n                <Route path={ROUTES.LANDING} exact component={LandingPage} />\r\n                <Route path={ROUTES.SUPPORT} exact component={SupportPage} />\r\n                <Route path={ROUTES.TERMS} exact component={TermsPage} />\r\n                <Route path={ROUTES.PRIVACY} exact component={PrivacyPage} />\r\n                <Route path={ROUTES.Health} exact component={HealthPage} />\r\n                <Route\r\n                    path={ROUTES.BROKEN_SHARED_LINK}\r\n                    component={BrokenSharedLink}\r\n                />\r\n                <PrivateRoute path={ROUTES.PROGRESS} component={Progress} />\r\n                <PrivateRoute path={ROUTES.PROFILE} component={UserProfile} />\r\n                <PrivateRoute\r\n                    path={ROUTES.AUTH_PAGES.VERIFY_MOBILE_NUMBER_PRIVATE}\r\n                    exact\r\n                    component={VerifyMobileNumber}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.ORGANIZATION_LOGS}\r\n                    component={CompanyLogsContainer}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.ORGANIZATION_ASSESSMENT_LOGS}\r\n                    component={CompanyAiAssessmentContainer}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSIONS}\r\n                    exact\r\n                    component={Submissions}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.ALL}\r\n                    exact\r\n                    component={AccuracyTests}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.SINGLE}\r\n                    exact\r\n                    component={PlaybackScreen}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSION_SETTINGS.ACCURACY_TESTS.OLD_SINGLE}\r\n                    exact\r\n                    component={OldAccuracyTest}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.ALL}\r\n                    exact\r\n                    component={ChallengeSubmissions}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.SINGLE}\r\n                    exact\r\n                    component={SubmissionDetails}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.SUBMISSION_SETTINGS.CHALLENGES.OLD_SINGLE}\r\n                    exact\r\n                    component={OldChallenge}\r\n                />\r\n                <PrivateRoute path={ROUTES.LIBRARY} component={Library} />\r\n                <PrivateRoute\r\n                    path={ROUTES.TELEPROMTER}\r\n                    component={Telepromter}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.USERS}\r\n                    exact\r\n                    component={UsersContainer}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.TRAINEE_DETAILS}\r\n                >\r\n                    <PractisSetReportContainer />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.USER_PERFORMANCE}\r\n                    component={PerformanceContainer}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.INVITATION_PERFORMANCE}\r\n                    exact\r\n                    component={PerformanceContainer}\r\n                    propsData={{ type: 'invitation' }}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.USER_INVITATIONS}\r\n                    component={InvitationsContainer}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.DRAFTS}\r\n                    component={DraftsContainer}\r\n                />\r\n                <PrivateRoute path={ROUTES.TEAMS_PAGES.LIST_OF_TEAMS} exact>\r\n                    <TeamsContainer />\r\n                </PrivateRoute>\r\n                <PrivateRoute path={ROUTES.TEAMS_PAGES.MEMBERS} exact>\r\n                    <TeamsPage />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.TEAMS_PAGES.TRAINING}\r\n                    component={TeamsPage}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.OVERDUE_LEARNERS}\r\n                >\r\n                    <OverdueLearners />\r\n                </PrivateRoute>\r\n                {mobileDeepLinkRoutes.map(key =>\r\n                    <PrivateRoute\r\n                        path={ROUTES.MOBILE_DEEP_LINKS[key as keyof typeof ROUTES.MOBILE_DEEP_LINKS]}\r\n                    >\r\n                        <Redirect to={{ pathname: ROUTES.SUBMISSIONS }} />\r\n                    </PrivateRoute>\r\n                )}\r\n                <PrivateRoute\r\n                    path={ROUTES.REPORTS.LIST_OF_REPORTS}\r\n                    exact\r\n                    component={Reports}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.ROLEPLAYS.LIST_OF_ROLEPLAYS}\r\n                    exact\r\n                    component={Roleplays}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.ROLEPLAYS.SINGLE}\r\n                    exact\r\n                    component={RoleplayPage}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.REPORTS.PRACTIS_SET_SUMMARY_REPORT}\r\n                    component={PractisSetSummaryReport}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.REPORTS.USER_ACTIVITY_REPORT}\r\n                    component={UserActivityReport}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.REPORTS.TEAM_LEADER_ACTIVITY_REPORT}\r\n                    component={TeamLeaderActivityReport}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.REPORTS.BILLING_REPORT}\r\n                    component={BillingReport}\r\n                />\r\n                <PrivateRoute\r\n                    path={ROUTES.REPORTS.TRAINING_TIME_REPORT}\r\n                    component={TrainingTimeReport}\r\n                />\r\n                <PrivateRoute component={NotFoundPage} />\r\n            </Switch>\r\n            <Switch location={modalLocation || rootLocation}>\r\n                <PrivateRoute path={ROUTES.ACTION_ITEMS.NEW_USER} exact>\r\n                    <NewUserContainer\r\n                        closePath={ROUTES.DRAFTS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.LIBRARY_SETTINGS.SCENARIOS.SINGLE}\r\n                    exact\r\n                >\r\n                    <NewScenario\r\n                        closePath={ROUTES.LIBRARY_SETTINGS.SCENARIOS.ALL}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.LIBRARY_SETTINGS.CHALLENGES.SINGLE}\r\n                    exact\r\n                >\r\n                    <EditChallenge\r\n                        closePath={ROUTES.LIBRARY_SETTINGS.CHALLENGES.ALL}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.SINGLE}\r\n                    exact\r\n                >\r\n                    <PractisSets\r\n                        closePath={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.TEAMS_PAGES.TRAINING_PAGES.TRAINEE_INVITATION}\r\n                    exact\r\n                >\r\n                    <TraineeInvitationContainer\r\n                        closePath={ROUTES.TEAMS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.QUICK_ASSIGNMENT}\r\n                    exact\r\n                >\r\n                    <TraineeQuickAssignmentContainer\r\n                        closePath={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ALL}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.LIBRARY_SETTINGS.PRACTISSETS.ASSIGN_USERS}\r\n                    exact\r\n                >\r\n                    <TraineeInvitationContainer\r\n                        closePath={ROUTES.TEAMS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute path={ROUTES.TEAMS_PAGES.MANAGE_TEAM}>\r\n                    <ManageTeamContainer\r\n                        closePath={ROUTES.TEAMS_PAGES.LIST_OF_TEAMS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute path={ROUTES.TEAMS_PAGES.NEW_TEAM}>\r\n                    <CreateTeam\r\n                        closePath={ROUTES.TEAMS_PAGES.LIST_OF_TEAMS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute\r\n                    path={ROUTES.TRAINEE_DETAILS_REPS}\r\n                    exact\r\n                >\r\n                    <ScenarioRepsContainer\r\n                        closePath={ROUTES.TRAINEE_DETAILS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute path={ROUTES.COMPANY_SETTINGS.ROOT}>\r\n                    <CompanySettings\r\n                        closePath={ROUTES.SUBMISSIONS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n                <PrivateRoute path={ROUTES.ROLEPLAYS.NEW_ROLEPLAY}>\r\n                    <RoleplayCreate\r\n                        closePath={ROUTES.ROLEPLAYS.LIST_OF_ROLEPLAYS}\r\n                        closeGoingBack={!!modalLocation}\r\n                    />\r\n                </PrivateRoute>\r\n            </Switch>\r\n            <ErrorMessages />\r\n            <ModalDialogs />\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default App;\r\n","\nexport const checkChildrenKeys = (pathname: string, childrenKeys: string[]) => {\n    if(!childrenKeys.length){\n        return null;\n    }\n\n    return childrenKeys.some((item: string) => pathname.includes(item))\n}","import { COLORS } from './constants';\n\nexport const generateColorVariables = () => {\n    let styles = '';\n    const tagId = 'practis-variables';\n\n    for (const [key, value] of Object.entries(COLORS)) {\n        styles += `--ps-${key}: ${value}; \\n`;\n    }\n\n    const colorStyles = `:root {${styles}}`;\n\n    const sheet = document.getElementById(tagId);\n    const head = document.head;\n\n    if (sheet) {\n        sheet.innerHTML = colorStyles;\n    } else {\n        const style = document.createElement('style');\n\n        style.id = tagId;\n        style.innerHTML = colorStyles;\n        head.prepend(style);\n    }\n\n    return colorStyles;\n};\n\n","import { EnvironmentConfigs } from './tools/config';\nimport { getDevApiUrl } from './helpers/functions/url-helpers';\n\nexport const APP_CONFIG: EnvironmentConfigs = {\n    default: {\n        APP_VERSION: '5.0.0',\n        API_CLIENT: 'WEB',\n        API_BASE_URL: 'NOT_CONFIGURED',\n        API_V2_BASE_URL: 'NOT_CONFIGURED',\n        CHATGPT_API_KEY: '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',\n        ADMIN_PORTAL_BASE_URL: 'NOT_CONFIGURED',\n        COMPANY_PORTAL_BASE_URL: 'NOT_CONFIGURED',\n        COMMIT_ID: '',\n        BUILD_ID: '',\n        S3_FILES_BASE_URL:\n            'https://practis-files-dev.s3-us-west-1.amazonaws.com/',\n        NEW_RELIC_LICENSE_KEY: 'NRJS-7064dc987d35d780d7c',\n        NEW_RELIC_APP_ID: 'NOT_CONFIGURED',\n        API_SOCKET_ENDPOINT: 'NOT_CONFIGURED',\n        googleClientId: '999094876822-i3029amhpv2pm9a4qj0fnvtuvn8d76np.apps.googleusercontent.com',\n        ELEVEN_LABS_KEY: 'd757da3c3c9659a55b5aa5d66e0d9d6f',\n    },\n    local: {\n        API_BASE_URL: `https://${getDevApiUrl('v1')}/api/`,\n        API_V2_BASE_URL: `https://${getDevApiUrl('v2')}`,\n        ADMIN_PORTAL_BASE_URL: 'http://localhost:4000/',\n        COMPANY_PORTAL_BASE_URL: 'http://localhost:3000/',\n        NEW_RELIC_APP_ID: '255699936',\n        API_SOCKET_ENDPOINT: `wss://${getDevApiUrl('v2')}`,\n        googleClientId: '999094876822-i3029amhpv2pm9a4qj0fnvtuvn8d76np.apps.googleusercontent.com'\n    },\n    dev: {\n        API_BASE_URL: `https://${getDevApiUrl('v1')}/api/`,\n        API_V2_BASE_URL: `https://${getDevApiUrl('v2')}`,\n        ADMIN_PORTAL_BASE_URL: 'https://admin-dev.gopractis.com/',\n        COMPANY_PORTAL_BASE_URL: 'https://portal-dev.gopractis.com/',\n        NEW_RELIC_APP_ID: '255699936',\n        API_SOCKET_ENDPOINT: `wss://${getDevApiUrl('v2')}`,\n        googleClientId: '999094876822-i3029amhpv2pm9a4qj0fnvtuvn8d76np.apps.googleusercontent.com'\n    },\n    beta: {\n        API_BASE_URL: 'https://api-beta.gopractis.com/api/',\n        API_V2_BASE_URL: 'https://api-beta-v2.gopractis.com/',\n        ADMIN_PORTAL_BASE_URL: 'https://admin-beta.gopractis.com/',\n        COMPANY_PORTAL_BASE_URL: 'https://portal-beta.gopractis.com/',\n        S3_FILES_BASE_URL:\n            'https://practis-files-beta.s3-us-west-1.amazonaws.com/',\n        NEW_RELIC_APP_ID: '255708755',\n        API_SOCKET_ENDPOINT: 'wss://api-beta-v2.gopractis.com',\n        googleClientId: '999094876822-o4ocaic126v332htbagjak5035057i0r.apps.googleusercontent.com'\n    },\n    prod: {\n        API_BASE_URL: 'https://api.gopractis.com/api/',\n        API_V2_BASE_URL: 'https://api-v2.gopractis.com/',\n        ADMIN_PORTAL_BASE_URL: 'https://admin.gopractis.com/',\n        COMPANY_PORTAL_BASE_URL: 'https://portal.gopractis.com/',\n        S3_FILES_BASE_URL:\n            'https://practis-files-prod.s3-us-west-1.amazonaws.com/',\n        NEW_RELIC_APP_ID: '255709065',\n        API_SOCKET_ENDPOINT: 'wss://api-v2.gopractis.com',\n        googleClientId: '999094876822-vtnll7dbk74sblvdfmmuks9j10aot7jc.apps.googleusercontent.com'\n    }\n};\n","import React, { Context, FC } from 'react';\n\nexport interface MultiContextProviderItem<TValue = any> {\n    context: Context<TValue>;\n    value: TValue;\n}\n\nexport function contextItem<TValue>(\n    context: Context<TValue>,\n    value: TValue\n): MultiContextProviderItem<TValue> {\n    return {\n        context,\n        value,\n    };\n}\n\nexport const MultiContextProvider: FC<{\n    items: MultiContextProviderItem[];\n}> = ({ items, children }) => (\n    <>\n        {items.reverse().reduce(\n            (prev, item, idx) => (\n                <item.context.Provider key={idx} value={item.value}>\n                    {prev}\n                </item.context.Provider>\n            ),\n            children\n        )}\n    </>\n);\n","interface ErrorResultDetails {\n    message: string;\n    field: string;\n}\n\ninterface ErrorResultValidation {\n    [key: string]: string;\n}\n\nexport interface ErrorResult {\n    code: number;\n    errorCode?: number;\n    message: string;\n    status?: string;\n    details?: ErrorResultDetails[];\n    validation?: ErrorResultValidation;\n}\n\nexport function parseValidation(\n    details?: ErrorResultDetails[]\n): ErrorResultValidation | undefined {\n    if (details && details.reduce) {\n        return details.reduce<ErrorResultValidation>(\n            (result, detail) =>\n                detail.field && detail.message\n                    ? { ...result, [detail.field]: detail.message }\n                    : result,\n            {}\n        );\n    }\n    return;\n}\n","import Axios, { AxiosError, AxiosResponse } from 'axios';\r\nimport {\r\n    ErrorResult,\r\n    parseValidation,\r\n} from '../../constants/interfaces/ErrorResult';\r\nimport { UrlBuilder } from '../url/UrlBuilder';\r\nimport { Http, HttpMethod } from './Http';\r\n\r\nexport interface DefaultHttpOptions {\r\n    urlBuilder: UrlBuilder;\r\n    clientHeader: string;\r\n    getToken(): string | null | undefined;\r\n    onError(error: ErrorResult): void;\r\n}\r\n\r\nexport class DefaultHttp implements Http {\r\n    private readonly options: DefaultHttpOptions;\r\n\r\n    constructor(options: DefaultHttpOptions) {\r\n        this.options = options;\r\n    }\r\n\r\n    request(\r\n        method: HttpMethod,\r\n        path: string,\r\n        data?: any,\r\n        responseType?: 'blob',\r\n        isV2?: boolean,\r\n        dataInQuery?: boolean\r\n    ): Promise<any> {\r\n        return Axios({\r\n            method: method,\r\n            responseType: responseType,\r\n            url: this.options.urlBuilder.buildApiUrl({\r\n                path,\r\n                isV2,\r\n                query: dataInQuery ? data : undefined,\r\n            }),\r\n            data: data,\r\n            headers: this.generateHeaders(),\r\n        })\r\n            .then((response: AxiosResponse) => {\r\n                if (responseType) {\r\n                    return response;\r\n                } else {\r\n                    return response.data;\r\n                }\r\n            })\r\n            .catch((error: AxiosError) => {\r\n                var errorResult: ErrorResult;\r\n                if (error.response) {\r\n                    let message = '';\r\n                    switch (error.response.status) {\r\n                        case 401:\r\n                        case 400:\r\n                        case 403:\r\n                        case 404:\r\n                        case 409:\r\n                        case 500:\r\n                            message = error.response.data.message;\r\n                            break;\r\n                        default:\r\n                            message = 'Unexpected Error';\r\n                    }\r\n                    errorResult = {\r\n                        code: error.response.status,\r\n                        message,\r\n                        errorCode: error.response.data\r\n                            ? error.response.data.code\r\n                            : 0,\r\n                        details: error.response.data.details,\r\n                        validation: parseValidation(\r\n                            error.response.data.details\r\n                        ),\r\n                    };\r\n                } else if (error.request) {\r\n                    errorResult = {\r\n                        code: 0,\r\n                        message: 'Check your network connection.',\r\n                    };\r\n                } else {\r\n                    errorResult = {\r\n                        code: 0,\r\n                        message: 'Unexpected Error',\r\n                    };\r\n                }\r\n                this.options.onError(errorResult);\r\n                throw errorResult;\r\n            });\r\n    }\r\n\r\n    get(\r\n        path: string,\r\n        data?: any,\r\n        responseType?: 'blob',\r\n        isV2?: boolean\r\n    ): Promise<any> {\r\n        return this.request('get', path, data, responseType, isV2, true);\r\n    }\r\n\r\n    post(path: string, data?: any, isV2?: boolean): Promise<any> {\r\n        return this.request('post', path, data, undefined, isV2);\r\n    }\r\n\r\n    delete(path: string, data?: any, isV2?: boolean): Promise<any> {\r\n        return this.request('delete', path, data, undefined, isV2);\r\n    }\r\n\r\n    put(path: string, data: any, isV2?: boolean): Promise<any> {\r\n        return this.request('put', path, data, undefined, isV2);\r\n    }\r\n\r\n    patch(path: string, data: any, isV2?: boolean): Promise<any> {\r\n        return this.request('patch', path, data, undefined, isV2);\r\n    }\r\n\r\n    private generateHeaders() {\r\n        let contentType = { 'Content-Type': 'application/json' };\r\n        let client = { Client: this.options.clientHeader };\r\n        let token = this.options.getToken();\r\n        let authorization = token ? { Authorization: 'JWT ' + token } : {};\r\n        return {\r\n            ...contentType,\r\n            ...authorization,\r\n            ...client,\r\n        };\r\n    }\r\n}\r\n","import * as qs from 'query-string';\n\nexport type TQueryParamValue = string | undefined;\nexport type TRawQueryParamValue = TQueryParamValue | string[];\n\nexport interface IQueryString {\n    [key: string]: TQueryParamValue;\n}\n\nexport interface IRawQueryString {\n    [key: string]: TRawQueryParamValue;\n}\n\ninterface IParseResult {\n    url: string;\n    query: IQueryString;\n}\n\ninterface IRawParseResult {\n    url: string;\n    query: IRawQueryString;\n}\n\nfunction parseRawQueryString(url: string): IRawParseResult {\n    return qs.parseUrl(url) as IRawParseResult;\n}\n\nfunction parseQueryString(url: string): IParseResult {\n    const rawQuery = parseRawQueryString(url).query;\n    const query: IQueryString = {};\n    Object.keys(rawQuery).map(key => {\n        query[key] = flatQueryValue(key, rawQuery[key]);\n        return key;\n    });\n    return {\n        url,\n        query,\n    };\n}\n\nfunction flatQueryValue(\n    key: string,\n    value: TRawQueryParamValue\n): TQueryParamValue {\n    if (Array.isArray(value)) {\n        const result = value.filter(v => !!v);\n        return result.length ? result[0] : undefined;\n    }\n    return value;\n}\n\nexport function getRawQueryStringFromUrl(url: string): IRawQueryString {\n    return parseRawQueryString(url).query;\n}\n\nexport function getQueryStringFromUrl(url: string): IQueryString {\n    return parseQueryString(url).query;\n}\n\nexport function getQueryStringFromCurrentUrl(): IQueryString {\n    return getQueryStringFromUrl(getCurrentUrl());\n}\n\nexport function setQueryParameterToUrl(\n    url: string,\n    name: string,\n    value?: string\n) {\n    // TODO: [MM]: Add Array value support\n    const { url: parsedUrl, query } = parseRawQueryString(url);\n    query[name] = value;\n    const resultQuery = qs.stringify(query);\n    return parsedUrl + (resultQuery ? `?${resultQuery}` : '');\n}\n\nexport function setQueryObjectToUrl(url: string, obj: any) {\n    const { url: parsedUrl, query } = parseRawQueryString(url);\n    Object.keys(obj).map(key => {\n        const v = obj[key];\n        query[key] = typeof v !== 'boolean' && typeof v !== 'number' && !v ? undefined : v;\n        return key;\n    });\n    const resultQuery = qs.stringify(query);\n    return parsedUrl + (resultQuery ? `?${resultQuery}` : '');\n}\n\nexport function removeQueryObjectFromUrl(url: string, obj: any) {\n    const emptyObj: any = {};\n    Object.keys(obj).map(key => {\n        emptyObj[key] = null;\n        return key;\n    });\n    return setQueryObjectToUrl(url, emptyObj);\n}\n\nexport function getCurrentUrl(): string {\n    return window.location ? window.location.href : '';\n}\n\nexport function setCurrentUrl(url: string) {\n    if (window.history.replaceState) {\n        window.history.replaceState({ path: url }, '', url);\n    }\n}\n","import _ from 'lodash';\nimport { BuildUrlOptions, BuildApiUrlOptions, UrlBuilder } from './UrlBuilder';\nimport { setQueryObjectToUrl } from './UrlUtils';\n\ninterface DefaultUrlBuilderOptions {\n    companyBaseUrl: string;\n    adminBaseUrl: string;\n    apiBaseUrl: string;\n    apiV2BaseUrl: string;\n}\n\nexport class DefaultUrlBuilder implements UrlBuilder {\n    private readonly options: DefaultUrlBuilderOptions;\n\n    constructor(options: DefaultUrlBuilderOptions) {\n        this.options = options;\n    }\n\n    buildCompanyUrl(o: BuildUrlOptions): string {\n        return buildUrl(this.options.companyBaseUrl, o);\n    }\n\n    buildAdminUrl(o: BuildUrlOptions): string {\n        return buildUrl(this.options.adminBaseUrl, o);\n    }\n\n    buildApiUrl(o: BuildApiUrlOptions): string {\n        const apiBaseUrl = o.isV2\n            ? this.options.apiV2BaseUrl\n            : this.options.apiBaseUrl;\n        return buildUrl(apiBaseUrl, { ...o, absolute: true });\n    }\n}\n\nfunction buildUrl(baseUrl: string, o: BuildUrlOptions): string {\n    var path = o.path || '';\n    if (path && o.params) {\n        for (var name in o.params) {\n            path = replaceParam(path, name, o.params[name]);\n        }\n    }\n    const result = !!o.absolute\n        ? joinSegments([baseUrl, path])\n        : joinSegments([path]);\n    return o.query ? setQueryObjectToUrl(result, o.query) : result;\n}\n\nfunction replaceParam(path: string, param: string, value: string): string {\n    return _.replace(path, `:${param}`, value);\n}\n\nfunction joinSegments(segments: string[]): string {\n    var result = segments\n        .filter(s => !!s)\n        .map(s => _.trim(s, '/'))\n        .join('/');\n    return result + '/';\n}\n","import { NewRelicApi } from './NewRelic';\n\nexport interface DefaultNewRelicOptions {\n    newRelicLicenceKey: string;\n    newRelicAppId: string;\n}\n\nexport class DefaultNewRelic implements NewRelicApi {\n    private readonly options: DefaultNewRelicOptions;\n\n    constructor(options: DefaultNewRelicOptions) {\n        this.options = options;\n    }\n\n    getLicenseKey = () => {\n        return this.options.newRelicLicenceKey;\n    };\n\n    getAppId = () => {\n        return this.options.newRelicAppId;\n    };\n}\n","import { LocalStorage } from './LocalStorage';\n\nexport class DefaultLocalStorage implements LocalStorage {\n    private readonly storage = localStorage;\n\n    get(key: string): any {\n        const item = this.storage.getItem(key);\n\n        if (item) {\n            return JSON.parse(item);\n        } else {\n            return null;\n        }\n    }\n\n    set(key: string, data: any): string | null {\n        this.storage.setItem(key, JSON.stringify(data));\n        return this.storage.getItem(key);\n    }\n\n    clear(): any {\n        return this.storage.clear();\n    }\n\n    remove(key: string): boolean {\n        if (this.storage.getItem(key) !== null) {\n            this.storage.removeItem(key);\n            return true;\n        } else {\n            return false;\n        }\n    }\n}\n","import { Reducer } from 'redux';\nimport Storage from '../services/Storage';\nimport {\n    buildConfig,\n    EnvironmentConfigs,\n    registerConfig,\n} from '../tools/config';\nimport { WEB_SITE_ID } from '../tools/constants/WebSiteId';\nimport { DefaultHttp } from '../tools/http/DefaultHttp';\nimport { Http } from '../tools/http/Http';\nimport { ThunkContext } from '../tools/thunk/ThunkContext';\nimport { DefaultUrlBuilder } from '../tools/url/DefaultUrlBuilder';\nimport { UrlBuilder } from '../tools/url/UrlBuilder';\nimport { createStore } from './store';\nimport { NewRelicApi } from '../tools/newRelic/NewRelic';\nimport { DefaultNewRelic } from '../tools/newRelic/DefaultNewRelic';\nimport { DefaultLocalStorage } from '../tools/localStorage/DefaultLocalStorage';\nimport { LocalStorage } from '../tools/localStorage/LocalStorage';\nimport ROUTES from '../routes/routes';\nimport {\n    clearAuthData,\n    isAuthorized,\n    getCurrentUserId\n} from '../helpers/functions/auth-helpers';\nimport { UserV2 } from '../constants/interfaces/User';\nimport { isUserRole } from '../constants/enums';\n\nconst loggedOutRoutes = [\n    ROUTES.AUTH_PAGES.LOGIN,\n    ROUTES.AUTH_PAGES.MOBILE_NUMBER_VERIFY.replace(':phoneNumber', ''),\n    ROUTES.AUTH_PAGES.RESET_PASSWORD,\n    ROUTES.AUTH_PAGES.AUTH0_CALLBACK,\n]\n\nfunction logOut() {\n    clearAuthData();\n    const isLoggedOutRoute = loggedOutRoutes.some(\n        route => window.location.pathname.indexOf(route) === 0\n    );\n    if (!isLoggedOutRoute) {\n        window.location.href = ROUTES.AUTH_PAGES.LOGIN;\n    }\n}\n\nexport function configServices(\n    webSiteId: WEB_SITE_ID,\n    appConfig: EnvironmentConfigs,\n    rootReducer: Reducer\n) {\n    const config = buildConfig(appConfig);\n    registerConfig(config);\n\n    const urlBuilder: UrlBuilder = new DefaultUrlBuilder({\n        adminBaseUrl: config.ADMIN_PORTAL_BASE_URL!,\n        apiBaseUrl: config.API_BASE_URL!,\n        apiV2BaseUrl: config.API_V2_BASE_URL!,\n        companyBaseUrl: config.COMPANY_PORTAL_BASE_URL!,\n    });\n\n    const http: Http = new DefaultHttp({\n        urlBuilder: urlBuilder,\n        clientHeader: config.API_CLIENT!,\n        getToken: () => Storage.get('token') || Storage.get('temp_token'),\n        onError: error => {\n            switch (error?.code) {\n                case 401:\n                    logOut();\n                    break;\n                case 403:\n                    // if user doesn't have permissions, we need to check if their role has not been changed to USER\n                    if (isAuthorized()) {\n                        http.get(`users/${getCurrentUserId()}`, undefined, undefined, true)\n                            .then((user: UserV2) => {\n                                if (isUserRole(user.role?.name)) {\n                                    logOut();\n                                }\n                            });\n                    }\n                    break;\n            }\n        },\n    });\n\n    const localStorage: LocalStorage = new DefaultLocalStorage();\n\n    const newRelicApi: NewRelicApi = new DefaultNewRelic({\n        newRelicLicenceKey: config.NEW_RELIC_LICENSE_KEY,\n        newRelicAppId: config.NEW_RELIC_APP_ID,\n    });\n\n    const thunkContext: ThunkContext = {\n        webSiteId,\n        http,\n        localStorage,\n        urlBuilder,\n        newRelicApi,\n    };\n\n    const store = createStore(rootReducer, thunkContext);\n\n    return {\n        webSiteId,\n        urlBuilder,\n        http,\n        localStorage,\n        newRelicApi,\n        store,\n    };\n}\n\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\n\nexport interface AuthState {\n    token: string;\n}\n\nexport type AuthStateSelector = (state: any) => AuthState;\n\nexport const AuthStateSelectorContext = React.createContext<AuthStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function useAuthState(): AuthState {\n    return useSelector(useContext(AuthStateSelectorContext));\n}\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\n\nexport interface SocketProgressStateInterface {\n    show?: boolean;\n}\n\nexport type SocketProgressStateSelector = (\n    state: any\n) => SocketProgressStateInterface;\n\nexport const SocketProgressSelectorContext =\n    React.createContext<SocketProgressStateSelector>(() => {\n        throw new Error('Not implemented');\n    });\n\nexport function SocketProgressState(): SocketProgressStateInterface {\n    return useSelector(useContext(SocketProgressSelectorContext));\n}","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { SearchParams } from '../../../constants/interfaces/filters';\n\nexport interface SearchStateInterface {\n    key: string,\n    params?: SearchParams,\n    childrenKeys: string[]\n}\n\nexport interface SecondarySearchStateInterface {\n    key: string\n    params?: SearchParams | undefined\n}\n\nexport type GlobalSearchStateSelector = (state:  SearchStateInterface) =>  SearchStateInterface;\n\nexport const searchStateSelectorContext = React.createContext<GlobalSearchStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n\nexport function SearchState(): SearchStateInterface {\n    return useSelector(useContext(searchStateSelectorContext));\n}\n\n\nexport type GlobalSecondarySearchStateSelector = (state:  SearchStateInterface) =>  SearchStateInterface;\n\nexport function SecondarySearchState(): SearchStateInterface {\n    return useSelector(useContext(secondarySearchStateSelectorContext));\n}\n\nexport const secondarySearchStateSelectorContext = React.createContext<GlobalSearchStateSelector>(\n    () => {\n        throw new Error('Not implemented');\n    }\n);\n","import { Context } from 'react';\r\nimport { WEB_SITE_ID, WebSiteIdContext } from '../tools/constants/WebSiteId';\r\nimport { UrlBuilder, UrlBuilderContext } from '../tools/url/UrlBuilder';\r\nimport {\r\n    EnrollmentStateSelectorContext,\r\n    PractisSetReportStateSelectorContext,\r\n    TrainerInvitationStateSelectorContext,\r\n    TrainerStateSelectorContext,\r\n    UpdatedProgressStateSelectorContext,\r\n    UpdateMembersStateStateSelectorContext,\r\n} from '../features/teams/store/states';\r\nimport {\r\n    ChallengeState,\r\n    CompanyVoiceSettingsState,\r\n    InvitationsState,\r\n    LibraryChallengesState,\r\n    LibraryPractisSetsState,\r\n    LibraryScenariosState,\r\n    PractisSetsEnrollmentState,\r\n    selectTainerPractisSetState,\r\n    SubmissionDetailsState,\r\n    SubmissionsState,\r\n    SubmissionPaginationState,\r\n    AccuracyScoreState,\r\n    PractisSetReportsState,\r\n    TrainerInvitationState,\r\n    UpdatedInvitationsState,\r\n    UpdatedLibraryChallengesState,\r\n    UpdatedLibraryPractisSetsState,\r\n    UpdatedLibraryScenariosState,\r\n    UpdatedSubmissionsState,\r\n    UsersState,\r\n    VoiceGenerationState,\r\n    UserPerformanceState,\r\n    LabelsState,\r\n    UpdatedLabelsState,\r\n    LabelsConfigState,\r\n    UpdatedUsersState,\r\n    selectUpdatedProgressState,\r\n    SelectPermissionsState,\r\n    UpdatedUserPractisSetsState,\r\n    SelectLogsState,\r\n    AuthState,\r\n    SelectTelepromterState,\r\n    SelectAiLogsState,\r\n    DraftsState,\r\n    UpdatedDraftsState,\r\n    DraftEditState,\r\n    TeamsState,\r\n    UpdatedTeamsState,\r\n    TeamMembersState,\r\n    TeamsEditState,\r\n    UpdatedMembersState,\r\n    RolesState,\r\n    CompanyAdminsState,\r\n    ReportsState,\r\n    OverdueLearnersState,\r\n    ScenarioRepsState,\r\n    CompanyUserStatsState,\r\n    RoleplaysState,\r\n    RoleplayState\r\n} from '../store/selectors';\r\nimport {\r\n    InvitationsStateSelectorContext,\r\n    UpdateInvitationStateStateSelectorContext,\r\n    UpdateUsersStateStateSelectorContext,\r\n    UserPerformanceStateSelectorContext,\r\n    UsersStateSelectorContext,\r\n    UpdatedUserPractisSetsStateSelectorContext,\r\n    UpdateDraftsStateStateSelectorContext,\r\n    DraftsStateSelectorContext,\r\n} from '../features/users/store/states';\r\nimport { VoiceGenerationSelectorContext } from '../features/textToSpeech/store/states';\r\nimport {\r\n    LibraryPractisSetsStateSelectorContext,\r\n    LibraryScenariosStateSelectorContext,\r\n    LibraryChallengesStateSelectorContext,\r\n    UpdatedLibraryPractisSetsSelectorContext,\r\n    UpdatedLibraryScenariosSelectorContext,\r\n    UpdatedLibraryChallengesStateSelectorContext,\r\n} from '../features/library/store/states';\r\nimport { ChallengeStateSelectorContext } from '../features/challenges/store/states';\r\nimport { NewRelicApi, NewRelicApiContext } from '../tools/newRelic/NewRelic';\r\nimport {\r\n    SubmissionDetailsStateSelectorContext,\r\n    SubmissionsStateSelectorContext,\r\n    SubmissionPaginationStateSelectorContext,\r\n    UpdatedSubmissionsStateSelectorContext,\r\n    AccuracyScoreStateSelectorContext,\r\n} from '../features/submissions/store/states';\r\nimport {\r\n    CompanyAdminsStateSelectorContext,\r\n    CompanyUserStatsStateSelectorContext,\r\n    CompanyVoiceSettingsStateSelectorContext,\r\n} from '../pages/CompanySettings/store/states';\r\nimport {\r\n    LabelsConfigStateSelectorContext,\r\n    LabelsStateSelectorContext,\r\n    UpdatedLabelsStateSelectorContext,\r\n} from '../features/labels/store/states';\r\nimport {\r\n    LocalStorage,\r\n    LocalStorageContext,\r\n} from '../tools/localStorage/LocalStorage';\r\nimport { PermissionsStateSelectorContext } from '../features/permissions/store/state';\r\nimport { LogsStateSelectorContext } from '../features/logs/store/states';\r\nimport { AuthStateSelectorContext } from '../pages/Auth/store/states';\r\nimport { TelepromterStateSelectorContext } from '../features/telepromter/store/state';\r\nimport { AiLogsStateSelectorContext } from '../features/assessment-logs/store/states';\r\nimport { DraftEditStateSelectorContext } from '../pages/ActionPages/NewUser/store/states';\r\nimport {\r\n    TeamMembersStateSelectorContext,\r\n    TeamEditSelectorContext,\r\n    TeamsStateSelectorContext,\r\n    UpdateTeamsStateStateSelectorContext,\r\n} from '../features/teams/store/states';\r\nimport { UserRolesStateSelectorContext } from '../features/roles/store/states';\r\nimport {\r\n    SocketProgressSelectorContext,\r\n    SocketProgressState,\r\n} from '../features/socketProgress(api1)/store/states';\r\nimport { SearchState, searchStateSelectorContext } from '../features/searchState/store/states';\r\nimport { ReportsStateSelectorContext } from '../pages/Reports/store/states';\r\nimport { OverdueLearnersStateSelectorContext } from '../features/teams/pages/OverdueLearners/store/states';\r\nimport { ScenarioRepsStateSelectorContext } from '../features/teams/pages/Training/ScenarioReps/store/states';\r\nimport { RoleplaysStateSelectorContext } from '../pages/Roleplays/RoleplaysList/store/states';\r\nimport { RoleplayStateSelectorContext } from '../pages/Roleplays/RoleplayPage/store/states';\r\n\r\nexport interface ContextItem<TValue> {\r\n    context: Context<TValue>;\r\n    value: TValue;\r\n}\r\n\r\nexport function contextItem<TValue>(\r\n    context: Context<TValue>,\r\n    value: TValue\r\n): ContextItem<TValue> {\r\n    return {\r\n        context,\r\n        value,\r\n    };\r\n}\r\n\r\nexport function createContexts(\r\n    webSiteId: WEB_SITE_ID,\r\n    urlBuilder: UrlBuilder,\r\n    localStorage: LocalStorage,\r\n    newRelicApi: NewRelicApi\r\n): ContextItem<any>[] {\r\n    return [\r\n        contextItem(WebSiteIdContext, webSiteId),\r\n        contextItem(UrlBuilderContext, urlBuilder),\r\n        contextItem(LocalStorageContext, localStorage),\r\n        contextItem(NewRelicApiContext, newRelicApi),\r\n        contextItem(TrainerStateSelectorContext, selectTainerPractisSetState),\r\n        contextItem(\r\n            UpdatedProgressStateSelectorContext,\r\n            selectUpdatedProgressState\r\n        ),\r\n        contextItem(EnrollmentStateSelectorContext, PractisSetsEnrollmentState),\r\n        contextItem(\r\n            TrainerInvitationStateSelectorContext,\r\n            TrainerInvitationState\r\n        ),\r\n        contextItem(\r\n            PractisSetReportStateSelectorContext,\r\n            PractisSetReportsState\r\n        ),\r\n        contextItem(UsersStateSelectorContext, UsersState),\r\n        contextItem(AuthStateSelectorContext, AuthState),\r\n        contextItem(UpdateUsersStateStateSelectorContext, UpdatedUsersState),\r\n        contextItem(InvitationsStateSelectorContext, InvitationsState),\r\n        contextItem(\r\n            UpdateInvitationStateStateSelectorContext,\r\n            UpdatedInvitationsState\r\n        ),\r\n        contextItem(DraftsStateSelectorContext, DraftsState),\r\n        contextItem(DraftEditStateSelectorContext, DraftEditState),\r\n        contextItem(UpdateDraftsStateStateSelectorContext, UpdatedDraftsState),\r\n        contextItem(UserPerformanceStateSelectorContext, UserPerformanceState),\r\n        contextItem(\r\n            UpdatedUserPractisSetsStateSelectorContext,\r\n            UpdatedUserPractisSetsState\r\n        ),\r\n        contextItem(VoiceGenerationSelectorContext, VoiceGenerationState),\r\n        contextItem(\r\n            LibraryPractisSetsStateSelectorContext,\r\n            LibraryPractisSetsState\r\n        ),\r\n        contextItem(\r\n            LibraryScenariosStateSelectorContext,\r\n            LibraryScenariosState\r\n        ),\r\n        contextItem(\r\n            LibraryChallengesStateSelectorContext,\r\n            LibraryChallengesState\r\n        ),\r\n        contextItem(\r\n            UpdatedLibraryPractisSetsSelectorContext,\r\n            UpdatedLibraryPractisSetsState\r\n        ),\r\n        contextItem(\r\n            UpdatedLibraryScenariosSelectorContext,\r\n            UpdatedLibraryScenariosState\r\n        ),\r\n        contextItem(\r\n            UpdatedLibraryChallengesStateSelectorContext,\r\n            UpdatedLibraryChallengesState\r\n        ),\r\n        contextItem(ChallengeStateSelectorContext, ChallengeState),\r\n        contextItem(SubmissionsStateSelectorContext, SubmissionsState),\r\n        contextItem(SubmissionPaginationStateSelectorContext, SubmissionPaginationState),\r\n        contextItem(\r\n            SubmissionDetailsStateSelectorContext,\r\n            SubmissionDetailsState\r\n        ),\r\n        contextItem(\r\n            UpdatedSubmissionsStateSelectorContext,\r\n            UpdatedSubmissionsState\r\n        ),\r\n        contextItem(\r\n            AccuracyScoreStateSelectorContext,\r\n            AccuracyScoreState\r\n        ),\r\n        contextItem(\r\n            AccuracyScoreStateSelectorContext,\r\n            AccuracyScoreState\r\n        ),\r\n        contextItem(\r\n            CompanyVoiceSettingsStateSelectorContext,\r\n            CompanyVoiceSettingsState\r\n        ),\r\n        contextItem(LabelsStateSelectorContext, LabelsState),\r\n        contextItem(LabelsConfigStateSelectorContext, LabelsConfigState),\r\n        contextItem(UpdatedLabelsStateSelectorContext, UpdatedLabelsState),\r\n        contextItem(PermissionsStateSelectorContext, SelectPermissionsState),\r\n        contextItem(LogsStateSelectorContext, SelectLogsState),\r\n        contextItem(TelepromterStateSelectorContext, SelectTelepromterState),\r\n        contextItem(AiLogsStateSelectorContext, SelectAiLogsState),\r\n        contextItem(TeamsStateSelectorContext, TeamsState),\r\n        contextItem(\r\n            UpdateMembersStateStateSelectorContext,\r\n            UpdatedMembersState\r\n        ),\r\n        contextItem(UpdateTeamsStateStateSelectorContext, UpdatedTeamsState),\r\n        contextItem(TeamMembersStateSelectorContext, TeamMembersState),\r\n        contextItem(TeamEditSelectorContext, TeamsEditState),\r\n        contextItem(UserRolesStateSelectorContext, RolesState),\r\n        contextItem(SocketProgressSelectorContext, SocketProgressState),\r\n        contextItem(searchStateSelectorContext, SearchState),\r\n        contextItem(CompanyAdminsStateSelectorContext, CompanyAdminsState),\r\n        contextItem(CompanyUserStatsStateSelectorContext, CompanyUserStatsState),\r\n        contextItem(ReportsStateSelectorContext, ReportsState),\r\n        contextItem(OverdueLearnersStateSelectorContext, OverdueLearnersState),\r\n        contextItem(ScenarioRepsStateSelectorContext, ScenarioRepsState),\r\n        contextItem(RoleplaysStateSelectorContext, RoleplaysState),\r\n        contextItem(RoleplayStateSelectorContext, RoleplayState)\r\n\r\n    ];\r\n}\r\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\ntype Config = {\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(\n      (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n      window.location.href\n    );\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n","import { Action } from 'redux';\nimport { TimeZoneInterface } from '../../constants/interfaces/general';\n\nexport const FETCH_TIMEZONES = 'FETCH_TIMEZONES';\nexport const FETCH_TIMEZONES_SUCCESS = 'FETCH_TIMEZONES_SUCCESS';\nexport const FETCH_TIMEZONES_FAILURE = 'FETCH_TIMEZONES_FAILURE';\n\nexport type FetchTimeZonesAction = Action<typeof FETCH_TIMEZONES>;\nexport function fetchTimeZonesAction(): FetchTimeZonesAction {\n    return {\n        type: FETCH_TIMEZONES,\n    };\n}\n\nexport type FetchTimeZonesSuccessAction = Action<\n    typeof FETCH_TIMEZONES_SUCCESS\n> & { data: TimeZoneInterface[] };\nexport function fetchTimeZonesActionSuccess(\n    data: any\n): FetchTimeZonesSuccessAction {\n    return {\n        type: FETCH_TIMEZONES_SUCCESS,\n        data,\n    };\n}\n\nexport type FetchTimeZonesFailureAction = Action<\n    typeof FETCH_TIMEZONES_FAILURE\n> & { error: string };\nexport function fetchTimeZonesActionFailure(\n    error: any\n): FetchTimeZonesFailureAction {\n    return {\n        type: FETCH_TIMEZONES_FAILURE,\n        error,\n    };\n}\n\nexport type GlobalActions =\n    | FetchTimeZonesAction\n    | FetchTimeZonesSuccessAction\n    | FetchTimeZonesFailureAction;\n","import { Reducer } from 'redux';\n\nimport {\n    FETCH_TIMEZONES,\n    FETCH_TIMEZONES_FAILURE,\n    FETCH_TIMEZONES_SUCCESS,\n    GlobalActions,\n} from '../actions';\nimport { AppState } from './index';\nimport { TimeZoneInterface } from '../../constants/interfaces/general';\n\nexport interface GlobalReducerInterface {\n    timeZones: {\n        list: TimeZoneInterface[];\n        isLoading: boolean;\n        errors: string;\n    };\n}\n\nconst initialState: GlobalReducerInterface = {\n    timeZones: {\n        list: [],\n        isLoading: true,\n        errors: '',\n    },\n};\n\nconst globalReducers: Reducer<GlobalReducerInterface, GlobalActions> = (\n    state = initialState,\n    action\n): GlobalReducerInterface => {\n    switch (action.type) {\n        case FETCH_TIMEZONES:\n            return {\n                timeZones: {\n                    ...state.timeZones,\n                    isLoading: true,\n                },\n            };\n        case FETCH_TIMEZONES_SUCCESS:\n            const newTimeZoneList = action.data.map((timeZone: any) => ({\n                value: timeZone.id,\n                name: timeZone.name,\n            }));\n            return {\n                timeZones: {\n                    list: newTimeZoneList,\n                    errors: '',\n                    isLoading: false,\n                },\n            };\n        case FETCH_TIMEZONES_FAILURE:\n            return {\n                timeZones: {\n                    list: [...state.timeZones.list],\n                    isLoading: false,\n                    errors: action.error,\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nexport const getTimeZoneState = (state: AppState) => state.global.timeZones;\n\nexport default globalReducers;\n","import { Reducer } from 'redux';\nimport { cloneDeep } from 'lodash';\n\nimport { Config } from './types';\nimport { Actions } from './actions';\nimport { decapsulateAction } from '../../../../../store/helpers/decapsulateAction';\nimport { PaginationResult } from '../../../../../constants/interfaces/PaginationResult';\nimport { AppState } from '../../../../../store/reducers';\nimport { DEFAULT_SCENARIOS_SCOPE, Scope, WithScenarioScopes } from './scopes';\nimport { Scenario } from '../../../../../constants/interfaces/Scenario';\nimport { toggleItemInArray } from '../../../../../helpers/functions/array-helpers';\n\n//region Reducer state\nexport type StateWithScenarios = {\n    _scenarios: Record<Scope, ScenariosState>;\n};\n\nexport type ScenariosState = {\n    data: PaginationResult<Scenario>;\n    selected: number[];\n    saved: number[];\n    loading: boolean;\n    error: string | null;\n};\n\nconst initialState: ScenariosState = {\n    data: {\n        items: [],\n        limit: 0,\n        offset: 0,\n        numberOfPages: 0,\n        totalCount: 0,\n        lastUpdated: undefined,\n    },\n    selected: [],\n    saved: [],\n    loading: false,\n    error: null,\n};\n\nexport const withScenariosInitialState = <T>(\n    baseInitialState: T,\n    reducerName: keyof AppState\n): T & StateWithScenarios => {\n    const scopes =\n        WithScenarioScopes[reducerName] === undefined\n            ? [DEFAULT_SCENARIOS_SCOPE]\n            : [\n                  ...(WithScenarioScopes[reducerName] as string[]),\n                  DEFAULT_SCENARIOS_SCOPE,\n              ];\n\n    return {\n        ...baseInitialState,\n        _scenarios: scopes.reduce((acc: Record<string, ScenariosState>, scope) => {\n            acc[scope] = cloneDeep(initialState);\n            return acc;\n        }, {}),\n    };\n};\n//endregion\n\n//region HOR\nexport const withScenariosReducer = <S extends StateWithScenarios>(config: Config) => (\n    baseReducer: Reducer<S>\n) => (state: S, nativeAction: Actions): S => {\n    let newState = state;\n    const { reducerName } = config;\n   \n    const action = decapsulateAction(`${reducerName}/scenarios/`, nativeAction);\n    const scope = action._scope;\n   \n    if (!scope) {\n        return baseReducer(newState, action);\n    }\n\n\n\n    switch (action.type) {\n        case 'clearScenarios':\n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: [],\n                        partial: [],\n                    },\n                },\n            };\n            break;\n        case 'saveScenarios':\n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        saved: [...state._scenarios[scope].selected],\n                    },\n                },\n            };\n            break;\n        case 'selectScenarios':\n            let updatedSelectedState = [...state._scenarios[scope].selected];\n\n            updatedSelectedState = toggleItemInArray(\n                updatedSelectedState,\n                action.id\n            );\n\n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: updatedSelectedState,\n                    },\n                },\n            };\n            break;\n        case 'selectMultipleScenarios': {\n         \n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: action.ids,\n                    },\n                },\n            };\n            break;\n        }\n        case 'selectAllScenarios':\n            const newSelectedList = action.allScenarios;\n            \n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: newSelectedList,\n                    },\n                },\n            };\n            break;\n        case 'deselectAllScenarios':\n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: [],\n                    },\n                },\n            };\n            break;\n        case 'resetSelectedScenarios': {\n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: state._scenarios[scope].saved,\n                    },\n                },\n            };\n            break;\n        }\n        case 'resetScenarios':\n            newState = {\n                ...newState,\n                _scenarios: {\n                    ...state._scenarios,\n                    [scope]: {\n                        ...state._scenarios[scope],\n                        selected: [],\n                        saved: [],\n                        collapsed: [],\n                    },\n                },\n            };\n            break;\n    }\n\n    return baseReducer(newState, action);\n};\n//endregion\n","import { combineReducers, compose, Reducer } from 'redux';\r\nimport {\r\n    EnrollmentState,\r\n    PractisSetReportState,\r\n    TeamEditState,\r\n    TeamMembersBaseState,\r\n    TeamMembersState,\r\n    TeamsState,\r\n    AssignUsersState,\r\n    UpdatedProgressState,\r\n    UpdateMembersState,\r\n    UpdateTeamsState,\r\n    PractisSetsTrainingState,\r\n    TeamUpdateStatus\r\n} from './states';\r\nimport {\r\n    ACTIONS,\r\n    checkAllProgress,\r\n    checkSingleProgress,\r\n    deselectAllTeamLeadersSelectionAction,\r\n    fetchAllTeamsFailure,\r\n    fetchAllTeamsStart,\r\n    fetchAllTeamsSuccess,\r\n    getPractisSetFailure,\r\n    getPractisSetReportFailure,\r\n    getPractisSetReportStart,\r\n    getPractisSetReportSuccess,\r\n    getPractisSetStart,\r\n    getPractisSetSuccess,\r\n    getTeamInfoFailure,\r\n    getTeamInfoStart,\r\n    getTeamInfoSuccess,\r\n    getTeamInfoTrainingFailure,\r\n    getTeamInfoTrainingStart,\r\n    getTeamInfoTrainingSuccess,\r\n    modifyTeamName,\r\n    removeSingleTeamAllUsersLabel,\r\n    removeSingleTeamMemberLabel,\r\n    resetPractisSetReport,\r\n    resetSingleTeamPage,\r\n    resetTeamInfo,\r\n    resetTeamLeadersSelectionAction,\r\n    saveTeamLeaderSelection,\r\n    searchInvitationUsersFailure,\r\n    searchInvitationUsersStart,\r\n    searchInvitationUsersSuccess,\r\n    searchPractisUsersFailure,\r\n    searchPractisUsersStart,\r\n    searchPractisUsersSuccess,\r\n    searchSingleTeamAllUsersFailure,\r\n    searchSingleTeamAllUsersStart,\r\n    searchSingleTeamAllUsersSuccess,\r\n    searchSingleTeamFailure,\r\n    searchSingleTeamMembersFailure,\r\n    searchSingleTeamMembersStart,\r\n    searchSingleTeamMembersSuccess,\r\n    searchSingleTeamStart,\r\n    searchSingleTeamSuccess,\r\n    searchTeamLeadersFailureAction,\r\n    searchTeamLeadersStartAction,\r\n    searchTeamLeadersSuccessAction,\r\n    searchTeamMembersFailureAction,\r\n    searchTeamMembersStartAction,\r\n    searchTeamMembersSuccessAction,\r\n    searchTrainerFailure,\r\n    searchTrainerStart,\r\n    searchTrainerSuccess,\r\n    selectMultipleTeamLeaderAction,\r\n    selectTeamLeaderAction,\r\n    sendTraineeInvitationSuccess,\r\n    setAssignedLabelsToSingleTeam,\r\n    setDeletedLabelsToSingleTeam,\r\n    updateAllSelectedInvitationTraineesState,\r\n    updateAllSelectedPractisSetsState,\r\n    updateAllSelectedTeamsState,\r\n    updatedProgressActionFailure,\r\n    updatedProgressActionStart,\r\n    updatedProgressActionSuccess,\r\n    updateMemberActionFailure,\r\n    updateMemberActionStart,\r\n    updateMemberActionSuccess,\r\n    updateSelectedInvitationTraineesState,\r\n    updateSelectedPractisSetState,\r\n    updateSelectedTeamState,\r\n    createSingleTeamSuccess,\r\n    updateSingleTeamFailure,\r\n    updateSingleTeamStart,\r\n    updateSingleTeamSuccess,\r\n    updateTeamActionFailure,\r\n    updateTeamActionStart,\r\n    updateTeamActionSuccess,\r\n    updateTraineeDueDateAction,\r\n    resetPractisSetDetails,\r\n    updateTeamLead,\r\n    clearTeamUpdateStatus,\r\n    updateSingleTeamStop,\r\n    clearTrainerPractisSet,\r\n} from './actions';\r\nimport {\r\n    withLabelsInitialState,\r\n    withLabelsReducer,\r\n} from '../../portableLabels/store/hors/withLabels';\r\nimport { toggleItemInArray } from '../../../helpers/functions/array-helpers';\r\nimport {\r\n    withTeamsInitialState,\r\n    withTeamsReducer,\r\n} from '../../portableTeams/store/hors/withTeams';\r\nimport { TeamV2 } from '../../../constants/interfaces/Team';\r\n\r\nconst initialTeamsState: TeamsState = withLabelsInitialState<TeamsState>(\r\n    withTeamsInitialState<TeamsState>(\r\n        {\r\n            teamLeaders: {\r\n                selected: [],\r\n                saved: [],\r\n            },\r\n        },\r\n        'teams'\r\n    ),\r\n    'teams'\r\n);\r\n\r\nexport type TeamsAction =\r\n    | ReturnType<typeof fetchAllTeamsStart>\r\n    | ReturnType<typeof fetchAllTeamsSuccess>\r\n    | ReturnType<typeof fetchAllTeamsFailure>\r\n    | ReturnType<typeof updateSelectedTeamState>\r\n    | ReturnType<typeof updateAllSelectedTeamsState>\r\n    | ReturnType<typeof searchTeamLeadersStartAction>\r\n    | ReturnType<typeof searchTeamLeadersSuccessAction>\r\n    | ReturnType<typeof searchTeamLeadersFailureAction>\r\n    | ReturnType<typeof selectTeamLeaderAction>\r\n    | ReturnType<typeof selectMultipleTeamLeaderAction>\r\n    | ReturnType<typeof saveTeamLeaderSelection>\r\n    | ReturnType<typeof resetTeamLeadersSelectionAction>\r\n    | ReturnType<typeof deselectAllTeamLeadersSelectionAction>;\r\n\r\nexport const allTeamsBaseReducer: Reducer<TeamsState, TeamsAction> = (\r\n    state = initialTeamsState,\r\n    action: TeamsAction\r\n): TeamsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.FETCH_ALL_TEAMS:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.FETCH_ALL_TEAMS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                myTeams: action.data,\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.FETCH_ALL_TEAMS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_SELECTED_TEAM_STATE:\r\n            const selectedTeamIds = [...(state.selectedMyTeamsItems || [])];\r\n\r\n            const selectedTeamIndex = selectedTeamIds.findIndex(\r\n                (item: number) => item === action.teamId\r\n            );\r\n            if (selectedTeamIndex > -1) {\r\n                selectedTeamIds.splice(selectedTeamIndex, 1);\r\n            } else {\r\n                selectedTeamIds.push(action.teamId);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                selectedMyTeamsItems: selectedTeamIds,\r\n            };\r\n        case ACTIONS.UPDATE_ALL_SELECTED_TEAMS_STATE:\r\n            return {\r\n                ...state,\r\n                selectedMyTeamsItems:\r\n                    action.checked || action.partial ? action.teamIds : [],\r\n            };\r\n        case ACTIONS.SEARCH_TEAM_LEADERS_START:\r\n            return {\r\n                ...state,\r\n            };\r\n        case ACTIONS.SEARCH_TEAM_LEADERS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                teamLeaders: {\r\n                    ...state.teamLeaders,\r\n                    data: action.data,\r\n                },\r\n            };\r\n        case ACTIONS.SEARCH_TEAM_LEADERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.SELECT_TEAM_LEADER: {\r\n            const updatedSelections = [...state.teamLeaders.selected];\r\n            return {\r\n                ...state,\r\n                teamLeaders: {\r\n                    ...state.teamLeaders,\r\n                    selected: toggleItemInArray(\r\n                        updatedSelections,\r\n                        action.leaderId\r\n                    ),\r\n                },\r\n            };\r\n        }\r\n        case ACTIONS.SELECT_MULTIPLE_TEAM_LEADERS: {\r\n            return {\r\n                ...state,\r\n                teamLeaders: {\r\n                    ...state.teamLeaders,\r\n                    selected: action.leaderIds,\r\n                },\r\n            };\r\n        }\r\n        case ACTIONS.SAVE_TEAM_LEADERS_SELECTION: {\r\n            return {\r\n                ...state,\r\n                teamLeaders: {\r\n                    ...state.teamLeaders,\r\n                    saved: state.teamLeaders.selected,\r\n                },\r\n            };\r\n        }\r\n        case ACTIONS.RESET_TEAM_LEADERS_SELECTION: {\r\n            return {\r\n                ...state,\r\n                teamLeaders: {\r\n                    ...state.teamLeaders,\r\n                    selected: state.teamLeaders.saved || [],\r\n                },\r\n            };\r\n        }\r\n        case ACTIONS.DESELECT_ALL_TEAM_LEADERS_SELECTION: {\r\n            return {\r\n                ...state,\r\n                teamLeaders: {\r\n                    ...state.teamLeaders,\r\n                    selected: [],\r\n                },\r\n            };\r\n        }\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const allTeamsReducer = compose<Reducer<TeamsState, TeamsAction>>(\r\n    withLabelsReducer({ reducerName: 'teams' }),\r\n    withTeamsReducer({ reducerName: 'teams' })\r\n)(allTeamsBaseReducer);\r\n\r\nconst initialTeamEditState = withLabelsInitialState<TeamEditState>(\r\n    {\r\n        data: undefined,\r\n        assignedLabels: [],\r\n        deletedLabels: [],\r\n        updatedTeam: undefined,\r\n        loading: false,\r\n        updateStatus: undefined,\r\n    },\r\n    'teamEdit'\r\n);\r\n\r\nexport type TeamEditAction =\r\n    | ReturnType<typeof searchSingleTeamStart>\r\n    | ReturnType<typeof searchSingleTeamSuccess>\r\n    | ReturnType<typeof searchSingleTeamFailure>\r\n    | ReturnType<typeof searchSingleTeamAllUsersStart>\r\n    | ReturnType<typeof searchSingleTeamAllUsersSuccess>\r\n    | ReturnType<typeof searchSingleTeamAllUsersFailure>\r\n    | ReturnType<typeof searchSingleTeamMembersStart>\r\n    | ReturnType<typeof searchSingleTeamMembersSuccess>\r\n    | ReturnType<typeof searchSingleTeamMembersFailure>\r\n    | ReturnType<typeof modifyTeamName>\r\n    | ReturnType<typeof setAssignedLabelsToSingleTeam>\r\n    | ReturnType<typeof setDeletedLabelsToSingleTeam>\r\n    | ReturnType<typeof removeSingleTeamAllUsersLabel>\r\n    | ReturnType<typeof removeSingleTeamMemberLabel>\r\n    | ReturnType<typeof resetSingleTeamPage>\r\n    | ReturnType<typeof updateTeamLead>\r\n    | ReturnType<typeof createSingleTeamSuccess>\r\n    | ReturnType<typeof updateSingleTeamStart>\r\n    | ReturnType<typeof updateSingleTeamSuccess>\r\n    | ReturnType<typeof updateSingleTeamFailure>\r\n    | ReturnType<typeof updateSingleTeamStop>\r\n    | ReturnType<typeof clearTeamUpdateStatus>\r\n\r\nconst teamEditBaseReducer: Reducer<TeamEditState, TeamEditAction> = (\r\n    state = initialTeamEditState,\r\n    action: TeamEditAction\r\n): TeamEditState => {\r\n    switch (action.type) {\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_START: {\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_SUCCESS: {\r\n            return {\r\n                ...state,\r\n                data: action.data,\r\n                loading: false,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_FAILURE: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        }\r\n        case ACTIONS.CREATE_SINGLE_TEAM_SUCCESS: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                updatedTeam: action.team,\r\n            };\r\n        }\r\n        case ACTIONS.UPDATE_SINGLE_TEAM_START: {\r\n            return {\r\n                ...state,\r\n                updateStatus: TeamUpdateStatus.IN_PROGRESS,\r\n            };\r\n        }\r\n        case ACTIONS.UPDATE_SINGLE_TEAM_SUCCESS: {\r\n            const team: TeamV2 = { ...state.data! };\r\n            team.updatedAt = new Date().toUTCString();\r\n            return {\r\n                ...state,\r\n                data: {\r\n                    ...team\r\n                },\r\n                updateStatus: TeamUpdateStatus.COMPLETED,\r\n                updatedTeam: action.team,\r\n            };\r\n        }\r\n        case ACTIONS.UPDATE_SINGLE_TEAM_FAILURE: {\r\n            return {\r\n                ...state,\r\n                updateStatus: TeamUpdateStatus.ERROR,\r\n                error: action.error,\r\n            };\r\n        }\r\n        case ACTIONS.UPDATE_SINGLE_TEAM_STOP: {\r\n            const team = {\r\n                ...state.data!,\r\n                updatedAt: new Date().toUTCString()\r\n            };\r\n            return {\r\n                ...state,\r\n                data: team,\r\n                updateStatus: undefined,\r\n                updatedTeam: team,\r\n            }\r\n        }\r\n        case ACTIONS.CLEAR_TEAM_UPDATE_STATUS: {\r\n            return {\r\n                ...state,\r\n                updateStatus: undefined,\r\n            };\r\n        }\r\n        case ACTIONS.MODIFY_TEAM_NAME: {\r\n            const team: TeamV2 = { ...state.data! };\r\n            team.name = action.value;\r\n\r\n            return {\r\n                ...state,\r\n                data: {\r\n                    ...team,\r\n                },\r\n            };\r\n        }\r\n\r\n        case ACTIONS.UPDATE_TEAM_LEAD: {\r\n            const { teamMembers: currentTeamMembers } = state;\r\n            const updatedTeamMembers = {\r\n                count: currentTeamMembers?.count ?? 0,\r\n                items:\r\n                    currentTeamMembers?.items?.map(item =>\r\n                        item.id === action.teamUserId\r\n                            ? { ...item, isTeamLead: action.isTeamLead }\r\n                            : item\r\n                    ) ?? [],\r\n            };\r\n            const { data: currentTeam } = state;\r\n            const member = currentTeamMembers?.items?.find(item => item.id === action.teamUserId);\r\n            let updatedTeam = currentTeam;\r\n\r\n            if (member && currentTeam) {\r\n                if (action.isTeamLead) {\r\n                    const teamLeader = currentTeam.leaders?.find(item => item.id === member.id);\r\n                    if (!teamLeader) {\r\n                        updatedTeam = {\r\n                            ...currentTeam,\r\n                            leaders: (currentTeam.leaders ?? []).concat({\r\n                                id: member.id,\r\n                                user: member.user,\r\n                                isViewed: false\r\n                            })\r\n                        };\r\n                    }\r\n                } else {\r\n                    updatedTeam = {\r\n                        ...currentTeam,\r\n                        leaders: currentTeam.leaders?.filter(item => item.id !== member.id)\r\n                    };\r\n                }\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                data: updatedTeam,\r\n                teamMembers: updatedTeamMembers,\r\n            };\r\n        }\r\n        case ACTIONS.SET_ASSIGNED_LABELS_TO_SINGLE_TEAM: {\r\n            return {\r\n                ...state,\r\n                assignedLabels: action.labelIDs,\r\n            };\r\n        }\r\n        case ACTIONS.SET_DELETED_LABELS_TO_SINGLE_TEAM: {\r\n            return {\r\n                ...state,\r\n                deletedLabels: action.labelIDs,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_START: {\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_SUCCESS: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                allUsers: action?.isRefreshed\r\n                    ? action.data\r\n                    : action.offset > 0 && state.allUsers?.items\r\n                    ? {\r\n                          ...action.data,\r\n                          items: state.allUsers.items.concat(action.data.items),\r\n                      }\r\n                    : action.data,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_ALL_USERS_FAILURE: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_START: {\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_SUCCESS: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                teamMembers: action?.isRefreshed\r\n                    ? action.data\r\n                    : action.offset > 0 && state.teamMembers?.items\r\n                    ? {\r\n                          ...action.data,\r\n                          items: state.teamMembers.items.concat(\r\n                              action.data.items\r\n                          ),\r\n                      }\r\n                    : action.data,\r\n            };\r\n        }\r\n\r\n        case ACTIONS.SEARCH_SINGLE_TEAM_MEMBERS_FAILURE: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        }\r\n        case ACTIONS.REMOVE_SINGLE_TEAM_ALL_USERS_LABEL: {\r\n            if (!state.allUsers) return state;\r\n            const allUsers = {\r\n                ...state.allUsers,\r\n                items: state.allUsers?.items.map(item => {\r\n                    if (item.id === action.userId)\r\n                        return {\r\n                            ...item,\r\n                            labels: item.labels?.filter(\r\n                                label => label !== action.labelId\r\n                            ),\r\n                        };\r\n                    return item;\r\n                }),\r\n            };\r\n            return {\r\n                ...state,\r\n                allUsers,\r\n            };\r\n        }\r\n        case ACTIONS.REMOVE_SINGLE_TEAM_MEMBER_LABEL: {\r\n            if (!state.teamMembers) return state;\r\n            const teamMembers = {\r\n                ...state.teamMembers,\r\n                items: state.teamMembers.items.map(item => {\r\n                    if (item.user.id === action.userId)\r\n                        return {\r\n                            ...item,\r\n                            labels: item.labels?.filter(\r\n                                labelId => labelId !== action.labelId\r\n                            ),\r\n                        };\r\n                    return item;\r\n                }),\r\n            };\r\n            return {\r\n                ...state,\r\n                teamMembers,\r\n            };\r\n        }\r\n        case ACTIONS.RESET_SINGLE_TEAM_PAGE: {\r\n            return {\r\n                ...state,\r\n                data: undefined,\r\n                teamMembers: undefined,\r\n                allUsers: undefined,\r\n                assignedLabels: [],\r\n                deletedLabels: [],\r\n                updatedTeam: undefined,\r\n                loading: false,\r\n                updateStatus: undefined,\r\n            };\r\n        }\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const teamEditReducer = compose<Reducer<TeamEditState, TeamEditAction>>(\r\n    withLabelsReducer({ reducerName: 'teamEdit' })\r\n)(teamEditBaseReducer);\r\n\r\nconst initialUpdateTeamState: UpdateTeamsState = {};\r\n\r\nexport type updateTeamAction =\r\n    | ReturnType<typeof updateTeamActionStart>\r\n    | ReturnType<typeof updateTeamActionSuccess>\r\n    | ReturnType<typeof updateTeamActionFailure>;\r\n\r\nexport const updatedTeamReducer: Reducer<UpdateTeamsState, updateTeamAction> = (\r\n    state = initialUpdateTeamState,\r\n    action: updateTeamAction\r\n): UpdateTeamsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_TEAM_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_TEAM_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.team,\r\n                updateType: action.updateType,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_TEAM_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialUpdateMemberState: UpdateTeamsState = {};\r\n\r\nexport type updateMemberAction =\r\n    | ReturnType<typeof updateMemberActionStart>\r\n    | ReturnType<typeof updateMemberActionSuccess>\r\n    | ReturnType<typeof updateMemberActionFailure>;\r\n\r\nexport const updatedMemberReducer: Reducer<\r\n    UpdateMembersState,\r\n    updateMemberAction\r\n> = (\r\n    state = initialUpdateMemberState,\r\n    action: updateMemberAction\r\n): UpdateTeamsState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_MEMBER_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_MEMBER_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.team,\r\n                updateType: action.updateType,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_MEMBER_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\n//region Team members\r\nconst teamMembersInitialState = withLabelsInitialState<TeamMembersBaseState>(\r\n    {\r\n        itemsOnPage: 20,\r\n        list: {\r\n            items: [],\r\n            count: 0,\r\n        },\r\n        loading: false,\r\n        error: null,\r\n    },\r\n    'teamMembers'\r\n);\r\n\r\nexport type TeamMembersAction =\r\n    | ReturnType<typeof getTeamInfoStart>\r\n    | ReturnType<typeof getTeamInfoSuccess>\r\n    | ReturnType<typeof getTeamInfoFailure>\r\n    | ReturnType<typeof resetTeamInfo>\r\n    | ReturnType<typeof searchTeamMembersStartAction>\r\n    | ReturnType<typeof searchTeamMembersSuccessAction>\r\n    | ReturnType<typeof searchTeamMembersFailureAction>;\r\n\r\nconst teamMembersBaseReducer: Reducer<TeamMembersState, TeamMembersAction> = (\r\n    state = teamMembersInitialState,\r\n    action: TeamMembersAction\r\n): TeamMembersState => {\r\n    switch (action.type) {\r\n        case ACTIONS.GET_TEAM_INFO_START: {\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        }\r\n        case ACTIONS.GET_TEAM_INFO_SUCCESS: {\r\n            return {\r\n                ...state,\r\n                data: action.data,\r\n                loading: false,\r\n            };\r\n        }\r\n        case ACTIONS.GET_TEAM_INFO_FAILURE: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        }\r\n        case ACTIONS.RESET_TEAM_INFO: {\r\n            return {\r\n                ...state,\r\n                data: undefined,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_TEAM_MEMBERS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: null,\r\n            };\r\n        case ACTIONS.SEARCH_TEAM_MEMBERS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                list: action.data,\r\n            };\r\n        case ACTIONS.SEARCH_TEAM_MEMBERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const teamMembersReducer = compose<\r\n    Reducer<TeamMembersState, TeamMembersAction>\r\n>(withLabelsReducer({ reducerName: 'teamMembers' }))(teamMembersBaseReducer);\r\n\r\n//endregion\r\n\r\nconst initialState: PractisSetsTrainingState = withLabelsInitialState<PractisSetsTrainingState>(\r\n    {\r\n        checked: [],\r\n    },\r\n    'practisSetsTraining'\r\n);\r\n\r\nexport type PractisSetsTrainingAction =\r\n    | ReturnType<typeof getTeamInfoTrainingStart>\r\n    | ReturnType<typeof getTeamInfoTrainingSuccess>\r\n    | ReturnType<typeof getTeamInfoTrainingFailure>\r\n    | ReturnType<typeof searchTrainerStart>\r\n    | ReturnType<typeof searchTrainerSuccess>\r\n    | ReturnType<typeof searchTrainerFailure>\r\n    | ReturnType<typeof checkSingleProgress>\r\n    | ReturnType<typeof checkAllProgress>\r\n    | ReturnType<typeof updateAllSelectedPractisSetsState>\r\n    | ReturnType<typeof clearTrainerPractisSet>\r\n    | ReturnType<typeof updateSelectedPractisSetState>;\r\n\r\nconst trainerPractisSetsBaseReducer: Reducer<\r\n    PractisSetsTrainingState,\r\n    PractisSetsTrainingAction\r\n> = (\r\n    state = initialState,\r\n    action: PractisSetsTrainingAction\r\n): PractisSetsTrainingState => {\r\n    switch (action.type) {\r\n        case ACTIONS.GET_TEAM_INFO_TRAINING_START: {\r\n            return {\r\n                ...state,\r\n            };\r\n        }\r\n        case ACTIONS.GET_TEAM_INFO_TRAINING_SUCCESS: {\r\n            return {\r\n                ...state,\r\n                teamData: action.data,\r\n            };\r\n        }\r\n        case ACTIONS.GET_TEAM_INFO_TRAINING_FAILURE: {\r\n            return {\r\n                ...state,\r\n                error: action.error,\r\n            };\r\n        }\r\n        case ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: {\r\n                    ...action.practisSets,\r\n                    items: action.practisSets.items,\r\n                },\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_TRAINER_PRACTIS_SETS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.CHECK_SINGLE_PROGRESS: {\r\n            const selectedIds = [...state.checked];\r\n\r\n            const selectedIdIndex = selectedIds.findIndex(\r\n                (item: number) => item === action.id\r\n            );\r\n            if (selectedIdIndex > -1) {\r\n                selectedIds.splice(selectedIdIndex, 1);\r\n            } else {\r\n                selectedIds.push(action.id);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                checked: selectedIds,\r\n            };\r\n        }\r\n        case ACTIONS.CHECK_ALL_PROGRESS:\r\n            return {\r\n                ...state,\r\n                checked:\r\n                    action.checked || action.partial ? action.progressId : [],\r\n            };\r\n        case ACTIONS.UPDATE_SELECTED_PRACTIS_SET_STATE:\r\n            const selectedPractisSetIds = [\r\n                ...(state.selectedPractisSets || []),\r\n            ];\r\n\r\n            const selectedPractisSetIndex = selectedPractisSetIds.findIndex(\r\n                (item: number) => item === action.setId\r\n            );\r\n            if (selectedPractisSetIndex > -1) {\r\n                selectedPractisSetIds.splice(selectedPractisSetIndex, 1);\r\n            } else {\r\n                selectedPractisSetIds.push(action.setId);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                selectedPractisSets: selectedPractisSetIds,\r\n            };\r\n        case ACTIONS.UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE:\r\n            return {\r\n                ...state,\r\n                selectedPractisSets:\r\n                    action.checked || action.partial ? action.setIds : [],\r\n            };\r\n        case ACTIONS.CLEAR_TRAINER_PRACTIS_SETS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: {\r\n                    count: 0,\r\n                    items: [],\r\n                },\r\n                loading: false,\r\n                error: '',\r\n            }\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const trainerPractisSetsReducer = compose<\r\n    Reducer<PractisSetsTrainingState, PractisSetsTrainingAction>\r\n>(withLabelsReducer({ reducerName: 'practisSetsTraining' }))(\r\n    trainerPractisSetsBaseReducer\r\n);\r\n\r\nconst initialEnrollmentsState: EnrollmentState = {};\r\n\r\nexport type EnrollmentsAction =\r\n    | ReturnType<typeof searchPractisUsersStart>\r\n    | ReturnType<typeof searchPractisUsersSuccess>\r\n    | ReturnType<typeof searchPractisUsersFailure>\r\n    | ReturnType<typeof getPractisSetStart>\r\n    | ReturnType<typeof getPractisSetSuccess>\r\n    | ReturnType<typeof getPractisSetFailure>\r\n    | ReturnType<typeof resetPractisSetDetails>\r\n    | ReturnType<typeof sendTraineeInvitationSuccess>;\r\n\r\nconst practisSetsEnrollmentReducer: Reducer<\r\n    EnrollmentState,\r\n    EnrollmentsAction\r\n> = (\r\n    state = initialEnrollmentsState,\r\n    action: EnrollmentsAction\r\n): EnrollmentState => {\r\n    switch (action.type) {\r\n        case ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_SUCCESS:\r\n            if (\r\n                state.data &&\r\n                state.data.offset !== action.users.offset &&\r\n                action.users.offset !== 0\r\n            ) {\r\n                return {\r\n                    ...state,\r\n                    data: {\r\n                        ...action.users,\r\n                        items: state.data ? action.users.items : [],\r\n                    },\r\n                    loading: false,\r\n                    error: '',\r\n                };\r\n            } else {\r\n                return {\r\n                    ...state,\r\n                    data: {\r\n                        ...action.users,\r\n                        items: action.users.items,\r\n                    },\r\n                    loading: false,\r\n                    error: '',\r\n                };\r\n            }\r\n        case ACTIONS.SEARCH_TRAINER_PRACTIS_USERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.GET_PRACTIS_SET_START:\r\n            return {\r\n                ...state,\r\n            };\r\n        case ACTIONS.GET_PRACTIS_SET_SUCCESS:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                practisSet: action.practisSet,\r\n                error: '',\r\n            };\r\n        case ACTIONS.GET_PRACTIS_SET_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n\r\n        case ACTIONS.RESET_PRACTIS_SET_DETAILS:\r\n            return initialEnrollmentsState;\r\n        case ACTIONS.SEND_TRAINEE_INVITATION_SUCCESS: {\r\n            const updatedArray = state.update ? [...state.update] : [];\r\n            updatedArray.push(action.inviteType);\r\n            return {\r\n                ...state,\r\n                update: updatedArray,\r\n            };\r\n        }\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialPractisSetReportState: PractisSetReportState = {};\r\n\r\nexport type PractisSetReportActions =\r\n    | ReturnType<typeof getPractisSetReportStart>\r\n    | ReturnType<typeof getPractisSetReportSuccess>\r\n    | ReturnType<typeof getPractisSetReportFailure>\r\n    | ReturnType<typeof resetPractisSetReport>;\r\n\r\nconst practisSetReportsReducer: Reducer<\r\n    PractisSetReportState,\r\n    PractisSetReportActions\r\n> = (\r\n    state = initialPractisSetReportState,\r\n    action: PractisSetReportActions\r\n): PractisSetReportState => {\r\n    switch (action.type) {\r\n        case ACTIONS.GET_PRACTIS_SET_REPORT_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.GET_PRACTIS_SET_REPORT_SUCCESS:\r\n            return {\r\n                ...state,\r\n                enrollment: action.enrollment,\r\n                progress: action.progress,\r\n                dailyTraining: action.dailyTraining,\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.GET_PRACTIS_SET_REPORT_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.RESET_PRACTIS_SET_REPORT:\r\n            return {\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialUpdatedProgressState: UpdatedProgressState = {};\r\n\r\nexport type updatedProgressAction =\r\n    | ReturnType<typeof updatedProgressActionStart>\r\n    | ReturnType<typeof updatedProgressActionSuccess>\r\n    | ReturnType<typeof updatedProgressActionFailure>;\r\n\r\nexport const updatedProgressReducer: Reducer<\r\n    UpdatedProgressState,\r\n    updatedProgressAction\r\n> = (\r\n    state = initialUpdatedProgressState,\r\n    action: updatedProgressAction\r\n): UpdatedProgressState => {\r\n    switch (action.type) {\r\n        case ACTIONS.UPDATE_PROGRESS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case ACTIONS.UPDATE_PROGRESS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action.progress,\r\n                updateType: action.updateType,\r\n                loading: false,\r\n            };\r\n        case ACTIONS.UPDATE_PROGRESS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst initialInvitationState: AssignUsersState = withLabelsInitialState<AssignUsersState>(\r\n    {},\r\n    'assignUsers'\r\n);\r\n\r\nexport type AssignUsersAction =\r\n    | ReturnType<typeof searchInvitationUsersStart>\r\n    | ReturnType<typeof searchInvitationUsersSuccess>\r\n    | ReturnType<typeof searchInvitationUsersFailure>\r\n    | ReturnType<typeof sendTraineeInvitationSuccess>\r\n    | ReturnType<typeof updateSelectedInvitationTraineesState>\r\n    | ReturnType<typeof updateAllSelectedInvitationTraineesState>\r\n    | ReturnType<typeof updateTraineeDueDateAction>;\r\n\r\nconst assignUsersBaseReducer: Reducer<AssignUsersState, AssignUsersAction> = (\r\n    state = initialInvitationState,\r\n    action: AssignUsersAction\r\n): AssignUsersState => {\r\n    switch (action.type) {\r\n        case ACTIONS.SEARCH_TRAINER_INVITATION_USERS_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_TRAINER_INVITATION_USERS_SUCCESS:\r\n            return {\r\n                ...state,\r\n                data: action?.isRefreshed\r\n                    ? action.users\r\n                    : action.offset > 0 && state.data?.items\r\n                    ? {\r\n                          ...action.users,\r\n                          items: state.data.items.concat(action.users.items),\r\n                      }\r\n                    : action.users,\r\n\r\n                loading: false,\r\n                error: '',\r\n            };\r\n        case ACTIONS.SEARCH_TRAINER_INVITATION_USERS_FAILURE:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.error,\r\n            };\r\n        case ACTIONS.SEND_TRAINEE_INVITATION_SUCCESS: {\r\n            const updatedArray = state.update ? [...state.update] : [];\r\n            updatedArray.push(action.inviteType);\r\n            return {\r\n                ...state,\r\n                update: updatedArray,\r\n            };\r\n        }\r\n        case ACTIONS.UPDATE_TRAINEE_DUE_DATE: {\r\n            const traineeItems = state.data?.items.map(trainee => {\r\n                let dueDate = trainee.dueDate\r\n\r\n                if (action.trainees.includes(trainee.id)) {\r\n                    dueDate = action.dueDate ?? undefined\r\n                }\r\n\r\n                return {\r\n                    ...trainee,\r\n                    dueDate\r\n                }\r\n            })\r\n            \r\n            return {\r\n                ...state,\r\n                data: state.data ? { ...state.data, items: traineeItems ?? state.data?.items } : state.data\r\n            }\r\n        }\r\n        case ACTIONS.UPDATE_SELECTED_INVITATION_TRAINEES_STATE: {\r\n            const selectedUserIds = [...(state.selectedUsers || [])];\r\n\r\n            const selectedUserIndex = selectedUserIds.findIndex(\r\n                (item: number) => item === action.userId\r\n            );\r\n            if (selectedUserIndex > -1) {\r\n                selectedUserIds.splice(selectedUserIndex, 1);\r\n            } else {\r\n                selectedUserIds.push(action.userId);\r\n            }\r\n\r\n            return {\r\n                ...state,\r\n                selectedUsers: selectedUserIds,\r\n            };\r\n        }\r\n        case ACTIONS.UPDATE_ALL_SELECTED_INVITATION_TRAINEES_STATE:\r\n            return {\r\n                ...state,\r\n                selectedUsers:\r\n                    action.checked || action.partial ? action.userIds : [],\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nexport const assignUsersReducer = compose<\r\n    Reducer<AssignUsersState, AssignUsersAction>\r\n>(withLabelsReducer({ reducerName: 'assignUsers' }))(assignUsersBaseReducer);\r\n\r\nexport const progressReducer = combineReducers({\r\n    updatedProgress: updatedProgressReducer,\r\n    enrollments: practisSetsEnrollmentReducer,\r\n    report: practisSetReportsReducer,\r\n});\r\n","import { Reducer } from 'redux';\nimport {\n    ACTIONS,\n    voiceGenerationClear,\n    voiceGenerationFailure,\n    voiceGenerationStart,\n    voiceGenerationSuccess,\n} from './actions';\nimport { VoiceGenerationState } from './states';\nimport { appendItem, modifyArrayItem, removeItem } from '../../../tools/ramda';\n\nconst initialState: VoiceGenerationState = {};\n\nexport type Action =\n    | ReturnType<typeof voiceGenerationStart>\n    | ReturnType<typeof voiceGenerationSuccess>\n    | ReturnType<typeof voiceGenerationClear>\n    | ReturnType<typeof voiceGenerationFailure>;\n\nexport const voiceGenerationReducer: Reducer<VoiceGenerationState, Action> = (\n    state = initialState,\n    action: Action\n): VoiceGenerationState => {\n    switch (action.type) {\n        case ACTIONS.VOICE_GENERATION_START: {\n            const newData = appendItem(\n                state[action.feature] ? state[action.feature].data : [],\n                { id: action.itemId }\n            );\n            return {\n                ...state,\n                [action.feature]: {\n                    ...state[action.feature],\n                    generating: true,\n                    data: newData,\n                },\n            };\n        }\n        case ACTIONS.VOICE_GENERATION_SUCCESS: {\n            return {\n                ...state,\n                [action.feature]: {\n                    ...state[action.feature],\n                    data: modifyArrayItem(\n                        state[action.feature].data,\n                        action.itemId,\n                        'voice',\n                        action.voice\n                    ),\n                },\n            };\n        }\n        case ACTIONS.VOICE_GENERATION_FAILURE: {\n            const newData = removeItem(state[action.feature].data, {\n                id: action.itemId,\n            });\n            return {\n                ...state,\n                [action.feature]: {\n                    ...state[action.feature],\n                    generating: newData.length > 0,\n                    error: action.error,\n                    data: newData,\n                },\n            };\n        }\n        case ACTIONS.VOICE_GENERATION_CLEAR:\n            const newData = removeItem(state[action.feature].data, {\n                id: action.itemId,\n            });\n            return {\n                ...state,\n                [action.feature]: {\n                    ...state[action.feature],\n                    generating: newData.length > 0,\n                    data: newData,\n                },\n            };\n        default:\n            return state;\n    }\n};\n","import {\n    ACTIONS,\n    createChallengeScriptLineAction,\n    deleteChallengeScriptLineAction,\n    fetchChallengeFailure,\n    fetchChallengeStart,\n    fetchChallengeSuccess,\n    modifyChallengeAction,\n    modifyChallengeScriptLineAction,\n    resetChallengeAction,\n    resetChallengeLogoAction,\n    restoreChallengeFromTempAction,\n    storeChallengeTempCopyAction,\n    updateChallengeScriptLineAction,\n    uploadChallengeAudioFailure,\n    uploadChallengeAudioStart,\n    uploadChallengeAudioSuccess,\n} from './actions';\nimport {\n    ACTIONS as LIBRARY_ACTIONS,\n    updateLibraryChallengeSuccess,\n} from '../../library/store/actions';\nimport { ChallengeState } from './states';\nimport { ScriptLine } from '../../../constants/interfaces/ScriptLine';\nimport { ChallengeStatuses } from '../../../constants/interfaces/Challenge';\nimport { DEFAULT_CHALLENGE_TRY_LIMIT } from '../constants';\n\nexport const initialChallengeState: ChallengeState = {\n    data: {\n        title: '',\n        description: '',\n        instructions: '',\n        status: ChallengeStatuses.DRAFT,\n        script: {\n            totalDuration: null,\n            scenarioId: null,\n            companyId: null,\n            lines: [],\n        },\n        tryLimit: DEFAULT_CHALLENGE_TRY_LIMIT,\n    },\n    loading: false,\n    case: 'init',\n    error: '',\n};\n\ntype ChallengeActions =\n    | ReturnType<typeof fetchChallengeStart>\n    | ReturnType<typeof fetchChallengeSuccess>\n    | ReturnType<typeof fetchChallengeFailure>\n    | ReturnType<typeof modifyChallengeAction>\n    | ReturnType<typeof createChallengeScriptLineAction>\n    | ReturnType<typeof updateChallengeScriptLineAction>\n    | ReturnType<typeof modifyChallengeScriptLineAction>\n    | ReturnType<typeof deleteChallengeScriptLineAction>\n    | ReturnType<typeof uploadChallengeAudioStart>\n    | ReturnType<typeof uploadChallengeAudioSuccess>\n    | ReturnType<typeof uploadChallengeAudioFailure>\n    | ReturnType<typeof resetChallengeAction>\n    | ReturnType<typeof resetChallengeLogoAction>\n    | ReturnType<typeof updateLibraryChallengeSuccess>\n    | ReturnType<typeof storeChallengeTempCopyAction>\n    | ReturnType<typeof restoreChallengeFromTempAction>;\n\nexport const challengeReducer = (\n    state = initialChallengeState,\n    action: ChallengeActions\n): ChallengeState => {\n    switch (action.type) {\n        case ACTIONS.FETCH_CHALLENGE_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.FETCH_CHALLENGE_SUCCESS:\n            return {\n                data: {\n                    ...state.data,\n                    ...action.data,\n                },\n                loading: false,\n                case: 'loaded',\n                error: '',\n            };\n        case ACTIONS.FETCH_CHALLENGE_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                case: 'error',\n                error: action.error,\n            };\n        case ACTIONS.UPLOAD_CHALLENGE_AUDIO_START:\n            return {\n                ...state,\n            };\n        case ACTIONS.UPLOAD_CHALLENGE_AUDIO_SUCCESS:\n            const updatedLines = state.data.script!.lines.map(\n                (line: ScriptLine) => {\n                    if (line.id === action.data.scriptLineId) {\n                        const newLine = { ...line };\n                        newLine.audioUrl = action.data.response.url;\n                        newLine.audioId = action.data.response.id;\n                        newLine.duration =\n                            action.data.response.metadata.format.duration;\n                        return newLine;\n                    } else {\n                        return line;\n                    }\n                }\n            );\n            return {\n                ...state,\n                data: {\n                    ...state.data,\n                    script: {\n                        ...state.data.script,\n                        totalDuration: updatedLines\n                            .map((lines: ScriptLine) =>\n                                lines.duration ? lines.duration : 0\n                            )\n                            .reduce((a, b) => a + b, 0),\n                        lines: updatedLines,\n                    },\n                },\n                case: 'modified',\n            };\n        case ACTIONS.UPLOAD_CHALLENGE_AUDIO_FAILURE:\n            return {\n                ...state,\n                error: action.error,\n                case: 'error',\n            };\n        case ACTIONS.CREATE_CHALLENGES_SCRIPT_LINE:\n            const createdScriptLine = { ...state.data.script };\n            createdScriptLine.lines.push(action.data);\n            return {\n                ...state,\n                data: {\n                    ...state.data,\n                    script: {\n                        ...createdScriptLine,\n                    },\n                },\n                case: action.silent ? state.case : 'modified',\n                error: '',\n            };\n        case ACTIONS.UPDATE_CHALLENGES_SCRIPT_LINE:\n            return {\n                ...state,\n                data: {\n                    ...state.data,\n                    script: {\n                        ...state.data.script,\n                        lines: action.data.map(\n                            (line: ScriptLine, index: number) => {\n                                return { ...line, position: index };\n                            }\n                        ),\n                    },\n                },\n                case: 'modified',\n                error: '',\n            };\n        case ACTIONS.MODIFY_CHALLENGES_SCRIPT_LINE:\n            return {\n                ...state,\n                case: 'modified',\n                data: {\n                    ...state.data,\n                    script: {\n                        ...state.data.script,\n                        lines: state.data.script.lines.map(\n                            (line: ScriptLine) => {\n                                if (line.id === action.lineId) {\n                                    return {\n                                        ...line,\n                                        [action.field]: action.data,\n                                    };\n                                } else {\n                                    return line;\n                                }\n                            }\n                        ),\n                    },\n                },\n            };\n        case ACTIONS.DELETE_CHALLENGES_SCRIPT_LINE:\n            const newScriptLines = [...state.data.script.lines];\n            const newScriptLinesArr = [\n                ...newScriptLines.filter(\n                    (line: ScriptLine) => line.id !== action.data\n                ),\n            ];\n            const newDurations = newScriptLinesArr\n                .filter((line: ScriptLine) => line.audioUrl)\n                .map((line: ScriptLine) => line.duration);\n            return {\n                ...state,\n                data: {\n                    ...state.data,\n                    script: {\n                        ...state.data.script,\n                        totalDuration:\n                            newDurations.length > 0\n                                ? newDurations.reduce((a, b) => a + b)\n                                : 0,\n                        lines: newScriptLinesArr,\n                    },\n                },\n                case: 'modified',\n                error: '',\n            };\n        case ACTIONS.MODIFY_CHALLENGE:\n            const newChallenge: any = { ...state.data };\n            newChallenge[action.field] = action.data;\n            return {\n                ...state,\n                data: {\n                    ...newChallenge,\n                },\n                case: action.silent ? state.case : 'modified',\n            };\n        case ACTIONS.STORE_CHALLENGE_TEMP_COPY: {\n            return {\n                ...state,\n                temp_data: JSON.parse(JSON.stringify(state.data)),\n            };\n        }\n        case ACTIONS.RESTORE_CHALLENGE_FROM_TEMP: {\n            return {\n                ...state,\n                data: JSON.parse(JSON.stringify(state.temp_data)),\n                case: 'init',\n            };\n        }\n        case ACTIONS.RESET_CHALLENGE: {\n            return {\n                ...initialChallengeState,\n                data: {\n                    ...initialChallengeState.data,\n                    script: {\n                        ...initialChallengeState.data.script,\n                        lines: [],\n                    },\n                },\n            };\n        }\n        case LIBRARY_ACTIONS.UPDATE_LIBRARY_CHALLENGES_SUCCESS: {\n            return {\n                ...state,\n                case: 'updated',\n            };\n        }\n        default:\n            return state;\n    }\n};\n","import { compose, Reducer } from 'redux';\nimport {\n    AccuracyScoreState,\n    SubmissionPaginationState,\n    SubmissionDetailsState,\n    SubmissionsState,\n    UpdatedSubmissionsState,\n} from './states';\nimport {\n    ACTIONS,\n    checkAllSubmissions,\n    checkSingleSubmission,\n    getSubmissionDetailsFailure,\n    getSubmissionDetailsStart,\n    getSubmissionDetailsSuccess,\n    getSubmissionReviewSuccess,\n    modifyScore,\n    searchChallengeSubmissionsFailure,\n    searchChallengeSubmissionsStart,\n    searchChallengeSubmissionsSuccess,\n    searchAccuracyScoreStart,\n    searchAccuracyScoreFailure,\n    searchAccuracyScoreSuccess,\n    updateChallengeSubmissionFailure,\n    updateChallengeSubmissionStart,\n    updateChallengeSubmissionSuccess,\n    updateSubmissionDeleteLabelSuccess,\n    checkAllAccuracyScores,\n    checkSingleAccuracyScore,\n    searchSubmissionPaginationStart,\n    searchSubmissionPaginationSuccess,\n    searchSubmissionPaginationFailure,\n} from './actions';\nimport { SubmissionV2 } from '../../../constants/interfaces/Reviews';\nimport {\n    withLabelsInitialState,\n    withLabelsReducer,\n} from '../../portableLabels/store/hors/withLabels';\nimport {\n    withTeamsInitialState,\n    withTeamsReducer,\n} from '../../portableTeams/store/hors/withTeams';\nimport { withScenariosInitialState, withScenariosReducer } from '../../portableScenarios/store/hors/withTeams';\n\nconst initialSubmissionsState: SubmissionsState = withLabelsInitialState(\n    withTeamsInitialState(\n        {\n            checked: [],\n        },\n        'submissions'\n    ),\n    'submissions',\n);\n\nconst initialAccuracyScoreState: AccuracyScoreState = withLabelsInitialState(\n    withTeamsInitialState(\n        withScenariosInitialState(\n            {\n                checked: [],\n            },\n            'submissions'\n        ),\n        'submissions'\n    ),\n    'submissions'\n);\n\n\ntype SubmissionsAction =\n    | ReturnType<typeof searchChallengeSubmissionsStart>\n    | ReturnType<typeof searchChallengeSubmissionsSuccess>\n    | ReturnType<typeof searchChallengeSubmissionsFailure>\n    | ReturnType<typeof checkAllSubmissions>\n    | ReturnType<typeof checkSingleSubmission>\n    | ReturnType<typeof updateSubmissionDeleteLabelSuccess>;\n\nconst submissionsBaseReducer: Reducer<SubmissionsState, SubmissionsAction> = (\n    state = initialSubmissionsState,\n    action: SubmissionsAction\n): SubmissionsState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_SUCCESS:\n            const prevItems = state.data?.items;\n            return {\n                ...state,\n                data:\n                    !prevItems\n                        ? action.submissions\n                        : {\n                              ...action.submissions,\n                              items: action.submissions.items,\n                          },\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_CHALLENGE_SUBMISSIONS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.CHECK_SINGLE_SUBMISSION: {\n            const selectedIds = [...state.checked];\n\n            const selectedIdIndex = selectedIds.findIndex(\n                (item: number) => item === action.id\n            );\n            if (selectedIdIndex > -1) {\n                selectedIds.splice(selectedIdIndex, 1);\n            } else {\n                selectedIds.push(action.id);\n            }\n\n            return {\n                ...state,\n                checked: selectedIds,\n            };\n        }\n        case ACTIONS.CHECK_ALL_SUBMISSIONS:\n            return {\n                ...state,\n                checked:\n                    action.checked || action.partial ? action.submissionId : [],\n            };\n        case ACTIONS.UPDATE_SUBMISSION_DELETE_LABEL_SUCCESS:\n            if (state.data) {\n                return {\n                    ...state,\n                    data: {\n                        ...state.data,\n                        items: state.data.items.map((submission: SubmissionV2) =>\n                            submission.id === action.id\n                                ? {\n                                      ...submission,\n                                      userLabels: submission.userLabels?.filter(\n                                          labelId => labelId !== action.labelId\n                                    )\n                                  }\n                                : submission\n                        ),\n                    },\n                };\n            } else {\n                return state;\n            }\n        default:\n            return state;\n    }\n};\n\nexport const submissionsReducer = compose<Reducer<SubmissionsState, any>>(\n    withLabelsReducer({ reducerName: 'submissions' }),\n    withTeamsReducer({ reducerName: 'submissions' })\n)(submissionsBaseReducer);\n\nexport type UpdatedSubmissionsAction =\n    | ReturnType<typeof updateChallengeSubmissionStart>\n    | ReturnType<typeof updateChallengeSubmissionSuccess>\n    | ReturnType<typeof updateChallengeSubmissionFailure>;\n\nexport const updatedSubmissionsReducer: Reducer<\n    UpdatedSubmissionsState,\n    UpdatedSubmissionsAction\n> = (state = {}, action: UpdatedSubmissionsAction): UpdatedSubmissionsState => {\n    switch (action.type) {\n        case ACTIONS.UPDATE_CHALLENGE_SUBMISSION_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.UPDATE_CHALLENGE_SUBMISSION_SUCCESS:\n            return {\n                ...state,\n                data: action.submissionIds,\n                updateType: action.updateType,\n                loading: false,\n            };\n        case ACTIONS.UPDATE_CHALLENGE_SUBMISSION_FAILURE:\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n\nexport type SubmissionDetailsAction =\n    | ReturnType<typeof getSubmissionDetailsStart>\n    | ReturnType<typeof getSubmissionDetailsSuccess>\n    | ReturnType<typeof getSubmissionDetailsFailure>\n    | ReturnType<typeof getSubmissionReviewSuccess>\n    | ReturnType<typeof modifyScore>;\n\nexport const submissionDetailsReducer: Reducer<\n    SubmissionDetailsState,\n    SubmissionDetailsAction\n> = (state = {}, action: SubmissionDetailsAction): SubmissionDetailsState => {\n    switch (action.type) {\n        case ACTIONS.GET_SUBMISSION_DETAILS_START:\n            return {\n                ...state,\n                loading: true,\n                error: ''\n            };\n        case ACTIONS.GET_SUBMISSION_DETAILS_SUCCESS:\n            return {\n                ...state,\n                details: {\n                    ...action.submission,\n                },\n                review: {\n                    ...action.review\n                },\n                loading: false,\n                error: ''\n            };\n        case ACTIONS.GET_SUBMISSION_DETAILS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.GET_SUBMISSION_REVIEW_SUCCESS:\n            return {\n                ...state,\n                details: state.details ? {\n                    ...state.details,\n                    reviewedAt: action.review.date\n                } : state.details,\n                review: {\n                    ...action.review\n                },\n                loading: false,\n                error: ''\n            };\n        case ACTIONS.MODIFY_SCORE:\n            return {\n                ...state,\n                review: {\n                    ...state.review,\n                    [action.field]: action.value,\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nexport type AccuracyScoresAction =\n    | ReturnType<typeof checkAllAccuracyScores>\n    | ReturnType<typeof checkSingleAccuracyScore>\n    | ReturnType<typeof searchAccuracyScoreStart>\n    | ReturnType<typeof searchAccuracyScoreSuccess>\n    | ReturnType<typeof searchAccuracyScoreFailure>;\n\n\n// Accuracy Scores\nconst accuracyScoresBaseReducer: Reducer<AccuracyScoreState, AccuracyScoresAction> = (\n    state = initialAccuracyScoreState,\n    action: AccuracyScoresAction\n): any => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_ACCURACY_SCORE_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_ACCURACY_SCORE_SUCCESS:\n            const prevItems = state.data?.items;\n       \n            return {\n                ...state,\n                data: !prevItems\n                    ? action.accuracyScores\n                    : {\n                          ...action.accuracyScores,\n                          items: action.accuracyScores.items,\n                      },\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_ACCURACY_SCORE_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.CHECK_SINGLE_ACCURACY_SCORE: {\n            \n            const selectedIds = [...state.checked];\n\n            const selectedIdIndex = selectedIds.findIndex(\n                (item: number) => item === action.id\n            );\n            if (selectedIdIndex > -1) {\n                selectedIds.splice(selectedIdIndex, 1);\n            } else {\n                selectedIds.push(action.id);\n            }\n\n            return {\n                ...state,\n                checked: selectedIds,\n            };\n        }\n        case ACTIONS.CHECK_ALL_ACCURACY_SCORES:\n            return {\n                ...state,\n                checked:\n                    action.checked || action.partial ? action.submissionId : [],\n            };\n        default:\n            return state;\n    }\n};\n\nexport const accuracyScoreReducer = compose<Reducer<any, any>>(\n    withLabelsReducer({ reducerName: 'accuracyscore' }),\n    withTeamsReducer({ reducerName: 'accuracyscore' }),\n    withScenariosReducer({reducerName: 'accuracyscore'})\n\n)(accuracyScoresBaseReducer);\n\nexport type SubmissionPaginationAction =\n    | ReturnType<typeof searchSubmissionPaginationStart>\n    | ReturnType<typeof searchSubmissionPaginationSuccess>\n    | ReturnType<typeof searchSubmissionPaginationFailure>;\n\nexport const submissionPaginationReducer: Reducer<\n    SubmissionPaginationState,\n    SubmissionPaginationAction\n> = (state = {}, action: SubmissionPaginationAction): SubmissionPaginationState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_SUBMISSION_PAGINATION_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.SEARCH_SUBMISSION_PAGINATION_SUCCESS:\n            return {\n                ...state,\n                submissionIds: action.submissionIds,\n                totalCount: action.totalCount,\n                loading: false,\n            };\n        case ACTIONS.SEARCH_SUBMISSION_PAGINATION_FAILURE:\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};","import { LabelsConfigState, LabelsState, UpdatedLabelsState } from './states';\nimport { Reducer } from 'redux';\nimport {\n    ACTIONS,\n    closeLabelCreationPanelAction,\n    openLabelCreationPanelAction,\n    searchLabelsFailure,\n    searchLabelsStart,\n    searchLabelsSuccess,\n    setEditingLabelAction,\n    setLabelsSearchTerm,\n    collapseAllLabelsAction,\n    expandAllLabelsAction,\n    toggleCollapseLabelFieldAction,\n    toggleCollapseAssignLabelFieldAction,\n    updateLabelFailure,\n    updateLabelStart,\n    updateLabelSuccess,\n    modifyLabelNameAction,\n    selectLabelFilterAction,\n    saveLabelFiltersStart,\n    saveLabelFiltersSuccess,\n    saveLabelFiltersFailure,\n    setLabelFilterAction,\n    clearLabelFilterAction,\n    fetchFullLabelsListStart,\n    fetchFullLabelsListSuccess,\n    fetchFullLabelsListFailure,\n    expandLabelFieldByIdAction,\n    expandMultipleLabelsAction,\n    setAssignLabelsAction,\n    clearAssignLabelsAction,\n    collapseAllTableLabelsAction,\n    setPreviouslyAssignedLabels,\n} from './actions';\nimport { Label } from '../../../constants/interfaces/Label';\nimport {\n    appendIfEmpty,\n    toggleItemInArray,\n} from '../../../helpers/functions/array-helpers';\n\nconst initialLabelsState: LabelsState = {\n    open: false,\n    loading: true,\n    saveLoading: false,\n    collapseLabels: [],\n    assignedLabels: [],\n    collapseAssignLabels: [],\n    selected: [],\n    selectedModified: false,\n    previouslyAssignedLabels: [],\n};\n\ntype LabelsAction =\n    | ReturnType<typeof openLabelCreationPanelAction>\n    | ReturnType<typeof closeLabelCreationPanelAction>\n    | ReturnType<typeof toggleCollapseLabelFieldAction>\n    | ReturnType<typeof toggleCollapseAssignLabelFieldAction>\n    | ReturnType<typeof expandLabelFieldByIdAction>\n    | ReturnType<typeof collapseAllLabelsAction>\n    | ReturnType<typeof collapseAllTableLabelsAction>\n    | ReturnType<typeof expandAllLabelsAction>\n    | ReturnType<typeof expandMultipleLabelsAction>\n    | ReturnType<typeof modifyLabelNameAction>\n    | ReturnType<typeof searchLabelsStart>\n    | ReturnType<typeof searchLabelsSuccess>\n    | ReturnType<typeof searchLabelsFailure>\n    | ReturnType<typeof fetchFullLabelsListStart>\n    | ReturnType<typeof fetchFullLabelsListSuccess>\n    | ReturnType<typeof fetchFullLabelsListFailure>\n    | ReturnType<typeof selectLabelFilterAction>\n    | ReturnType<typeof setLabelFilterAction>\n    | ReturnType<typeof clearLabelFilterAction>\n    | ReturnType<typeof setAssignLabelsAction>\n    | ReturnType<typeof clearAssignLabelsAction>\n    | ReturnType<typeof saveLabelFiltersStart>\n    | ReturnType<typeof saveLabelFiltersSuccess>\n    | ReturnType<typeof saveLabelFiltersFailure>\n    | ReturnType<typeof setPreviouslyAssignedLabels>;\n\nexport const labelsReducer: Reducer<LabelsState, LabelsAction> = (\n    state: LabelsState = initialLabelsState,\n    action: LabelsAction\n): LabelsState => {\n    switch (action.type) {\n        case ACTIONS.OPEN_LABEL_CREATION_PANEL:\n            return {\n                ...state,\n                open: true,\n            };\n        case ACTIONS.CLOSE_LABEL_CREATION_PANEL:\n            return {\n                ...state,\n                open: false,\n            };\n        case ACTIONS.SEARCH_LABELS_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.SEARCH_LABELS_SUCCESS: {\n            const labelsData = {\n                ...action.data,\n                items: action.data.items,\n            };\n            return {\n                ...state,\n                loading: false,\n                searchResults: action.searchTerm\n                    ? action.data.items.map((label: Label) => label.id)\n                    : [],\n                data: labelsData,\n            };\n        }\n        case ACTIONS.SEARCH_LABELS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.FETCH_FULL_LABELS_LIST_START:\n            return {\n                ...state,\n            };\n        case ACTIONS.FETCH_FULL_LABELS_LIST_SUCCESS: {\n            const labelsData = {\n                ...action.data,\n                items: action.data.items,\n            };\n            return {\n                ...state,\n                fullList: labelsData,\n            };\n        }\n        case ACTIONS.FETCH_FULL_LABELS_LIST_FAILURE:\n            return {\n                ...state,\n                error: action.error,\n            };\n        case ACTIONS.TOGGLE_COLLAPSE_LABEL_FIELD: {\n            let newLabels = toggleItemInArray(\n                state.collapseLabels,\n                action.labelId\n            );\n            return {\n                ...state,\n                collapseLabels: newLabels,\n            };\n        }\n        case ACTIONS.TOGGLE_COLLAPSE_ASSIGN_LABEL_FIELD: {\n            let newLabels = toggleItemInArray(\n                state.collapseAssignLabels,\n                action.labelId\n            );\n            return {\n                ...state,\n                collapseAssignLabels: newLabels,\n            };\n        }\n        case ACTIONS.EXPAND_LABEL_FIELD_BY_ID: {\n            let newLabels = appendIfEmpty(state.collapseLabels, action.labelId);\n\n            return {\n                ...state,\n                collapseLabels: newLabels,\n            };\n        }\n        case ACTIONS.SELECT_LABEL_FILTER: {\n            let selectedLabels = toggleItemInArray(\n                state.selected,\n                action.labelId\n            );\n\n            return {\n                ...state,\n                selected: selectedLabels,\n                selectedModified: true,\n            };\n        }\n        case ACTIONS.CLEAR_LABEL_FILTERS: {\n            return {\n                ...state,\n                selected: [],\n                selectedModified: true,\n            };\n        }\n        case ACTIONS.SET_LABEL_FILTERS: {\n            return {\n                ...state,\n                selected: action.labels,\n            };\n        }\n        case ACTIONS.CLEAR_ASSIGN_LABELS: {\n            return {\n                ...state,\n                assignedLabels: [],\n            };\n        }\n        case ACTIONS.SET_ASSIGN_LABELS: {\n            return {\n                ...state,\n                assignedLabels: action.labels,\n            };\n        }\n        case ACTIONS.EXPAND_ALL_LABELS: {\n            if (!state.data) return state;\n            let newLabels = [\n                ...state.data.items\n                    .filter(\n                        (label: Label) =>\n                            label.id &&\n                            label.children &&\n                            label.children.length > 0\n                    )\n                    .map((label: Label) => label.id),\n            ];\n\n            return {\n                ...state,\n                collapseLabels: newLabels,\n            };\n        }\n        case ACTIONS.EXPAND_MULTIPLE_LABELS: {\n            return {\n                ...state,\n                collapseLabels: action.labelIds,\n            };\n        }\n        case ACTIONS.COLLAPSE_ALL_LABELS: {\n            return {\n                ...state,\n                collapseLabels: [],\n            };\n        }\n        case ACTIONS.COLLAPSE_ALL_TABLE_LABELS: {\n            return {\n                ...state,\n                collapseAssignLabels: [],\n            };\n        }\n        case ACTIONS.MODIFY_LABEL_NAME: {\n            if (!state.data) return state;\n            return {\n                ...state,\n                collapseLabels: [],\n            };\n        }\n        case ACTIONS.SAVE_LABEL_FILTERS_START: {\n            return {\n                ...state,\n                saveLoading: true,\n            };\n        }\n        case ACTIONS.SAVE_LABEL_FILTERS_SUCCESS: {\n            return {\n                ...state,\n                saveLoading: false,\n                selectedModified: false,\n            };\n        }\n        case ACTIONS.SAVE_LABEL_FILTERS_FAILURE: {\n            return {\n                ...state,\n                saveLoading: false,\n                error: action.error,\n            };\n        }\n        case ACTIONS.SET_PREVIOUSLY_ASSIGNED_LABELS: {\n            return {\n                ...state,\n                previouslyAssignedLabels: action.labels,\n            };\n        }\n        default:\n            return state;\n    }\n};\nconst initialLabelsConfigState: LabelsConfigState = {\n    searchTerm: '',\n};\ntype LabelsConfigAction =\n    | ReturnType<typeof setLabelsSearchTerm>\n    | ReturnType<typeof setEditingLabelAction>;\n\nexport const labelsConfigReducer: Reducer<\n    LabelsConfigState,\n    LabelsConfigAction\n> = (\n    state: LabelsConfigState = initialLabelsConfigState,\n    action: LabelsConfigAction\n): LabelsConfigState => {\n    switch (action.type) {\n        case ACTIONS.SET_LABELS_SEARCH_TERM:\n            return {\n                ...state,\n                searchTerm: action.value,\n            };\n        case ACTIONS.SET_EDITING_LABEL:\n            return {\n                ...state,\n                editingLabels: {\n                    id: action.configs && action.configs.id,\n                    mode: action.configs && action.configs.mode,\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nconst initialUpdatedLabelsState: UpdatedLabelsState = {};\ntype UpdatedLabelsAction =\n    | ReturnType<typeof updateLabelStart>\n    | ReturnType<typeof updateLabelSuccess>\n    | ReturnType<typeof updateLabelFailure>;\n\nexport const updatedLabelsReducer: Reducer<\n    UpdatedLabelsState,\n    UpdatedLabelsAction\n> = (\n    state: UpdatedLabelsState = initialUpdatedLabelsState,\n    action: UpdatedLabelsAction\n): UpdatedLabelsState => {\n    switch (action.type) {\n        case ACTIONS.UPDATE_LABEL_START:\n            return {\n                ...state,\n            };\n        case ACTIONS.UPDATE_LABEL_SUCCESS:\n            return {\n                ...state,\n                data: action.updatedLabel,\n                updateType: action.updateType,\n            };\n        case ACTIONS.UPDATE_LABEL_FAILURE:\n            return {\n                ...state,\n            };\n        default:\n            return state;\n    }\n};\n","import { SET_TOKEN } from './actions';\n\nexport interface AuthInterface {\n    token: string;\n}\n\nconst initialState: any = {\n    token: '',\n};\n\nexport const authReducer = (state = initialState, action: any) => {\n    switch (action.type) {\n        case SET_TOKEN:\n            return {\n                ...state,\n                token: action.token,\n            };\n        default:\n            return state;\n    }\n};\n","import { TelepromterState } from './state';\nimport { ScenarioStatuses } from '../../../constants/interfaces/Scenario';\nimport {\n    ACTIONS,\n    addGeneratedScriptLineAction,\n    fetchTelepromterScenarioFailure,\n    fetchTelepromterScenarioStart,\n    fetchTelepromterScenarioSuccess,\n    resetTelepromterAction,\n    setRecordedVideoAction,\n} from './actions';\n\nexport const initialTelepromterState: TelepromterState = {\n    scenario: {\n        title: '',\n        description: '',\n        instructions: '',\n        status: ScenarioStatuses.DRAFT,\n        script: {\n            totalDuration: null,\n            scenarioId: null,\n            companyId: null,\n            lines: [],\n        },\n    },\n    generatedLines: [],\n    loading: true,\n    error: '',\n};\n\ntype TelepromterActions =\n    | ReturnType<typeof fetchTelepromterScenarioStart>\n    | ReturnType<typeof fetchTelepromterScenarioSuccess>\n    | ReturnType<typeof fetchTelepromterScenarioFailure>\n    | ReturnType<typeof addGeneratedScriptLineAction>\n    | ReturnType<typeof setRecordedVideoAction>\n    | ReturnType<typeof resetTelepromterAction>;\n\nexport const telepromterReducer = (\n    state = initialTelepromterState,\n    action: TelepromterActions\n): TelepromterState => {\n    switch (action.type) {\n        case ACTIONS.FETCH_TELEPROMTER_SCENARIO_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.FETCH_TELEPROMTER_SCENARIO_SUCCESS:\n            return {\n                scenario: {\n                    ...state.scenario,\n                    ...action.data,\n                },\n                generatedLines: [],\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.FETCH_TELEPROMTER_SCENARIO_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.ADD_GENERATED_SCRIPT_LINE:\n            const generatedLines = [...state.generatedLines];\n            generatedLines.push(action.scriptLine);\n            return {\n                ...state,\n                generatedLines: generatedLines,\n            };\n        case ACTIONS.SET_RECORDED_VIDEO:\n            return {\n                ...state,\n                videoBlob: action.videoBlob,\n            };\n        case ACTIONS.RESET_TELEPROMTER:\n            return {\n                ...state,\n                generatedLines: [],\n                videoBlob: undefined,\n            };\n        default:\n            return state;\n    }\n};\n","import { Reducer } from 'redux';\nimport { AiLogsState } from './states';\nimport { ACTIONS, AiLogsActions } from './actions';\n\nexport const initialAiLogsState: AiLogsState = {\n    data: undefined,\n    error: null,\n    loading: false,\n    loadingFlag: false,\n};\n\nexport const aiLogsReducer: Reducer<AiLogsState, AiLogsActions> = (\n    state = initialAiLogsState,\n    action\n) => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_AI_LOGS_START:\n            return {\n                ...state,\n                loading: true,\n                error: null,\n            };\n        case ACTIONS.SEARCH_AI_LOGS_SUCCESS:\n            const prevItems = state.data && state.data.items;\n            return {\n                ...state,\n                data:\n                    !prevItems\n                        ? action.aiLogs\n                        : {\n                              ...action.aiLogs,\n                              items:  action.aiLogs.items,\n                                  \n                          },\n                loading: false,\n                error: null,\n            };\n        case ACTIONS.SEARCH_AI_LOGS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.SEARCH_AI_LOGS_DISPOSE:\n            return {\n                ...state,\n                data: undefined,\n                loading: false,\n                error: null,\n            };\n        case ACTIONS.UPDATE_AI_LOGS_FLAG_START:\n            return {\n                ...state,\n                loadingFlag: true,\n            };\n        case ACTIONS.UPDATE_AI_LOGS_FLAG_FAILURE:\n            return {\n                ...state,\n                loadingFlag: false,\n                error: action.error,\n            };\n            case ACTIONS.ADD_AI_LOGS_FLAG_SUCCESS: {\n                const { submissionId, flagId } = action;\n    \n                return state.data?.items.length\n                    ? {\n                          ...state,\n                          data: {\n                              ...state.data,\n                              items: state.data.items.map(item =>\n                                  item.id === submissionId\n                                      ? {\n                                            ...item,\n                                            flagCompanyId: flagId\n                                        }\n                                      : item\n                              ),\n                          },\n                          loadingFlag: false,\n                      }\n                    : {\n                          ...state,\n                          loadingFlag: false,\n                      };\n            }\n            case ACTIONS.DELETE_AI_LOGS_FLAG_SUCCESS: {\n                const { submissionId } = action;\n    \n                return state.data?.items.length\n                    ? {\n                          ...state,\n                          data: {\n                              ...state.data,\n                              items: state.data.items.map(item =>\n                                  item.id === submissionId\n                                      ? {\n                                            ...item,\n                                            flagCompanyId: undefined\n                                        }\n                                      : item\n                              ),\n                          },\n                          loadingFlag: false,\n                      }\n                    : {\n                          ...state,\n                          loadingFlag: false,\n                      };\n            }\n        default:\n            return state;\n    }\n};\n","import { compose, Reducer } from 'redux';\nimport * as EmailValidator from 'email-validator';\n\nimport { UpdatedDraftsState } from '../../../../features/users/store/states';\nimport {\n    ACTIONS,\n    modifyDraftUsersAction,\n    searchDraftUsersFailure,\n    searchDraftUsersStart,\n    searchDraftUsersSuccess,\n    updateDraftUsersStart,\n    updateDraftUsersSuccess,\n    updateDraftUsersFailure,\n    resetDraftsPageAction,\n    modifyDraftUsersWithoutValidationAction,\n} from './actions';\nimport { DraftEditBaseState, DraftEditState } from './states';\nimport {\n    withLabelsInitialState,\n    withLabelsReducer,\n} from '../../../../features/portableLabels/store/hors/withLabels';\nimport {\n    withPractisSetsInitialState,\n    withPractisSetsReducer,\n} from '../../../../features/portablePractisSets/store/hors/withPractisSets';\nimport {\n    withTeamsInitialState,\n    withTeamsReducer,\n} from '../../../../features/portableTeams/store/hors/withTeams';\n\nconst initialDraftEditState = withLabelsInitialState<DraftEditBaseState>(\n    withTeamsInitialState(\n        withPractisSetsInitialState(\n            {\n                loading: false,\n            },\n            'draftEdit'\n        ),\n        'draftEdit'\n    ),\n    'draftEdit'\n);\n\nexport type draftEditAction =\n    | ReturnType<typeof searchDraftUsersStart>\n    | ReturnType<typeof searchDraftUsersSuccess>\n    | ReturnType<typeof searchDraftUsersFailure>\n    | ReturnType<typeof modifyDraftUsersAction>\n    | ReturnType<typeof modifyDraftUsersWithoutValidationAction>\n    | ReturnType<typeof updateDraftUsersStart>\n    | ReturnType<typeof updateDraftUsersSuccess>\n    | ReturnType<typeof updateDraftUsersFailure>\n    | ReturnType<typeof resetDraftsPageAction>;\n\nexport const draftEditBaseReducer: Reducer<DraftEditState, draftEditAction> = (\n    state = initialDraftEditState,\n    action\n): DraftEditState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_DRAFT_USERS_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.SEARCH_DRAFT_USERS_SUCCESS:\n            const updatedDataItems =\n                action.data && action.data.items.length\n                    ? action.data.items.map((item, index) => {\n                          const isEmailDuplicated =\n                              !!item.email &&\n                              index < action.data.items.length - 1 &&\n                              action.data.items\n                                  .slice(index + 1)\n                                  .filter(user => user.email === item.email)\n                                  .length > 0;\n                          const isEmailInvalid =\n                              !!item.email &&\n                              !EmailValidator.validate(item.email);\n                          const isFirstNameInvalid = !item.firstName;\n                          const isLastNameInvalid = !item.firstName;\n                          const isRoleInvalid = !item.roleId;\n\n                          return {\n                              ...item,\n                              drafted: true,\n                              isEntryInvalid:\n                                  isEmailDuplicated ||\n                                  isEmailInvalid ||\n                                  isFirstNameInvalid ||\n                                  isLastNameInvalid ||\n                                  isRoleInvalid,\n                          };\n                      })\n                    : [];\n            return {\n                ...state,\n                data: {\n                    ...action.data,\n                    items: updatedDataItems,\n                },\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_DRAFT_USERS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.UPDATE_DRAFT_USERS_START:\n            return {\n                ...state,\n                loadingUpdate: true,\n            };\n        case ACTIONS.UPDATE_DRAFT_USERS_SUCCESS:\n            return {\n                ...state,\n                updateData: action.data,\n                updateType: action.updateType,\n                loadingUpdate: false,\n            };\n        case ACTIONS.UPDATE_DRAFT_USERS_FAILURE:\n            return {\n                ...state,\n                error: action.error,\n            };\n        case ACTIONS.MODIFY_DRAFT_USERS: {\n            const updatedDataItems =\n                action.data && action.data.items.length\n                    ? action.data.items.map((item, index) => {\n                          const isEmailDuplicated =\n                              !!item.email &&\n                              index < action.data.items.length - 1 &&\n                              action.data.items\n                                  .slice(index + 1)\n                                  .filter(user => user.email === item.email)\n                                  .length > 0;\n                          const isEmailInvalid =\n                              !!item.email &&\n                              !EmailValidator.validate(item.email);\n                          const isFirstNameInvalid = !item.firstName;\n                          const isLastNameInvalid = !item.firstName;\n                          const isRoleInvalid = !item.roleId;\n\n                          return {\n                              ...item,\n                              drafted: true,\n                              isEntryInvalid:\n                                  isEmailDuplicated ||\n                                  isEmailInvalid ||\n                                  isFirstNameInvalid ||\n                                  isLastNameInvalid ||\n                                  isRoleInvalid,\n                          };\n                      })\n                    : [];\n            return {\n                ...state,\n                data: {\n                    ...action.data,\n                    items: updatedDataItems,\n                },\n            };\n        }\n        case ACTIONS.MODIFY_DRAFT_USERS_WITHOUT_VALIDATION: {\n            return {\n                ...state,\n                data: {\n                    ...action.data,\n                    items: action.data ? action.data.items : [],\n                },\n            };\n        }\n        case ACTIONS.RESET_DRAFTS_PAGE: {\n            return {\n                ...state,\n                loading: false,\n                data: undefined,\n            };\n        }\n        default:\n            return state;\n    }\n};\n\nexport const draftEditReducer = compose<\n    Reducer<DraftEditState, draftEditAction>\n>(\n    withLabelsReducer({ reducerName: 'draftEdit' }),\n    withTeamsReducer({ reducerName: 'draftEdit' }),\n    withPractisSetsReducer({ reducerName: 'draftEdit' })\n)(draftEditBaseReducer);\n\nconst initialUpdatedDraftsState: UpdatedDraftsState = {};\n\nexport type updatedDraftsAction = ReturnType<typeof searchDraftUsersStart>;\n\nexport const updatedDraftsReducer: Reducer<\n    UpdatedDraftsState,\n    updatedDraftsAction\n> = (\n    state = initialUpdatedDraftsState,\n    action: updatedDraftsAction\n): UpdatedDraftsState => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n","import { Reducer } from 'redux';\nimport { PortableLabelsState, initialState } from './states';\nimport { PortableLabelsActions } from './actions';\n\nconst portableLabelsBaseReducer: Reducer<\n    PortableLabelsState,\n    PortableLabelsActions\n> = (\n    state = initialState,\n    action: PortableLabelsActions\n): PortableLabelsState => {\n    switch (action.type) {\n        case 'searchStartLabels':\n            return {\n                ...state,\n                loading: true,\n            };\n        case 'searchSuccessLabels':\n            return {\n                data: action.result,\n                loading: false,\n            };\n        case 'searchFailureLabels':\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n\nexport const portableLabelsReducer = portableLabelsBaseReducer;\n","import { Reducer } from 'redux';\nimport { UserRolesState } from './states';\nimport {\n    ACTIONS,\n    loadUserRolesFailure,\n    loadUserRolesStart,\n    loadUserRolesSuccess,\n} from './actions';\n\nconst initialState: UserRolesState = {\n    list: [],\n    loading: false,\n};\n\nexport type Action =\n    | ReturnType<typeof loadUserRolesStart>\n    | ReturnType<typeof loadUserRolesSuccess>\n    | ReturnType<typeof loadUserRolesFailure>;\n\nexport const userRolesReducer: Reducer<UserRolesState, Action> = (\n    state = initialState,\n    action: Action\n): UserRolesState => {\n    switch (action.type) {\n        case ACTIONS.LOAD_USER_ROLES_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.LOAD_USER_ROLES_SUCCESS: {\n            return {\n                list: action.data,\n                loading: false,\n            };\n        }\n        case ACTIONS.LOAD_USER_ROLES_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        default:\n            return state;\n    }\n};\n","import {\n    LibraryChallengesState,\n    LibraryPractisSetsState,\n    LibraryScenariosState,\n    UpdatedLibraryChallengesState,\n    UpdatedLibraryPractisSetsState,\n    UpdatedLibraryScenariosState,\n} from './states';\nimport { compose, Reducer } from 'redux';\nimport {\n    ACTIONS,\n    getFullLibraryPractisSetsFailure,\n    getFullLibraryPractisSetsStart,\n    getFullLibraryPractisSetsSuccess,\n    getTotalLibraryChallengesCountFailure,\n    getTotalLibraryChallengesCountStart,\n    getTotalLibraryChallengesCountSuccess,\n    searchLibraryChallengesFailure,\n    searchLibraryChallengesStart,\n    searchLibraryChallengesSuccess,\n    searchLibraryPractisSetsFailure,\n    searchLibraryPractisSetsStart,\n    searchLibraryPractisSetsSuccess,\n    searchLibraryScenariosFailure,\n    searchLibraryScenariosStart,\n    searchLibraryScenariosSuccess,\n    setSearchTermForLibraryPractisSet,\n    updateAllChallengesCheckedState,\n    updateAllPractisSetsCheckedState,\n    updateAllScenarioCheckedState,\n    updateAssignedLibraryPractisSet,\n    updateChallengeDeleteLabelSuccess,\n    updateLibraryChallengeCheckedState,\n    updateLibraryChallengeFailure,\n    updateLibraryChallengeStart,\n    updateLibraryChallengeSuccess,\n    updateLibraryPractisSetCheckedState,\n    updateLibraryPractisSetFailure,\n    updateLibraryPractisSetStart,\n    updateLibraryPractisSetSuccess,\n    updateLibraryScenarioCheckedState,\n    updateLibraryScenarioFailure,\n    updateLibraryScenarioStart,\n    updateLibraryScenarioSuccess,\n    updatePractisSetDeleteLabelSuccess,\n    updateScenarioDeleteLabelSuccess,\n    updateSeparateAssignedLibraryPractisSet,\n} from './actions';\nimport { Label } from '../../../constants/interfaces/Label';\nimport { PractisSets } from '../../../constants/interfaces/PractisSets';\nimport { Scenario } from '../../../constants/interfaces/Scenario';\nimport { Challenge } from '../../../constants/interfaces/Challenge';\nimport {\n    withLabelsInitialState,\n    withLabelsReducer,\n} from '../../portableLabels/store/hors/withLabels';\n\nconst initialLibraryPractisSetsState: LibraryPractisSetsState = withLabelsInitialState<\n    LibraryPractisSetsState\n>({}, 'libraryPractisSets');\n\nexport type LibraryPractisSetsAction =\n    | ReturnType<typeof searchLibraryPractisSetsStart>\n    | ReturnType<typeof searchLibraryPractisSetsSuccess>\n    | ReturnType<typeof searchLibraryPractisSetsFailure>\n    | ReturnType<typeof getFullLibraryPractisSetsStart>\n    | ReturnType<typeof getFullLibraryPractisSetsSuccess>\n    | ReturnType<typeof getFullLibraryPractisSetsFailure>\n    | ReturnType<typeof updateAssignedLibraryPractisSet>\n    | ReturnType<typeof updateSeparateAssignedLibraryPractisSet>\n    | ReturnType<typeof setSearchTermForLibraryPractisSet>\n    | ReturnType<typeof updateAllPractisSetsCheckedState>\n    | ReturnType<typeof updateLibraryPractisSetCheckedState>\n    | ReturnType<typeof updatePractisSetDeleteLabelSuccess>;\n\nconst libraryPractisSetsBaseReducer: Reducer = (\n    state = initialLibraryPractisSetsState,\n    action: LibraryPractisSetsAction\n): LibraryPractisSetsState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_SUCCESS:\n            const prevItems = state.data?.items;\n            return {\n                ...state,\n                data:\n                    !prevItems\n                        ? action.practisSets\n                        : {\n                              ...action.practisSets,\n                              items: action.practisSets.items,\n                                \n                          },\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LIBRARY_PRACTIS_SETS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_SUCCESS:\n            return {\n                ...state,\n                fullList: action.practisSets,\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.GET_FULL_LIBRARY_PRACTIS_SETS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.UPDATE_ASSIGNED_LIBRARY_PRACTIS_SET:\n            return {\n                ...state,\n                assignedPractisSets: action.assignedPractisSets,\n            };\n        case ACTIONS.UPDATE_SEPARATE_ASSIGNED_LIBRARY_PRACTIS_SET:\n            return {\n                ...state,\n                separateAssignedPractisSets: action.assignedPractisSets,\n            };\n        case ACTIONS.SET_SEARCH_TERM_FOR_LIBRARY_PRACTIS_SET:\n            return {\n                ...state,\n                searchTerm: action.value,\n            };\n        case ACTIONS.UPDATE_SELECTED_PRACTIS_SET_STATE:\n            const selectedIds = [...(state.selectedPractisSets || [])];\n\n            const selectedIdIndex = selectedIds.findIndex(\n                (item: number) => item === action.id\n            );\n            if (selectedIdIndex > -1) {\n                selectedIds.splice(selectedIdIndex, 1);\n            } else {\n                selectedIds.push(action.id);\n            }\n\n            return {\n                ...state,\n                selectedPractisSets: selectedIds,\n            };\n        case ACTIONS.UPDATE_ALL_SELECTED_PRACTIS_SETS_STATE:\n            return {\n                ...state,\n                selectedPractisSets:\n                    action.checked || action.partial\n                        ? action.selectedPractisSetIds\n                        : [],\n            };\n        case ACTIONS.UPDATE_PRACTIS_SET_DELETE_LABEL_SUCCESS:\n            return {\n                ...state,\n                data: {\n                    items: state.data.items.map((item: PractisSets) =>\n                        item.id === action.id\n                            ? {\n                                  ...item,\n                                  labels:\n                                      item.labels &&\n                                      item.labels.filter(\n                                          (label: Label) =>\n                                              label.id !== action.labelId\n                                      ),\n                              }\n                            : item\n                    ),\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nexport const libraryPractisSetsReducer = compose<\n    Reducer<LibraryPractisSetsState, any>\n>(withLabelsReducer({ reducerName: 'libraryPractisSets' }))(\n    libraryPractisSetsBaseReducer\n);\n\ntype UpdatedLibraryPractisSetsAction =\n    | ReturnType<typeof updateLibraryPractisSetStart>\n    | ReturnType<typeof updateLibraryPractisSetSuccess>\n    | ReturnType<typeof updateLibraryPractisSetFailure>;\n\nexport const updatedLibraryPractisSetsReducer: Reducer<\n    UpdatedLibraryPractisSetsState,\n    UpdatedLibraryPractisSetsAction\n> = (\n    state = {},\n    action: UpdatedLibraryPractisSetsAction\n): UpdatedLibraryPractisSetsState => {\n    switch (action.type) {\n        case ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_SUCCESS:\n            return {\n                ...state,\n                data: action.updatedPractisSet,\n                updateType: action.updateType,\n                loading: false,\n            };\n        case ACTIONS.UPDATE_LIBRARY_PRACTIS_SET_FAILURE:\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n\nconst initialLibraryScenariosState: LibraryScenariosState = withLabelsInitialState<\n    LibraryScenariosState\n>({}, 'libraryScenarios');\n\ntype LibraryScenariosAction =\n    | ReturnType<typeof searchLibraryScenariosStart>\n    | ReturnType<typeof searchLibraryScenariosSuccess>\n    | ReturnType<typeof searchLibraryScenariosFailure>\n    | ReturnType<typeof updateLibraryScenarioCheckedState>\n    | ReturnType<typeof updateAllScenarioCheckedState>\n    | ReturnType<typeof updateScenarioDeleteLabelSuccess>;\n\nconst libraryScenariosBaseReducer: Reducer = (\n    state = initialLibraryScenariosState,\n    action: LibraryScenariosAction\n): LibraryScenariosState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_LIBRARY_SCENARIOS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LIBRARY_SCENARIOS_SUCCESS:\n            return {\n                ...state,\n                data: action.scenarios,\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LIBRARY_SCENARIOS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.UPDATE_SELECTED_SCENARIO_STATE:\n            const selectedIds = [...(state.selectedScenarios || [])];\n\n            const selectedIdIndex = selectedIds.findIndex(\n                (item: number) => item === action.id\n            );\n            if (selectedIdIndex > -1) {\n                selectedIds.splice(selectedIdIndex, 1);\n            } else {\n                selectedIds.push(action.id);\n            }\n\n            return {\n                ...state,\n                selectedScenarios: selectedIds,\n            };\n        case ACTIONS.UPDATE_ALL_SELECTED_SCENARIOS_STATE:\n            return {\n                ...state,\n                selectedScenarios:\n                    action.checked || action.partial\n                        ? action.selectedScenarioIds\n                        : [],\n            };\n        case ACTIONS.UPDATE_SCENARIOS_DELETE_LABEL_SUCCESS:\n            return {\n                ...state,\n                data: {\n                    items: state.data.items.map((item: Scenario) =>\n                        item.id === action.id\n                            ? {\n                                  ...item,\n                                  labels:\n                                      item.labels &&\n                                      item.labels.filter(\n                                          (label: Label) =>\n                                              label.id !== action.labelId\n                                      ),\n                              }\n                            : item\n                    ),\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nexport const libraryScenariosReducer = compose<\n    Reducer<LibraryScenariosState, any>\n>(withLabelsReducer({ reducerName: 'libraryScenarios' }))(\n    libraryScenariosBaseReducer\n);\n\ntype UpdatedLibraryScenariosAction =\n    | ReturnType<typeof updateLibraryScenarioStart>\n    | ReturnType<typeof updateLibraryScenarioSuccess>\n    | ReturnType<typeof updateLibraryScenarioFailure>;\n\nexport const updatedLibraryScenariosReducer: Reducer<\n    UpdatedLibraryScenariosState,\n    UpdatedLibraryScenariosAction\n> = (\n    state = {},\n    action: UpdatedLibraryScenariosAction\n): UpdatedLibraryScenariosState => {\n    switch (action.type) {\n        case ACTIONS.UPDATE_LIBRARY_SCENARIO_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.UPDATE_LIBRARY_SCENARIO_SUCCESS:\n            return {\n                ...state,\n                data: action.updatedScenario,\n                updateType: action.updateType,\n                loading: false,\n            };\n        case ACTIONS.UPDATE_LIBRARY_SCENARIO_FAILURE:\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n\nconst initialLibraryChallengesState: LibraryChallengesState = withLabelsInitialState<\n    LibraryChallengesState\n>({}, 'libraryChallenges');\n\ntype LibraryChallengesAction =\n    | ReturnType<typeof searchLibraryChallengesStart>\n    | ReturnType<typeof searchLibraryChallengesSuccess>\n    | ReturnType<typeof searchLibraryChallengesFailure>\n    | ReturnType<typeof getTotalLibraryChallengesCountStart>\n    | ReturnType<typeof getTotalLibraryChallengesCountSuccess>\n    | ReturnType<typeof getTotalLibraryChallengesCountFailure>\n    | ReturnType<typeof updateLibraryChallengeCheckedState>\n    | ReturnType<typeof updateAllChallengesCheckedState>\n    | ReturnType<typeof updateChallengeDeleteLabelSuccess>;\n\nconst libraryChallengesBaseReducer: Reducer = (\n    state = initialLibraryChallengesState,\n    action: LibraryChallengesAction\n): LibraryChallengesState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_LIBRARY_CHALLENGES_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LIBRARY_CHALLENGES_SUCCESS:\n            return {\n                ...state,\n                data: action.challenges,\n                loading: false,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LIBRARY_CHALLENGES_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_START:\n            return {\n                ...state,\n            };\n        case ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_SUCCESS:\n            return {\n                ...state,\n                totalCount: action.challenges.totalCount,\n            };\n        case ACTIONS.GET_TOTAL_LIBRARY_CHALLENGES_COUNT_FAILURE:\n            return {\n                ...state,\n                error: action.error,\n            };\n        case ACTIONS.UPDATE_SELECTED_CHALLENGE_STATE:\n            const selectedIds = [...(state.selectedChallenges || [])];\n\n            const selectedIdIndex = selectedIds.findIndex(\n                (item: number) => item === action.id\n            );\n            if (selectedIdIndex > -1) {\n                selectedIds.splice(selectedIdIndex, 1);\n            } else {\n                selectedIds.push(action.id);\n            }\n\n            return {\n                ...state,\n                selectedChallenges: selectedIds,\n            };\n        case ACTIONS.UPDATE_ALL_SELECTED_CHALLENGES_STATE:\n            return {\n                ...state,\n                selectedChallenges:\n                    action.checked || action.partial\n                        ? action.selectedChallengeIds\n                        : [],\n            };\n        case ACTIONS.UPDATE_CHALLENGES_DELETE_LABEL_SUCCESS:\n            return {\n                ...state,\n                data: {\n                    items: state.data.items.map((item: Challenge) =>\n                        item.id === action.id\n                            ? {\n                                  ...item,\n                                  labels:\n                                      item.labels &&\n                                      item.labels.filter(\n                                          (label: Label) =>\n                                              label.id !== action.labelId\n                                      ),\n                              }\n                            : item\n                    ),\n                },\n            };\n        default:\n            return state;\n    }\n};\n\nexport const libraryChallengesReducer = compose<\n    Reducer<LibraryChallengesState, any>\n>(withLabelsReducer({ reducerName: 'libraryChallenges' }))(\n    libraryChallengesBaseReducer\n);\n\ntype UpdatedLibraryChallengesAction =\n    | ReturnType<typeof updateLibraryChallengeStart>\n    | ReturnType<typeof updateLibraryChallengeSuccess>\n    | ReturnType<typeof updateLibraryChallengeFailure>;\n\nexport const updatedLibraryChallengesReducer: Reducer<\n    UpdatedLibraryChallengesState,\n    UpdatedLibraryChallengesAction\n> = (\n    state = {},\n    action: UpdatedLibraryChallengesAction\n): UpdatedLibraryChallengesState => {\n    switch (action.type) {\n        case ACTIONS.UPDATE_LIBRARY_CHALLENGES_START:\n            return {\n                ...state,\n                loading: true,\n            };\n        case ACTIONS.UPDATE_LIBRARY_CHALLENGES_SUCCESS:\n            return {\n                ...state,\n                data: action.updatedChallenge,\n                updateType: action.updateType,\n                loading: false,\n            };\n        case ACTIONS.UPDATE_LIBRARY_CHALLENGES_FAILURE:\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n","import { combineReducers } from 'redux';\r\nimport userProfileReducer, {\r\n    UserProfileState,\r\n} from '../../pages/UserProfile/store/reducers';\r\nimport companyProfileReducer, {\r\n    CompanyProfileInterface,\r\n    companyVoiceSettingsReducer,\r\n    companyAdminsReducer,\r\n    companyUserStatsReducer,\r\n} from '../../pages/CompanySettings/store/reducers';\r\nimport {\r\n    allUsersReducer,\r\n    AllUsersInterface,\r\n    userReducer,\r\n    invitationsReducer,\r\n    updateInvitationsReducer,\r\n    userPerformanceReducer,\r\n    updatedUserReducer,\r\n    updatedUserPractisSetsReducer,\r\n    draftsReducer,\r\n    updatedDraftsReducer,\r\n    userFeaturesReducer,\r\n    UserState,\r\n    userPreferencesReducer,\r\n} from '../../features/users/store/reducers';\r\nimport { USER_LOGOUT } from '../../pages/Auth/store/actions';\r\nimport {\r\n    AllCompaniesInterface,\r\n    allCompaniesReducer,\r\n} from '../../features/companies/store/reducers';\r\nimport {\r\n    ScenarioInterface,\r\n    scenarioReducer,\r\n} from '../../pages/ActionPages/NewScenario/store/reducers';\r\nimport globalReducers, { GlobalReducerInterface } from './globals';\r\nimport {\r\n    PractisSetInterface,\r\n    practisSetReducer,\r\n} from '../../pages/ActionPages/PractisSets/store/reducers';\r\nimport {\r\n    AssignUsersState,\r\n    PractisSetsTrainingState,\r\n    ProgressState,\r\n    UpdateMembersState,\r\n} from '../../features/teams/store/states';\r\nimport {\r\n    assignUsersReducer,\r\n    progressReducer,\r\n    trainerPractisSetsReducer,\r\n    updatedMemberReducer,\r\n} from '../../features/teams/store/reducers';\r\nimport { PacingsState } from '../../features/pacings/store/states';\r\nimport { pacingsReducer } from '../../features/pacings/store/reducers';\r\nimport { VoiceGenerationState } from '../../features/textToSpeech/store/states';\r\nimport { voiceGenerationReducer } from '../../features/textToSpeech/store/reducers';\r\nimport {\r\n    DraftsState,\r\n    InvitationsState,\r\n    UpdatedDraftsState,\r\n    UpdatedUserPractisSetsState,\r\n    UpdateInvitationState,\r\n    UpdateUsersState,\r\n    UserPerformanceState,\r\n    UserFeaturesState,\r\n    UserPreferencesState,\r\n} from '../../features/users/store/states';\r\nimport {\r\n    AudioInterface,\r\n    audioReducer,\r\n} from '../../features/player/store/reducers';\r\nimport { ChallengeState } from '../../features/challenges/store/states';\r\nimport { challengeReducer } from '../../features/challenges/store/reducers';\r\nimport {\r\n    AccuracyScoreState,\r\n    SubmissionDetailsState,\r\n    SubmissionsState,\r\n    SubmissionPaginationState,\r\n    UpdatedSubmissionsState,\r\n} from '../../features/submissions/store/states';\r\nimport {\r\n    accuracyScoreReducer,\r\n    submissionPaginationReducer,\r\n    submissionDetailsReducer,\r\n    submissionsReducer,\r\n    updatedSubmissionsReducer,\r\n} from '../../features/submissions/store/reducers';\r\nimport {\r\n    CompanyVoiceSettingsState,\r\n    CompanyAdminsState,\r\n    CompanyUserStatsState,\r\n} from '../../pages/CompanySettings/store/states';\r\nimport {\r\n    LabelsConfigState,\r\n    LabelsState,\r\n    UpdatedLabelsState,\r\n} from '../../features/labels/store/states';\r\nimport {\r\n    labelsConfigReducer,\r\n    labelsReducer,\r\n    updatedLabelsReducer,\r\n} from '../../features/labels/store/reducers';\r\nimport { logsReducer } from '../../features/logs/store/reducers';\r\nimport { LogsState } from '../../features/logs/store/states';\r\nimport { AuthInterface, authReducer } from '../../pages/Auth/store/reducers';\r\nimport { TelepromterState } from '../../features/telepromter/store/state';\r\nimport { telepromterReducer } from '../../features/telepromter/store/reducers';\r\nimport { aiLogsReducer } from '../../features/assessment-logs/store/reducers';\r\nimport { AiLogsState } from '../../features/assessment-logs/store/states';\r\nimport { DraftEditState } from '../../pages/ActionPages/NewUser/store/states';\r\nimport { draftEditReducer } from '../../pages/ActionPages/NewUser/store/reducers';\r\nimport {\r\n    allTeamsReducer,\r\n    teamEditReducer,\r\n    teamMembersReducer,\r\n    updatedTeamReducer,\r\n} from '../../features/teams/store/reducers';\r\nimport {\r\n    TeamMembersState,\r\n    TeamEditState,\r\n    TeamsState,\r\n    UpdateTeamsState,\r\n} from '../../features/teams/store/states';\r\nimport { portableLabelsReducer } from '../../features/portableLabels/store/reducer';\r\nimport { PortableLabelsState } from '../../features/portableLabels/store/states';\r\nimport { portableTeamsReducer } from '../../features/portableTeams/store/reducer';\r\nimport { PortableTeamsState } from '../../features/portableTeams/store/states';\r\nimport { UserRolesState } from '../../features/roles/store/states';\r\nimport { PortableScenariosState } from '../../features/portableScenarios/store/states';\r\nimport { SocketProgressReducer } from '../../features/socketProgress(api1)/store/reducer';\r\nimport { SocketProgressStateInterface } from '../../features/socketProgress(api1)/store/states';\r\nimport { userRolesReducer } from '../../features/roles/store/reducer';\r\nimport { PortablePractisSetsState } from '../../features/portablePractisSets/store/states';\r\nimport { portablePractisSetsReducer } from '../../features/portablePractisSets/store/reducer';\r\nimport {\r\n    LibraryChallengesState,\r\n    LibraryPractisSetsState,\r\n    LibraryScenariosState,\r\n    UpdatedLibraryChallengesState,\r\n    UpdatedLibraryPractisSetsState,\r\n    UpdatedLibraryScenariosState,\r\n} from '../../features/library/store/states';\r\nimport {\r\n    libraryChallengesReducer,\r\n    libraryPractisSetsReducer,\r\n    libraryScenariosReducer,\r\n    updatedLibraryChallengesReducer,\r\n    updatedLibraryPractisSetsReducer,\r\n    updatedLibraryScenariosReducer,\r\n} from '../../features/library/store/reducers';\r\nimport { InvitersState } from '../../features/inviters/store/states';\r\nimport { invitersReducer } from '../../features/inviters/store/reducers';\r\nimport { portableScenariosReducer } from '../../features/portableScenarios/store/reducer';\r\nimport { SearchStateReducer } from '../../features/searchState/store/reducer';\r\nimport { SearchStateInterface } from '../../features/searchState/store/states';\r\nimport { SecondarySearchStateInterface } from '../../features/searchState/store/states';\r\nimport { secondarySearchStateReducer } from '../../features/searchState/store/reducer';\r\nimport { ErrorMessagesInterface } from '../../ui/components/ErrorMessages/ErrorMessages';\r\nimport messageReducer from '../../ui/components/ErrorMessages/store/reducers';\r\nimport { ModalDialogInterface } from '../../ui/components/ModalDialogs/store/types';\r\nimport modalDialogsReducer from '../../ui/components/ModalDialogs/store/reducers';\r\nimport chunkServiceReducer from '../../services/ChunkRequestService/store/reducers';\r\nimport { ChunkServiceInterface } from '../../services/ChunkRequestService/store/types';\r\nimport { reportsReducer } from '../../pages/Reports/store/reducers';\r\nimport { ReportsState } from '../../pages/Reports/store/states';\r\nimport { SingleTeamFilterState } from '../../features/filters/dynamic-filter/single-team-filter/store/types';\r\nimport { singleTeamFilterReducer } from '../../features/filters/dynamic-filter/single-team-filter/store/reducers';\r\nimport { PractisSetFilterState } from '../../features/filters/dynamic-filter/practis-set-filter/store/types';\r\nimport { practisSetFilterReducer } from '../../features/filters/dynamic-filter/practis-set-filter/store/reducers';\r\nimport { overdueLearnersReducer } from '../../features/teams/pages/OverdueLearners/store/reducers';\r\nimport { MultipleTeamsFilterState } from '../../features/filters/dynamic-filter/multiple-teams-filter/store/types';\r\nimport { multipleTeamsFilterReducer } from '../../features/filters/dynamic-filter/multiple-teams-filter/store/reducers';\r\nimport { labelsFilterReducer } from '../../features/filters/dynamic-filter/labels-filter/store/reducers';\r\nimport { LabelsFilterState } from '../../features/filters/dynamic-filter/labels-filter/store/types';\r\nimport { OverdueLearnersState } from '../../features/teams/pages/OverdueLearners/store/states';\r\nimport { SearchableFilterHeaderState } from '../../features/filters/searchable-filter-header/store/types';\r\nimport { filterHeaderReducer } from '../../features/filters/searchable-filter-header/store/reducers';\r\nimport { MonthFilterState } from '../../features/filters/dynamic-filter/month-filter/store/types';\r\nimport { monthFilterReducer } from '../../features/filters/dynamic-filter/month-filter/store/reducers';\r\nimport { ScenarioRepsState } from '../../features/teams/pages/Training/ScenarioReps/store/states';\r\nimport { scenarioRepsReducer } from '../../features/teams/pages/Training/ScenarioReps/store/reducers';\r\nimport { DateRangeFilterState } from '../../features/filters/dynamic-filter/date-filter/store/types';\r\nimport { dateRangeFilterReducer } from '../../features/filters/dynamic-filter/date-filter/store/reducers';\r\nimport { RoleplaysState } from '../../pages/Roleplays/RoleplaysList/store/states';\r\nimport { roleplaysReducer } from '../../pages/Roleplays/RoleplaysList/store/reducers';\r\nimport { RoleplayState } from '../../pages/Roleplays/RoleplayPage/store/states';\r\nimport { roleplayReducer } from '../../pages/Roleplays/RoleplayPage/store/reducers';\r\n\r\nexport interface AppState {\r\n    profile: UserProfileState;\r\n    companies: AllCompaniesInterface;\r\n    company: CompanyProfileInterface;\r\n    chunkService: ChunkServiceInterface;\r\n    users: AllUsersInterface;\r\n    auth: AuthInterface;\r\n    updatedUsers: UpdateUsersState;\r\n    updatedMembers: UpdateMembersState;\r\n    updatedTeams: UpdateTeamsState;\r\n    invitations: InvitationsState;\r\n    performance: UserPerformanceState;\r\n    updatedUserPractisSets: UpdatedUserPractisSetsState;\r\n    updatedInvitations: UpdateInvitationState;\r\n    user: UserState;\r\n    scenario: ScenarioInterface;\r\n    challenge: ChallengeState;\r\n    practisSet: PractisSetInterface;\r\n    player: AudioInterface;\r\n    messages: ErrorMessagesInterface;\r\n    modalDialogs: ModalDialogInterface;\r\n    libraryPractisSets: LibraryPractisSetsState;\r\n    libraryUpdatedPractisSets: UpdatedLibraryPractisSetsState;\r\n    libraryScenarios: LibraryScenariosState;\r\n    libraryUpdatedScenarios: UpdatedLibraryScenariosState;\r\n    libraryChallenges: LibraryChallengesState;\r\n    libraryUpdatedChallenges: UpdatedLibraryChallengesState;\r\n    global: GlobalReducerInterface;\r\n    progress: ProgressState;\r\n    assignUsers: AssignUsersState;\r\n    inviters: InvitersState;\r\n    pacings: PacingsState;\r\n    submissions: SubmissionsState;\r\n    submissionDetails: SubmissionDetailsState;\r\n    submissionPagination: SubmissionPaginationState;\r\n    accuracyscore: AccuracyScoreState;\r\n    updatedSubmissions: UpdatedSubmissionsState;\r\n    voiceGeneration: VoiceGenerationState;\r\n    companyVoiceSettings: CompanyVoiceSettingsState;\r\n    labels: LabelsState;\r\n    labelsConfig: LabelsConfigState;\r\n    portableLabels: PortableLabelsState;\r\n    portableTeams: PortableTeamsState;\r\n    portablePractisSets: PortablePractisSetsState;\r\n    updatedLabels: UpdatedLabelsState;\r\n    logs: LogsState;\r\n    telepromter: TelepromterState;\r\n    aiLogs: AiLogsState;\r\n    drafts: DraftsState;\r\n    draftEdit: DraftEditState;\r\n    updatedDrafts: UpdatedDraftsState;\r\n    teams: TeamsState;\r\n    teamMembers: TeamMembersState;\r\n    teamEdit: TeamEditState;\r\n    practisSetsTraining: PractisSetsTrainingState;\r\n    roles: UserRolesState;\r\n    portableScenarios: PortableScenariosState;\r\n    socketProgress: SocketProgressStateInterface;\r\n    searchState: SearchStateInterface;\r\n    secondarySearchState: SecondarySearchStateInterface;\r\n    userFeatures: UserFeaturesState;\r\n    companyAdmins: CompanyAdminsState;\r\n    companyUserStats: CompanyUserStatsState;\r\n    userPreferences: UserPreferencesState;\r\n    reports: ReportsState;\r\n    roleplays: RoleplaysState;\r\n    roleplay: RoleplayState;\r\n    singleTeamFilterReducer: SingleTeamFilterState;\r\n    practisSetFilterReducer: PractisSetFilterState;\r\n    multipleTeamsFilter: MultipleTeamsFilterState;\r\n    labelsFilter: LabelsFilterState;\r\n    overdueLearners: OverdueLearnersState;\r\n    filterHeader: SearchableFilterHeaderState;\r\n    monthFilter: MonthFilterState;\r\n    scenarioReps: ScenarioRepsState;\r\n    dateRange: DateRangeFilterState;\r\n}\r\n\r\nconst appReducer = combineReducers<AppState>({\r\n    profile: userProfileReducer,\r\n    companies: allCompaniesReducer,\r\n    company: companyProfileReducer,\r\n    users: allUsersReducer,\r\n    auth: authReducer,\r\n    updatedUsers: updatedUserReducer,\r\n    updatedMembers: updatedMemberReducer,\r\n    updatedTeams: updatedTeamReducer,\r\n    user: userReducer,\r\n    invitations: invitationsReducer,\r\n    performance: userPerformanceReducer,\r\n    updatedInvitations: updateInvitationsReducer,\r\n    updatedUserPractisSets: updatedUserPractisSetsReducer,\r\n    scenario: scenarioReducer,\r\n    challenge: challengeReducer,\r\n    practisSet: practisSetReducer,\r\n    player: audioReducer,\r\n    messages: messageReducer,\r\n    modalDialogs: modalDialogsReducer,\r\n    chunkService: chunkServiceReducer,\r\n    libraryPractisSets: libraryPractisSetsReducer,\r\n    libraryUpdatedPractisSets: updatedLibraryPractisSetsReducer,\r\n    libraryScenarios: libraryScenariosReducer,\r\n    libraryUpdatedScenarios: updatedLibraryScenariosReducer,\r\n    libraryChallenges: libraryChallengesReducer,\r\n    libraryUpdatedChallenges: updatedLibraryChallengesReducer,\r\n    global: globalReducers,\r\n    progress: progressReducer,\r\n    assignUsers: assignUsersReducer,\r\n    inviters: invitersReducer,\r\n    pacings: pacingsReducer,\r\n    submissions: submissionsReducer,\r\n    submissionDetails: submissionDetailsReducer,\r\n    submissionPagination: submissionPaginationReducer,\r\n    accuracyscore: accuracyScoreReducer,\r\n    updatedSubmissions: updatedSubmissionsReducer,\r\n    voiceGeneration: voiceGenerationReducer,\r\n    companyVoiceSettings: companyVoiceSettingsReducer,\r\n    labels: labelsReducer,\r\n    labelsConfig: labelsConfigReducer,\r\n    portableLabels: portableLabelsReducer,\r\n    portableTeams: portableTeamsReducer,\r\n    portablePractisSets: portablePractisSetsReducer,\r\n    updatedLabels: updatedLabelsReducer,\r\n    logs: logsReducer,\r\n    telepromter: telepromterReducer,\r\n    drafts: draftsReducer,\r\n    draftEdit: draftEditReducer,\r\n    updatedDrafts: updatedDraftsReducer,\r\n    aiLogs: aiLogsReducer,\r\n    teams: allTeamsReducer,\r\n    teamMembers: teamMembersReducer,\r\n    teamEdit: teamEditReducer,\r\n    practisSetsTraining: trainerPractisSetsReducer,\r\n    roles: userRolesReducer,\r\n    portableScenarios: portableScenariosReducer,\r\n    socketProgress: SocketProgressReducer,\r\n    searchState: SearchStateReducer,\r\n    secondarySearchState: secondarySearchStateReducer,\r\n    userFeatures: userFeaturesReducer,\r\n    companyAdmins: companyAdminsReducer,\r\n    companyUserStats: companyUserStatsReducer,\r\n    userPreferences: userPreferencesReducer,\r\n    reports: reportsReducer,\r\n    roleplays: roleplaysReducer,\r\n    roleplay: roleplayReducer,\r\n    singleTeamFilterReducer: singleTeamFilterReducer,\r\n    practisSetFilterReducer: practisSetFilterReducer,\r\n    multipleTeamsFilter: multipleTeamsFilterReducer,\r\n    labelsFilter: labelsFilterReducer,\r\n    overdueLearners: overdueLearnersReducer,\r\n    filterHeader: filterHeaderReducer,\r\n    monthFilter: monthFilterReducer,\r\n    scenarioReps: scenarioRepsReducer,\r\n    dateRange: dateRangeFilterReducer\r\n});\r\n\r\nconst rootReducer = (state: AppState | undefined, action: any) => {\r\n    if (action.type === USER_LOGOUT) {\r\n        state = undefined;\r\n    }\r\n\r\n    return appReducer(state, action);\r\n};\r\n\r\nexport default rootReducer;","import { CompanyInterface } from '../../../constants/interfaces/Company';\nimport {\n    SEARCH_ALL_COMPANIES_START,\n    SEARCH_ALL_COMPANIES_SUCCESS,\n    SEARCH_ALL_COMPANIES_FAILURE,\n    FETCH_ACTIVE_COMPANIES_START,\n    FETCH_ACTIVE_COMPANIES_SUCCESS,\n    FETCH_ACTIVE_COMPANIES_FAILURE,\n} from './actions';\nimport { ListResult } from \"../../../constants/interfaces/PaginationResult\";\n\nexport interface AllCompaniesInterface {\n    allCompanies?: ListResult<CompanyInterface>;\n    loadingAllCompanies?: boolean;\n    errorAllCompanies?: string;\n    activeCompanies?: ListResult<CompanyInterface>;\n    isActiveCompaniesLoading?: boolean;\n    activeCompaniesError?: string;\n}\n\nexport const allCompaniesReducer = (state = {}, action: any) => {\n    switch (action.type) {\n        case SEARCH_ALL_COMPANIES_START:\n            return {\n                ...state,\n                errorAllCompanies: '',\n                loadingAllCompanies: true,\n            };\n        case SEARCH_ALL_COMPANIES_SUCCESS:\n            return {\n                ...state,\n                allCompanies: action.data,\n                errorAllCompanies: '',\n                loadingAllCompanies: false,\n            };\n        case SEARCH_ALL_COMPANIES_FAILURE:\n            return {\n                ...state,\n                errorAllCompanies: action.error,\n                loadingAllCompanies: false,\n            };\n        case FETCH_ACTIVE_COMPANIES_START:\n            return {\n                ...state,\n                isActiveCompaniesLoading: true,\n                activeCompaniesError: undefined,\n            };\n        case FETCH_ACTIVE_COMPANIES_SUCCESS:\n            return {\n                activeCompanies: action.data,\n                isActiveCompaniesLoading: false,\n                activeCompaniesError: undefined,\n            };\n        case FETCH_ACTIVE_COMPANIES_FAILURE:\n            return {\n                ...state,\n                isActiveCompaniesLoading: false,\n                activeCompaniesError: action.error,\n            };\n        default:\n            return state;\n    }\n};\n","import { Reducer } from 'redux';\nimport { PortableTeamsState, initialState } from './states';\nimport { PortableTeamsActions } from './actions';\n\nexport const portableTeamsReducer: Reducer<\n    PortableTeamsState,\n    PortableTeamsActions\n> = (\n    state = initialState,\n    action: PortableTeamsActions\n): PortableTeamsState => {\n    switch (action.type) {\n        case 'searchStartTeams':\n            return {\n                ...state,\n                loading: true,\n            };\n        case 'searchSuccessTeams':\n            return {\n                data: action.result,\n                loading: false,\n            };\n        case 'searchFailureTeams':\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n","import { Reducer } from 'redux';\nimport { PortablePractisSetsState, initialState } from './states';\nimport { PortablePractisSetsActions } from './actions';\n\nexport const portablePractisSetsReducer: Reducer<\n    PortablePractisSetsState,\n    PortablePractisSetsActions\n> = (\n    state = initialState,\n    action: PortablePractisSetsActions\n): PortablePractisSetsState => {\n    switch (action.type) {\n        case 'searchStartPractisSets':\n            return {\n                ...state,\n                loading: true,\n            };\n        case 'searchSuccessPractisSets':\n            return {\n                data: action.result,\n                loading: false,\n            };\n        case 'searchFailurePractisSets':\n            return {\n                ...state,\n                loading: false,\n            };\n        default:\n            return state;\n    }\n};\n","import { Reducer } from 'redux';\nimport {\n    ACTIONS,\n    searchLogsDispose,\n    searchLogsFailure,\n    searchLogsStart,\n    searchLogsSuccess,\n} from './actions';\nimport { LogsState } from './states';\n\ntype CompaniesAction =\n    | ReturnType<typeof searchLogsStart>\n    | ReturnType<typeof searchLogsSuccess>\n    | ReturnType<typeof searchLogsFailure>\n    | ReturnType<typeof searchLogsDispose>;\n\nexport const logsReducer: Reducer<LogsState, CompaniesAction> = (\n    state = {},\n    action\n): LogsState => {\n    switch (action.type) {\n        case ACTIONS.SEARCH_LOGS_START:\n            return {\n                ...state,\n                loading: true,\n                error: '',\n            };\n        case ACTIONS.SEARCH_LOGS_SUCCESS: {\n            const prevItems = state.data && state.data.items;\n            return {\n                data:\n                    action.logs.offset === 0 || !prevItems\n                        ? action.logs\n                        : {\n                              ...action.logs,\n                              items: action.logs.items,\n                                  \n                          },\n                loading: false,\n                error: '',\n            };\n        }\n        case ACTIONS.SEARCH_LOGS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.error,\n            };\n        case ACTIONS.SEARCH_LOGS_DISPOSE: {\n            return {\n                data: undefined,\n                loading: false,\n                error: '',\n            };\n        }\n        default:\n            return state;\n    }\n};\n","import { Reducer } from 'redux';\nimport { PortableScenariosState, initialState } from './states';\nimport { PortableScenariosActions } from './actions';\n\nexport const portableScenariosReducer: Reducer<\nPortableScenariosState,\n    PortableScenariosActions\n> = (\n    state = initialState,\n    action: PortableScenariosActions\n): PortableScenariosState => {\n    switch (action.type) {\n        case 'searchStartScenarios':\n            return {\n                ...state,\n                loading: true,\n            };\n        case 'searchSuccessScenarios':\n            return {\n                data: action.result,\n                loading: false,\n            };\n        case 'searchFailureScenarios':\n            return {\n                ...state,\n                loading: false,\n            };\n        case 'clearPortableScenarios':\n            return {\n                ...initialState,\n            };\n        default:\n            return state;\n    }\n};\n","import {\n    ACTIONS,\n    getReportsFailure,\n    getReportsStart,\n    getReportsSuccess\n} from './actions';\nimport { ReportsState } from './states';\n\ntype ReportsActions =\n    | ReturnType<typeof getReportsStart>\n    | ReturnType<typeof getReportsSuccess>\n    | ReturnType<typeof getReportsFailure>;\n\nexport const reportsReducer = (\n    state = { isLoading: false },\n    action: ReportsActions\n): ReportsState => {\n    switch(action.type) {\n        case ACTIONS.GET_REPORTS_START:\n            return {\n                ...state,\n                isLoading: true\n            };\n        case ACTIONS.GET_REPORTS_SUCCESS:\n            return {\n                isLoading: false,\n                data: action.data,\n                error: ''\n            };\n        case ACTIONS.GET_REPORTS_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error\n            };\n        default:\n            return state;\n    }\n}","import {\n    ACTIONS,\n    getRoleplaysFailure,\n    getRoleplaysStart,\n    getRoleplaysSuccess\n} from './actions';\nimport { RoleplaysState } from './states';\n\ntype RoleplaysActions =\n    | ReturnType<typeof getRoleplaysStart>\n    | ReturnType<typeof getRoleplaysSuccess>\n    | ReturnType<typeof getRoleplaysFailure>;\n\nexport const roleplaysReducer = (\n    state = { isLoading: false },\n    action: RoleplaysActions\n): RoleplaysState => {\n    switch(action.type) {\n        case ACTIONS.GET_ROLEPLAYS_START:\n            return {\n                ...state,\n                isLoading: true\n            };\n        case ACTIONS.GET_ROLEPLAYS_SUCCESS:\n            return {\n                isLoading: false,\n                data: action.data,\n                error: ''\n            };\n        case ACTIONS.GET_ROLEPLAYS_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error\n            };\n        default:\n            return state;\n    }\n}","import {\n    ACTIONS,\n    getRoleplayFailure,\n    getRoleplayStart,\n    getRoleplaySuccess,\n    updateRoleplayStart,\n    updateRoleplaySuccess,\n    updateRoleplayFailure,\n    clearRoleplay\n} from './actions';\nimport { RoleplayState } from './states';\n\ntype RoleplayActions =\n    | ReturnType<typeof getRoleplayStart>\n    | ReturnType<typeof getRoleplaySuccess>\n    | ReturnType<typeof getRoleplayFailure>\n    | ReturnType<typeof updateRoleplayStart>\n    | ReturnType<typeof updateRoleplaySuccess>\n    | ReturnType<typeof updateRoleplayFailure>\n    | ReturnType<typeof clearRoleplay>;\n\nexport const roleplayReducer = (\n    state = { isLoading: false },\n    action: RoleplayActions\n): RoleplayState => {\n    switch (action.type) {\n        case ACTIONS.GET_ROLEPLAY_START:\n            return {\n                ...state,\n                isLoading: true\n            };\n        case ACTIONS.GET_ROLEPLAY_SUCCESS:\n            return {\n                isLoading: false,\n                data: action.data,\n                error: ''\n            };\n        case ACTIONS.GET_ROLEPLAY_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error\n            };\n        case ACTIONS.UPDATE_ROLEPLAY_START:\n            return {\n                ...state,\n                isLoading: false\n            };\n        case ACTIONS.UPDATE_ROLEPLAY_SUCCESS:\n            return {\n                isLoading: false,\n                data: action.data,\n                error: ''\n            };\n        case ACTIONS.UPDATE_ROLEPLAY_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error\n            };\n        case ACTIONS.CLEAR_ROLEPLAY:\n            return {\n                isLoading: false,\n                data: undefined,\n                error: ''\n            };\n        default:\n            return state;\n    }\n}","import {\n    ACTIONS,\n    getOverdueLearnersFailure,\n    getOverdueLearnersStart,\n    getOverdueLearnersSuccess\n} from './actions';\nimport { OverdueLearnersState } from './states';\n\ntype OverdueLearnersActions =\n    | ReturnType<typeof getOverdueLearnersStart>\n    | ReturnType<typeof getOverdueLearnersSuccess>\n    | ReturnType<typeof getOverdueLearnersFailure>;\n\nexport const overdueLearnersReducer = (\n    state = { isLoading: false },\n    action: OverdueLearnersActions\n): OverdueLearnersState => {\n    switch(action.type) {\n        case ACTIONS.GET_OVERDUE_LEARNERS_START:\n            return {\n                ...state,\n                isLoading: true\n            };\n        case ACTIONS.GET_OVERDUE_LEARNERS_SUCCESS:\n            return {\n                isLoading: false,\n                data: action.data,\n                error: ''\n            };\n        case ACTIONS.GET_OVERDUE_LEARNERS_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error\n            };\n        default:\n            return state;\n    }\n}","import {\n    ACTIONS,\n    clearScenarioReps,\n    getScenarioRepsFailure,\n    getScenarioRepsStart,\n    getScenarioRepsSuccess\n} from './actions';\nimport { ScenarioRepsState } from './states';\n\ntype ScenarioRepsActions =\n    | ReturnType<typeof getScenarioRepsStart>\n    | ReturnType<typeof getScenarioRepsSuccess>\n    | ReturnType<typeof getScenarioRepsFailure>\n    | ReturnType<typeof clearScenarioReps>;\n\nexport const scenarioRepsReducer = (\n    state = { isLoading: false },\n    action: ScenarioRepsActions\n): ScenarioRepsState => {\n\n    switch(action.type) {\n        case ACTIONS.GET_SCENARIO_REPS_START:\n            return {\n                ...state,\n                isLoading: true\n            };\n        case ACTIONS.GET_SCENARIO_REPS_SUCCESS:\n            return {\n                isLoading: false,\n                data: action.data,\n                error: ''\n            };\n        case ACTIONS.GET_SCENARIO_REPS_FAILURE:\n            return {\n                ...state,\n                isLoading: false,\n                error: action.error\n            };\n        case ACTIONS.CLEAR_SCENARIO_REPS:\n            return {\n                isLoading: false\n            };\n        default:\n            return state;\n    }\n}","import { createGlobalStyle } from 'styled-components';\nimport { Variables } from './variables';\n\nexport const GlobalStyle = createGlobalStyle`\n  ::-webkit-scrollbar {\n    width: 4px;\n    height: 4px;\n  }\n\n  ::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  ::-webkit-scrollbar-thumb {\n    background: ${Variables.Colors.paleGrey};\n    border-radius: 4px;\n  }\n\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${Variables.Colors.paleGrey};\n  }\n\n  textarea:focus, input:focus {\n    outline: none;\n  }\n\n  * {\n    scrollbar-color: ${Variables.Colors.whiteThree};\n    scrollbar-width: thin !important;\n  }\n\n  *:focus {\n    outline: none;\n  }\n\n  /* Chrome, Safari, Edge, Opera */\n  input::-webkit-outer-spin-button,\n  input::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n\n  /* Firefox */\n  input[type=number] {\n    -moz-appearance: textfield;\n  }\n\n  body {\n    font-family: Manrope !important;\n    margin: 0;\n    overflow: hidden;\n    background-color: ${Variables.Colors.white} !important;\n  }\n\n  textarea {\n    font-family: Manrope !important;\n  }\n\n  .inline-block{\n    display: inline-block;\n  }\n\n  .inline-flex{\n    display: inline-flex;\n  }\n\n  .tooltip-question {\n    padding: 20px;\n    width: 280px;\n    word-break: break-word;\n    white-space: normal;\n    min-height: 84px;\n    border-radius: 8px;\n\n    &:before{\n      content: '';\n      width: 16px;\n      height: 16px;\n      background: #fff;\n      position: absolute;\n      left: 132px;\n      top: -6px;\n      transform: rotate(45deg);\n      box-shadow: -3px -4px 5px rgba(0, 0, 0, 0.015),\n      0 0px white, \n      -7px -3px 5px  rgba(0, 0, 0, 0.015), \n      0 0px white;\n      z-index: -1;\n    }\n  }\n\n  .tooltip-question.top {\n    &:before {\n      bottom: -6px;\n      top: unset;\n      box-shadow: unset;\n    }\n  }\n\n  // striped-progress-bar styles\n\n  .progress-container {\n    margin: auto;\n    width: 100%;\n    }\n\n\n  .progress-title {\n    font-size: 13px;\n    color: var(--ps-grey-1);\n    margin-bottom: 10px;\n  }\n\n  .progress {\n    background-color: var(--ps-grey-4);\n    border-radius: 58px;\n    box-shadow: none;\n  }\n\n\n  .progress-bar {\n    background-color: var(--ps-blue-main);\n    height: 16px;\n    border-radius: 58px;\n    box-shadow: none;\n  }\n\n  .progress-bar.text-right span {\n    margin-right: 10px;\n  }\n\n  @-webkit-keyframes progress-bar-stripes {\n    from {\n      background-position: 40px 0;\n    }\n\n    to {\n      background-position: 0 0;\n    }\n  }\n\n  @keyframes progress-bar-stripes {\n    from {\n      background-position: 40px 0;\n    }\n\n    to {\n      background-position: 0 0;\n    }\n  }\n\n  .progress.active .progress-bar,\n  .progress-bar.active {\n    -webkit-animation: progress-bar-stripes 2s linear infinite;\n    -o-animation: progress-bar-stripes 2s linear infinite;\n    animation: progress-bar-stripes 2s linear infinite;\n  }\n\n  .progress-striped .progress-bar,\n  .progress-bar-striped {\n    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n    background-size: 40px 40px;\n  }\n\n  .progress-bar-default {\n    background-color: #b0bec5;\n  }\n`;","import { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { isEqual } from 'lodash';\n\nimport { useFetchAllLabelsService } from '../../../features/portableLabels/store/hors/withLabels/services';\nimport { useSearchTeamsService } from '../../../features/portableTeams/store/hors/withTeams/services';\nimport { useSetLabelFilterActionService } from '../../../features/labels/store/services';\nimport { getProfileState } from '../../../pages/UserProfile/store/reducers';\nimport { useFetchAllPractisSetsService } from '../../../features/portablePractisSets/store/hors/withPractisSets/services';\nimport { useSessionEffect } from '../../../features/common';\nimport { useUpdatedLabelsState } from '../../../features/labels/store/states';\nimport { useUpdateTeamsState } from '../../../features/teams/store/states';\nimport { useUpdatedLibraryPractisSetsState } from '../../../features/library/store/states';\nimport { getConfig } from '../../../tools/config';\nimport Storage from '../../../services/Storage';\n\nconst PortableLoaderWrapper: FC = () => {\n    const fetchLabels = useFetchAllLabelsService();\n    const fetchTeams = useSearchTeamsService();\n    const fetchAllPractisSets = useFetchAllPractisSetsService();\n    const profile = useSelector(getProfileState);\n    const setLabels = useSetLabelFilterActionService();\n\n    const updatedLabels = useUpdatedLabelsState();\n    const updatedTeams = useUpdateTeamsState();\n    const updatedPractisSets = useUpdatedLibraryPractisSetsState();\n\n    useSessionEffect(() => fetchLabels(), [fetchLabels, updatedLabels?.data]);\n\n    useSessionEffect(() => fetchTeams(), [fetchTeams, updatedTeams?.data]);\n\n    useSessionEffect(() => fetchAllPractisSets(), [\n        fetchAllPractisSets,\n        updatedPractisSets?.data,\n    ]);\n\n    useSessionEffect(() => {\n        if (!!profile?.labelFilters?.length) {\n            setLabels(profile.labelFilters);\n        }\n    }, [profile?.labelFilters, setLabels]);\n\n    useSessionEffect(() => {\n        const config = getConfig();\n\n        const prevAppVersion = Storage.get('appVersion');\n        const newAppVersion = config.APP_VERSION;\n\n        if (!prevAppVersion) {\n            Storage.set('appVersion', newAppVersion);\n        } else if (!isEqual(prevAppVersion, newAppVersion)) {\n            Storage.remove('appVersion');\n            window.location.reload();\n        }\n    }, []);\n    \n\n    return null;\n};\n\nexport default PortableLoaderWrapper;\n","import Storage from '../services/Storage';\nimport {\n    getCurrentUrl,\n    getQueryStringFromUrl,\n    setCurrentUrl,\n    setQueryParameterToUrl,\n} from '../tools/url/UrlUtils';\n\nexport function configStorage() {\n    const currentUrl = getCurrentUrl();\n    const {t: token, id: userId, p: platform = 'develop'} = getQueryStringFromUrl(currentUrl);\n\n    if (token) {\n        Storage.set('token', token);\n        Storage.set('userId', userId);\n        Storage.set('apiPlatform', platform);\n\n        setCurrentUrl(\n            setQueryParameterToUrl(\n                setQueryParameterToUrl(\n                    setQueryParameterToUrl(currentUrl, 'p'),\n                    'id'\n                ),\n                't'\n            )\n        );\n    }\n\n    return { isLoggedIn: !!Storage.get('token') };\n}\n","import DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter } from 'react-router-dom';\nimport { ThemeProvider } from 'styled-components';\nimport App from './App';\nimport { APP_CONFIG } from './app.config';\nimport {\n    contextItem,\n    MultiContextProvider,\n    MultiContextProviderItem,\n} from './ui/components/MultiContextProvider';\nimport { configServices } from './config';\nimport { createContexts } from './config/context';\nimport { configStorage } from './config/storage';\nimport * as serviceWorker from './serviceWorker';\nimport rootReducer from './store/reducers';\nimport { GlobalStyle } from './theme/GlobalStyle';\nimport { Variables } from './theme/variables';\nimport { WEB_SITE_ID } from './tools/constants/WebSiteId';\nimport { HttpContext } from './tools/http/Http';\nimport PortableLoaderWrapper from './ui/wrapper/PortableLoaderWrapper/PortableLoaderWrapper';\n\nconfigStorage();\nconst {\n    store,\n    webSiteId,\n    urlBuilder,\n    http,\n    localStorage,\n    newRelicApi,\n} = configServices(WEB_SITE_ID.COMPANY_PORTAL, APP_CONFIG, rootReducer);\nconst rootElement = document.getElementById('root');\nconst contextItems: MultiContextProviderItem[] = createContexts(\n    webSiteId,\n    urlBuilder,\n    localStorage,\n    newRelicApi\n).map(c => contextItem(c.context, c.value));\n\nReactDOM.render(\n    <Provider store={store}>\n        <BrowserRouter>\n            <GlobalStyle />\n            <ThemeProvider theme={Variables}>\n                <MultiContextProvider items={contextItems}>\n                    <HttpContext.Provider value={http}>\n                            <MuiPickersUtilsProvider utils={DateFnsUtils}>\n                                <PortableLoaderWrapper />\n                                <App />\n                            </MuiPickersUtilsProvider>\n                    </HttpContext.Provider>\n                </MultiContextProvider>\n            </ThemeProvider>\n        </BrowserRouter>\n    </Provider>,\n    rootElement\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import {\n    applyMiddleware,\n    createStore as reduxCreateStore,\n    Reducer,\n    compose as composeSource,\n    StoreEnhancer,\n} from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport thunk from 'redux-thunk';\nimport { ThunkContext } from '../tools/thunk/ThunkContext';\n\nexport const createStore = (\n    rootReducer: Reducer,\n    thunkContext: ThunkContext\n) => {\n    const middlewareEnhancer = applyMiddleware(\n        thunk.withExtraArgument(thunkContext)\n    );\n    let compose = composeSource;\n    if (process.env.REACT_APP_DEV_ENV === 'local') {\n        compose = composeWithDevTools({\n            trace: true,\n        });\n    }\n    const composedEnhancer: StoreEnhancer = compose(middlewareEnhancer);\n\n    return reduxCreateStore(rootReducer, composedEnhancer);\n};\n"],"sourceRoot":""}